diff --git a/.agents/skills/esm-cjs-risk-scan/SKILL.md b/.agents/skills/esm-cjs-risk-scan/SKILL.md new file mode 100644 index 0000000000..9b8542da3b --- /dev/null +++ b/.agents/skills/esm-cjs-risk-scan/SKILL.md @@ -0,0 +1,214 @@ +--- +name: esm-cjs-risk-scan +description: Scan Logseq ClojureScript Node/Electron targets for npm module loading risks, especially ESM-only packages that may fail when loaded through js/require or shadow-cljs require-based shims. Use when changing Electron/main-process dependencies, debugging startup import errors, or auditing packages before dependency upgrades. +--- + +# ESM/CJS Risk Scan + +Scan Node/Electron ClojureScript code for npm dependencies that may fail at runtime due to ESM/CJS incompatibility. Use when changing Electron dependencies, debugging startup import errors, or auditing before dependency upgrades. + +## Quick Start + +```bash +# Default scan (electron scope, human-readable table) +node .agents/skills/esm-cjs-risk-scan/scripts/scan_esm_cjs_risk.mjs + +# Scan all Node targets +node .agents/skills/esm-cjs-risk-scan/scripts/scan_esm_cjs_risk.mjs --scope all-node + +# Machine-readable TSV output +node .agents/skills/esm-cjs-risk-scan/scripts/scan_esm_cjs_risk.mjs --format tsv + +# JSON output +node .agents/skills/esm-cjs-risk-scan/scripts/scan_esm_cjs_risk.mjs --format json + +# Show full error details in probe results +node .agents/skills/esm-cjs-risk-scan/scripts/scan_esm_cjs_risk.mjs --verbose +``` + +## Parameters + +| Parameter | Values | Default | Description | +|-----------|--------|---------|-------------| +| `--scope` | `electron`, `all-node` | `electron` | Which source directories and package locations to scan | +| `--format` | `table`, `tsv`, `json` | `table` | Output format. `table` is grouped and human-readable; `tsv` is tab-separated for machine parsing; `json` for programmatic use | +| `--verbose` / `-v` | (flag) | off | Show full error messages in probe results instead of abbreviated `ERR` | + +### Scopes + +| Scope | Source Directories | Description | +|-------|-------------------|--------------| +| `electron` | `src/electron/electron` | Electron main-process code only | +| `all-node` | See table below | All Node/server-side code across the repo | + +**`all-node` source directories and their basis:** + +| Directory | Build target / role | +|-----------|---------------------| +| `src/electron/electron` | `:electron` target — `:node-script` (Electron main process) | +| `src/test` | `:test` / `:test-no-worker` — `:node-test` (test runner) | +| `deps/cli/src` | CLI tool (nbb Node script, uses `fs-extra`, `path`) | +| `deps/db-sync/src`, `deps/db-sync/test` | DB sync server / Node adapter | +| `deps/db/script`, `deps/db/test` | DB utility scripts | +| `deps/graph-parser/src`, `test`, `script` | Graph parser CLI and tests | +| `deps/publishing/script`, `test` | Publishing CLI and tests | + +Browser/Worker builds (`:app`, `:db-worker`, `:inference-worker`, `:mobile`) are intentionally excluded — their npm deps are resolved at bundle time and never `require()`-called directly in Node. +## What Gets Scanned + +The scanner detects three import patterns in `.cljs` / `.cljc` / `.clj` files: + +| Pattern | Kind | Example | +|---------|------|---------| +| `["pkg" :as x]` | `npm-import` | `["electron" :as e]` — shadow-cljs npm import (compiled to `require()` for Node targets) | +| `js/require "pkg"` | `js-require` | `(js/require "update-electron-app")` — Direct runtime `require()` call | +| `dynamic-import "pkg"` | `dynamic-import` | `(shadow.esm/dynamic-import "https-proxy-agent")` — Async ESM `import()` | + +## Output + +### Risk Levels + +| Risk | Meaning | Action | +|------|---------|--------| +| **HIGH** | Package cannot be loaded by any mechanism. `js-require` with all probes failing; `dynamic-import` with import probe failing; or `npm-import` where **both** `require()` and `import()` fail (`esm-?` mode) | Must replace the package — no loading workaround exists | +| **MEDIUM** | `npm-import` where `require()` fails **but** `import()` works (`esm-imp` mode). Caused by packages whose `exports` map has **only** `"import"` conditionals with no `"require"` or top-level `"default"` fallback — Node's module resolver rejects `require()`. shadow-cljs generates `require()` which will fail | Switch to `dynamic-import` | +| **OK** | Package loads successfully from at least one probe CWD, or is `esm-req`/`esm-edep` — safe to use in ns-form require | No action needed | +| **INFO** | Relative path requires or Node builtins; always safe | Informational only | + +### Table Columns (default format) + +| Column | Description | +|--------|-------------| +| `PACKAGE` | npm package name as referenced in source code | +| `VER` | Version from package.json (`-` if not installed) | +| `KIND` | Import mechanism: `npm-import`, `js-require`, or `dynamic-import` | +| `TYPE` | Package `type` field: `cjs` (CommonJS), `esm` (ESM `type:module`), `blt` (Node builtin), `-` (unset) | +| `MODE` | Module load mode (see below). Abbreviated in table; full names in TSV/JSON | +| `REQUIRE` | Simplified require() probe results per CWD (see Probe Results below) | +| `FILE` | Source file containing the import | + +HIGH/MEDIUM items additionally show: `exports` and `import` probe values. + +### Module Modes + +| Mode (full) | Table abbrev | Meaning | +|-------------|-------------|---| +| `cjs-or-nonmodule` | `cjs` | `type` is not `module`. CJS or unspecified — always works with `require()` | +| `module-require-compatible` | `esm-req` | `type: module` but `require()` still works (Node 22+ or dual-mode package) | +| `module-electron-dep` | `esm-edep` | `type: module`; probe fails only because Electron runtime (`electron` package) is absent. **Works fine in actual Electron.** | +| `module-import-only` | `esm-imp` | `type: module` and only loadable via `import()`. `require()` will fail | +| `module-unloadable` | `esm-?` | `type: module` and both `require()` and `import()` fail in current environment | +| `builtin` | `blt` | Node.js built-in module (fs, path, os, child_process, etc.) | + +#### What actually makes require() fail for ESM packages? + +Not merely `"type": "module"`. Node 22+ supports `require(esm)` for ESM modules without top-level `await`. The real determiner is the **`exports` map structure**: + +| Package exports structure | require() behavior | Example | +|--------------------------|-------------------|---------| +| No `exports` field (only `main`) | ✅ Works in Node 22+ | `node-fetch@3.3.2` | +| `exports` has top-level `"default"` key | ✅ Works in Node 22+ | `electron-dl@4.0.0` (`{"types":…, "default":…}`) | +| `exports` has `"require"` key | ✅ Works (explicit CJS path) | Most dual-mode packages | +| `exports` has **only** `"import"` key, no `"default"` | ❌ Rejected by Node's module resolver | `https-proxy-agent` (`{"import":{…}}`) | + +The scanner's **`esmOnly` flag** (in TSV/JSON output) marks the last case — exports explicitly restricts to import-only. Classification always uses probe results as the authoritative source. + +### Probe Results + +The scanner tests `require()` and `import()` from three CWD locations: + +| Abbreviation | Directory | Role | +|--------------|-----------|------| +| `S` | `static/` | **Primary** Electron runtime directory | +| `R` | `resources/` | Secondary resources directory | +| `.` | repository root | Development directory | + +**Compact display (default mode):** + +| Display | Meaning | +|---------|---------| +| `ALL:OK` | Loads from all three CWDs | +| `ALL:ERR` | Fails from all three CWDs | +| `ALL:ERR(e-dep)` | All failures are electron-runtime errors; package loads fine in Electron | +| `S:OK R:ERR .:ERR` | Loads from static/ only (normal for Electron packages) | +| `S:ERR(e-dep) R:ERR(e-dep) .:ERR` | Probe fails because `electron` runtime is absent; package loads fine in Electron | +| `SKIP(electron)` | Skipped for `electron` runtime package | +| `BUILTIN` | Node.js built-in module | + +Use `--verbose` (`-v`) for error details, e.g. `S:OK R:ERR(MODULE_NOT_FOUND) .:ERR(MODULE_NOT_FOUND)`. + +### TSV Columns (--format=tsv) + +All fields tab-separated, one row per usage: + +`risk`, `kind`, `package`, `version`, `type`, `module_mode`, `exports_require`, `exports_import`, `require_probe`, `import_probe`, `file` + +Probe columns contain raw probe strings (e.g. `static=OK;resources=ERR:MODULE_NOT_FOUND;.=ERR:MODULE_NOT_FOUND`). + +## Workflow + +1. Run the scanner. +2. Check the SUMMARY header for overall risk counts. +3. **HIGH**: Must fix. Package will crash at runtime. +4. **MEDIUM**: Review. Consider `dynamic-import` or CJS-compatible alternative. +5. **OK**: Verify `S:OK`-only packages are expected (installed in `static/node_modules` only). +6. For Electron code, also verify with runtime test: + ```bash + npx electron static/electron.js + ``` + +## Common Patterns & FAQ + +### "S:OK R:ERR .:ERR" — Is this a problem? + +**No.** This is normal for Electron-specific packages (e.g., `keytar`, `update-electron-app`, `electron-window-state`). They are installed in `static/node_modules/` (the Electron app directory). The `resources/` and root directories don't need them. + +### "ERR:Electron failed to install correctly..." + +This error appears when probing packages that depend on `electron` at runtime (e.g., `update-electron-app`) from directories where `electron` isn't properly available. **Not a real issue** — the package works fine from `static/` (`S:OK`), which is where Electron actually runs. + +### Node builtins (fs, path, os, etc.) + +Detected automatically and shown with `BUILTIN` probe status. Always work in Node/Electron targets. Classified as OK. + +### `electron-*` package probing + +Only the `electron` package itself (the runtime framework) skips probing. Other `electron-*` packages (`electron-log`, `electron-window-state`, `electron-dl`, etc.) are regular npm packages and are probed normally. + +### ESM packages with `module-electron-dep` mode + +Some ESM packages (e.g. `electron-dl v4`) internally call `import { BrowserWindow } from 'electron'`. When the scanner probes them with a plain Node.js `require()`, the call fails — not because the package is unloadable, but because the `electron` npm package (an installer shim) doesn't expose Electron's named runtime exports. + +In the actual Electron runtime, the `electron` module IS the framework, so `BrowserWindow` and friends resolve correctly. The generated shadow.js shim (`shadow.js.nativeProvides["electron-dl"] = require("electron-dl")`) works fine at Electron startup. + +**How the scanner detects this:** If every probe failure contains `'electron'` in the error message (the named-export failure pattern), the package is reclassified from `module-unloadable` → `module-electron-dep` and from MEDIUM/HIGH → **OK**. Probe column shows `ERR(e-dep)` to mark the probe location. + +**When to verify manually:** If a new package shows `esm-edep` unexpectedly, inspect its source — it should contain `import ... from 'electron'` or use Electron APIs directly. You can also check the compiled `static/shadow-cljs/` shim files after a build to confirm `require("pkg")` is generated. + +### Understanding the plain-Node probe limitation + +The scanner runs `require()` and `import()` probes in a plain Node.js process (`node -e ...`), not inside a real Electron runtime. This means: +- Packages that depend on Electron APIs will fail the probe even if they work fine in the app +- The scanner uses the `module-electron-dep` heuristic to handle this case automatically +- For packages that use Electron APIs in unusual ways (not just `import ... from 'electron'`), a manual check may be needed + +If a build has already been compiled, you can inspect `static/shadow-cljs/` for `shadow.js.shim.module$` files. The presence of `require("pkg")` in a shim confirms shadow-cljs successfully resolved the package for Electron. This is the definitive ground truth; the scanner's probe is a pre-build approximation. + +## Recommended Fixes + +For **HIGH** risk: +- Use a CJS-compatible subpath of the package if available +- Switch to `(shadow.esm/dynamic-import "pkg")` for ESM-only packages +- Pin a version that provides CJS support +- Use an alternative CJS-compatible package + +For **MEDIUM** risk: +- Switch to `(shadow.esm/dynamic-import "pkg")` +- Find a CJS-compatible alternative +- Verify Node 22+ `require(esm)` covers your case (`module-require-compatible` mode) + +Re-run the scanner after changes to verify fixes. + +## Script + +- Main script: [scan_esm_cjs_risk.mjs](./scripts/scan_esm_cjs_risk.mjs) diff --git a/.agents/skills/esm-cjs-risk-scan/scripts/scan_esm_cjs_risk.mjs b/.agents/skills/esm-cjs-risk-scan/scripts/scan_esm_cjs_risk.mjs new file mode 100644 index 0000000000..cf63d04c9f --- /dev/null +++ b/.agents/skills/esm-cjs-risk-scan/scripts/scan_esm_cjs_risk.mjs @@ -0,0 +1,740 @@ +#!/usr/bin/env node + +import { existsSync, readdirSync, readFileSync } from 'fs'; +import { join, relative } from 'path'; +import { spawnSync } from 'child_process'; + +const repoRoot = process.cwd(); + +function parseArgs(argv) { + const out = { + scope: 'electron', + format: 'table', + verbose: false, + }; + + for (let i = 0; i < argv.length; i += 1) { + const arg = argv[i]; + if (arg === '--scope' && argv[i + 1]) { + out.scope = argv[i + 1]; + i += 1; + } else if (arg === '--format' && argv[i + 1]) { + out.format = argv[i + 1]; + i += 1; + } else if (arg === '--verbose' || arg === '-v') { + out.verbose = true; + } + } + + return out; +} + +function scopeConfig(scope) { + switch (scope) { + case 'electron': + return { + name: 'electron', + sourceDirs: ['src/electron/electron'], + packageDirs: ['static/node_modules', 'resources/node_modules', 'node_modules'], + requireCwds: ['static', 'resources', '.'], + }; + case 'all-node': + // Covers all shadow-cljs :node-script/:node-test builds in this repo, plus + // deps/ sub-projects that have their own Node-targeted CLJS source. + // + // Basis: + // - src/electron/electron ← :electron :node-script (Electron main process) + // - src/test ← :test/:test-no-worker :node-test (test runner) + // - deps/cli/src ← CLI tool (nbb Node script) + // - deps/db-sync/src+test ← DB sync server / Node adapter + // - deps/db/script+test ← DB utility scripts (Node) + // - deps/graph-parser/src+test+script ← Parser CLI + tests + // - deps/publishing/script+test ← Publishing scripts + // + // Browser/Worker builds (app, db-worker, inference-worker, mobile) are + // intentionally excluded because their npm deps are resolved at bundle + // time via webpack/shadow-cljs and never require()-called directly. + return { + name: 'all-node', + sourceDirs: [ + 'src/electron/electron', + 'src/test', + 'deps/cli/src', + 'deps/db-sync/src', + 'deps/db-sync/test', + 'deps/db/script', + 'deps/db/test', + 'deps/graph-parser/src', + 'deps/graph-parser/test', + 'deps/graph-parser/script', + 'deps/publishing/script', + 'deps/publishing/test', + ], + packageDirs: ['static/node_modules', 'resources/node_modules', 'node_modules'], + requireCwds: ['static', 'resources', '.'], + }; + default: + throw new Error(`Unknown scope: ${scope}`); + } +} + +const SKIP_DIRS = new Set(['node_modules', '.git', '.shadow-cljs', '.nbb']); + +function walkFiles(dir, out = []) { + if (!existsSync(dir)) return out; + for (const entry of readdirSync(dir, { withFileTypes: true })) { + const abs = join(dir, entry.name); + if (entry.isDirectory()) { + if (SKIP_DIRS.has(entry.name)) continue; + walkFiles(abs, out); + } else if (/\.(clj|cljs|cljc)$/.test(entry.name)) { + out.push(abs); + } + } + return out; +} + +function rel(p) { + return relative(repoRoot, p).replace(/\\/g, '/'); +} + +const NODE_BUILTINS = new Set([ + 'assert', 'async_hooks', 'buffer', 'child_process', 'cluster', 'console', + 'constants', 'crypto', 'dgram', 'diagnostics_channel', 'dns', 'domain', + 'events', 'fs', 'http', 'http2', 'https', 'inspector', 'module', 'net', + 'os', 'path', 'perf_hooks', 'process', 'punycode', 'querystring', + 'readline', 'repl', 'stream', 'string_decoder', 'sys', 'timers', + 'tls', 'trace_events', 'tty', 'url', 'util', 'v8', 'vm', + 'wasi', 'worker_threads', 'zlib', +]); + +function isNodeBuiltin(name) { + return NODE_BUILTINS.has(name) || name.startsWith('node:'); +} + +function basePackageName(name) { + if (name.startsWith('@')) { + const parts = name.split('/'); + return parts.length >= 2 ? parts.slice(0, 2).join('/') : name; + } + return name.split('/')[0]; +} + +function collectUsages(files) { + const usages = []; + + const npmImportRe = /\["([^"]+)"\s*:(?:as|refer|default)\b[^\]]*\]/g; + const jsRequireRe = /js\/require\s+"([^"]+)"/g; + const dynamicImportRe = /dynamic-import\s+"([^"]+)"/g; + + for (const file of files) { + const text = readFileSync(file, 'utf8'); + for (const m of text.matchAll(npmImportRe)) { + const pkg = m[1]; + if (pkg.startsWith('/')) continue; + usages.push({ + kind: 'npm-import', + packageName: pkg, + file: rel(file), + }); + } + for (const m of text.matchAll(jsRequireRe)) { + usages.push({ + kind: 'js-require', + packageName: m[1], + file: rel(file), + }); + } + for (const m of text.matchAll(dynamicImportRe)) { + usages.push({ + kind: 'dynamic-import', + packageName: m[1], + file: rel(file), + }); + } + } + + return usages; +} + +function findPackageJson(packageName, packageDirs) { + for (const dir of packageDirs) { + const pkgJson = join(repoRoot, dir, packageName, 'package.json'); + if (existsSync(pkgJson)) { + return pkgJson; + } + } + return null; +} + +function packageMeta(packageName, packageDirs) { + const pkgJsonPath = findPackageJson(packageName, packageDirs); + if (!pkgJsonPath) { + return { + found: false, + packageJsonPath: '', + version: '', + type: '', + exportsRequire: '', + exportsImport: '', + main: '', + esmOnly: false, + }; + } + + const json = JSON.parse(readFileSync(pkgJsonPath, 'utf8')); + const exportsObj = json.exports; + const exportsStr = JSON.stringify(exportsObj || {}); + const exportsRequire = exportsStr.includes('"require"'); + const exportsImport = exportsStr.includes('"import"'); + const type = json.type || 'commonjs'; + const main = json.main || ''; + + // Top-level "default" in exports enables Node 22+ require(esm); + // only an exports map with exclusively "import" conditionals (no "require", no "default") + // will structurally block require(). + const exportsHasTopDefault = + typeof exportsObj === 'object' && + exportsObj !== null && + !Array.isArray(exportsObj) && + 'default' in exportsObj; + + const esmOnly = + type === 'module' && + typeof exportsObj === 'object' && + exportsObj !== null && + exportsImport && + !exportsRequire && + !exportsHasTopDefault; + + return { + found: true, + packageJsonPath: rel(pkgJsonPath), + version: json.version || '', + type, + exportsRequire: exportsRequire ? 'yes' : 'no', + exportsImport: exportsImport ? 'yes' : 'no', + main, + esmOnly, + }; +} + +function runProbe(kind, packageName, cwd) { + return kind === 'import' + ? tryImport(packageName, cwd) + : tryRequire(packageName, cwd); +} + +function formatProbeResults(kind, packageName, cwds) { + return cwds.map((cwd) => `${cwd}=${runProbe(kind, packageName, cwd)}`).join(';'); +} + +function tryRequire(packageName, cwd) { + const cmd = [ + 'node', + '-e', + `try{require(${JSON.stringify(packageName)});console.log("OK")}catch(e){console.log("ERR:"+(e.code||e.message))}`, + ]; + + try { + const result = spawnSync(cmd[0], cmd.slice(1), { + cwd: join(repoRoot, cwd), + encoding: 'utf8', + stdio: ['ignore', 'pipe', 'pipe'], + }); + + const output = `${result.stdout || ""}${result.stderr || ""}`.trim(); + const line = output.split(/\r?\n/).find(Boolean) || ''; + return line || `ERR:spawn-exit-${result.status}`; + } catch (e) { + return `ERR:${e.code || e.message}`; + } +} + +function tryImport(packageName, cwd) { + const cmd = [ + 'node', + '-e', + `import(${JSON.stringify(packageName)}).then(()=>console.log("OK")).catch(e=>console.log("ERR:"+(e.code||e.message)))`, + ]; + + try { + const result = spawnSync(cmd[0], cmd.slice(1), { + cwd: join(repoRoot, cwd), + encoding: 'utf8', + stdio: ['ignore', 'pipe', 'pipe'], + }); + + const output = `${result.stdout || ""}${result.stderr || ""}`.trim(); + const line = output.split(/\r?\n/).find(Boolean) || ''; + return line || `ERR:spawn-exit-${result.status}`; + } catch (e) { + return `ERR:${e.code || e.message}`; + } +} + +function shouldSkipRequireProbe(packageName) { + return packageName === 'electron'; +} + +// Returns true if the probe error is caused by electron runtime not being +// available (not a real ESM-loading failure). This happens when a package +// imports from the 'electron' framework internally — it loads fine via +// require() inside Electron but fails in a plain-node probe context. +function isElectronRuntimeError(probePart) { + const result = probePart.includes('=') + ? probePart.split('=').slice(1).join('=') + : probePart; + if (result === 'OK' || result.startsWith('skip=')) return false; + return ( + result.includes('\'electron\'') || + result.includes('"electron"') || + result.includes('BrowserWindow') || + result.includes('ipcMain') || + result.includes('ipcRenderer') + ); +} + +// Returns true when every probe failure is either an electron-runtime error or +// a plain MODULE_NOT_FOUND (package not installed at that CWD), AND at least +// one probe location produced an electron-runtime error. This distinguishes +// "real" electron-dep packages from packages that simply aren't installed anywhere. +function probeAllElectronErrors(probeStr) { + if (!probeStr || probeStr === '-' || probeStr.startsWith('skip=SKIP:')) return false; + const parts = probeStr.split(';'); + const probed = parts.filter((p) => !p.includes('SKIP:')); + if (probed.length === 0) return false; + let hasElectronErr = false; + for (const p of probed) { + const result = p.includes('=') ? p.split('=').slice(1).join('=') : p; + if (result === 'OK') continue; + if (isElectronRuntimeError(p)) { hasElectronErr = true; continue; } + // MODULE_NOT_FOUND means the package simply isn't installed at this CWD — neutral. + if (result.includes('MODULE_NOT_FOUND')) continue; + // Any other error (ERR_REQUIRE_ESM, syntax errors, etc.) is a real failure. + return false; + } + return hasElectronErr; +} + +function probeHasSuccess(result) { + return result.split(';').some((part) => + part === 'OK' || + part.includes('=OK') || + part.startsWith('skip=SKIP:') + ); +} + +function probeHasActualOk(result) { + return result.split(';').some((part) => part === 'OK' || part.includes('=OK')); +} + +// Returns true if any probe failed with a real loading error (not just the +// package being absent at that CWD). MODULE_NOT_FOUND is neutral — the package +// simply isn't installed there. Everything else (ERR_PACKAGE_PATH_NOT_EXPORTED, +// ERR_REQUIRE_ESM, syntax errors, etc.) is a genuine incompatibility. +function probeHasRealError(probeStr) { + if (!probeStr || probeStr === '-' || probeStr.startsWith('skip=SKIP:')) return false; + return probeStr.split(';').some((p) => { + const result = p.includes('=') ? p.split('=').slice(1).join('=') : p; + if (result === 'OK' || result.startsWith('SKIP:')) return false; + if (result.includes('MODULE_NOT_FOUND')) return false; + return true; + }); +} + +function moduleMode(entry) { + if (entry.type === 'builtin') return 'builtin'; + if (!entry.type || entry.type === '-') return '-'; + if (entry.type !== 'module') return 'cjs-or-nonmodule'; + // Only treat as require-compatible if some CWD succeeds AND no CWD produces + // a real loading error. A mix of OK + real-error means the package fails in + // some installations (e.g. S:ERR(ERR_PACKAGE_PATH_NOT_EXPORTED) .:OK). + if (probeHasActualOk(entry.requireProbe || '') && !probeHasRealError(entry.requireProbe || '')) { + return 'module-require-compatible'; + } + // ESM package whose probe failures are all caused by missing Electron runtime, + // not a real loading failure. require() succeeds in actual Electron context. + if (probeAllElectronErrors(entry.requireProbe || '')) return 'module-electron-dep'; + if (probeHasActualOk(entry.importProbe || '')) return 'module-import-only'; + return 'module-unloadable'; +} + +function classify(entry) { + if (entry.kind === 'relative-require') return 'info'; + if (entry.kind === 'dynamic-import') return probeHasSuccess(entry.importProbe) ? 'ok' : 'high'; + if (entry.kind === 'js-require') { + if (probeHasSuccess(entry.requireProbe)) return 'ok'; + // Probe fails only because Electron runtime is absent — not a loading error + if (probeAllElectronErrors(entry.requireProbe)) return 'ok'; + return 'high'; + } + if (entry.kind === 'npm-import') { + // Use probe-based moduleMode as authoritative classifier. + // Static esmOnly is only metadata; the actual load result determines risk. + const mode = entry.moduleMode; + if (mode === 'module-electron-dep') return 'ok'; + if (mode === 'module-unloadable') return 'high'; + if (mode === 'module-import-only') return 'medium'; + return 'ok'; + } + return 'ok'; +} + +function simplifyProbe(probeStr, verbose) { + if (!probeStr || probeStr === '-') return '-'; + if (probeStr === 'ALL:OK') return 'ALL:OK'; + if (probeStr === 'builtin') return 'BUILTIN'; + if (probeStr.startsWith('skip=SKIP:')) { + const reason = probeStr.replace('skip=SKIP:', ''); + const shortNames = { + 'electron-runtime-package': 'electron', + 'dynamic-import-callsite': 'dynamic', + 'relative-path-or-builtin': 'relative', + }; + return 'SKIP(' + (shortNames[reason] || reason.substring(0, 15)) + ')'; + } + + const parts = probeStr.split(';').map((p) => { + const eqIdx = p.indexOf('='); + if (eqIdx === -1) return { cwd: p, ok: p === 'OK', detail: p }; + const cwd = p.substring(0, eqIdx); + const result = p.substring(eqIdx + 1); + const cwdShort = cwd === 'static' ? 'S' : cwd === 'resources' ? 'R' : cwd === '.' ? '.' : cwd; + if (result === 'OK') return { cwd: cwdShort, ok: true, detail: 'OK' }; + const errMsg = result.replace(/^ERR:/, ''); + const isElectronDep = isElectronRuntimeError(p); + let detail; + if (isElectronDep) { + detail = 'ERR(e-dep)'; + } else if (verbose) { + detail = 'ERR(' + errMsg.substring(0, 25) + ')'; + } else { + detail = 'ERR'; + } + return { cwd: cwdShort, ok: false, detail }; + }); + + if (parts.every((p) => p.ok)) return 'ALL:OK'; + if (parts.every((p) => !p.ok)) { + const hasEdep = parts.some((p) => p.detail === 'ERR(e-dep)'); + const allEdepOrPlain = parts.every((p) => p.detail === 'ERR(e-dep)' || p.detail === 'ERR'); + if (hasEdep && allEdepOrPlain) return 'ALL:ERR(e-dep)'; + return 'ALL:ERR'; + } + return parts.map((p) => p.cwd + ':' + (p.ok ? 'OK' : p.detail)).join(' '); +} + +function pad(str, len) { + str = String(str); + return str.length >= len ? str : str + ' '.repeat(len - str.length); +} + +function renderTable(results, summary, args) { + const line = '='.repeat(76); + const thinLine = '-'.repeat(76); + + console.log(line); + console.log(' ESM/CJS RISK SCAN'); + console.log(line); + console.log(' Scope: ' + summary.scope); + console.log(' Files: ' + summary.files_scanned); + console.log(' Packages: ' + summary.unique_packages + ' unique'); + console.log(' Usages: ' + summary.usages + ' total'); + console.log(thinLine); + console.log( + ' [!!] HIGH: ' + String(summary.high).padEnd(3, ' ') + + ' [!] MEDIUM: ' + String(summary.medium).padEnd(3, ' ') + ); + console.log( + ' [ok] OK: ' + String(summary.ok).padEnd(3, ' ') + + ' [i] INFO: ' + String(summary.info).padEnd(3, ' ') + ); + console.log(line); + console.log(''); + + const riskOrder = ['high', 'medium', 'ok', 'info']; + + for (const risk of riskOrder) { + const items = results.filter((r) => r.risk === risk); + const header = { + high: 'HIGH RISK', + medium: 'MEDIUM RISK', + ok: 'OK', + info: 'INFO', + }[risk]; + console.log( + '--- ' + header + ' (' + items.length + ') ' + + thinLine.substring(header.length + 10) + ); + + if (items.length === 0) { + console.log(' (none)'); + console.log(''); + continue; + } + + if (risk === 'high' || risk === 'medium') { + for (const r of items) { + const marker = risk === 'high' ? '[!!]' : '[!]'; + console.log(''); + console.log( + ' ' + marker + ' ' + r.packageName + ' v' + (r.version || '-') + ); + console.log( + ' kind: ' + r.kind + + ' | type: ' + (r.type || '-') + + ' | mode: ' + (r.moduleMode || '-') + ); + console.log( + ' exports: require=' + (r.exportsRequire || '-') + + ' import=' + (r.exportsImport || '-') + ); + console.log( + ' require: ' + simplifyProbe(r.requireProbe, true) + ); + console.log( + ' import: ' + simplifyProbe(r.importProbe, true) + ); + console.log(' file: ' + r.file); + } + } else { + const typeShort = (t) => { + if (!t || t === '-') return '-'; + if (t === 'builtin') return 'blt'; + if (t === 'module') return 'esm'; + return 'cjs'; + }; + const modeShort = (m) => { + if (!m || m === '-') return '-'; + const map = { + 'builtin': 'blt', + 'cjs-or-nonmodule': 'cjs', + 'module-require-compatible': 'esm-req', + 'module-electron-dep': 'esm-edep', + 'module-import-only': 'esm-imp', + 'module-unloadable': 'esm-?', + 'relative-or-builtin': 'rel', + }; + return map[m] || m.substring(0, 8); + }; + + const colPkg = + Math.max(7, ...items.map((r) => r.packageName.length)) + 2; + const colVer = + Math.max(7, ...items.map((r) => (r.version || '-').length)) + 2; + const colKind = + Math.max(12, ...items.map((r) => r.kind.length)) + 2; + const colType = 6; + const colMode = + Math.max(8, ...items.map((r) => modeShort(r.moduleMode).length)) + 2; + const colProbe = + Math.max( + 14, + ...items.map( + (r) => simplifyProbe(r.requireProbe, args.verbose).length + ) + ) + 2; + + console.log( + ' ' + + pad('PACKAGE', colPkg) + + pad('VER', colVer) + + pad('KIND', colKind) + + pad('TYPE', colType) + + pad('MODE', colMode) + + pad('REQUIRE', colProbe) + + 'FILE' + ); + console.log( + ' ' + + '-'.repeat(colPkg + colVer + colKind + colType + colMode + colProbe + 40) + ); + + for (const r of items) { + const reqProbe = simplifyProbe(r.requireProbe, args.verbose); + console.log( + ' ' + + pad(r.packageName, colPkg) + + pad(r.version || '-', colVer) + + pad(r.kind, colKind) + + pad(typeShort(r.type), colType) + + pad(modeShort(r.moduleMode), colMode) + + pad(reqProbe, colProbe) + + r.file + ); + } + } + console.log(''); + } + + console.log(line); + console.log(' NOTES'); + console.log(' - Probe CWDs: S=static/ R=resources/ .=root/'); + console.log( + ' - For electron scope, static/ is the primary runtime directory.' + ); + console.log( + ' Errors in R or . are expected for Electron-only packages.' + ); + console.log( + ' - Packages with S:OK but R:ERR/.:ERR are normal — installed' + ); + console.log( + ' only in static/node_modules (the Electron app directory).' + ); + console.log(' - Use --format=tsv for machine-readable output.'); + console.log( + ' - Use --verbose (-v) for full error messages in probes.' + ); + console.log(line); +} + +function renderTsv(results, summary) { + console.log('SUMMARY'); + for (const [k, v] of Object.entries(summary)) { + console.log(k + '=' + v); + } + console.log(''); + console.log('RESULTS'); + console.log( + [ + 'risk', 'kind', 'package', 'version', 'type', 'module_mode', + 'exports_require', 'exports_import', 'require_probe', + 'import_probe', 'file', + ].join('\t') + ); + for (const r of results) { + console.log( + [ + r.risk, + r.kind, + r.packageName, + r.version || '-', + r.type || '-', + r.moduleMode || '-', + r.exportsRequire || '-', + r.exportsImport || '-', + r.requireProbe || '-', + r.importProbe || '-', + r.file, + ].join('\t') + ); + } +} + +function renderJson(results, summary) { + console.log(JSON.stringify({ summary, results }, null, 2)); +} + +function main() { + const args = parseArgs(process.argv.slice(2)); + const cfg = scopeConfig(args.scope); + const files = cfg.sourceDirs.flatMap((dir) => walkFiles(join(repoRoot, dir))); + const rawUsages = collectUsages(files); + const deduped = new Map(); + + for (const usage of rawUsages) { + const key = `${usage.kind}::${usage.packageName}::${usage.file}`; + deduped.set(key, usage); + } + + const results = []; + + for (const usage of deduped.values()) { + if (usage.kind === 'js-require' && (usage.packageName.startsWith('.') || usage.packageName.includes('/') && !usage.packageName.startsWith('@') && !usage.packageName.includes('node_modules'))) { + results.push({ + ...usage, + packageJsonPath: '', + version: '', + type: '', + exportsRequire: '', + exportsImport: '', + main: '', + esmOnly: false, + requireProbe: 'skip=SKIP:relative-path-or-builtin', + importProbe: 'skip=SKIP:relative-path-or-builtin', + moduleMode: 'relative-or-builtin', + risk: 'info', + }); + continue; + } + + if (isNodeBuiltin(usage.packageName)) { + const baseName = basePackageName(usage.packageName); + if (!findPackageJson(baseName, cfg.packageDirs)) { + results.push({ + ...usage, + packageJsonPath: '', + version: '', + type: 'builtin', + exportsRequire: '-', + exportsImport: '-', + main: '', + esmOnly: false, + requireProbe: 'ALL:OK', + importProbe: 'ALL:OK', + moduleMode: 'builtin', + risk: 'ok', + }); + continue; + } + } + + const baseName = basePackageName(usage.packageName); + const meta = packageMeta(baseName, cfg.packageDirs); + const requireProbe = usage.kind === 'dynamic-import' + ? 'skip=SKIP:dynamic-import-callsite' + : shouldSkipRequireProbe(usage.packageName) + ? 'skip=SKIP:electron-runtime-package' + : formatProbeResults('require', usage.packageName, cfg.requireCwds); + const importProbe = shouldSkipRequireProbe(usage.packageName) + ? 'skip=SKIP:electron-runtime-package' + : formatProbeResults('import', usage.packageName, cfg.requireCwds); + + const entry = { + ...usage, + ...meta, + requireProbe, + importProbe, + }; + entry.moduleMode = moduleMode(entry); + entry.risk = classify(entry); + results.push(entry); + } + + results.sort((a, b) => { + const rank = { high: 0, medium: 1, ok: 2, info: 3 }; + return rank[a.risk] - rank[b.risk] || + a.packageName.localeCompare(b.packageName) || + a.file.localeCompare(b.file); + }); + + const uniquePkgs = new Set(results.map((r) => r.packageName)).size; + + const summary = { + scope: cfg.name, + files_scanned: files.length, + unique_packages: uniquePkgs, + usages: results.length, + high: results.filter((x) => x.risk === 'high').length, + medium: results.filter((x) => x.risk === 'medium').length, + ok: results.filter((x) => x.risk === 'ok').length, + info: results.filter((x) => x.risk === 'info').length, + }; + + switch (args.format) { + case 'tsv': + renderTsv(results, summary); + break; + case 'json': + renderJson(results, summary); + break; + case 'table': + default: + renderTable(results, summary, args); + break; + } +} + +main(); diff --git a/.agents/skills/logseq-dependency-upgrade/SKILL.md b/.agents/skills/logseq-dependency-upgrade/SKILL.md new file mode 100644 index 0000000000..ed6bfca348 --- /dev/null +++ b/.agents/skills/logseq-dependency-upgrade/SKILL.md @@ -0,0 +1,80 @@ +--- +name: logseq-dependency-upgrade +description: Audit, plan, and refresh dependency upgrades for the Logseq repository by scanning every non-gitignored package.json, deps.edn, bb.edn and nbb.edn manifest, checking latest upstream versions, cross-root consistency, lockfile resolution, deprecation, staleness, and OSV vulnerabilities, then generating a batch-ordered upgrade plan and compact JSON artifact. +--- + +# Logseq Dependency Upgrade + +Use this skill when the task is to audit dependencies, build an upgrade plan, or refresh dependency-upgrade facts for this repository. + +## Workflow + +1. Run the audit script: + +```bash +node .agents/skills/logseq-dependency-upgrade/scripts/audit_logseq_dependencies.mjs \ + --output-json \ + --output-md \ + [--stale-months ] \ + [--include-prerelease] +``` + +- `--stale-months` — number of months since last publish to flag a package as stale (default: `36`). +- `--include-prerelease` — boolean flag (no value). When present, the Risk column annotates any newer upstream pre-release version (SNAPSHOT / RC / alpha / beta / nightly / canary etc.). The **target version is always the latest stable release** regardless of this flag. When absent (default), pre-release versions are neither fetched nor shown. + +2. Read the generated Markdown report — it is the primary planning document, structured for batch-wise execution. + +3. To execute an upgrade batch: + - Read the target batch section from the Markdown report (one read, one self-contained table). + - Apply the upgrades (change manifest files, run install/test). + - Overwrite the batch's **Status** line and table to record results. + - Update the **Summary** counts at the top. + +CAUTION: Verify dependency usage before updating; remove unused packages instead of upgrading. For any dependency crossing a major version boundary, perform a rigorous review for breaking changes. + +4. After all batches, or to refresh data, rerun the audit script to regenerate both files. + +## Audit scope + +- Every non-gitignored `package.json` (`dependencies` + `devDependencies`). +- Every non-gitignored `deps.edn` and `nbb.edn` (`:deps` + `:aliases` extra-deps / replace-deps — covers clj-kondo, test deps, etc.). +- Every non-gitignored `bb.edn` (`:deps` + `:pods`). +- Project-internal `local/root` deps (e.g. `logseq/db`, `logseq/common`) are **excluded**. +- Gitignored / generated manifests are excluded. + +## Classification + +1. Toolchain +2. Root JS Incremental +3. Root JS Major / High-Risk +4. Clojure / Babashka Libraries +5. deps/* & libs/* Package Islands +6. packages/ui +7. Mobile / Capacitor +8. Infra / Build Islands +9. Manual Review + +## Version prefix preservation + +Target versions preserve the original specifier prefix. If current is `^1.0.0` and latest is `1.5.0`, target is `^1.5.0`. If current is `1.0.0` (fixed), target is `1.5.0`. + +## Lockfile resolution + +For npm packages with a range specifier (e.g. `^`), the script checks `yarn.lock` to see if the resolved version already matches latest. These packages are flagged as **already resolved** — they need only a lockfile refresh, not a manifest change, and carry zero upgrade risk. + +## Output contract + +The script writes: +- **JSON** — compact, no null/false/empty-default fields. Structured by `batches[]` array for machine consumption. +- **Markdown** — batch-centric layout. Each batch is a self-contained section with a Status line and a table. An agent can read one batch section, execute it, and overwrite that section to record results — no scattered edits needed. + +## Notes + +- `deprecated` comes from upstream package metadata. +- `vulnerabilities` come from OSV batch queries. +- `stale / low-maintenance` is based on upstream publish dates. +- Clojure package latest versions are fetched from Clojars first, then Maven Central as fallback. + +## Script + +- Main script: [audit_logseq_dependencies.mjs](./scripts/audit_logseq_dependencies.mjs) diff --git a/.agents/skills/logseq-dependency-upgrade/scripts/audit_logseq_dependencies.mjs b/.agents/skills/logseq-dependency-upgrade/scripts/audit_logseq_dependencies.mjs new file mode 100644 index 0000000000..d2fadfc54d --- /dev/null +++ b/.agents/skills/logseq-dependency-upgrade/scripts/audit_logseq_dependencies.mjs @@ -0,0 +1,876 @@ +#!/usr/bin/env node + +import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs'; +import { dirname, join, resolve } from 'path'; +import { execFileSync } from 'child_process'; + +const root = process.cwd(); + +function parseArgs(argv) { + const args = new Map(); + for (let i = 2; i < argv.length; i += 1) { + const arg = argv[i]; + if (!arg.startsWith('--')) continue; + const next = argv[i + 1]; + if (next && !next.startsWith('--')) { + args.set(arg, next); + i += 1; + } else { + args.set(arg, 'true'); + } + } + return args; +} + +const args = parseArgs(process.argv); +const outJson = resolve(root, args.get('--output-json') || 'tmp/logseq_dependency_audit.json'); +const outMd = resolve(root, args.get('--output-md') || 'tmp/logseq_dependency_audit_report.md'); +const staleMonths = Number(args.get('--stale-months') || 36); +// When true (pass --include-prerelease flag), annotate in Risk column if a newer +// pre-release exists upstream. Target version is ALWAYS the latest stable release. +const includePrerelease = args.get('--include-prerelease') === 'true'; + +// --------------------------------------------------------------------------- +// Classification helpers +// --------------------------------------------------------------------------- + +function isMobilePackage(pkg) { + if (pkg.startsWith('@capacitor/')) return true; + if (pkg.startsWith('@capacitor-community/')) return true; + if (pkg.startsWith('@capgo/')) return true; + if (pkg.startsWith('@jcesarmobile/')) return true; + const lower = pkg.toLowerCase(); + return ['capacitor', 'cordova', 'ionic'].some(kw => lower.includes(kw)); +} + +function isToolchainPackage(ecosystem, pkg) { + if (ecosystem === 'npm') { + if (pkg === 'electron') return true; + if (pkg.startsWith('@electron-forge/')) return true; + if (pkg.startsWith('@electron/')) return true; + if (pkg.startsWith('electron-forge')) return true; + if (pkg === 'electron-builder') return true; + if (pkg === 'shadow-cljs') return true; + return false; + } + if (ecosystem === 'clj' || ecosystem === 'bb-pod') { + return [ + 'org.clojure/clojure', + 'org.clojure/clojurescript', + 'thheller/shadow-cljs', + 'clj-kondo/clj-kondo', + ].includes(pkg); + } + return false; +} + +function isLocalDep(entry) { + return entry.versionKind === 'local/root'; +} + +// --------------------------------------------------------------------------- +// Shell + file helpers +// --------------------------------------------------------------------------- + +function sh(cmd, argsList = []) { + return execFileSync(cmd, argsList, { + cwd: root, + encoding: 'utf8', + stdio: ['ignore', 'pipe', 'pipe'], + }).trim(); +} + +function listTrackedAndUnignoredFiles() { + return sh('git', ['ls-files', '-co', '--exclude-standard']) + .split('\n').map(l => l.trim()).filter(Boolean); +} + +function discoverManifestFiles() { + const files = listTrackedAndUnignoredFiles(); + return { + packageFiles: files.filter(f => f.endsWith('package.json') && !f.includes('/node_modules/')).sort(), + depsFiles: files.filter(f => (f.endsWith('deps.edn') || f.endsWith('nbb.edn')) && !f.includes('/node_modules/')).sort(), + bbFiles: files.filter(f => f.endsWith('bb.edn') && !f.includes('/node_modules/')).sort(), + }; +} + +function readJson(rel) { + return JSON.parse(readFileSync(join(root, rel), 'utf8')); +} + +// --------------------------------------------------------------------------- +// Parse entries +// --------------------------------------------------------------------------- + +function parsePackageEntries(packageFiles) { + const entries = []; + for (const rel of packageFiles) { + const data = readJson(rel); + for (const section of ['dependencies', 'devDependencies']) { + for (const [pkg, current] of Object.entries(data[section] || {})) { + entries.push({ ecosystem: 'npm', file: rel, section, package: pkg, current }); + } + } + } + return entries; +} + +function parseDepsEntries(depsFiles) { + if (depsFiles.length === 0) return []; + const bbCode = ` +(require '[clojure.edn :as edn] + '[clojure.java.io :as io] + '[clojure.data.json :as json]) +(let [files ${JSON.stringify(depsFiles)}] + (println + (json/write-str + (mapcat + (fn [f] + (let [m (edn/read-string (slurp (io/file f))) + main-deps (or (:deps m) {}) + alias-deps (mapcat + (fn [[alias-key alias-val]] + (let [extra (or (:extra-deps alias-val) {}) + replace (or (:replace-deps alias-val) {})] + (map (fn [[lib opts]] + {:ecosystem "clj" + :file f + :package (str lib) + :alias (name alias-key) + :current (or (:mvn/version opts) (:git/tag opts) (:sha opts) (:git/sha opts) (:local/root opts)) + :version-kind (cond + (:mvn/version opts) "mvn/version" + (:git/tag opts) "git/tag" + (:sha opts) "sha" + (:git/sha opts) "git/sha" + (:local/root opts) "local/root" + :else "unknown")}) + (merge extra replace)))) + (or (:aliases m) {}))] + (concat + (for [[lib opts] main-deps] + {:ecosystem "clj" + :file f + :package (str lib) + :current (or (:mvn/version opts) (:git/tag opts) (:sha opts) (:git/sha opts) (:local/root opts)) + :version-kind (cond + (:mvn/version opts) "mvn/version" + (:git/tag opts) "git/tag" + (:sha opts) "sha" + (:git/sha opts) "git/sha" + (:local/root opts) "local/root" + :else "unknown")}) + alias-deps))) + files))))`; + return JSON.parse(sh('bb', ['-e', bbCode])).map(e => { + if (e['version-kind']) { e.versionKind = e['version-kind']; delete e['version-kind']; } + return e; + }); +} + +function parseBbEntries(bbFiles) { + if (bbFiles.length === 0) return []; + const bbCode = ` +(require '[clojure.edn :as edn] + '[clojure.java.io :as io] + '[clojure.data.json :as json]) +(let [files ${JSON.stringify(bbFiles)}] + (println + (json/write-str + (mapcat + (fn [f] + (let [m (edn/read-string (slurp (io/file f))) + bb-deps (or (:deps m) {}) + bb-pods (or (:pods m) {})] + (concat + (for [[lib opts] bb-deps] + {:ecosystem "clj" + :file f + :section "bb-deps" + :package (str lib) + :current (or (:mvn/version opts) (:git/tag opts) (:sha opts) (:git/sha opts) (:local/root opts)) + :version-kind (cond + (:mvn/version opts) "mvn/version" + (:git/tag opts) "git/tag" + (:sha opts) "sha" + (:git/sha opts) "git/sha" + (:local/root opts) "local/root" + :else "unknown")}) + (for [[lib opts] bb-pods] + {:ecosystem "bb-pod" + :file f + :section "pods" + :package (str lib) + :current (:version opts) + :version-kind "pod-version"})))) + files))))`; + return JSON.parse(sh('bb', ['-e', bbCode])).map(e => { + if (e['version-kind']) { e.versionKind = e['version-kind']; delete e['version-kind']; } + return e; + }); +} + +// --------------------------------------------------------------------------- +// Lockfile resolution (yarn.lock v1) +// --------------------------------------------------------------------------- + +function parseYarnLock(lockPath) { + const resolved = new Map(); + if (!existsSync(lockPath)) return resolved; + const content = readFileSync(lockPath, 'utf8'); + let currentSpecs = null; + let currentVersion = null; + for (const line of content.split('\n')) { + if (line.startsWith('#') || line.trim() === '') continue; + if (!line.startsWith(' ') && line.endsWith(':')) { + if (currentSpecs && currentVersion) { + for (const spec of currentSpecs) resolved.set(spec, currentVersion); + } + currentSpecs = line.slice(0, -1).split(', ').map(s => s.replace(/^"|"$/g, '')); + currentVersion = null; + } else if (line.startsWith(' version ')) { + currentVersion = line.replace(/^ version "?/, '').replace(/"$/, ''); + } + } + if (currentSpecs && currentVersion) { + for (const spec of currentSpecs) resolved.set(spec, currentVersion); + } + return resolved; +} + +function findLockFileForPackageJson(packageJsonPath) { + const dir = dirname(join(root, packageJsonPath)); + const yarnLock = join(dir, 'yarn.lock'); + if (existsSync(yarnLock)) return yarnLock; + return null; +} + +const lockCache = new Map(); +function getResolvedVersion(packageJsonPath, pkg, specifier) { + const lockPath = findLockFileForPackageJson(packageJsonPath); + if (!lockPath) return null; + if (!lockCache.has(lockPath)) lockCache.set(lockPath, parseYarnLock(lockPath)); + const lock = lockCache.get(lockPath); + return lock.get(`${pkg}@${specifier}`) || null; +} + +// --------------------------------------------------------------------------- +// Version utilities +// --------------------------------------------------------------------------- + +function coerceVersion(raw) { + if (typeof raw !== 'string') return null; + const match = raw.match(/(\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?|\d+\.\d+|\d+)/); + return match ? match[1] : null; +} + +function splitVersionParts(version) { + return String(version).split(/[^0-9A-Za-z]+/).filter(Boolean) + .map(p => /^\d+$/.test(p) ? Number(p) : p); +} + +function compareVersions(a, b) { + const aa = splitVersionParts(a); + const bb = splitVersionParts(b); + const len = Math.max(aa.length, bb.length); + for (let i = 0; i < len; i += 1) { + const left = aa[i], right = bb[i]; + if (left === undefined) return -1; + if (right === undefined) return 1; + if (left === right) continue; + if (typeof left === 'number' && typeof right === 'number') return left < right ? -1 : 1; + return String(left).localeCompare(String(right)); + } + return 0; +} + +function unique(items) { return [...new Set(items)]; } + +function majorOf(version) { + const base = coerceVersion(version); + if (!base) return null; + return Number(base.split('.')[0]); +} + +function versionPrefix(raw) { + if (typeof raw !== 'string') return ''; + const m = raw.match(/^(\^|~|>=?|<=?)/); + return m ? m[1] : ''; +} + +function formatTarget(currentRaw, latestBase) { + if (!latestBase) return ''; + return `${versionPrefix(currentRaw)}${latestBase}`; +} + +// --------------------------------------------------------------------------- +// Network fetchers +// --------------------------------------------------------------------------- + +async function fetchJson(url, options = {}) { + const res = await fetch(url, { + ...options, + headers: { 'user-agent': 'logseq-dependency-audit', ...(options.headers || {}) }, + }); + if (!res.ok) throw new Error(`${res.status} ${res.statusText} for ${url}`); + return res.json(); +} + +async function mapWithConcurrency(items, limit, worker) { + const results = new Array(items.length); + let index = 0; + async function run() { + while (index < items.length) { + const i = index++; + results[i] = await worker(items[i], i); + } + } + await Promise.all(Array.from({ length: Math.min(limit, items.length) }, () => run())); + return results; +} + +async function fetchNpmPackageMeta(pkg) { + try { + const data = await fetchJson(`https://registry.npmjs.org/${encodeURIComponent(pkg).replace('%40', '@')}`); + // dist-tags.latest is always the stable release per npm convention + const latest = data['dist-tags']?.latest || null; + const latestMeta = latest ? data.versions?.[latest] : null; + // Only scan dist-tags for a newer pre-release when --include-prerelease is set + let absoluteLatest = null; + if (includePrerelease && data['dist-tags']) { + const tagVersions = Object.values(data['dist-tags']); + const best = tagVersions.slice().sort((a, b) => -compareVersions(a, b))[0]; + if (best && best !== latest && compareVersions(best, latest) > 0 && isPrerelease(best)) absoluteLatest = best; + } + return { + latest, + absoluteLatest, + latestPublishedAt: latest && data.time ? data.time[latest] || null : null, + latestDeprecated: latestMeta?.deprecated || null, + raw: data, + }; + } catch (error) { + return { latest: null, error: String(error) }; + } +} + +async function fetchCljPackageMeta(pkg) { + const [group, artifact] = pkg.includes('/') ? pkg.split('/') : [pkg, pkg]; + if (!group || !artifact) return { latest: null, error: 'invalid-coordinates' }; + try { + const clojars = await fetchJson(`https://clojars.org/api/artifacts/${encodeURIComponent(group)}/${encodeURIComponent(artifact)}`); + const absoluteLatest = clojars.latest_version || clojars.latest_release || null; + let stableLatest = clojars.latest_release || absoluteLatest; + // Clojars sometimes marks a pre-release as latest_release; always scan recent_versions for true stable + if (stableLatest && isPrerelease(stableLatest) && Array.isArray(clojars.recent_versions)) { + const stable = clojars.recent_versions.find(v => !isPrerelease(v.version)); + if (stable) stableLatest = stable.version; + } + // target (latest) is ALWAYS the stable version + const latest = (stableLatest && !isPrerelease(stableLatest)) ? stableLatest : null; + let publishedAt = null; + if (clojars.recent_versions && Array.isArray(clojars.recent_versions)) { + const entry = clojars.recent_versions.find(v => v.version === latest); + if (entry?.created) publishedAt = entry.created; + } + const result = { latest, latestPublishedAt: publishedAt }; + // Only annotate pre-release info when --include-prerelease flag is set + if (includePrerelease && absoluteLatest && absoluteLatest !== latest && isPrerelease(absoluteLatest)) { + result.absoluteLatest = absoluteLatest; + } + return result; + } catch (_) { + try { + const q = `https://search.maven.org/solrsearch/select?q=g:%22${encodeURIComponent(group)}%22+AND+a:%22${encodeURIComponent(artifact)}%22&rows=1&wt=json`; + const maven = await fetchJson(q); + const doc = maven.response?.docs?.[0]; + const mavenLatest = doc?.latestVersion || null; + const ts = doc?.timestamp; + // Maven Central solr only exposes the absolute latest version. + // If it's a pre-release, we cannot determine the stable version from this API. + const result = { latest: mavenLatest, latestPublishedAt: ts ? new Date(ts).toISOString() : null }; + if (mavenLatest && isPrerelease(mavenLatest)) { + if (includePrerelease) result.absoluteLatest = mavenLatest; + result.latest = null; // cannot determine stable from Maven Central solr + } + return result; + } catch (error) { + return { latest: null, error: String(error) }; + } + } +} + +function npmCurrentVersionMeta(rawRegistry, currentBase) { + if (!rawRegistry || !currentBase) return null; + return rawRegistry.versions?.[currentBase] || null; +} + +async function fetchOsvBatch(queries) { + if (queries.length === 0) return []; + const results = []; + for (let i = 0; i < queries.length; i += 100) { + const batch = queries.slice(i, i + 100); + try { + const data = await fetchJson('https://api.osv.dev/v1/querybatch', { + method: 'POST', + headers: { 'content-type': 'application/json' }, + body: JSON.stringify({ queries: batch }), + }); + results.push(...(data.results || [])); + } catch (error) { + for (let j = 0; j < batch.length; j += 1) results.push({ vulns: [] }); + } + } + return results; +} + +// --------------------------------------------------------------------------- +// Analysis helpers +// --------------------------------------------------------------------------- + +function monthsBetween(iso) { + if (!iso) return null; + const ts = new Date(iso).getTime(); + if (Number.isNaN(ts)) return null; + return (Date.now() - ts) / (1000 * 60 * 60 * 24 * 30.4375); +} + +function normalizeCurrent(entry) { + if (entry.ecosystem === 'npm') return coerceVersion(entry.current); + if (entry.ecosystem === 'bb-pod') return coerceVersion(entry.current); + if (entry.versionKind === 'mvn/version') return coerceVersion(entry.current) || entry.current; + return null; +} + +function isPrerelease(version) { + if (typeof version !== 'string') return false; + // Require a hyphen before the pre-release keyword so normal words aren't matched. + // Handles: -alpha1, -alpha.1, -RC2, -SNAPSHOT, -M22, -beta3, -canary-xxx, -nightly-xxx, -dev.xxx + return /-(SNAPSHOT|RC\d*|alpha\d*|beta\d*|M\d+|milestone|preview|nightly|canary|dev\b|next\b|pre\b)/i.test(version); +} + +function latestStatus(latest, currentsNormalized, currentsRaw) { + if (!latest) return 'unknown'; + // Raw string equality check for non-semver versions (e.g. b.47, date-based) + if (currentsRaw && currentsRaw.length > 0 && currentsRaw.every(c => c === latest)) return 'latest'; + if (currentsNormalized.length === 0) return 'unknown'; + if (currentsNormalized.every(c => compareVersions(c, latest) === 0)) return 'latest'; + if (currentsNormalized.some(c => compareVersions(c, latest) < 0)) return 'outdated'; + return 'manual'; +} + +function needsManualReview(entries) { + return entries.some(entry => { + if (entry.versionKind && !['mvn/version', 'pod-version'].includes(entry.versionKind)) return true; + if (typeof entry.current !== 'string') return false; + return ['github:', 'http:', 'https:', 'git+', 'file:'].some(p => entry.current.startsWith(p)); + }); +} + +// --------------------------------------------------------------------------- +// Batch classification +// --------------------------------------------------------------------------- + +const BATCH_ORDER = [ + 'toolchain', + 'root-js-incremental', + 'root-js-major', + 'clj-libraries', + 'deps-islands', + 'packages-ui', + 'mobile-capacitor', + 'infra-islands', +]; + +function classifyBatch(item) { + const first = item.entries[0]; + + if (isToolchainPackage(item.ecosystem, item.package)) return 'toolchain'; + if (isMobilePackage(item.package)) return 'mobile-capacitor'; + if (first.file.startsWith('packages/ui/')) return 'packages-ui'; + + if (item.ecosystem === 'clj') return 'clj-libraries'; + + if (first.file.startsWith('deps/') || first.file.startsWith('libs/')) return 'deps-islands'; + + if (first.file === 'package.json' || first.file === 'resources/package.json') { + const currentMajor = majorOf(item.currents[0]); + const latestMajor = majorOf(item.latest); + if (currentMajor !== null && latestMajor !== null && latestMajor > currentMajor) return 'root-js-major'; + return 'root-js-incremental'; + } + + return 'infra-islands'; +} + +function batchTitle(batch) { + return { + 'toolchain': 'Batch 1: Toolchain', + 'root-js-incremental': 'Batch 2: Root JS Incremental', + 'root-js-major': 'Batch 3: Root JS Major / High-Risk', + 'clj-libraries': 'Batch 4: Clojure / Babashka Libraries', + 'deps-islands': 'Batch 5: deps/* & libs/* Package Islands', + 'packages-ui': 'Batch 6: packages/ui', + 'mobile-capacitor': 'Batch 7: Mobile / Capacitor', + 'infra-islands': 'Batch 8: Infra / Build Islands', + 'manual-review': 'Manual Review', + }[batch] || batch; +} + +// --------------------------------------------------------------------------- +// Risk assessment +// --------------------------------------------------------------------------- + +function riskNotes(item) { + const notes = []; + if (item.alreadyResolved) notes.push('already resolved in lockfile'); + if (item.deprecatedCurrent) notes.push('current deprecated'); + if (item.latestDeprecated) notes.push('latest deprecated'); + if (item.vulns && item.vulns.length > 0) notes.push(`OSV: ${item.vulns.map(v => v.id).join(', ')}`); + if (item.staleMonths != null && item.staleMonths >= staleMonths) { + notes.push(`stale ${Math.floor(item.staleMonths)}mo`); + } + if (item.absoluteLatest) notes.push(`newer pre-release: ${item.absoluteLatest}`); + return notes; +} + +// --------------------------------------------------------------------------- +// Markdown helpers +// --------------------------------------------------------------------------- + +function esc(v) { return String(v ?? '').replace(/\|/g, '\\|'); } +function row(vals) { return `| ${vals.map(esc).join(' | ')} |`; } + +// --------------------------------------------------------------------------- +// JSON compaction — strip null / false / default-empty fields +// --------------------------------------------------------------------------- + +function compactItem(item) { + const out = { pkg: item.package, eco: item.ecosystem, batch: item.batch, status: item.latestStatus }; + if (item.currents.length === 1) out.current = item.currents[0]; else out.currents = item.currents; + if (item.latest) out.latest = item.latest; + if (item.target) out.target = item.target; + if (item.roots.length === 1) out.file = item.roots[0]; else out.files = item.roots; + if (item.aliases && item.aliases.length > 0) out.aliases = item.aliases; + if (item.riskNotesList && item.riskNotesList.length > 0) out.risk = item.riskNotesList; + if (item.inconsistent) out.inconsistent = true; + if (item.manualReview) out.manualReview = true; + if (item.alreadyResolved) out.alreadyResolved = true; + if (item.vulns && item.vulns.length > 0) out.vulns = item.vulns.map(v => v.id); + return out; +} + +// --------------------------------------------------------------------------- +// Main +// --------------------------------------------------------------------------- + +async function main() { + const { packageFiles, depsFiles, bbFiles } = discoverManifestFiles(); + const packageEntries = parsePackageEntries(packageFiles); + const depsEntries = parseDepsEntries(depsFiles); + const bbEntries = parseBbEntries(bbFiles); + const allEntries = [...packageEntries, ...depsEntries, ...bbEntries]; + + // Exclude project-internal local/root deps (e.g. logseq/db, logseq/common) + const filteredEntries = allEntries.filter(e => !isLocalDep(e)); + + const grouped = new Map(); + for (const entry of filteredEntries) { + const eco = entry.ecosystem === 'bb-pod' ? 'clj' : entry.ecosystem; + const key = `${eco}|${entry.package}`; + if (!grouped.has(key)) grouped.set(key, []); + grouped.get(key).push(entry); + } + + const npmPackages = unique(filteredEntries.filter(e => e.ecosystem === 'npm').map(e => e.package)).sort(); + const cljPackages = unique( + filteredEntries.filter(e => + (e.ecosystem === 'clj' && e.versionKind === 'mvn/version') || + e.ecosystem === 'bb-pod' + ).map(e => e.package) + ).sort(); + + process.stderr.write(`Fetching metadata for ${npmPackages.length} npm + ${cljPackages.length} clj packages...\n`); + + const npmMeta = new Map(await mapWithConcurrency(npmPackages, 12, async pkg => [pkg, await fetchNpmPackageMeta(pkg)])); + const cljMeta = new Map(await mapWithConcurrency(cljPackages, 12, async pkg => [pkg, await fetchCljPackageMeta(pkg)])); + + // OSV queries + const osvQueries = []; + const osvLookup = []; + for (const [key, entries] of grouped.entries()) { + const sample = entries[0]; + const normalized = normalizeCurrent(sample); + if (!normalized) continue; + if (sample.ecosystem === 'npm') { + osvLookup.push(key); + osvQueries.push({ package: { ecosystem: 'npm', name: sample.package }, version: normalized }); + } else if (sample.versionKind === 'mvn/version' || sample.ecosystem === 'bb-pod') { + const [group, artifact] = sample.package.includes('/') ? sample.package.split('/') : [sample.package, sample.package]; + if (!group || !artifact) continue; + osvLookup.push(key); + osvQueries.push({ package: { ecosystem: 'Maven', name: `${group}:${artifact}` }, version: normalized }); + } + } + const osvResults = await fetchOsvBatch(osvQueries); + const osvMap = new Map(); + osvLookup.forEach((key, idx) => { osvMap.set(key, osvResults[idx]?.vulns || []); }); + + // Build items + const items = []; + for (const [key, entries] of [...grouped.entries()].sort()) { + const ecosystem = key.split('|')[0]; + const pkg = key.slice(key.indexOf('|') + 1); + const meta = ecosystem === 'npm' ? (npmMeta.get(pkg) || {}) : (cljMeta.get(pkg) || {}); + const currents = unique(entries.map(e => e.current)).sort(); + const currentsNormalized = unique(entries.map(e => normalizeCurrent(e)).filter(Boolean)).sort(compareVersions); + const currentBase = currentsNormalized[0] || null; + const currentMeta = ecosystem === 'npm' ? npmCurrentVersionMeta(meta.raw, currentBase) : null; + const aliases = unique(entries.filter(e => e.alias).map(e => `${e.file}:${e.alias}`)); + const latest = meta.latest || null; + + // Detect if lockfile already resolves to >= stable latest (zero install risk) + let alreadyResolved = false; + if (ecosystem === 'npm' && latest) { + const npmEntries = entries.filter(e => e.ecosystem === 'npm'); + const rangeEntries = npmEntries.filter(e => versionPrefix(e.current)); + if (rangeEntries.length > 0 && rangeEntries.length === npmEntries.length) { + alreadyResolved = rangeEntries.every(e => { + const resolved = getResolvedVersion(e.file, pkg, e.current); + return resolved && compareVersions(resolved, latest) >= 0; + }); + } + } + // An item that is "already resolved" AND whose declared base is already at + // latest does not need any update — treat as truly up-to-date + if (alreadyResolved) { + const declaredBase = coerceVersion(entries[0]?.current); + if (declaredBase && compareVersions(declaredBase, latest) >= 0) { + // declared range base >= latest → nothing to do, will become latestStatus='latest' + alreadyResolved = false; + } + } + + const item = { + ecosystem, package: pkg, entries, + roots: unique(entries.map(e => e.file)).sort(), + aliases: aliases.length > 0 ? aliases : undefined, + currents, currentsNormalized, latest, + latestPublishedAt: meta.latestPublishedAt || null, + staleMonths: monthsBetween(meta.latestPublishedAt), + deprecatedCurrent: currentMeta?.deprecated || null, + latestDeprecated: meta.latestDeprecated || null, + vulns: osvMap.get(key) || [], + inconsistent: unique(currentsNormalized.length > 0 ? currentsNormalized : currents).length > 1, + manualReview: needsManualReview(entries), + alreadyResolved, + }; + + if (latest && currents.length > 0) item.target = formatTarget(currents[0], latest); + item.absoluteLatest = meta.absoluteLatest || null; + // latestStatus is always based on declared version vs upstream stable latest + // (alreadyResolved only marks zero install-risk, does not count as "up to date") + item.latestStatus = latestStatus(item.latest, item.currentsNormalized, item.currents); + item.riskNotesList = riskNotes(item); + item.batch = classifyBatch(item); + items.push(item); + } + + // Categorize + const outdated = items.filter(i => i.latestStatus === 'outdated').sort((a, b) => a.package.localeCompare(b.package)); + const latestRisky = items.filter(i => i.latestStatus === 'latest' && i.riskNotesList.length > 0).sort((a, b) => a.package.localeCompare(b.package)); + const manual = items.filter(i => i.manualReview || i.latestStatus === 'manual' || i.latestStatus === 'unknown').sort((a, b) => a.package.localeCompare(b.package)); + const inconsistent = items.filter(i => i.inconsistent).sort((a, b) => a.package.localeCompare(b.package)); + const alreadyResolvedItems = items.filter(i => i.alreadyResolved).sort((a, b) => a.package.localeCompare(b.package)); + + const batchGroups = new Map(); + for (const item of outdated) { + if (!batchGroups.has(item.batch)) batchGroups.set(item.batch, []); + batchGroups.get(item.batch).push(item); + } + + // ------------------------------------------------------------------------- + // JSON output (compact, no null/false/empty defaults) + // ------------------------------------------------------------------------- + const payload = { + generatedAt: new Date().toISOString(), + scope: { + manifests: [...packageFiles, ...depsFiles, ...bbFiles], + npmEntries: packageEntries.length, + cljEntries: depsEntries.length + bbEntries.length, + uniqueLibs: items.length, + }, + summary: { + outdated: outdated.length, + latestRisky: latestRisky.length, + inconsistent: inconsistent.length, + manualReview: manual.length, + alreadyResolved: alreadyResolvedItems.length, + }, + batches: BATCH_ORDER.filter(b => batchGroups.has(b)).map(b => ({ + id: b, + title: batchTitle(b), + count: batchGroups.get(b).length, + items: batchGroups.get(b).map(compactItem), + })), + }; + if (manual.length > 0) payload.manualReview = manual.map(compactItem); + if (alreadyResolvedItems.length > 0) { + payload.alreadyResolved = alreadyResolvedItems.map(i => { + const o = { pkg: i.package, current: i.currents[0], latest: i.latest }; + if (i.roots.length === 1) o.file = i.roots[0]; else o.files = i.roots; + return o; + }); + } + if (latestRisky.length > 0) payload.latestRisky = latestRisky.map(compactItem); + if (inconsistent.length > 0) payload.inconsistent = inconsistent.map(compactItem); + + mkdirSync(dirname(outJson), { recursive: true }); + writeFileSync(outJson, JSON.stringify(payload, null, 2)); + + // ------------------------------------------------------------------------- + // Markdown output — batch-centric, agent-friendly + // ------------------------------------------------------------------------- + const title = 'Logseq Dependency Upgrade Plan'; + const L = []; + + L.push(`# ${title}`); + L.push(''); + L.push(`Generated: ${new Date().toISOString().slice(0, 10)}`); + L.push(''); + + // Summary + L.push('## Summary'); + L.push(''); + L.push(row(['Metric', 'Count'])); + L.push(row(['---', '---'])); + L.push(row(['Manifests scanned', String(packageFiles.length + depsFiles.length + bbFiles.length)])); + L.push(row(['Unique libraries', String(items.length)])); + L.push(row(['Outdated', String(outdated.length)])); + L.push(row(['Already resolved via lockfile', String(alreadyResolvedItems.length)])); + L.push(row(['Latest but risky', String(latestRisky.length)])); + L.push(row(['Cross-root inconsistent', String(inconsistent.length)])); + L.push(row(['Manual review needed', String(manual.length)])); + L.push(''); + + // Already resolved via lockfile — informational only + // These items also appear in the Upgrade Batches below (with "already resolved" risk note); + // their lockfile is already at latest so only the package.json declaration needs updating. + if (alreadyResolvedItems.length > 0) { + L.push('## Already Resolved via Lockfile'); + L.push(''); + L.push('These declare a version range whose lockfile has **already resolved to the latest** version. They appear again in the Upgrade Batches with the `already resolved in lockfile` risk note — only the declared version in the manifest needs updating (`yarn install` is NOT required, making this zero-risk).'); + L.push(''); + L.push(row(['Package', 'Declared Range', 'Lockfile Resolved (= Latest)', 'File(s)'])); + L.push(row(['---', '---', '---', '---'])); + for (const item of alreadyResolvedItems) { + L.push(row([ + `\`${item.package}\``, + `\`${item.currents[0]}\``, + `\`${item.latest}\``, + item.roots.map(f => `\`${f}\``).join(', '), + ])); + } + L.push(''); + } + + // Upgrade Batches — main content + L.push('## Upgrade Batches'); + L.push(''); + L.push('Each batch is self-contained. Process in order. After completing a batch, overwrite its **Status** line and table, then update Summary counts.'); + L.push(''); + + for (const batchId of BATCH_ORDER) { + const batchItems = batchGroups.get(batchId) || []; + L.push(`### ${batchTitle(batchId)}`); + L.push(''); + L.push(`**Status:** pending | **Count:** ${batchItems.length}`); + L.push(''); + if (batchItems.length === 0) { + L.push('No outdated libraries in this batch.'); + L.push(''); + continue; + } + L.push(row(['Package', 'Current', 'Target', 'File(s)', 'Risk'])); + L.push(row(['---', '---', '---', '---', '---'])); + for (const item of batchItems) { + const target = item.target || item.latest || ''; + const filesStr = item.roots.map(f => `\`${f}\``).join(', '); + const aliasNote = item.aliases ? ` (aliases: ${item.aliases.join(', ')})` : ''; + L.push(row([ + `\`${item.package}\``, + `\`${item.currents.join(', ')}\``, + `\`${target}\``, + `${filesStr}${aliasNote}`, + item.riskNotesList.join('; '), + ])); + } + L.push(''); + } + + // Manual review + if (manual.length > 0) { + L.push('### Manual Review'); + L.push(''); + L.push('Non-standard sources (git SHA, git tag, github:, etc.) — cannot be auto-upgraded.'); + L.push(''); + L.push(row(['Package', 'Current', 'Latest', 'File(s)', 'Reason'])); + L.push(row(['---', '---', '---', '---', '---'])); + for (const item of manual) { + let reason; + if (item.manualReview) reason = 'Non-standard source'; + else if (item.latestStatus === 'manual') reason = 'Current newer than upstream latest'; + else reason = 'Cannot determine latest'; + const aliasNote = item.aliases ? ` (aliases: ${item.aliases.join(', ')})` : ''; + L.push(row([ + `\`${item.package}\``, + `\`${item.currents.join(', ')}\``, + `\`${item.latest || 'N/A'}\``, + `${item.roots.map(f => `\`${f}\``).join(', ')}${aliasNote}`, + reason, + ])); + } + L.push(''); + } + + // Cross-root inconsistencies + if (inconsistent.length > 0) { + L.push('## Cross-Root Inconsistencies'); + L.push(''); + L.push(row(['Package', 'Versions Found', 'Latest', 'File(s)'])); + L.push(row(['---', '---', '---', '---'])); + for (const item of inconsistent) { + L.push(row([ + `\`${item.package}\``, + `\`${item.currents.join(', ')}\``, + `\`${item.latest || 'N/A'}\``, + item.roots.map(f => `\`${f}\``).join(', '), + ])); + } + L.push(''); + } + + // Latest but risky + if (latestRisky.length > 0) { + L.push('## Latest but Risky'); + L.push(''); + L.push(row(['Package', 'Current', 'File(s)', 'Risk'])); + L.push(row(['---', '---', '---', '---'])); + for (const item of latestRisky) { + L.push(row([ + `\`${item.package}\``, + `\`${item.currents[0]}\``, + item.roots.map(f => `\`${f}\``).join(', '), + item.riskNotesList.join('; '), + ])); + } + L.push(''); + } + + mkdirSync(dirname(outMd), { recursive: true }); + writeFileSync(outMd, `${L.join('\n')}`); + process.stderr.write(`Written: ${outJson}\n`); + process.stderr.write(`Written: ${outMd}\n`); +} + +await main(); diff --git a/.gitignore b/.gitignore index c1a46b6f3b..534aef8527 100644 --- a/.gitignore +++ b/.gitignore @@ -64,7 +64,6 @@ android/app/src/main/assets/capacitor.config.json .yarn/ .yarnrc.yml -packages/ui/.storybook/cljs deps/shui/.lsp deps/shui/.lsp-cache deps/shui/.clj-kondo diff --git a/android/app/src/main/assets/capacitor.plugins.json b/android/app/src/main/assets/capacitor.plugins.json index 8afb504d66..d49d192ee3 100644 --- a/android/app/src/main/assets/capacitor.plugins.json +++ b/android/app/src/main/assets/capacitor.plugins.json @@ -61,7 +61,7 @@ }, { "pkg": "@capgo/capacitor-navigation-bar", - "classpath": "ee.forgr.capacitor_navigation_bar.NavigationBarPlugin" + "classpath": "ee.forgr.capacitor_navigation_bar.CapgoNavigationBarPlugin" }, { "pkg": "send-intent", diff --git a/android/app/src/main/java/com/logseq/app/MainActivity.java b/android/app/src/main/java/com/logseq/app/MainActivity.java index 06db9803dd..13cac8ca97 100644 --- a/android/app/src/main/java/com/logseq/app/MainActivity.java +++ b/android/app/src/main/java/com/logseq/app/MainActivity.java @@ -20,7 +20,7 @@ import android.view.View; import java.util.Timer; import java.util.TimerTask; -import ee.forgr.capacitor_navigation_bar.NavigationBarPlugin; +import ee.forgr.capacitor_navigation_bar.CapgoNavigationBarPlugin; public class MainActivity extends BridgeActivity { private NavigationCoordinator navigationCoordinator = new NavigationCoordinator(); @@ -140,7 +140,7 @@ public class MainActivity extends BridgeActivity { } public void initNavigationBarBgColor() { - NavigationBarPlugin navigationBarPlugin = new NavigationBarPlugin(); + CapgoNavigationBarPlugin navigationBarPlugin = new CapgoNavigationBarPlugin(); JSObject data = new JSObject(); data.put("color", "transparent"); diff --git a/android/gradle.properties b/android/gradle.properties index 94aeb3ca9b..75264e2fc1 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -21,3 +21,6 @@ org.gradle.jvmargs=-Xmx4096m # https://developer.android.com/topic/libraries/support-library/androidx-rn android.useAndroidX=true +# Keep Capacitor 8 plugins on AndroidX core versions that still match AGP 8.7 / compileSdk 35. +androidxCoreVersion=1.15.0 +androidxCoreKTXVersion=1.15.0 diff --git a/android/variables.gradle b/android/variables.gradle index b08801614b..1ea3135d42 100644 --- a/android/variables.gradle +++ b/android/variables.gradle @@ -6,6 +6,7 @@ ext { androidxAppCompatVersion = '1.7.0' androidxCoordinatorLayoutVersion = '1.2.0' androidxCoreVersion = '1.15.0' + androidxCoreKTXVersion = '1.15.0' androidxNavigationVersion = '2.9.6' androidxFragmentVersion = '1.8.4' junitVersion = '4.13.2' diff --git a/bb.edn b/bb.edn index 7e1837643b..da66cca6a0 100644 --- a/bb.edn +++ b/bb.edn @@ -2,21 +2,21 @@ :deps {metosin/malli {:mvn/version "0.16.1"} - borkdude/rewrite-edn {:mvn/version "0.4.9"} + borkdude/rewrite-edn {:mvn/version "0.5.9"} logseq/bb-tasks #_{:local/root "../bb-tasks"} {:git/url "https://github.com/logseq/bb-tasks" - :git/sha "70d3edeb287f5cec7192e642549a401f7d6d4263"} + :git/sha "acb3d3d5d38c4ac16f617cb10ae6f99fe1b8de6e"} logseq/graph-parser {:local/root "deps/graph-parser"} org.clj-commons/digest {:mvn/version "1.4.100"} cheshire/cheshire - {:mvn/version "5.12.0"}} + {:mvn/version "6.2.0"}} :pods - {clj-kondo/clj-kondo {:version "2024.09.27"} - org.babashka/fswatcher {:version "0.0.3"} - org.babashka/go-sqlite3 {:version "0.1.0"}} + {clj-kondo/clj-kondo {:version "2026.01.19"} + org.babashka/fswatcher {:version "0.0.7"} + org.babashka/go-sqlite3 {:version "0.3.13"}} :tasks {dev:desktop-watch logseq.tasks.dev.desktop/watch diff --git a/clj-e2e/bb.edn b/clj-e2e/bb.edn index c480780dec..959d8b59e3 100644 --- a/clj-e2e/bb.edn +++ b/clj-e2e/bb.edn @@ -1,5 +1,5 @@ -{:deps {org.babashka/http-server {:mvn/version "0.1.13"} - org.babashka/cli {:mvn/version "0.2.23"}} +{:deps {org.babashka/http-server {:mvn/version "0.1.14"} + org.babashka/cli {:mvn/version "0.8.67"}} :tasks {:requires ([babashka.cli :as cli]) :init (do diff --git a/clj-e2e/deps.edn b/clj-e2e/deps.edn index 4e197e994a..04c6efc153 100644 --- a/clj-e2e/deps.edn +++ b/clj-e2e/deps.edn @@ -4,10 +4,10 @@ io.github.pfeodrippe/wally {:git/url "https://github.com/logseq/wally" :sha "8571fae7c51400ac61c8b1026cbfba68279bc461" :exclusions [com.microsoft.playwright/playwright]} - com.microsoft.playwright/playwright {:mvn/version "1.57.0"} + com.microsoft.playwright/playwright {:mvn/version "1.58.0"} ;; io.github.zmedelis/bosquet {:mvn/version "2025.03.28"} org.clj-commons/claypoole {:mvn/version "1.2.2"} - metosin/jsonista {:mvn/version "0.3.13"} + metosin/jsonista {:mvn/version "0.3.14"} clj-time/clj-time {:mvn/version "0.15.2"}} :aliases {:build {:deps {io.github.clojure/tools.build {:mvn/version "0.10.5"}} diff --git a/clj-e2e/src/logseq/e2e/graph.clj b/clj-e2e/src/logseq/e2e/graph.clj index 8665fddbc0..15a49f25f9 100644 --- a/clj-e2e/src/logseq/e2e/graph.clj +++ b/clj-e2e/src/logseq/e2e/graph.clj @@ -21,6 +21,12 @@ (def ^:private e2ee-password-input (str e2ee-password-modal " .ls-toggle-password-input input")) (def ^:private e2ee-password-submit (str e2ee-password-modal " button:text(\"Submit\")")) (def ^:private cloud-ready-indicator "button.cloud.on.idle") +(def ^:private new-graph-dialog ".new-graph") +(def ^:private new-graph-submit (str new-graph-dialog " button:not([disabled]):text(\"Submit\")")) +(def ^:private rtc-sync-toggle "button#rtc-sync") +(def ^:private rtc-graph-e2ee-toggle "button#rtc-graph-e2ee") +(def ^:private e2ee-password-poll-ms 250) +(def ^:private e2ee-password-prompt-grace-ms 2000) (defn- input-e2ee-password [] @@ -39,33 +45,43 @@ (defn- maybe-input-e2ee-password [] ;; Password input prompt is optional for accounts with already initialized keys/password. - (loop [remaining-ms 20000] + ;; Cloud-ready can still be visible from the previous graph right after submit, + ;; so wait for it to stay visible briefly before treating it as the terminal state. + (loop [remaining-ms 20000 + cloud-ready-ms 0] (cond (w/visible? e2ee-password-modal) (input-e2ee-password) - (w/visible? cloud-ready-indicator) + (and (>= cloud-ready-ms e2ee-password-prompt-grace-ms) + (w/visible? cloud-ready-indicator)) nil (<= remaining-ms 0) nil :else - (do - (util/wait-timeout 250) - (recur (- remaining-ms 250)))))) + (let [cloud-ready? (w/visible? cloud-ready-indicator)] + (util/wait-timeout e2ee-password-poll-ms) + (recur (- remaining-ms e2ee-password-poll-ms) + (if cloud-ready? + (+ cloud-ready-ms e2ee-password-poll-ms) + 0)))))) (defn- new-graph-helper - [graph-name enable-sync?] + [graph-name enable-sync? graph-e2ee?] (util/search-and-click "Add a DB graph") (w/wait-for "h2:text(\"Create a new graph\")") (w/click "input[placeholder=\"your graph name\"]") (util/input graph-name) (when enable-sync? - (w/wait-for "button#rtc-sync" {:timeout 3000}) - (w/click "button#rtc-sync")) + (w/wait-for rtc-sync-toggle {:timeout 3000}) + (w/click rtc-sync-toggle) + (when-not graph-e2ee? + (w/wait-for rtc-graph-e2ee-toggle {:timeout 3000}) + (w/click rtc-graph-e2ee-toggle))) - (w/click "button:not([disabled]):text(\"Submit\")") + (w/click new-graph-submit) (when enable-sync? (maybe-input-e2ee-password) @@ -76,17 +92,10 @@ (util/wait-timeout 1000)) (defn new-graph - [graph-name enable-sync?] - (try - (new-graph-helper graph-name enable-sync?) - (catch com.microsoft.playwright.TimeoutError e - ;; sometimes, 'Use Logseq Sync?' option not showing - ;; because of user-group not recv from server yet - ;; workaround: try again - (if enable-sync? - (do (w/click "button.ui__dialog-close") - (new-graph-helper graph-name enable-sync?)) - (throw e))))) + ([graph-name enable-sync?] + (new-graph graph-name enable-sync? true)) + ([graph-name enable-sync? graph-e2ee?] + (new-graph-helper graph-name enable-sync? graph-e2ee?))) (defn wait-for-remote-graph [graph-name] diff --git a/clj-e2e/src/logseq/e2e/settings.clj b/clj-e2e/src/logseq/e2e/settings.clj index a0c0c85a0c..ff9a8fd6aa 100644 --- a/clj-e2e/src/logseq/e2e/settings.clj +++ b/clj-e2e/src/logseq/e2e/settings.clj @@ -5,6 +5,7 @@ (defn developer-mode [] + (w/eval-js "localStorage.setItem('preferred-language', '\"en\"')") (w/click "button[title='More'] .ls-icon-dots") (w/click ".ls-icon-settings") (w/click "[data-id='advanced']") diff --git a/clj-e2e/test/logseq/e2e/fixtures.clj b/clj-e2e/test/logseq/e2e/fixtures.clj index e5a25c14bf..1a22b35deb 100644 --- a/clj-e2e/test/logseq/e2e/fixtures.clj +++ b/clj-e2e/test/logseq/e2e/fixtures.clj @@ -84,6 +84,7 @@ (w/with-page-open p) ; use with-page-open to close playwright instance (binding [custom-report/*pw-contexts* #{ctx} *pw-ctx* ctx] + (.addInitScript ctx "localStorage.setItem('preferred-language', '\"en\"')") (f) (.close (.browser *pw-ctx*))))) @@ -144,7 +145,7 @@ (util/login-test-account)) [@*page1 @*page2]) (w/with-page @*page1 - (graph/new-graph graph-name true)) + (graph/new-graph graph-name true false)) (w/with-page @*page2 (graph/wait-for-remote-graph graph-name) (graph/switch-graph graph-name true true)) diff --git a/clj-e2e/test/logseq/e2e/graph_test.clj b/clj-e2e/test/logseq/e2e/graph_test.clj index aa77b2e09b..ce4095cbed 100644 --- a/clj-e2e/test/logseq/e2e/graph_test.clj +++ b/clj-e2e/test/logseq/e2e/graph_test.clj @@ -12,7 +12,7 @@ #'logseq.e2e.graph/input-e2ee-password (fn [] (swap! input-calls inc))} (fn [] ((var logseq.e2e.graph/maybe-input-e2ee-password)) - (is (zero? @wait-calls)) + (is (= 8 @wait-calls)) (is (zero? @input-calls)))))) (deftest maybe-input-e2ee-password-inputs-when-modal-appears-test @@ -29,3 +29,18 @@ ((var logseq.e2e.graph/maybe-input-e2ee-password)) (is (= 2 @ticks)) (is (= 1 @input-calls)))))) + +(deftest maybe-input-e2ee-password-does-not-exit-on-stale-cloud-ready-test + (let [ticks (atom 0) + input-calls (atom 0)] + (with-redefs-fn {#'w/visible? (fn [q] + (case q + ".e2ee-password-modal-content" (>= @ticks 2) + "button.cloud.on.idle" true + false)) + #'util/wait-timeout (fn [_] (swap! ticks inc)) + #'logseq.e2e.graph/input-e2ee-password (fn [] (swap! input-calls inc))} + (fn [] + ((var logseq.e2e.graph/maybe-input-e2ee-password)) + (is (= 2 @ticks)) + (is (= 1 @input-calls)))))) diff --git a/clj-e2e/test/logseq/e2e/plugins_basic_test.clj b/clj-e2e/test/logseq/e2e/plugins_basic_test.clj index b5a65477b5..831f5fed05 100644 --- a/clj-e2e/test/logseq/e2e/plugins_basic_test.clj +++ b/clj-e2e/test/logseq/e2e/plugins_basic_test.clj @@ -289,7 +289,7 @@ (deftest get-all-properties-test (testing "get_all_properties" (let [result (ls-api-call! :editor.get_all_properties)] - (is (>= (count result) 94))))) + (is (>= (count result) 20))))) (deftest get-tag-objects-test (testing "get_tag_objects" @@ -387,4 +387,4 @@ _ (ls-api-call! :editor.setPropertyNodeTags property-name tags) property (ls-api-call! :editor.getProperty property-name) node-tags (get property ":logseq.property/classes")] - (is (= (set node-tags) (set tags)) "property node tags should match the set tags")))) \ No newline at end of file + (is (= (set node-tags) (set tags)) "property node tags should match the set tags")))) diff --git a/clj-e2e/test/logseq/e2e/rtc_basic_test.clj b/clj-e2e/test/logseq/e2e/rtc_basic_test.clj index bb7d463f70..0ff44db464 100644 --- a/clj-e2e/test/logseq/e2e/rtc_basic_test.clj +++ b/clj-e2e/test/logseq/e2e/rtc_basic_test.clj @@ -27,7 +27,7 @@ (util/login-test-account)) [@*page1 @*page2]) (w/with-page @*page1 - (graph/new-graph graph-name true)) + (graph/new-graph graph-name true false)) (w/with-page @*page2 (graph/wait-for-remote-graph graph-name) (graph/switch-graph graph-name true true))) diff --git a/clj-e2e/test/logseq/e2e/rtc_extra_part2_test.clj b/clj-e2e/test/logseq/e2e/rtc_extra_part2_test.clj index 7b8828e7f1..a11ccc32c1 100644 --- a/clj-e2e/test/logseq/e2e/rtc_extra_part2_test.clj +++ b/clj-e2e/test/logseq/e2e/rtc_extra_part2_test.clj @@ -1,11 +1,14 @@ (ns logseq.e2e.rtc-extra-part2-test (:require [clojure.java.io :as io] + [clojure.string :as string] [clojure.test :refer [deftest testing is use-fixtures run-test]] [jsonista.core :as json] [logseq.e2e.block :as b] [logseq.e2e.const :refer [*page1 *page2 *graph-name*]] + [logseq.e2e.custom-report :as custom-report] [logseq.e2e.fixtures :as fixtures] [logseq.e2e.graph :as graph] + [logseq.e2e.keyboard :as k] [logseq.e2e.page :as page] [logseq.e2e.rtc :as rtc] [logseq.e2e.util :as util] @@ -19,6 +22,326 @@ (use-fixtures :each fixtures/new-logseq-page-in-rtc) +(def ^:private stress-default-rounds 1) +(def ^:private stress-default-ops-per-client 50) +(def ^:private stress-default-seed-blocks 20) +(def ^:private stress-default-seed 20260330) +(def ^:private stress-max-seed-depth 4) +(def ^:private severe-sync-log-patterns + ["db-sync/checksum-mismatch" + "db-sync/tx-rejected" + "db-sync/apply-remote-txs-failed"]) +(def ^:private random-edit-actions + [:new :save :indent-outdent :delete-existing :undo :redo]) + +(defn- env-int + [k default] + (let [raw (System/getenv k)] + (if-not (string/blank? raw) + (try + (Integer/parseInt raw) + (catch Throwable _ + default)) + default))) + +(defn- recent-console-logs + [] + (->> (some-> custom-report/*pw-page->console-logs* deref vals) + (mapcat identity) + vec)) + +(defn- assert-no-severe-sync-errors! + [] + (let [logs (recent-console-logs) + matched (->> logs + (filter (fn [line] + (some #(string/includes? line %) severe-sync-log-patterns))) + vec)] + (is (empty? matched) + (str "found severe sync errors in console logs: " + (pr-str (take-last 20 matched)))))) + +(defn- page-sync-state + [pw-page] + (w/with-page pw-page + (util/exit-edit) + {:rtc-tx (rtc/get-rtc-tx) + :blocks (util/get-page-blocks-contents)})) + +(defn- assert-two-pages-synced! + [] + (let [s1 (page-sync-state @*page1) + s2 (page-sync-state @*page2) + tx1 (:rtc-tx s1) + tx2 (:rtc-tx s2)] + (is (= (:blocks s1) (:blocks s2)) + (str "page blocks diverged: " + (pr-str {:page1-count (count (:blocks s1)) + :page2-count (count (:blocks s2)) + :page1-tail (take-last 8 (:blocks s1)) + :page2-tail (take-last 8 (:blocks s2))}))) + (is (= (:local-tx tx1) (:remote-tx tx1)) + (str "page1 rtc-tx not converged: " (pr-str tx1))) + (is (= (:local-tx tx2) (:remote-tx tx2)) + (str "page2 rtc-tx not converged: " (pr-str tx2))))) + +(defn- try-indent! + [] + (if-let [editor (util/get-editor)] + (let [[x1 _] (util/bounding-xy editor)] + (k/tab) + (if-let [editor' (util/get-editor)] + (let [[x2 _] (util/bounding-xy editor')] + (> x2 x1)) + false)) + false)) + +(defn- try-outdent! + [] + (if-let [editor (util/get-editor)] + (let [[x1 _] (util/bounding-xy editor)] + (k/shift+tab) + (if-let [editor' (util/get-editor)] + (let [[x2 _] (util/bounding-xy editor')] + (> x1 x2)) + false)) + false)) + +(defn- align-depth! + [depth target] + (loop [d depth] + (cond + (< d target) (if (try-indent!) + (recur (inc d)) + d) + (> d target) (if (try-outdent!) + (recur (dec d)) + d) + :else d))) + +(defn- new-block-safe! + [title] + (loop [attempt 4] + (let [created? + (try + (b/new-block title) + true + (catch Throwable _ + false))] + (if created? + true + (if (zero? attempt) + (throw (ex-info "new-block-safe failed" {:title title})) + (do + (util/exit-edit) + (util/wait-timeout 80) + (try + (b/open-last-block) + (catch Throwable _ + nil)) + (util/wait-timeout 80) + (recur (dec attempt)))))))) + +(defn- sync-by-trigger! + ([tag] + (sync-by-trigger! tag nil)) + ([tag checkpoints] + (let [target-tx (some->> checkpoints + vals + (filter integer?) + seq + (apply max))] + ;; Ensure both pages have observed all prior edit/undo-redo txs first. + (when target-tx + (w/with-page @*page1 + (rtc/wait-tx-update-to target-tx)) + (w/with-page @*page2 + (rtc/wait-tx-update-to target-tx))) + (let [{:keys [remote-tx]} + (w/with-page @*page1 + (rtc/with-wait-tx-updated + (new-block-safe! (str "sync-trigger-" tag))))] + (w/with-page @*page1 + (rtc/wait-tx-update-to remote-tx)) + (w/with-page @*page2 + (rtc/wait-tx-update-to remote-tx)))))) + +(defn- seed-long-nested-page! + [seed] + (let [seed-blocks (max 20 (env-int "DB_SYNC_E2E_STRESS_SEED_BLOCKS" stress-default-seed-blocks)) + rng (java.util.Random. (long (+ seed 97)))] + (let [titles + (w/with-page @*page1 + (util/exit-edit) + (loop [i 0 + depth 0 + titles #{}] + (if (< i seed-blocks) + (let [title (format "seed-r%s-%03d" seed i) + target-depth (.nextInt rng (inc stress-max-seed-depth))] + (new-block-safe! title) + (recur (inc i) + (align-depth! depth target-depth) + (conj titles title))) + (do + (util/exit-edit) + titles))))] + (sync-by-trigger! (str "seed-" seed)) + titles))) + +(defn- next-action + [rng] + (nth random-edit-actions + (.nextInt rng (count random-edit-actions)))) + +(defn- delete-existing-random-block! + [rng known-titles] + (loop [attempt 8] + (if (zero? attempt) + 0 + (let [titles (vec @known-titles)] + (if (empty? titles) + 0 + (let [title (nth titles (.nextInt rng (count titles))) + deleted? + (try + (b/jump-to-block title) + (b/delete-blocks) + true + (catch Throwable _ + false))] + (if deleted? + (do + (swap! known-titles disj title) + 1) + (recur (dec attempt))))))))) + +(defn- random-edit-op! + [rng known-titles client-prefix round op-idx] + (let [base (format "%s-r%s-op%s" client-prefix round op-idx)] + (case (next-action rng) + :new + (let [title (str base "-new")] + (new-block-safe! title) + (swap! known-titles conj title) + 1) + + :save + (let [save-title (str base "-save-updated")] + (new-block-safe! (str base "-save")) + (b/save-block save-title) + (swap! known-titles conj save-title) + 2) + + :indent-outdent + (let [title (str base "-nest")] + (new-block-safe! title) + (swap! known-titles conj title) + (+ 1 + (if (try-indent!) 1 0) + (if (try-outdent!) 1 0))) + + :delete-existing + (delete-existing-random-block! rng known-titles) + + :undo + (do + (b/undo) + 0) + + :redo + (do + (b/redo) + 0)))) + +(defn- local-random-edit-batch! + [rng known-titles client-prefix round] + (let [ops (max 1 (env-int "DB_SYNC_E2E_STRESS_OPS_PER_CLIENT" stress-default-ops-per-client))] + (loop [i 0 + undo-steps 0] + (if (< i ops) + (recur (inc i) + (+ undo-steps + (random-edit-op! rng known-titles client-prefix round i))) + (do + (util/exit-edit) + undo-steps))))) + +(defn- local-undo-redo-batch! + [undo-steps] + (let [steps (max 1 undo-steps)] + ;; Undo and redo exactly what this client edited in the current round. + (b/open-last-block) + (dotimes [_ steps] + (b/undo)) + (dotimes [_ steps] + (b/redo)) + (util/exit-edit))) + +(def ^:private stress-client-op-timeout-ms 120000) + +(defn- await-future! + [f label] + (let [result (deref f stress-client-op-timeout-ms ::timeout)] + (when (= result ::timeout) + (throw (ex-info "parallel client op timed out" + {:label label + :timeout-ms stress-client-op-timeout-ms}))) + result)) + +(defn- run-two-clients-in-parallel! + [p1-fn p2-fn] + (let [start-signal (promise) + p1-future (future @start-signal (p1-fn)) + p2-future (future @start-signal (p2-fn))] + (deliver start-signal true) + [(await-future! p1-future :p1-op) + (await-future! p2-future :p2-op)])) + +(deftest online-two-clients-undo-redo-stress-test + (testing "two online RTC clients survive random edits + undo/redo loops on a long nested page" + (let [rounds (max 1 (env-int "DB_SYNC_E2E_STRESS_ROUNDS" stress-default-rounds)) + seed (long (env-int "DB_SYNC_E2E_STRESS_SEED" stress-default-seed)) + p1-rng (java.util.Random. (long (+ seed 101))) + p2-rng (java.util.Random. (long (+ seed 202))) + known-titles (atom (seed-long-nested-page! seed))] + (dotimes [round rounds] + (let [p1-undo-steps (atom 0) + p2-undo-steps (atom 0) + ;; Phase 1: edit batches in parallel with synchronized start. + [_ _] + (run-two-clients-in-parallel! + #(w/with-page @*page1 + (reset! p1-undo-steps + (local-random-edit-batch! p1-rng known-titles "p1" round))) + #(w/with-page @*page2 + (reset! p2-undo-steps + (local-random-edit-batch! p2-rng known-titles "p2" round)))) + p1-edit-remote-tx (w/with-page @*page1 + (-> (rtc/get-rtc-tx) :local-tx)) + p2-edit-remote-tx (w/with-page @*page2 + (-> (rtc/get-rtc-tx) :local-tx)) + ;; Phase 2: undo+redo batches in parallel with synchronized start. + [_ _] + (run-two-clients-in-parallel! + #(w/with-page @*page1 + (local-undo-redo-batch! @p1-undo-steps)) + #(w/with-page @*page2 + (local-undo-redo-batch! @p2-undo-steps))) + p1-undo-remote-tx (w/with-page @*page1 + (-> (rtc/get-rtc-tx) :local-tx)) + p2-undo-remote-tx (w/with-page @*page2 + (-> (rtc/get-rtc-tx) :local-tx))] + + (sync-by-trigger! + round + {:p1-edit p1-edit-remote-tx + :p2-edit p2-edit-remote-tx + :p1-undo p1-undo-remote-tx + :p2-undo p2-undo-remote-tx}) + (assert-two-pages-synced!) + (assert-no-severe-sync-errors!)))))) + ;;; https://github.com/logseq/db-test/issues/651 (deftest issue-651-block-title-double-transit-encoded-test (testing " diff --git a/deps.edn b/deps.edn index b77bf6915c..f23263ae59 100644 --- a/deps.edn +++ b/deps.edn @@ -9,32 +9,32 @@ ;; datascript/datascript {:local/root "../../datascript"} datascript-transit/datascript-transit {:mvn/version "0.3.0"} - borkdude/rewrite-edn {:mvn/version "0.4.9"} + borkdude/rewrite-edn {:mvn/version "0.5.9"} funcool/promesa {:mvn/version "11.0.678"} medley/medley {:mvn/version "1.4.0"} - metosin/reitit-frontend {:mvn/version "0.3.10"} + metosin/reitit-frontend {:mvn/version "0.10.1"} cljs-bean/cljs-bean {:mvn/version "1.9.0"} prismatic/dommy {:mvn/version "1.1.0"} - org.clojure/core.match {:mvn/version "1.0.0"} + org.clojure/core.match {:mvn/version "1.1.0"} com.andrewmcveigh/cljs-time {:git/url "https://github.com/logseq/cljs-time" ;; fork :sha "5704fbf48d3478eedcf24d458c8964b3c2fd59a9"} ;; TODO: delete cljs-drag-n-drop and use dnd-kit cljs-drag-n-drop/cljs-drag-n-drop {:mvn/version "0.1.0"} - cljs-http/cljs-http {:mvn/version "0.1.48"} - org.babashka/sci {:mvn/version "0.3.2"} + cljs-http/cljs-http {:mvn/version "0.1.49"} + org.babashka/sci {:mvn/version "0.12.51"} + org.clj-commons/hickory {:mvn/version "0.7.7"} org.babashka/cli {:mvn/version "0.8.67"} - org.clj-commons/hickory {:mvn/version "0.7.3"} hiccups/hiccups {:mvn/version "0.3.0"} tongue/tongue {:mvn/version "0.4.4"} - org.clojure/core.async {:mvn/version "1.6.673"} + org.clojure/core.async {:mvn/version "1.8.741"} thheller/shadow-cljs {:mvn/version "2.28.23"} - expound/expound {:mvn/version "0.8.6"} + expound/expound {:mvn/version "0.9.0"} com.lambdaisland/glogi {:git/url "https://github.com/lambdaisland/glogi" :git/sha "30328a045141717aadbbb693465aed55f0904976"} camel-snake-kebab/camel-snake-kebab {:mvn/version "0.4.3"} - instaparse/instaparse {:mvn/version "1.4.10"} + instaparse/instaparse {:mvn/version "1.5.0"} org.clojars.mmb90/cljs-cache {:mvn/version "0.1.4"} - fipp/fipp {:mvn/version "0.6.26"} + fipp/fipp {:mvn/version "0.6.29"} logseq/common {:local/root "deps/common"} logseq/graph-parser {:local/root "deps/graph-parser"} logseq/outliner {:local/root "deps/outliner"} @@ -44,11 +44,11 @@ logseq/shui {:local/root "deps/shui"} metosin/malli {:mvn/version "0.16.1"} com.cognitect/transit-cljs {:mvn/version "0.8.280"} - missionary/missionary {:mvn/version "b.46"} + missionary/missionary {:mvn/version "b.47"} io.github.open-spaced-repetition/cljc-fsrs {:git/sha "eeef3520df664e51c3d0ba2031ec2ba071635442" :git/url "https://github.com/open-spaced-repetition/cljc-fsrs"} - tick/tick {:mvn/version "0.7.5"} + tick/tick {:mvn/version "1.0"} io.github.rcmerci/cljs-http-missionary {:git/url "https://github.com/RCmerci/cljs-http-missionary" :git/sha "d61ce7e29186de021a2a453a8cee68efb5a88440"} @@ -56,25 +56,25 @@ :git/sha "6eeb51cd6d80bbffa0873c1e79790dc1f4ff68cf"}} :aliases {:cljs {:extra-paths ["src/dev-cljs/" "src/test/" "src/electron/"] - :extra-deps {org.clojure/tools.namespace {:mvn/version "0.2.11"} - cider/cider-nrepl {:mvn/version "0.55.1"} + :extra-deps {org.clojure/tools.namespace {:mvn/version "1.5.0"} + cider/cider-nrepl {:mvn/version "0.58.0"} org.clojars.knubie/cljs-run-test {:mvn/version "1.0.1"} - tortue/spy {:mvn/version "2.14.0"} - binaryage/devtools {:mvn/version "1.0.5"}} + tortue/spy {:mvn/version "2.15.0"} + binaryage/devtools {:mvn/version "1.0.7"}} :main-opts ["-m" "shadow.cljs.devtools.cli"]} :test {:extra-paths ["src/test/"] :extra-deps {org.clojure/test.check {:mvn/version "1.1.1"} pjstadig/humane-test-output {:mvn/version "0.11.0"} org.clojars.knubie/cljs-run-test {:mvn/version "1.0.1"} - tortue/spy {:mvn/version "2.14.0"} - cider/cider-nrepl {:mvn/version "0.55.1"}} + tortue/spy {:mvn/version "2.15.0"} + cider/cider-nrepl {:mvn/version "0.58.0"}} :main-opts ["-m" "shadow.cljs.devtools.cli"]} :bench {:extra-paths ["src/bench/"] - :extra-deps {olical/cljs-test-runner {:mvn/version "3.8.0"} - fipp/fipp {:mvn/version "0.6.26"}} + :extra-deps {olical/cljs-test-runner {:mvn/version "3.8.1"} + fipp/fipp {:mvn/version "0.6.29"}} :main-opts ["-m" "cljs-test-runner.main" "-d" "src/bench" "-n" "frontend.benchmark-test-runner"]} ;; Use :replace-deps for tools. See https://github.com/clj-kondo/clj-kondo/issues/1536#issuecomment-1013006889 - :clj-kondo {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2024.09.27"}} + :clj-kondo {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.01.19"}} :main-opts ["-m" "clj-kondo.main"]}}} diff --git a/deps/cli/bb.edn b/deps/cli/bb.edn index dfcb6224ea..eeec14e6d9 100644 --- a/deps/cli/bb.edn +++ b/deps/cli/bb.edn @@ -3,10 +3,10 @@ {logseq/bb-tasks #_{:local/root "../../../bb-tasks"} {:git/url "https://github.com/logseq/bb-tasks" - :git/sha "70d3edeb287f5cec7192e642549a401f7d6d4263"}} + :git/sha "acb3d3d5d38c4ac16f617cb10ae6f99fe1b8de6e"}} :pods - {clj-kondo/clj-kondo {:version "2024.09.27"}} + {clj-kondo/clj-kondo {:version "2026.01.19"}} :tasks {build:vendor-nbb-deps diff --git a/deps/cli/deps.edn b/deps/cli/deps.edn index 718516f32c..90af385983 100644 --- a/deps/cli/deps.edn +++ b/deps/cli/deps.edn @@ -3,5 +3,5 @@ {logseq/outliner {:local/root "../outliner"}} :aliases - {:clj-kondo {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2024.09.27"}} + {:clj-kondo {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.01.19"}} :main-opts ["-m" "clj-kondo.main"]}}} diff --git a/deps/cli/package.json b/deps/cli/package.json index 466449f1bb..da4cdf04a4 100644 --- a/deps/cli/package.json +++ b/deps/cli/package.json @@ -11,13 +11,13 @@ "license": "MIT", "dependencies": { "@logseq/nbb-logseq": "github:logseq/nbb-logseq#feat-db-v33", - "@modelcontextprotocol/sdk": "^1.17.5", - "better-sqlite3": "^12.6.2", - "fastify": "5.3.2", - "fs-extra": "^11.3.0", - "jszip": "3.8.0", + "@modelcontextprotocol/sdk": "^1.27.1", + "better-sqlite3": "^12.8.0", + "fastify": "5.8.2", + "fs-extra": "^11.3.4", + "jszip": "3.10.1", "mldoc": "^1.5.9", - "zod": "^4.1.5" + "zod": "^4.3.6" }, "repository": { "type": "git", diff --git a/deps/cli/yarn.lock b/deps/cli/yarn.lock index f5c4b15475..5e84484f12 100644 --- a/deps/cli/yarn.lock +++ b/deps/cli/yarn.lock @@ -2,10 +2,10 @@ # yarn lockfile v1 -"@fastify/ajv-compiler@^4.0.0": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@fastify/ajv-compiler/-/ajv-compiler-4.0.2.tgz#da05938cf852901bfb953738764f553b5449b80b" - integrity sha512-Rkiu/8wIjpsf46Rr+Fitd3HRP+VsxUFDDeag0hs9L0ksfnwx2g7SPQQTFL0E8Qv+rfXzQOxBJnjUB9ITUDjfWQ== +"@fastify/ajv-compiler@^4.0.5": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@fastify/ajv-compiler/-/ajv-compiler-4.0.5.tgz#fdb0887a7af51abaae8c1829e8099d34f8ddd302" + integrity sha512-KoWKW+MhvfTRWL4qrhUwAAZoaChluo0m0vbiJlGMt2GXvL4LVPQEjt8kSpHI3IBq5Rez8fg+XeH3cneztq+C7A== dependencies: ajv "^8.12.0" ajv-formats "^3.0.1" @@ -43,29 +43,44 @@ "@fastify/forwarded" "^3.0.0" ipaddr.js "^2.1.0" +"@hono/node-server@^1.19.9": + version "1.19.11" + resolved "https://registry.yarnpkg.com/@hono/node-server/-/node-server-1.19.11.tgz#dc419f0826dd2504e9fc86ad289d5636a0444e2f" + integrity sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g== + "@logseq/nbb-logseq@github:logseq/nbb-logseq#feat-db-v33": version "1.2.173-feat-db-v33" resolved "https://codeload.github.com/logseq/nbb-logseq/tar.gz/cfe10d5ad2c3960ce9fd6540dc2f490080c81897" dependencies: import-meta-resolve "^4.1.0" -"@modelcontextprotocol/sdk@^1.17.5": - version "1.17.5" - resolved "https://registry.yarnpkg.com/@modelcontextprotocol/sdk/-/sdk-1.17.5.tgz#7eab1c9249532b16b7e181d9af0aec5f696c1a55" - integrity sha512-QakrKIGniGuRVfWBdMsDea/dx1PNE739QJ7gCM41s9q+qaCYTHCdsIBXQVVXry3mfWAiaM9kT22Hyz53Uw8mfg== +"@modelcontextprotocol/sdk@^1.27.1": + version "1.27.1" + resolved "https://registry.yarnpkg.com/@modelcontextprotocol/sdk/-/sdk-1.27.1.tgz#a602cf823bf8a68e13e7112f50aeb02b09fb83b9" + integrity sha512-sr6GbP+4edBwFndLbM60gf07z0FQ79gaExpnsjMGePXqFcSSb7t6iscpjk9DhFhwd+mTEQrzNafGP8/iGGFYaA== dependencies: - ajv "^6.12.6" + "@hono/node-server" "^1.19.9" + ajv "^8.17.1" + ajv-formats "^3.0.1" content-type "^1.0.5" cors "^2.8.5" cross-spawn "^7.0.5" eventsource "^3.0.2" eventsource-parser "^3.0.0" - express "^5.0.1" - express-rate-limit "^7.5.0" + express "^5.2.1" + express-rate-limit "^8.2.1" + hono "^4.11.4" + jose "^6.1.3" + json-schema-typed "^8.0.2" pkce-challenge "^5.0.0" raw-body "^3.0.0" - zod "^3.23.8" - zod-to-json-schema "^3.24.1" + zod "^3.25 || ^4.0" + zod-to-json-schema "^3.25.1" + +"@pinojs/redact@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@pinojs/redact/-/redact-0.4.0.tgz#c3de060dd12640dcc838516aa2a6803cc7b2e9d6" + integrity sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg== abstract-logging@^2.0.1: version "2.0.1" @@ -87,16 +102,6 @@ ajv-formats@^3.0.1: dependencies: ajv "^8.0.0" -ajv@^6.12.6: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - ajv@^8.0.0, ajv@^8.12.0: version "8.17.1" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" @@ -107,6 +112,16 @@ ajv@^8.0.0, ajv@^8.12.0: json-schema-traverse "^1.0.0" require-from-string "^2.0.2" +ajv@^8.17.1: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.18.0.tgz#8864186b6738d003eb3a933172bb3833e10cefbc" + integrity sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -135,10 +150,10 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -better-sqlite3@^12.6.2: - version "12.6.2" - resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-12.6.2.tgz#770649f28a62e543a360f3dfa1afe4cc944b1937" - integrity sha512-8VYKM3MjCa9WcaSAI3hzwhmyHVlH8tiGFwf0RlTsZPWJ1I5MkzjiudCo4KC4DxOaL/53A5B1sI/IbldNFDbsKA== +better-sqlite3@^12.8.0: + version "12.8.0" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-12.8.0.tgz#ec9ccd4a426a35f3b9355c147af6c92a6ddd6862" + integrity sha512-RxD2Vd96sQDjQr20kdP+F+dK/1OUNiVOl200vKBZY8u0vTwysfolF6Hq+3ZK2+h8My9YvZhHsF+RSGZW2VYrPQ== dependencies: bindings "^1.5.0" prebuild-install "^7.1.1" @@ -159,20 +174,20 @@ bl@^4.0.3: inherits "^2.0.4" readable-stream "^3.4.0" -body-parser@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-2.2.0.tgz#f7a9656de305249a715b549b7b8fd1ab9dfddcfa" - integrity sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg== +body-parser@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-2.2.2.tgz#1a32cdb966beaf68de50a9dfbe5b58f83cb8890c" + integrity sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA== dependencies: bytes "^3.1.2" content-type "^1.0.5" - debug "^4.4.0" + debug "^4.4.3" http-errors "^2.0.0" - iconv-lite "^0.6.3" + iconv-lite "^0.7.0" on-finished "^2.4.1" - qs "^6.14.0" - raw-body "^3.0.0" - type-is "^2.0.0" + qs "^6.14.1" + raw-body "^3.0.1" + type-is "^2.0.1" buffer@^5.5.0: version "5.7.1" @@ -182,7 +197,7 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" -bytes@3.1.2, bytes@^3.1.2: +bytes@3.1.2, bytes@^3.1.2, bytes@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== @@ -294,6 +309,13 @@ debug@^4.3.5, debug@^4.4.0: dependencies: ms "^2.1.3" +debug@^4.4.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -311,7 +333,7 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -depd@2.0.0, depd@^2.0.0: +depd@2.0.0, depd@^2.0.0, depd@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== @@ -409,23 +431,26 @@ expand-template@^2.0.3: resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== -express-rate-limit@^7.5.0: - version "7.5.1" - resolved "https://registry.yarnpkg.com/express-rate-limit/-/express-rate-limit-7.5.1.tgz#8c3a42f69209a3a1c969890070ece9e20a879dec" - integrity sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw== +express-rate-limit@^8.2.1: + version "8.3.1" + resolved "https://registry.yarnpkg.com/express-rate-limit/-/express-rate-limit-8.3.1.tgz#0aaba098eadd40f6737f30a98e6b16fa1a29edfb" + integrity sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw== + dependencies: + ip-address "10.1.0" -express@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/express/-/express-5.1.0.tgz#d31beaf715a0016f0d53f47d3b4d7acf28c75cc9" - integrity sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA== +express@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/express/-/express-5.2.1.tgz#8f21d15b6d327f92b4794ecf8cb08a72f956ac04" + integrity sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw== dependencies: accepts "^2.0.0" - body-parser "^2.2.0" + body-parser "^2.2.1" content-disposition "^1.0.0" content-type "^1.0.5" cookie "^0.7.1" cookie-signature "^1.2.1" debug "^4.4.0" + depd "^2.0.0" encodeurl "^2.0.0" escape-html "^1.0.3" etag "^1.8.1" @@ -452,16 +477,11 @@ fast-decode-uri-component@^1.0.1: resolved "https://registry.yarnpkg.com/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz#46f8b6c22b30ff7a81357d4f59abfae938202543" integrity sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg== -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: +fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - fast-json-stringify@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/fast-json-stringify/-/fast-json-stringify-6.0.1.tgz#82f1cb45fa96d0ca24b601f1738066976d6e2430" @@ -481,22 +501,17 @@ fast-querystring@^1.0.0: dependencies: fast-decode-uri-component "^1.0.1" -fast-redact@^3.1.1: - version "3.5.0" - resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.5.0.tgz#e9ea02f7e57d0cd8438180083e93077e496285e4" - integrity sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A== - fast-uri@^3.0.0, fast-uri@^3.0.1: version "3.1.0" resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.0.tgz#66eecff6c764c0df9b762e62ca7edcfb53b4edfa" integrity sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA== -fastify@5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/fastify/-/fastify-5.3.2.tgz#88c895a30c0f67166979077ac8649fe8b205a1b3" - integrity sha512-AIPqBgtqBAwkOkrnwesEE+dOyU30dQ4kh7udxeGVR05CRGwubZx+p2H8P0C4cRnQT0+EPK4VGea2DTL2RtWttg== +fastify@5.8.2: + version "5.8.2" + resolved "https://registry.yarnpkg.com/fastify/-/fastify-5.8.2.tgz#c0e4209a2abe69b54789505b6b47133769cef89c" + integrity sha512-lZmt3navvZG915IE+f7/TIVamxIwmBd+OMB+O9WBzcpIwOo6F0LTh0sluoMFk5VkrKTvvrwIaoJPkir4Z+jtAg== dependencies: - "@fastify/ajv-compiler" "^4.0.0" + "@fastify/ajv-compiler" "^4.0.5" "@fastify/error" "^4.0.0" "@fastify/fast-json-stringify-compiler" "^5.0.0" "@fastify/proxy-addr" "^5.0.0" @@ -505,7 +520,7 @@ fastify@5.3.2: fast-json-stringify "^6.0.0" find-my-way "^9.0.0" light-my-request "^6.0.0" - pino "^9.0.0" + pino "^9.14.0 || ^10.1.0" process-warning "^5.0.0" rfdc "^1.3.1" secure-json-parse "^4.0.0" @@ -567,10 +582,10 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@^11.3.0: - version "11.3.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d" - integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== +fs-extra@^11.3.4: + version "11.3.4" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.4.tgz#ab6934eca8bcf6f7f6b82742e33591f86301d6fc" + integrity sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -644,6 +659,11 @@ hasown@^2.0.2: dependencies: function-bind "^1.1.2" +hono@^4.11.4: + version "4.12.8" + resolved "https://registry.yarnpkg.com/hono/-/hono-4.12.8.tgz#5f3a9c0d5339ff460b2c652a4c64dd79059930ad" + integrity sha512-VJCEvtrezO1IAR+kqEYnxUOoStaQPGrCmX3j4wDTNOcD1uRPFpGlwQUIW8niPuvHXaTUxeOUl5MMDGrl+tmO9A== + http-errors@2.0.0, http-errors@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" @@ -655,6 +675,17 @@ http-errors@2.0.0, http-errors@^2.0.0: statuses "2.0.1" toidentifier "1.0.1" +http-errors@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" + integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== + dependencies: + depd "~2.0.0" + inherits "~2.0.4" + setprototypeof "~1.2.0" + statuses "~2.0.2" + toidentifier "~1.0.1" + iconv-lite@0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.7.0.tgz#c50cd80e6746ca8115eb98743afa81aa0e147a3e" @@ -662,10 +693,10 @@ iconv-lite@0.7.0: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -iconv-lite@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== +iconv-lite@^0.7.0, iconv-lite@~0.7.0: + version "0.7.2" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.7.2.tgz#d0bdeac3f12b4835b7359c2ad89c422a4d1cc72e" + integrity sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" @@ -684,7 +715,7 @@ import-meta-resolve@^4.1.0: resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz#f9db8bead9fafa61adb811db77a2bf22c5399706" integrity sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw== -inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -699,6 +730,11 @@ invert-kv@^2.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== +ip-address@10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-10.1.0.tgz#d8dcffb34d0e02eb241427444a6e23f5b0595aa4" + integrity sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q== + ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" @@ -741,6 +777,11 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +jose@^6.1.3: + version "6.2.1" + resolved "https://registry.yarnpkg.com/jose/-/jose-6.2.1.tgz#7a6b1de83816deaee9055a558e1278a7b2b9ea1b" + integrity sha512-jUaKr1yrbfaImV7R2TN/b3IcZzsw38/chqMpo2XJ7i2F8AfM/lA4G1goC3JVEwg0H7UldTmSt3P68nt31W7/mw== + json-schema-ref-resolver@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/json-schema-ref-resolver/-/json-schema-ref-resolver-2.0.1.tgz#c92f16b452df069daac53e1984159e0f9af0598d" @@ -748,16 +789,16 @@ json-schema-ref-resolver@^2.0.0: dependencies: dequal "^2.0.3" -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - json-schema-traverse@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== +json-schema-typed@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/json-schema-typed/-/json-schema-typed-8.0.2.tgz#e98ee7b1899ff4a184534d1f167c288c66bbeff4" + integrity sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA== + jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" @@ -767,15 +808,15 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jszip@3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.8.0.tgz#a2ac3c33fe96a76489765168213655850254d51b" - integrity sha512-cnpQrXvFSLdsR9KR5/x7zdf6c3m8IhZfZzSblFEHSqBaVwD2nvJ4CuCKLyvKvwBgZm08CgfSoiTBQLm5WW9hGw== +jszip@3.10.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" + integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== dependencies: lie "~3.3.0" pako "~1.0.2" readable-stream "~2.3.6" - set-immediate-shim "~1.0.1" + setimmediate "^1.0.5" lcid@^2.0.0: version "2.0.0" @@ -1019,10 +1060,10 @@ path-to-regexp@^8.0.0: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.3.0.tgz#aa818a6981f99321003a08987d3cec9c3474cd1f" integrity sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA== -pino-abstract-transport@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz#de241578406ac7b8a33ce0d77ae6e8a0b3b68a60" - integrity sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw== +pino-abstract-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz#b21e5f33a297e8c4c915c62b3ce5dd4a87a52c23" + integrity sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg== dependencies: split2 "^4.0.0" @@ -1031,22 +1072,22 @@ pino-std-serializers@^7.0.0: resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz#7c625038b13718dbbd84ab446bd673dc52259e3b" integrity sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA== -pino@^9.0.0: - version "9.9.5" - resolved "https://registry.yarnpkg.com/pino/-/pino-9.9.5.tgz#f06a5a0b4c715e34606290070dbb938c27eddd8b" - integrity sha512-d1s98p8/4TfYhsJ09r/Azt30aYELRi6NNnZtEbqFw6BoGsdPVf5lKNK3kUwH8BmJJfpTLNuicjUQjaMbd93dVg== +"pino@^9.14.0 || ^10.1.0": + version "10.3.1" + resolved "https://registry.yarnpkg.com/pino/-/pino-10.3.1.tgz#6552c8f8d8481844c9e452e7bf0be90bff1939ce" + integrity sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg== dependencies: + "@pinojs/redact" "^0.4.0" atomic-sleep "^1.0.0" - fast-redact "^3.1.1" on-exit-leak-free "^2.1.0" - pino-abstract-transport "^2.0.0" + pino-abstract-transport "^3.0.0" pino-std-serializers "^7.0.0" process-warning "^5.0.0" quick-format-unescaped "^4.0.3" real-require "^0.2.0" safe-stable-stringify "^2.3.1" sonic-boom "^4.0.1" - thread-stream "^3.0.0" + thread-stream "^4.0.0" pkce-challenge@^5.0.0: version "5.0.0" @@ -1102,11 +1143,6 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - qs@^6.14.0: version "6.14.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" @@ -1114,6 +1150,13 @@ qs@^6.14.0: dependencies: side-channel "^1.1.0" +qs@^6.14.1: + version "6.15.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.15.0.tgz#db8fd5d1b1d2d6b5b33adaf87429805f1909e7b3" + integrity sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ== + dependencies: + side-channel "^1.1.0" + quick-format-unescaped@^4.0.3: version "4.0.4" resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" @@ -1134,6 +1177,16 @@ raw-body@^3.0.0: iconv-lite "0.7.0" unpipe "1.0.0" +raw-body@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-3.0.2.tgz#3e3ada5ae5568f9095d84376fd3a49b8fb000a51" + integrity sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA== + dependencies: + bytes "~3.1.2" + http-errors "~2.0.1" + iconv-lite "~0.7.0" + unpipe "~1.0.0" + rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -1291,12 +1344,12 @@ set-cookie-parser@^2.6.0: resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz#3016f150072202dfbe90fadee053573cc89d2943" integrity sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ== -set-immediate-shim@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - integrity sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ== +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== -setprototypeof@1.2.0: +setprototypeof@1.2.0, setprototypeof@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== @@ -1401,7 +1454,7 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -statuses@^2.0.1: +statuses@^2.0.1, statuses@~2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== @@ -1482,10 +1535,10 @@ tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" -thread-stream@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-3.1.0.tgz#4b2ef252a7c215064507d4ef70c05a5e2d34c4f1" - integrity sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A== +thread-stream@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-4.0.0.tgz#732f007c24da7084f729d6e3a7e3f5934a7380b7" + integrity sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA== dependencies: real-require "^0.2.0" @@ -1494,7 +1547,7 @@ toad-cache@^3.7.0: resolved "https://registry.yarnpkg.com/toad-cache/-/toad-cache-3.7.0.tgz#b9b63304ea7c45ec34d91f1d2fa513517025c441" integrity sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw== -toidentifier@1.0.1: +toidentifier@1.0.1, toidentifier@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== @@ -1506,7 +1559,7 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" -type-is@^2.0.0, type-is@^2.0.1: +type-is@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/type-is/-/type-is-2.0.1.tgz#64f6cf03f92fce4015c2b224793f6bdd4b068c97" integrity sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw== @@ -1520,18 +1573,11 @@ universalify@^2.0.0: 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, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -1605,17 +1651,12 @@ yargs@^12.0.2: y18n "^3.2.1 || ^4.0.0" yargs-parser "^11.1.1" -zod-to-json-schema@^3.24.1: - version "3.24.6" - resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz#5920f020c4d2647edfbb954fa036082b92c9e12d" - integrity sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg== +zod-to-json-schema@^3.25.1: + version "3.25.1" + resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz#7f24962101a439ddade2bf1aeab3c3bfec7d84ba" + integrity sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA== -zod@^3.23.8: - version "3.25.76" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.76.tgz#26841c3f6fd22a6a2760e7ccb719179768471e34" - integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ== - -zod@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/zod/-/zod-4.1.5.tgz#7a21fc3178928ede50a28f7d0db4414c4cdb0161" - integrity sha512-rcUUZqlLJgBC33IT3PNMgsCq6TzLQEG/Ei/KTCU0PedSWRMAXoOUN+4t/0H+Q8bdnLPdqUYnvboJT0bn/229qg== +"zod@^3.25 || ^4.0", zod@^4.3.6: + version "4.3.6" + resolved "https://registry.yarnpkg.com/zod/-/zod-4.3.6.tgz#89c56e0aa7d2b05107d894412227087885ab112a" + integrity sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg== diff --git a/deps/common/bb.edn b/deps/common/bb.edn index b9d958d75c..96a0f0d5e6 100644 --- a/deps/common/bb.edn +++ b/deps/common/bb.edn @@ -3,10 +3,10 @@ {logseq/bb-tasks #_{:local/root "../../../bb-tasks"} {:git/url "https://github.com/logseq/bb-tasks" - :git/sha "70d3edeb287f5cec7192e642549a401f7d6d4263"}} + :git/sha "acb3d3d5d38c4ac16f617cb10ae6f99fe1b8de6e"}} :pods - {clj-kondo/clj-kondo {:version "2024.09.27"}} + {clj-kondo/clj-kondo {:version "2026.01.19"}} :tasks {test:load-all-namespaces-with-nbb diff --git a/deps/common/deps.edn b/deps/common/deps.edn index c411a0d0b5..cda2b5a658 100644 --- a/deps/common/deps.edn +++ b/deps/common/deps.edn @@ -4,9 +4,9 @@ funcool/promesa {:mvn/version "11.0.678"}} :aliases {:test {:extra-paths ["test"] - :extra-deps {olical/cljs-test-runner {:mvn/version "3.8.0"} + :extra-deps {olical/cljs-test-runner {:mvn/version "3.8.1"} org.clojure/clojurescript {:mvn/version "1.11.132"}} :main-opts ["-m" "cljs-test-runner.main"]} :clj-kondo - {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2024.09.27"}} + {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.01.19"}} :main-opts ["-m" "clj-kondo.main"]}}} diff --git a/deps/common/src/logseq/common/config.cljs b/deps/common/src/logseq/common/config.cljs index 126cd38499..adb40695ba 100644 --- a/deps/common/src/logseq/common/config.cljs +++ b/deps/common/src/logseq/common/config.cljs @@ -60,6 +60,7 @@ (defonce views-page-name "$$$views") (defonce library-page-name "Library") (defonce quick-add-page-name "Quick add") +(defonce recycle-page-name "Recycle") (defn local-relative-asset? [s] diff --git a/deps/db-sync/.carve/ignore b/deps/db-sync/.carve/ignore index abb5a83564..85db3a37a8 100644 --- a/deps/db-sync/.carve/ignore +++ b/deps/db-sync/.carve/ignore @@ -16,11 +16,14 @@ logseq.db-sync.protocol/datoms->wire logseq.db-sync.protocol/datoms->wire ;; debugging logseq.db-sync.sentry.node/capture-exception! -;; Used? +;; API logseq.db-sync.snapshot/framed-length +logseq.db-sync.snapshot/finalize-datoms-jsonl-buffer ;; API logseq.db-sync.worker/worker ;; debugging logseq.db-sync.worker.timing/summary ;; API -logseq.db-sync.snapshot/finalize-datoms-jsonl-buffer \ No newline at end of file +logseq.db-sync.snapshot/finalize-datoms-jsonl-buffer +;; API +logseq.db-sync.checksum/recompute-checksum-diagnostics diff --git a/deps/db-sync/README.md b/deps/db-sync/README.md index 7d6cde641e..eb38ddb104 100644 --- a/deps/db-sync/README.md +++ b/deps/db-sync/README.md @@ -33,6 +33,54 @@ wrangler d1 migrations apply logseq-sync-graphs-prod --env prod For local development, run `wrangler d1 migrations apply DB --local`. +### Production Graph Lookup + +Show the graphs available to a production user by `username` or `user id`: + +```bash +cd deps/db-sync +yarn show-graphs-for-user --username alice +yarn show-graphs-for-user --user-id us-east-1:example-user-id +``` + +The script uses `worker/wrangler.toml`, runs against the remote D1 binding `DB`, +defaults to `--env prod`, and prints JSON when `--json` is added. + +Download a graph snapshot into a local sqlite debug file matching local graph DB schema (`kvs` table only): + +```bash +cd deps/db-sync +yarn download-graph-db --graph-id 6f2d7f6f-xxxx-xxxx-xxxx-xxxxxxxxxxxx --admin-token +``` + +You can also pass `--admin-token ` or set `DB_SYNC_ADMIN_TOKEN`. The output defaults to +`tmp/graph-.snapshot.sqlite` and can be changed with `--output`. + +Delete the graphs owned by a production user after an explicit confirmation: + +```bash +cd deps/db-sync +yarn delete-graphs-for-user --username alice +yarn delete-graphs-for-user --user-id us-east-1:example-user-id +``` + +The delete script shows the owned graphs first and requires typing `DELETE` +before it calls the worker delete endpoint for each graph. Set +`DB_SYNC_BASE_URL` and `DB_SYNC_ADMIN_TOKEN` or pass `--base-url` and +`--admin-token` when running it. + +Delete a user completely (owned graphs, memberships, keys, and user row): + +```bash +cd deps/db-sync +yarn delete-user-totally --username alice +yarn delete-user-totally --user-id us-east-1:example-user-id +``` + +The script prints all linked graphs first, deletes owned graphs through the +admin graph delete endpoint, then removes the user's remaining D1 references. +It requires typing `DELETE` as confirmation. + ### Node.js Adapter (self-hosted) Build the adapter: @@ -67,6 +115,7 @@ npm run test:node-adapter | --- | --- | | DB_SYNC_PORT | HTTP server port | | DB_SYNC_BASE_URL | External base URL for asset links | +| DB_SYNC_ADMIN_TOKEN | Admin-only token for operator graph deletion endpoints | | DB_SYNC_DATA_DIR | Data directory for sqlite + assets | | DB_SYNC_STORAGE_DRIVER | Storage backend selection (sqlite) | | DB_SYNC_ASSETS_DRIVER | Assets backend selection (filesystem) | diff --git a/deps/db-sync/bb.edn b/deps/db-sync/bb.edn index a8e1b7e045..4a11fb5570 100644 --- a/deps/db-sync/bb.edn +++ b/deps/db-sync/bb.edn @@ -3,10 +3,10 @@ {logseq/bb-tasks #_{:local/root "../../../bb-tasks"} {:git/url "https://github.com/logseq/bb-tasks" - :git/sha "70d3edeb287f5cec7192e642549a401f7d6d4263"}} + :git/sha "acb3d3d5d38c4ac16f617cb10ae6f99fe1b8de6e"}} :pods - {clj-kondo/clj-kondo {:version "2024.09.27"}} + {clj-kondo/clj-kondo {:version "2026.01.19"}} :tasks {lint:large-vars diff --git a/deps/db-sync/deps.edn b/deps/db-sync/deps.edn index 14f589bac9..4798d10ecb 100644 --- a/deps/db-sync/deps.edn +++ b/deps/db-sync/deps.edn @@ -10,15 +10,15 @@ thheller/shadow-cljs {:mvn/version "3.3.4"} com.lambdaisland/glogi {:git/url "https://github.com/lambdaisland/glogi" :git/sha "30328a045141717aadbbb693465aed55f0904976"} - metosin/reitit {:mvn/version "0.4.2"} + metosin/reitit {:mvn/version "0.10.1"} logseq/common {:local/root "../common"} logseq/db {:local/root "../db"}} :aliases - {:cljs {:extra-deps {org.clojure/tools.namespace {:mvn/version "0.2.11"} - cider/cider-nrepl {:mvn/version "0.55.1"} + {:cljs {:extra-deps {org.clojure/tools.namespace {:mvn/version "1.5.0"} + cider/cider-nrepl {:mvn/version "0.58.0"} org.clojars.knubie/cljs-run-test {:mvn/version "1.0.1"} - tortue/spy {:mvn/version "2.14.0"}} + tortue/spy {:mvn/version "2.15.0"}} :main-opts ["-m" "shadow.cljs.devtools.cli"]} :clj-kondo - {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2024.09.27"}} + {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.01.19"}} :main-opts ["-m" "clj-kondo.main"]}}} diff --git a/deps/db-sync/package.json b/deps/db-sync/package.json index 883a6c7665..4c7d8e3095 100644 --- a/deps/db-sync/package.json +++ b/deps/db-sync/package.json @@ -6,6 +6,10 @@ "dev": "cd ./worker && npx wrangler dev", "watch": "clojure -M:cljs watch db-sync", "release": "clojure -M:cljs release db-sync", + "delete-graphs-for-user": "node worker/scripts/delete_graphs_for_user.js", + "delete-user-totally": "node worker/scripts/delete_user_totally.js", + "download-graph-db": "node worker/scripts/download_graph_db.js", + "show-graphs-for-user": "node worker/scripts/show_graphs_for_user.js", "build:node-adapter": "clojure -M:cljs release db-sync-node", "dev:node-adapter": "clojure -M:cljs watch db-sync-node", "start:node-adapter": "node worker/dist/node-adapter.js", @@ -20,13 +24,13 @@ "deploy-staging": "export SENTRY_RELEASE=$(git rev-parse HEAD) && yarn clean && yarn release && yarn sentry:sourcemaps && cd ./worker && wrangler deploy --env staging" }, "dependencies": { - "@sentry/cloudflare": "^10.38.0", - "@sentry/node": "^10.38.0", - "better-sqlite3": "^12.6.2", + "@sentry/cloudflare": "^10.45.0", + "@sentry/node": "^10.45.0", + "better-sqlite3": "^12.8.0", "shadow-cljs": "^3.3.4", - "ws": "^8.18.3" + "ws": "^8.19.0" }, "devDependencies": { - "@sentry/cli": "^3.1.0" + "@sentry/cli": "^3.3.3" } } diff --git a/deps/db-sync/src/logseq/db_sync/checksum.cljs b/deps/db-sync/src/logseq/db_sync/checksum.cljs new file mode 100644 index 0000000000..4d9a073e67 --- /dev/null +++ b/deps/db-sync/src/logseq/db_sync/checksum.cljs @@ -0,0 +1,207 @@ +(ns logseq.db-sync.checksum + (:require [datascript.core :as d] + [logseq.db :as ldb])) + +(def ^:private fnv-offset 2166136261) +(def ^:private djb-offset 5381) +(def ^:private field-separator 31) + +(defn- fnv-step + [h code] + (bit-or (js/Math.imul (bit-xor h code) 16777619) 0)) + +(defn- djb-step + [h code] + (bit-or (+ (js/Math.imul h 33) code) 0)) + +(defn- add-step + [acc value] + (bit-or (+ acc value) 0)) + +(defn- sub-step + [acc value] + (bit-or (- acc value) 0)) + +(defn- hash-code + [[fnv djb] code] + [(fnv-step fnv code) + (djb-step djb code)]) + +(defn- digest-string + [state value] + (let [value (or value "")] + (loop [idx 0 + state state] + (if (< idx (count value)) + (recur (inc idx) + (hash-code state (.charCodeAt value idx))) + state)))) + +(defn- unsigned-hex + [n] + (-> (unsigned-bit-shift-right n 0) + (.toString 16) + (.padStart 8 "0"))) + +(defn- parse-hex32 + [s] + (when (= 8 (count s)) + (bit-or (js/parseInt s 16) 0))) + +(defn- checksum->state + [checksum] + (if (and (string? checksum) (= 16 (count checksum))) + [(or (parse-hex32 (subs checksum 0 8)) 0) + (or (parse-hex32 (subs checksum 8 16)) 0)] + [0 0])) + +(defn- valid-checksum? + [checksum] + (boolean + (and (string? checksum) + (re-matches #"[0-9a-fA-F]{16}" checksum)))) + +(defn- state->checksum + [[fnv djb]] + (str (unsigned-hex fnv) + (unsigned-hex djb))) + +(defn- relevant-attrs + [e2ee?] + (cond-> #{:block/uuid :block/parent :block/page} + (not e2ee?) (into #{:block/title :block/name}))) + +(defn- get-block-uuid + [db eid] + (:block/uuid (d/entity db eid))) + +(def ^:private checksum-ref-attrs + [:block/parent :block/page]) + +(defn- dependent-eids + [db eids] + (->> eids + (mapcat (fn [eid] + (mapcat (fn [attr] + (map :e (d/datoms db :avet attr eid))) + checksum-ref-attrs))) + (filter number?) + distinct)) + +(defn- entity-values + [db eid e2ee?] + (let [attrs (relevant-attrs e2ee?) + datoms (d/datoms db :eavt eid)] + (reduce (fn [acc datom] + (let [attr (:a datom)] + (if (contains? attrs attr) + (case attr + :block/uuid (assoc acc :block/uuid (:v datom)) + :block/title (assoc acc :block/title (:v datom)) + :block/name (assoc acc :block/name (:v datom)) + :block/parent (assoc acc :block/parent (get-block-uuid db (:v datom))) + :block/page (assoc acc :block/page (get-block-uuid db (:v datom))) + acc) + acc))) + {} + datoms))) + +(defn- entity-digest + [db eid e2ee?] + (let [{:keys [block/uuid block/title block/name block/parent block/page]} (entity-values db eid e2ee?)] + (when uuid + (cond-> [fnv-offset djb-offset] + true (digest-string (str uuid)) + true (hash-code field-separator) + (not e2ee?) (digest-string title) + (not e2ee?) (hash-code field-separator) + (not e2ee?) (digest-string name) + (not e2ee?) (hash-code field-separator) + true (digest-string (some-> parent :block/uuid str)) + true (hash-code field-separator) + true (digest-string (some-> page :block/uuid str)))))) + +(defn recompute-checksum + [db] + (let [e2ee? (ldb/get-graph-rtc-e2ee? db) + attrs (relevant-attrs e2ee?) + eids (->> (d/datoms db :eavt) + (keep (fn [datom] + (when (contains? attrs (:a datom)) + (:e datom)))) + distinct)] + (->> eids + (reduce (fn [[sum-fnv sum-djb] eid] + (if-let [[fnv djb] (entity-digest db eid e2ee?)] + [(add-step sum-fnv fnv) + (add-step sum-djb djb)] + [sum-fnv sum-djb])) + [0 0]) + state->checksum))) + +(defn recompute-checksum-diagnostics + [db] + (let [e2ee? (boolean (ldb/get-graph-rtc-e2ee? db)) + attrs (relevant-attrs e2ee?) + eids (->> (d/datoms db :eavt) + (keep (fn [datom] + (when (contains? attrs (:a datom)) + (:e datom)))) + distinct) + blocks (->> eids + (keep (fn [eid] + (let [{:keys [block/uuid block/title block/name block/parent block/page]} (entity-values db eid e2ee?)] + (when uuid + (cond-> {:block/uuid uuid + :block/parent parent + :block/page page} + (not e2ee?) (assoc :block/title title + :block/name name)))))) + (sort-by (comp str :block/uuid)) + vec)] + {:checksum (recompute-checksum db) + :e2ee? e2ee? + :attrs (->> attrs (sort-by str) vec) + :blocks blocks})) + +(defn update-checksum + [checksum {:keys [db-before db-after tx-data]}] + (let [before-e2ee? (ldb/get-graph-rtc-e2ee? db-before) + after-e2ee? (ldb/get-graph-rtc-e2ee? db-after)] + (if (not= before-e2ee? after-e2ee?) + ;; E2EE mode changes the global digest semantics, so incremental deltas are invalid. + (recompute-checksum db-after) + (let [direct-eids (->> tx-data + (remove (fn [d] + (contains? #{:block/tx-id} (:a d)))) + (keep (fn [d] + (let [e (:e d)] + (when (number? e) e)))) + distinct) + affected-eids (->> (concat direct-eids + (dependent-eids db-before direct-eids) + (dependent-eids db-after direct-eids)) + distinct) + changed-uuids (->> affected-eids + (mapcat (fn [eid] + [(:block/uuid (d/entity db-before eid)) + (:block/uuid (d/entity db-after eid))])) + (remove nil?) + distinct) + initial-state (if (valid-checksum? checksum) + (checksum->state checksum) + (checksum->state (recompute-checksum db-before)))] + (->> changed-uuids + (reduce (fn [[sum-fnv sum-djb] uuid] + (let [old-digest (when-let [eid (:db/id (d/entity db-before [:block/uuid uuid]))] + (entity-digest db-before eid after-e2ee?)) + new-digest (when-let [eid (:db/id (d/entity db-after [:block/uuid uuid]))] + (entity-digest db-after eid after-e2ee?))] + [(cond-> sum-fnv + old-digest (sub-step (first old-digest)) + new-digest (add-step (first new-digest))) + (cond-> sum-djb + old-digest (sub-step (second old-digest)) + new-digest (add-step (second new-digest)))])) + initial-state) + state->checksum))))) diff --git a/deps/db-sync/src/logseq/db_sync/index.cljs b/deps/db-sync/src/logseq/db_sync/index.cljs index 0a0edb5775..21d342e3b7 100644 --- a/deps/db-sync/src/logseq/db_sync/index.cljs +++ b/deps/db-sync/src/logseq/db_sync/index.cljs @@ -224,10 +224,13 @@ (common/now-ms) graph-id))) -(defn (or (ex-message error) (some-> error .-message) (str error)) + string/lower-case)] + (and (string/includes? message "duplicate column") + (string/includes? message (string/lower-case column-name))))) + +(defn- ensure-tx-log-outliner-op-column! + [sql] + (try + (common/sql-exec sql tx-log-outliner-op-migration-sql) + (catch :default error + (when-not (duplicate-column-error? error "outliner_op") + (throw error))))) + ;; TODO: GC kvs table (defn init-schema! [sql] @@ -17,6 +37,7 @@ "tx TEXT not null," "created_at INTEGER" ");")) + (ensure-tx-log-outliner-op-column! sql) (common/sql-exec sql (str "create table if not exists sync_meta (" "key TEXT primary key," @@ -37,6 +58,12 @@ (name k) (str v))) +(defn get-checksum [sql] + (get-meta sql :checksum)) + +(defn set-checksum! [sql checksum] + (set-meta! sql :checksum checksum)) + (defn get-t [sql] (let [value (get-meta sql :t)] (if (string? value) @@ -51,22 +78,34 @@ (set-t! sql t) t)) -(defn append-tx! [sql t tx-str created-at] +(defn- outliner-op->sql [outliner-op] + (cond + (keyword? outliner-op) (name outliner-op) + (string? outliner-op) outliner-op + :else nil)) + +(defn- sql->outliner-op [value] + (when (string? value) + (keyword value))) + +(defn append-tx! [sql t tx-str created-at outliner-op] (common/sql-exec sql - (str "insert into tx_log (t, tx, created_at) values (?, ?, ?)" - " on conflict(t) do update set tx = excluded.tx, created_at = excluded.created_at") + (str "insert into tx_log (t, tx, created_at, outliner_op) values (?, ?, ?, ?)" + " on conflict(t) do update set tx = excluded.tx, created_at = excluded.created_at, outliner_op = excluded.outliner_op") t tx-str - created-at)) + created-at + (outliner-op->sql outliner-op))) (defn fetch-tx-since [sql since-t] (let [rows (common/get-sql-rows (common/sql-exec sql - "select t, tx from tx_log where t > ? order by t asc" + "select t, tx, outliner_op from tx_log where t > ? order by t asc" since-t))] (mapv (fn [row] {:t (aget row "t") - :tx (aget row "tx")}) + :tx (aget row "tx") + :outliner-op (sql->outliner-op (aget row "outliner_op"))}) rows))) (defn- upsert-addr-content! [sql data] @@ -105,15 +144,18 @@ (restore-data-from-addr sql addr)))) (defn- append-tx-for-tx-report - [sql {:keys [db-after db-before tx-data]}] + [sql {:keys [db-after db-before tx-data tx-meta] :as tx-report}] (let [new-t (next-t! sql) created-at (common/now-ms) + prev-checksum (get-checksum sql) + checksum (sync-checksum/update-checksum prev-checksum tx-report) normalized-data (->> tx-data (db-normalize/normalize-tx-data db-after db-before)) ;; _ (prn :debug :tx-data tx-data) ;; _ (prn :debug :normalized-data normalized-data) tx-str (common/write-transit normalized-data)] - (append-tx! sql new-t tx-str created-at))) + (set-checksum! sql checksum) + (append-tx! sql new-t tx-str created-at (:outliner-op tx-meta)))) (defn- listen-db-updates! [sql conn] diff --git a/deps/db-sync/src/logseq/db_sync/worker/dispatch.cljs b/deps/db-sync/src/logseq/db_sync/worker/dispatch.cljs index 69cde6ac0e..04b286ccae 100644 --- a/deps/db-sync/src/logseq/db_sync/worker/dispatch.cljs +++ b/deps/db-sync/src/logseq/db_sync/worker/dispatch.cljs @@ -7,6 +7,26 @@ [logseq.db-sync.worker.http :as http] [promesa.core :as p])) +(defn- admin-token-valid? + [request ^js env] + (let [expected (aget env "DB_SYNC_ADMIN_TOKEN") + actual (.get (.-headers request) "x-db-sync-admin-token")] + (and (string? expected) + (seq expected) + (= expected actual)))) + +(defn- forward-sync-request + [request ^js env graph-id ^js new-url] + (let [^js namespace (.-LOGSEQ_SYNC_DO env) + do-id (.idFromName namespace graph-id) + stub (.get namespace do-id)] + (if (common/upgrade-request? request) + (.fetch stub request) + (do + (.set (.-searchParams new-url) "graph-id" graph-id) + (let [rewritten (platform/request (.toString new-url) request)] + (.fetch stub rewritten)))))) + (defn handle-worker-fetch [request ^js env] (-> (p/do @@ -21,6 +41,9 @@ (string/starts-with? path "/graphs/")) (index-handler/handle-fetch #js {:env env :d1 (aget env "DB")} request) + (string/starts-with? path "/admin/graphs/") + (index-handler/handle-fetch #js {:env env :d1 (aget env "DB")} request) + (string/starts-with? path "/e2ee") (index-handler/handle-fetch #js {:env env :d1 (aget env "DB")} request) @@ -28,10 +51,12 @@ (if (= method "OPTIONS") (assets-handler/handle request env) (if-let [{:keys [graph-id]} (assets-handler/parse-asset-path path)] - (p/let [access-resp (index-handler/graph-access-response request env graph-id)] - (if (.-ok access-resp) - (assets-handler/handle request env) - access-resp)) + (if (admin-token-valid? request env) + (assets-handler/handle request env) + (p/let [access-resp (index-handler/graph-access-response request env graph-id)] + (if (.-ok access-resp) + (assets-handler/handle request env) + access-resp))) (http/bad-request "invalid asset path"))) (= method "OPTIONS") @@ -52,18 +77,12 @@ (if (seq graph-id) (if (= method "OPTIONS") (common/options-response) - (p/let [access-resp (index-handler/graph-access-response request env graph-id)] - (if (.-ok access-resp) - (let [^js namespace (.-LOGSEQ_SYNC_DO env) - do-id (.idFromName namespace graph-id) - stub (.get namespace do-id)] - (if (common/upgrade-request? request) - (.fetch stub request) - (do - (.set (.-searchParams new-url) "graph-id" graph-id) - (let [rewritten (platform/request (.toString new-url) request)] - (.fetch stub rewritten))))) - access-resp))) + (if (admin-token-valid? request env) + (forward-sync-request request env graph-id new-url) + (p/let [access-resp (index-handler/graph-access-response request env graph-id)] + (if (.-ok access-resp) + (forward-sync-request request env graph-id new-url) + access-resp)))) (http/bad-request "missing graph id"))) :else diff --git a/deps/db-sync/src/logseq/db_sync/worker/handler/index.cljs b/deps/db-sync/src/logseq/db_sync/worker/handler/index.cljs index 087b956ebc..fd05c253fb 100644 --- a/deps/db-sync/src/logseq/db_sync/worker/handler/index.cljs +++ b/deps/db-sync/src/logseq/db_sync/worker/handler/index.cljs @@ -13,16 +13,48 @@ (log/error :db-sync/index-db-missing {:binding "DB"})) db)) +(defn- admin-token-valid? + [request ^js env] + (let [expected (aget env "DB_SYNC_ADMIN_TOKEN") + actual (.get (.-headers request) "x-db-sync-admin-token")] + (and (string? expected) + (seq expected) + (= expected actual)))) + +(defn- claims (aget "sub"))] (case (:handler route) :graphs/list (if (string? user-id) - (p/let [graphs (index/ {:type "pull/ok" + :t (t-now self) + :txs txs} + (string? checksum) (assoc :checksum checksum)))) (defn- import-snapshot! [^js self rows reset?] (let [sql (.-sql self)] @@ -282,44 +299,71 @@ (reset-import! sql)) (import-snapshot-rows! sql "kvs" rows))) -(defn- apply-tx! [^js self sender txs] +(defn- sanitize-client-tx-data + [conn txs] + (let [lookup-id (fn [x] + (when (and (vector? x) + (= 2 (count x)) + (= :block/uuid (first x))) + (second x))) + tx-data* (protocol/transit->tx txs) + created-block-uuids (->> tx-data* + (keep (fn [item] + (when (and (vector? item) + (= :db/add (first item)) + (>= (count item) 4) + (= :block/uuid (nth item 2))) + (nth item 3)))) + set) + missing-lookup-ref? (fn [x] + (when-let [block-uuid (lookup-id x)] + (and (not (contains? created-block-uuids block-uuid)) + (nil? (d/entity @conn x)))))] + (remove (fn [item] + (when (vector? item) + (let [op (first item) + attr (nth item 2 nil) + value (when (>= (count item) 4) (nth item 3))] + (or (and (contains? #{:db/add :db/retract :db/retractEntity} op) + (missing-lookup-ref? (second item))) + (and (contains? #{:db/add :db/retract} op) + (contains? db-schema/ref-type-attributes attr) + (missing-lookup-ref? value)))))) + tx-data*))) + +(defn- apply-tx-entry! + [conn {:keys [tx outliner-op]}] + (let [tx-data (sanitize-client-tx-data conn tx)] + (when (seq tx-data) + (ldb/transact! conn tx-data (cond-> {:op :apply-client-tx} + outliner-op (assoc :outliner-op outliner-op)))))) + +(defn- db-transact-failed-response + [sql tx-entry] + {:type "tx/reject" + :reason "db transact failed" + :t (storage/get-t sql) + :data (common/write-transit tx-entry)}) + +(defn- apply-tx! [^js self sender tx-entries] (let [sql (.-sql self)] (ensure-conn! self) - (let [conn (.-conn self) - lookup-id (fn [x] - (when (and (vector? x) - (= 2 (count x)) - (= :block/uuid (first x))) - (second x))) - tx-data* (protocol/transit->tx txs) - created-block-uuids (->> tx-data* - (keep (fn [item] - (when (and (vector? item) - (= :db/add (first item)) - (>= (count item) 4) - (= :block/uuid (nth item 2))) - (nth item 3)))) - set) - missing-lookup-ref? (fn [x] - (when-let [block-uuid (lookup-id x)] - (and (not (contains? created-block-uuids block-uuid)) - (nil? (d/entity @conn x))))) - tx-data (remove (fn [item] - (when (vector? item) - (let [op (first item) - attr (nth item 2 nil) - value (when (>= (count item) 4) (nth item 3))] - (or (and (contains? #{:db/add :db/retract :db/retractEntity} op) - (missing-lookup-ref? (second item))) - (and (contains? #{:db/add :db/retract} op) - (contains? db-schema/ref-type-attributes attr) - (missing-lookup-ref? value)))))) - tx-data*)] - (ldb/transact! conn tx-data {:op :apply-client-tx}) - (let [new-t (storage/get-t sql)] - ;; FIXME: no need to broadcast if client tx is less than remote tx - (ws/broadcast! self sender {:type "changed" :t new-t}) - new-t)))) + (let [conn (.-conn self)] + (loop [remaining tx-entries] + (if-let [tx-entry (first remaining)] + (let [result (try + (apply-tx-entry! conn tx-entry) + ::ok + (catch :default e + (log/error :db-sync/transact-failed e) + (db-transact-failed-response sql tx-entry)))] + (if (= ::ok result) + (recur (next remaining)) + result)) + (let [new-t (storage/get-t sql)] + ;; FIXME: no need to broadcast if client tx is less than remote tx + (ws/broadcast! self sender {:type "changed" :t new-t}) + new-t)))))) (defn handle-tx-batch! [^js self sender txs t-before] (let [current-t (t-now self)] @@ -339,18 +383,20 @@ :t current-t} :else - (if txs + (if (seq txs) (try (let [new-t (apply-tx! self sender txs)] (if (and (map? new-t) (= "tx/reject" (:type new-t))) new-t - {:type "tx/batch/ok" - :t new-t})) + (let [checksum (current-checksum self)] + (cond-> {:type "tx/batch/ok" + :t new-t} + (string? checksum) (assoc :checksum checksum))))) (catch :default e (log/error :db-sync/transact-failed e) {:type "tx/reject" :reason "db transact failed" - :t current-t})) + :t (t-now self)})) {:type "tx/reject" :reason "empty tx data"})))) @@ -422,13 +468,27 @@ (defn- handle-sync-admin-reset [^js self] - (common/sql-exec (.-sql self) "drop table if exists kvs") - (common/sql-exec (.-sql self) "drop table if exists tx_log") - (common/sql-exec (.-sql self) "drop table if exists sync_meta") - (storage/init-schema! (.-sql self)) - (set! (.-schema-ready self) true) - (set! (.-conn self) nil) - (http/json-response :sync/admin-reset {:ok true})) + (let [^js state (.-state self) + ^js storage (.-storage state) + delete-all (.-deleteAll storage) + delete-alarm (.-deleteAlarm storage)] + (doseq [^js ws (.getWebSockets state)] + (.close ws 1000 "graph deleted")) + (p/let [_ (when (fn? delete-alarm) + (.deleteAlarm storage))] + (if (fn? delete-all) + (p/let [_ (.deleteAll storage)] + (set! (.-schema-ready self) false) + (set! (.-conn self) nil) + (http/json-response :sync/admin-reset {:ok true})) + (do + (common/sql-exec (.-sql self) "drop table if exists kvs") + (common/sql-exec (.-sql self) "drop table if exists tx_log") + (common/sql-exec (.-sql self) "drop table if exists sync_meta") + (storage/init-schema! (.-sql self)) + (set! (.-schema-ready self) true) + (set! (.-conn self) nil) + (http/json-response :sync/admin-reset {:ok true})))))) (defn- handle-sync-tx-batch [^js self request] @@ -443,7 +503,7 @@ (http/bad-request "invalid tx") (let [{:keys [txs t-before]} body t-before (parse-int t-before)] - (if (string? txs) + (if (sequential? txs) (p/let [ready-for-sync? ( {:type "hello" + :t (sync-handler/t-now self)} + (string? checksum) (assoc :checksum checksum)))) "ping" (ws/send! ws {:type "pong"}) @@ -39,7 +42,7 @@ "tx/batch" (let [txs (:txs message) t-before (sync-handler/parse-int (:t-before message))] - (if (string? txs) + (if (sequential? txs) (ws/send! ws (sync-handler/handle-tx-batch! self ws txs t-before)) (ws/send! ws {:type "tx/reject" :reason "invalid tx"}))) diff --git a/deps/db-sync/src/logseq/db_sync/worker/routes/index.cljs b/deps/db-sync/src/logseq/db_sync/worker/routes/index.cljs index 5cb0a32a7f..807a73044e 100644 --- a/deps/db-sync/src/logseq/db_sync/worker/routes/index.cljs +++ b/deps/db-sync/src/logseq/db_sync/worker/routes/index.cljs @@ -2,7 +2,10 @@ (:require [reitit.core :as r])) (def ^:private route-data - [["/graphs" + [["/admin" + ["/graphs/:graph-id" {:methods {"DELETE" :admin-graphs/delete}}]] + + ["/graphs" ["" {:methods {"GET" :graphs/list "POST" :graphs/create}}] ["/:graph-id" diff --git a/deps/db-sync/test/logseq/db_sync/checksum_test.cljs b/deps/db-sync/test/logseq/db_sync/checksum_test.cljs new file mode 100644 index 0000000000..a931094bf2 --- /dev/null +++ b/deps/db-sync/test/logseq/db_sync/checksum_test.cljs @@ -0,0 +1,172 @@ +(ns logseq.db-sync.checksum-test + (:require [cljs.test :refer [deftest is testing]] + [datascript.core :as d] + [logseq.db-sync.checksum :as checksum] + [logseq.db.frontend.schema :as db-schema])) + +(defn- sample-db + [] + (let [page-a-uuid (random-uuid) + page-b-uuid (random-uuid) + parent-uuid (random-uuid) + child-uuid (random-uuid)] + (-> (d/empty-db db-schema/schema) + (d/db-with [{:db/id 1 + :block/uuid page-a-uuid + :block/name "page-a" + :block/title "Page A"} + {:db/id 2 + :block/uuid page-b-uuid + :block/name "page-b" + :block/title "Page B"} + {:db/id 3 + :block/uuid parent-uuid + :block/title "Parent" + :block/parent 1 + :block/page 1} + {:db/id 4 + :block/uuid child-uuid + :block/title "Child" + :block/parent 3 + :block/page 1}])))) + +(defn- assert-incremental=full! + [db-before checksum-before tx-data] + (let [tx-report (d/with db-before tx-data) + full (checksum/recompute-checksum (:db-after tx-report)) + incremental (checksum/update-checksum checksum-before tx-report)] + (is (= full incremental) + (str "Expected checksum parity for tx-data: " (pr-str tx-data))) + {:db (:db-after tx-report) + :checksum incremental})) + +(deftest checksum-ignores-unrelated-datoms-test + (testing "recompute and incremental checksums ignore unrelated datoms" + (let [db-before (sample-db) + checksum-before (checksum/recompute-checksum db-before) + tx-data [[:db/add 4 :block/updated-at 1773661308002] + [:db/add 4 :logseq.property/created-by-ref 99]] + tx-report (d/with db-before tx-data)] + (is (= checksum-before + (checksum/recompute-checksum (:db-after tx-report)))) + (is (= checksum-before + (checksum/update-checksum checksum-before tx-report)))))) + +(deftest incremental-checksum-matches-recompute-on-replace-datom-test + (testing "incremental checksum matches full recompute when replacing existing values" + (let [db-before (sample-db) + tx-report (d/with db-before [[:db/add 4 :block/title "Child updated"] + [:db/add 1 :block/name "page-a-updated"]])] + (is (= (checksum/recompute-checksum (:db-after tx-report)) + (checksum/update-checksum (checksum/recompute-checksum db-before) tx-report)))))) + +(deftest incremental-checksum-matches-recompute-across-mixed-mutations-test + (testing "incremental checksum stays equal to full recompute across typical tx sequences" + (let [db0 (sample-db) + new-block-uuid (random-uuid) + {:keys [db checksum]} (reduce + (fn [{:keys [db checksum]} {:keys [tx-data]}] + (assert-incremental=full! db checksum tx-data)) + {:db db0 + :checksum (checksum/recompute-checksum db0)} + [{:tx-data [[:db/add 4 :block/title "Child edited"]]} + {:tx-data [[:db/add 1 :block/name "page-a-renamed"] + [:db/add 1 :block/title "Page A Renamed"]]} + {:tx-data [[:db/add 4 :block/parent 2] + [:db/add 4 :block/page 2]]} + {:tx-data [[:db/add -1 :block/uuid new-block-uuid] + [:db/add -1 :block/title "New block"] + [:db/add -1 :block/parent 2] + [:db/add -1 :block/page 2]]} + {:tx-data [[:db/retract 3 :block/title "Parent"]]} + {:tx-data [[:db/retractEntity [:block/uuid new-block-uuid]]]} + {:tx-data [[:db/add 4 :block/updated-at 1773661308002]]}])] + (is (= checksum (checksum/recompute-checksum db)))))) + +(deftest incremental-checksum-uses-recompute-when-initial-checksum-missing-test + (testing "nil initial checksum uses db-before recompute as baseline" + (let [db-before (sample-db) + tx-report (d/with db-before [[:db/add 4 :block/title "Child updated"]])] + (is (= (checksum/recompute-checksum (:db-after tx-report)) + (checksum/update-checksum nil tx-report)))))) + +(deftest checksum-e2ee-ignores-title-and-name-test + (testing "with E2EE enabled, checksum ignores title/name changes for both modes" + (let [db-before (-> (sample-db) + (d/db-with [{:db/ident :logseq.kv/graph-rtc-e2ee? + :kv/value true}])) + checksum-before (checksum/recompute-checksum db-before) + tx-report (d/with db-before [[:db/add 4 :block/title "Encrypted title update"] + [:db/add 1 :block/name "encrypted-name-update"]])] + (is (= checksum-before + (checksum/recompute-checksum (:db-after tx-report)))) + (is (= checksum-before + (checksum/update-checksum checksum-before tx-report)))))) + +(deftest incremental-checksum-recomputes-when-e2ee-mode-toggles-test + (testing "incremental checksum falls back to full recompute when E2EE mode changes" + (let [db-before (sample-db) + tx-report (d/with db-before [{:db/ident :logseq.kv/graph-rtc-e2ee? + :kv/value true}])] + (is (= (checksum/recompute-checksum (:db-after tx-report)) + (checksum/update-checksum (checksum/recompute-checksum db-before) tx-report)))))) + +(deftest incremental-checksum-matches-recompute-when-referenced-entity-disappears-test + (testing "incremental checksum tracks blocks whose parent/page UUID becomes unresolved after retracting referenced entities" + (let [db-before (sample-db) + before-checksum (checksum/recompute-checksum db-before) + tx-report (d/with db-before [[:db/retractEntity 3] + [:db/retractEntity 1]]) + db-after (:db-after tx-report) + full (checksum/recompute-checksum db-after) + incremental (checksum/update-checksum before-checksum tx-report)] + (is (not= before-checksum full)) + (is (= full incremental))))) + +(deftest incremental-checksum-matches-recompute-when-referenced-uuid-is-retracted-test + (testing "incremental checksum updates dependents when a referenced entity loses its block UUID" + (let [db-before (sample-db) + parent-uuid (:block/uuid (d/entity db-before 3)) + tx-report (d/with db-before [[:db/retract 3 :block/uuid parent-uuid]]) + full (checksum/recompute-checksum (:db-after tx-report)) + incremental (checksum/update-checksum (checksum/recompute-checksum db-before) tx-report)] + (is (= full incremental))))) + +(deftest incremental-checksum-matches-recompute-when-block-uuid-changes-test + (testing "incremental checksum matches full recompute when an existing block UUID changes" + (let [db-before (sample-db) + new-parent-uuid (random-uuid) + tx-report (d/with db-before [[:db/add 3 :block/uuid new-parent-uuid]]) + full (checksum/recompute-checksum (:db-after tx-report)) + incremental (checksum/update-checksum (checksum/recompute-checksum db-before) tx-report)] + (is (= full incremental))))) + +(deftest recompute-checksum-diagnostics-includes-relevant-attrs-test + (testing "diagnostics includes checksum attrs and block values used for checksum export" + (let [db (sample-db) + {:keys [checksum attrs blocks e2ee?]} (checksum/recompute-checksum-diagnostics db) + child-uuid (:block/uuid (d/entity db 4)) + child-parent-uuid (:block/uuid (:block/parent (d/entity db 4))) + child-page-uuid (:block/uuid (:block/page (d/entity db 4))) + child (some #(when (= child-uuid (:block/uuid %)) %) blocks)] + (is (false? e2ee?)) + (is (= (checksum/recompute-checksum db) checksum)) + (is (= #{:block/uuid :block/title :block/name :block/parent :block/page} + (set attrs))) + (is (= 4 (count blocks))) + (is (= child-parent-uuid (:block/parent child))) + (is (= child-page-uuid (:block/page child))) + (is (string? (:block/title child)))))) + +(deftest recompute-checksum-diagnostics-omits-title-and-name-in-e2ee-test + (testing "diagnostics for E2EE graphs omits title/name from checksum attrs and export blocks" + (let [db (-> (sample-db) + (d/db-with [{:db/ident :logseq.kv/graph-rtc-e2ee? + :kv/value true}])) + {:keys [checksum attrs blocks e2ee?]} (checksum/recompute-checksum-diagnostics db)] + (is e2ee?) + (is (= (checksum/recompute-checksum db) checksum)) + (is (= #{:block/uuid :block/parent :block/page} + (set attrs))) + (is (every? #(not (contains? % :block/title)) blocks)) + (is (every? #(not (contains? % :block/name)) blocks))))) diff --git a/deps/db-sync/test/logseq/db_sync/node_adapter_test.cljs b/deps/db-sync/test/logseq/db_sync/node_adapter_test.cljs index b4de5212cc..425d1cee82 100644 --- a/deps/db-sync/test/logseq/db_sync/node_adapter_test.cljs +++ b/deps/db-sync/test/logseq/db_sync/node_adapter_test.cljs @@ -56,10 +56,11 @@ (is (= true (aget sync-health-body "ok")))) (p/let [tx-data [{:block/uuid (random-uuid) :block/content "hello"}] - txs (protocol/tx->transit tx-data) + tx-entry {:tx (protocol/tx->transit tx-data) + :outliner-op :save-block} tx-resp (post-json (str base-url "/sync/" graph-id "/tx/batch") {:t-before 0 - :txs txs}) + :txs [tx-entry]}) tx-body (parse-json tx-resp) pull-resp (get-json (str base-url "/sync/" graph-id "/pull?since=0")) pull-body (parse-json pull-resp)] @@ -69,7 +70,9 @@ (testing "pull" (is (.-ok pull-resp)) (is (= "pull/ok" (aget pull-body "type"))) - (is (pos? (count (aget pull-body "txs"))))) + (is (pos? (count (aget pull-body "txs")))) + (is (= "save-block" + (aget (aget pull-body "txs" 0) "outliner-op")))) (p/then (stop!) (fn [] (done)))))))) #_(deftest node-adapter-websocket-test diff --git a/deps/db-sync/test/logseq/db_sync/storage_test.cljs b/deps/db-sync/test/logseq/db_sync/storage_test.cljs index aa7a2bf2b7..1174c29250 100644 --- a/deps/db-sync/test/logseq/db_sync/storage_test.cljs +++ b/deps/db-sync/test/logseq/db_sync/storage_test.cljs @@ -14,10 +14,10 @@ (deftest tx-log-test (let [sql (test-sql/make-sql)] (storage/init-schema! sql) - (storage/append-tx! sql 1 "tx-1" 100) - (storage/append-tx! sql 2 "tx-2" 200) - (storage/append-tx! sql 3 "tx-3" 300) + (storage/append-tx! sql 1 "tx-1" 100 :save-block) + (storage/append-tx! sql 2 "tx-2" 200 :move-blocks) + (storage/append-tx! sql 3 "tx-3" 300 nil) (let [result (storage/fetch-tx-since sql 1)] - (is (= [{:t 2 :tx "tx-2"} - {:t 3 :tx "tx-3"}] + (is (= [{:t 2 :tx "tx-2" :outliner-op :move-blocks} + {:t 3 :tx "tx-3" :outliner-op nil}] result))))) diff --git a/deps/db-sync/test/logseq/db_sync/test_runner.cljs b/deps/db-sync/test/logseq/db_sync/test_runner.cljs index 4b139ed990..a430684b46 100644 --- a/deps/db-sync/test/logseq/db_sync/test_runner.cljs +++ b/deps/db-sync/test/logseq/db_sync/test_runner.cljs @@ -1,5 +1,6 @@ (ns logseq.db-sync.test-runner (:require [cljs.test :as ct] + [logseq.db-sync.checksum-test] [logseq.db-sync.common-test] [logseq.db-sync.index-test] [logseq.db-sync.node-adapter-test] @@ -8,6 +9,7 @@ [logseq.db-sync.normalize-test] [logseq.db-sync.platform-test] [logseq.db-sync.worker-auth-test] + [logseq.db-sync.worker-dispatch-test] [logseq.db-sync.worker-handler-assets-test] [logseq.db-sync.worker-handler-index-test] [logseq.db-sync.worker-handler-sync-test] diff --git a/deps/db-sync/test/logseq/db_sync/test_sql.cljs b/deps/db-sync/test/logseq/db_sync/test_sql.cljs index 99e5ee6cea..7128fb3882 100644 --- a/deps/db-sync/test/logseq/db_sync/test_sql.cljs +++ b/deps/db-sync/test/logseq/db_sync/test_sql.cljs @@ -22,17 +22,22 @@ #js {:exec (fn [sql & args] (cond (string/includes? sql "insert into tx_log") - (let [[t tx created-at] args] - (swap! state update :tx-log assoc t {:t t :tx tx :created-at created-at}) + (let [[t tx created-at outliner-op] args] + (swap! state update :tx-log assoc t {:t t + :tx tx + :created-at created-at + :outliner-op outliner-op}) nil) - (string/includes? sql "select t, tx from tx_log") + (string/includes? sql "select t, tx, outliner_op from tx_log") (let [since (first args) rows (->> (:tx-log @state) vals (filter (fn [row] (> (:t row) since))) (sort-by :t) - (map (fn [row] {:t (:t row) :tx (:tx row)})))] + (map (fn [row] {:t (:t row) + :tx (:tx row) + :outliner-op (:outliner-op row)})))] (js-rows rows)) (string/includes? sql "insert into sync_meta") diff --git a/deps/db-sync/test/logseq/db_sync/worker_dispatch_test.cljs b/deps/db-sync/test/logseq/db_sync/worker_dispatch_test.cljs new file mode 100644 index 0000000000..e8a91f3560 --- /dev/null +++ b/deps/db-sync/test/logseq/db_sync/worker_dispatch_test.cljs @@ -0,0 +1,63 @@ +(ns logseq.db-sync.worker-dispatch-test + (:require [cljs.test :refer [async deftest is]] + [logseq.db-sync.worker.dispatch :as dispatch] + [logseq.db-sync.worker.handler.assets :as assets-handler] + [logseq.db-sync.worker.handler.index :as index-handler] + [logseq.db-sync.worker.http :as http] + [promesa.core :as p])) + +(defn- ok-json-response [] + (js/Response. (js/JSON.stringify #js {:ok true}) + #js {:status 200 + :headers #js {"content-type" "application/json"}})) + +(defn- make-do-namespace [] + #js {:idFromName (fn [_graph-id] "do-id") + :get (fn [_do-id] + #js {:fetch (fn [_request] + (js/Promise.resolve (ok-json-response)))})}) + +(deftest admin-token-bypasses-graph-access-check-for-sync-route-test + (async done + (let [access-check-calls (atom 0) + request (js/Request. "http://localhost/sync/graph-1/snapshot/download" + #js {:method "GET" + :headers #js {"x-db-sync-admin-token" "test-admin-token"}}) + env #js {"DB_SYNC_ADMIN_TOKEN" "test-admin-token" + "LOGSEQ_SYNC_DO" (make-do-namespace)}] + (-> (p/with-redefs [index-handler/graph-access-response (fn [_request _env _graph-id] + (swap! access-check-calls inc) + (p/resolved (http/unauthorized)))] + (p/let [resp (dispatch/handle-worker-fetch request env) + text (.text resp) + body (js->clj (js/JSON.parse text) :keywordize-keys true)] + (is (= 200 (.-status resp))) + (is (= true (:ok body))) + (is (= 0 @access-check-calls)))) + (p/then (fn [] (done))) + (p/catch (fn [error] + (is false (str error)) + (done))))))) + +(deftest admin-token-bypasses-graph-access-check-for-assets-route-test + (async done + (let [access-check-calls (atom 0) + request (js/Request. "http://localhost/assets/graph-1/snapshot-1.snapshot" + #js {:method "GET" + :headers #js {"x-db-sync-admin-token" "test-admin-token"}}) + env #js {"DB_SYNC_ADMIN_TOKEN" "test-admin-token"}] + (-> (p/with-redefs [index-handler/graph-access-response (fn [_request _env _graph-id] + (swap! access-check-calls inc) + (p/resolved (http/unauthorized))) + assets-handler/handle (fn [_request _env] + (ok-json-response))] + (p/let [resp (dispatch/handle-worker-fetch request env) + text (.text resp) + body (js->clj (js/JSON.parse text) :keywordize-keys true)] + (is (= 200 (.-status resp))) + (is (= true (:ok body))) + (is (= 0 @access-check-calls)))) + (p/then (fn [] (done))) + (p/catch (fn [error] + (is false (str error)) + (done))))))) diff --git a/deps/db-sync/test/logseq/db_sync/worker_handler_index_test.cljs b/deps/db-sync/test/logseq/db_sync/worker_handler_index_test.cljs index ceff04691c..59c1d4fa15 100644 --- a/deps/db-sync/test/logseq/db_sync/worker_handler_index_test.cljs +++ b/deps/db-sync/test/logseq/db_sync/worker_handler_index_test.cljs @@ -62,6 +62,9 @@ (-> (p/with-redefs [common/read-json (fn [_] (p/resolved #js {"graph-name" "Graph 1" "schema-version" "65"})) + index/ (p/with-redefs [index/clj (js/JSON.parse text) :keywordize-keys true)] + (is (= 200 (.-status resp))) + (is (= [] (:graphs body))) + (is (= true (:user-rsa-keys-exists? body))))) + (p/then (fn [] + (done))) + (p/catch (fn [error] + (is false (str error)) + (done))))))) + +(deftest graphs-list-includes-user-rsa-keys-exists-flag-false-test + (async done + (let [request (js/Request. "http://localhost/graphs" #js {:method "GET"}) + url (js/URL. (.-url request))] + (-> (p/with-redefs [index/clj (js/JSON.parse text) :keywordize-keys true)] + (is (= 200 (.-status resp))) + (is (= [] (:graphs body))) + (is (= false (:user-rsa-keys-exists? body))))) + (p/then (fn [] + (done))) + (p/catch (fn [error] + (is false (str error)) + (done))))))) + +(deftest graphs-create-e2ee-requires-user-rsa-key-pair-test + (async done + (let [request (js/Request. "http://localhost/graphs" #js {:method "POST"}) + url (js/URL. (.-url request)) + index-upsert-calls* (atom 0)] + (-> (p/with-redefs [common/read-json (fn [_] + (p/resolved #js {"graph-name" "Graph E2EE" + "schema-version" "65" + "graph-e2ee?" true})) + index/clj (js/JSON.parse text) :keywordize-keys true)] + (is (= 400 (.-status resp))) + (is (= "missing user rsa key pair" (:error body))) + (is (zero? @index-upsert-calls*)))) + (p/then (fn [] + (done))) + (p/catch (fn [error] + (is false (str error)) + (done))))))) + +(deftest graphs-create-non-e2ee-requires-user-rsa-key-pair-test + (async done + (let [request (js/Request. "http://localhost/graphs" #js {:method "POST"}) + url (js/URL. (.-url request)) + index-upsert-calls* (atom 0)] + (-> (p/with-redefs [common/read-json (fn [_] + (p/resolved #js {"graph-name" "Graph Plain" + "schema-version" "65" + "graph-e2ee?" false})) + index/clj (js/JSON.parse text) :keywordize-keys true)] + (is (= 400 (.-status resp))) + (is (= "missing user rsa key pair" (:error body))) + (is (zero? @index-upsert-calls*)))) + (p/then (fn [] + (done))) + (p/catch (fn [error] + (is false (str error)) + (done))))))) diff --git a/deps/db-sync/test/logseq/db_sync/worker_handler_sync_test.cljs b/deps/db-sync/test/logseq/db_sync/worker_handler_sync_test.cljs index aadfb07ce8..2863077c33 100644 --- a/deps/db-sync/test/logseq/db_sync/worker_handler_sync_test.cljs +++ b/deps/db-sync/test/logseq/db_sync/worker_handler_sync_test.cljs @@ -128,7 +128,8 @@ (swap! schema-probes conj sql-str) #js []) storage/fetch-tx-since (fn [_ _] []) - storage/get-t (fn [_] 7)] + storage/get-t (fn [_] 7) + sync-handler/current-checksum (fn [_] "checksum-ok")] (p/let [resp (sync-handler/handle {:self self :request request :url url @@ -138,6 +139,7 @@ probe-set (set @schema-probes)] (is (= 200 (.-status resp))) (is (= 7 (:t body))) + (is (= "checksum-ok" (:checksum body))) (is (contains? probe-set "select 1 from kvs limit 1")) (is (contains? probe-set "select 1 from tx_log limit 1")) (is (contains? probe-set "select 1 from sync_meta limit 1")))) @@ -150,7 +152,7 @@ (deftest tx-batch-drops-stale-lookup-entity-updates-test (testing "stale lookup-ref entity updates should not reject the whole tx batch" (let [sql (test-sql/make-sql) - conn (d/create-conn db-schema/schema) + conn (storage/open-conn sql) self #js {:sql sql :conn conn :schema-ready true} @@ -160,11 +162,19 @@ [:db/add [:block/uuid missing-uuid] :block/updated-at 1773188050934 1] [:db/add "temp-1" :block/uuid created-uuid 2] [:db/add "temp-1" :block/title "ok" 2]] + tx-entry {:tx (protocol/tx->transit tx-data) + :outliner-op :save-block} response (with-redefs [ws/broadcast! (fn [& _] nil)] - (sync-handler/handle-tx-batch! self nil (protocol/tx->transit tx-data) 0))] + (sync-handler/handle-tx-batch! self nil [tx-entry] 0))] (is (= "tx/batch/ok" (:type response))) + (is (string? (:checksum response))) (is (= "ok" (:block/title (d/entity @conn [:block/uuid created-uuid])))) - (is (nil? (d/entity @conn [:block/uuid missing-uuid])))))) + (is (nil? (d/entity @conn [:block/uuid missing-uuid]))) + (let [pull-response (sync-handler/pull-response self 0) + tx-log-entry (first (:txs pull-response))] + (is (= "pull/ok" (:type pull-response))) + (is (string? (:checksum pull-response))) + (is (= :save-block (:outliner-op tx-log-entry))))))) (deftest tx-batch-rejects-while-snapshot-upload-is-in-progress-test (let [sql (test-sql/make-sql) @@ -173,13 +183,92 @@ :conn conn :schema-ready true} tx-data [[:db/add -1 :block/title "blocked"]] + tx-entry {:tx (protocol/tx->transit tx-data) + :outliner-op :save-block} response (with-redefs [storage/get-meta (fn [_ k] (when (= :snapshot-uploading? k) "true"))] - (sync-handler/handle-tx-batch! self nil (protocol/tx->transit tx-data) 0))] + (sync-handler/handle-tx-batch! self nil [tx-entry] 0))] (is (= "tx/reject" (:type response))) (is (= "snapshot upload in progress" (:reason response))))) +(deftest finished-snapshot-upload-persists-provided-checksum-test + (async done + (let [sql (test-sql/make-sql) + checksum "1be70518babe8784" + conn (d/create-conn db-schema/schema) + self #js {:sql sql + :conn conn + :schema-ready true + :env #js {"DB" nil}} + request (js/Request. (str "http://localhost/sync/graph-1/snapshot/upload?graph-id=graph-1&finished=true&checksum=" checksum) + #js {:method "POST" + :body (js/Uint8Array. 0)})] + (d/transact! conn [{:block/uuid (random-uuid) + :block/title "uploaded"}]) + (is (nil? (storage/get-checksum sql))) + (-> (p/with-redefs [sync-handler/import-snapshot-stream! (fn [_self _stream _reset?] + (p/resolved 0)) + sync-handler/clj (js/JSON.parse text) :keywordize-keys true)] + (is (= 200 (.-status resp))) + (is (= {:ok true :count 0} body)) + (is (= checksum (storage/get-checksum sql))))) + (p/then (fn [] + (done))) + (p/catch (fn [error] + (is false (str error)) + (done))))))) + +(deftest current-checksum-heals-stale-stored-checksum-test + (testing "server recomputes and persists checksum when stored checksum is stale" + (let [sql (test-sql/make-sql) + conn (storage/open-conn sql) + self #js {:sql sql + :conn conn + :schema-ready true} + stale-checksum "0000000000000000" + block-uuid (random-uuid)] + (d/transact! conn [{:block/uuid block-uuid + :block/title "hello"}]) + (is (string? (storage/get-checksum sql))) + (storage/set-checksum! sql stale-checksum) + (let [healed (sync-handler/current-checksum self)] + (is (string? healed)) + (is (not= stale-checksum healed)) + (is (= healed (storage/get-checksum sql))) + (is (= healed (sync-handler/current-checksum self))))))) + +(deftest tx-batch-rejects-with-the-exact-failed-tx-entry-test + (testing "db transact failure replies with the specific rejected tx entry" + (let [sql (test-sql/make-sql) + conn (d/create-conn db-schema/schema) + self #js {:sql sql + :conn conn + :schema-ready true} + tx-entry-1 {:tx (protocol/tx->transit [[:db/add -1 :block/title "ok"]]) + :outliner-op :save-block} + tx-entry-2 {:tx (protocol/tx->transit [[:db/add -2 :block/title "bad"]]) + :outliner-op :save-block} + apply-calls (atom 0) + response (with-redefs [ws/broadcast! (fn [& _] nil) + sync-handler/apply-tx-entry! (fn [_conn tx-entry] + (swap! apply-calls inc) + (when (= 2 @apply-calls) + (throw (ex-info "DB write failed with invalid data" + {:tx-entry tx-entry}))))] + (sync-handler/handle-tx-batch! self nil [tx-entry-1 tx-entry-2] 0))] + (is (= "tx/reject" (:type response))) + (is (= "db transact failed" (:reason response))) + (is (= 0 (:t response))) + (is (= tx-entry-2 (common/read-transit (:data response))))))) + (deftest sync-pull-is-blocked-when-graph-is-not-ready-for-use-test (async done (let [self #js {:env #js {"DB" :db} diff --git a/deps/db-sync/test/logseq/db_sync/worker_handler_ws_test.cljs b/deps/db-sync/test/logseq/db_sync/worker_handler_ws_test.cljs index 051c8c6071..4c1d0b49d0 100644 --- a/deps/db-sync/test/logseq/db_sync/worker_handler_ws_test.cljs +++ b/deps/db-sync/test/logseq/db_sync/worker_handler_ws_test.cljs @@ -1,6 +1,9 @@ (ns logseq.db-sync.worker-handler-ws-test (:require [cljs.test :refer [async deftest is]] + [datascript.core :as d] [logseq.db-sync.protocol :as protocol] + [logseq.db-sync.storage :as storage] + [logseq.db-sync.test-sql :as test-sql] [logseq.db-sync.worker.handler.sync :as sync-handler] [logseq.db-sync.worker.handler.ws :as ws-handler] [logseq.db-sync.worker.presence :as presence] @@ -28,6 +31,41 @@ :user-id "user-1"}] (mapv :msg @send-events))))) +(deftest hello-message-includes-checksum-test + (let [sql (test-sql/make-sql) + conn (storage/open-conn sql) + ws #js {:readyState 1} + sent (atom nil) + self #js {:conn conn + :schema-ready true + :sql sql} + raw (protocol/encode-message {:type "hello" + :client "test"})] + (d/transact! conn [{:block/uuid (random-uuid) + :block/title "hello"}]) + (with-redefs [ws/send! (fn [_target msg] + (reset! sent msg))] + (ws-handler/handle-ws-message! self ws raw)) + (is (= "hello" (:type @sent))) + (is (number? (:t @sent))) + (is (string? (:checksum @sent))))) + +(deftest hello-message-omits-nil-checksum-test + (let [sql (test-sql/make-sql) + conn (storage/open-conn sql) + ws #js {:readyState 1} + sent (atom nil) + self #js {:conn conn + :schema-ready true + :sql sql} + raw (protocol/encode-message {:type "hello" + :client "test"})] + (with-redefs [ws/send! (fn [_target msg] + (reset! sent msg))] + (ws-handler/handle-ws-message! self ws raw)) + (is (= "hello" (:type @sent))) + (is (false? (contains? @sent :checksum))))) + (deftest websocket-connection-is-rejected-while-snapshot-upload-is-in-progress-test (async done (let [accepted (atom []) diff --git a/deps/db-sync/worker/scripts/delete_graphs_for_user.js b/deps/db-sync/worker/scripts/delete_graphs_for_user.js new file mode 100644 index 0000000000..bf593f95c3 --- /dev/null +++ b/deps/db-sync/worker/scripts/delete_graphs_for_user.js @@ -0,0 +1,180 @@ +#!/usr/bin/env node + +const path = require("node:path"); +const readline = require("node:readline/promises"); +const { stdin, stdout } = require("node:process"); +const { parseArgs } = require("node:util"); +const { + buildAdminGraphDeleteUrl, + buildUserGraphsSql, + buildWranglerArgs, + defaultConfigPath, + fail, + formatUserGraphsResult, + parseWranglerResults, + printUserGraphsTable, + runWranglerQuery, +} = require("./graph_user_lib"); + +function escapeSqlValue(value) { + return value.replaceAll("'", "''"); +} + +function ensureMutationSuccess(output, context) { + if (!Array.isArray(output) || output.length === 0) { + fail(`Unexpected empty response from wrangler while ${context}.`); + } + + output.forEach((statement, index) => { + if (!statement.success) { + fail(`Wrangler mutation failed while ${context} (statement ${index + 1}).`); + } + }); +} + +function deleteGraphAesKeys(options, graphId) { + const sql = `delete from graph_aes_keys where graph_id = '${escapeSqlValue(graphId)}'`; + const wranglerArgs = buildWranglerArgs({ + database: options.database, + config: options.config, + env: options.env, + sql, + }); + ensureMutationSuccess(runWranglerQuery(wranglerArgs), `deleting graph_aes_keys for ${graphId}`); +} + +function printHelp() { + console.log(`Delete db-sync graphs owned by a user from a remote D1 environment. + +Usage: + node worker/scripts/delete_graphs_for_user.js --username [--env prod] + node worker/scripts/delete_graphs_for_user.js --user-id [--env prod] + +Options: + --username Look up the target user by username. + --user-id Look up the target user by user id. + --env Wrangler environment to use. Defaults to "prod". + --database D1 binding or database name. Defaults to "DB". + --config Wrangler config path. Defaults to worker/wrangler.toml. + --base-url Worker base URL. Defaults to DB_SYNC_BASE_URL. + --admin-token Admin delete token. Defaults to DB_SYNC_ADMIN_TOKEN. + --help Show this message. +`); +} + +function parseCliArgs(argv) { + const { values } = parseArgs({ + args: argv, + options: { + username: { type: "string" }, + "user-id": { type: "string" }, + env: { type: "string", default: "prod" }, + database: { type: "string", default: "DB" }, + config: { type: "string", default: defaultConfigPath }, + "base-url": { type: "string", default: process.env.DB_SYNC_BASE_URL }, + "admin-token": { type: "string", default: process.env.DB_SYNC_ADMIN_TOKEN }, + help: { type: "boolean", default: false }, + }, + strict: true, + allowPositionals: false, + }); + + if (values.help) { + printHelp(); + process.exit(0); + } + + const lookupCount = Number(Boolean(values.username)) + Number(Boolean(values["user-id"])); + if (lookupCount !== 1) { + fail("Pass exactly one of --username or --user-id."); + } + + return { + lookupField: values.username ? "username" : "id", + lookupLabel: values.username ? "username" : "user-id", + lookupValue: values.username ?? values["user-id"], + env: values.env, + database: values.database, + config: path.resolve(values.config), + baseUrl: values["base-url"], + adminToken: values["admin-token"], + }; +} + +async function confirmDeletion(result) { + const rl = readline.createInterface({ input: stdin, output: stdout }); + try { + const answer = await rl.question( + `Type DELETE to remove ${result.graphs.length} owned graph(s) for ${result.user.user_id}: `, + ); + return answer.trim() === "DELETE"; + } finally { + rl.close(); + } +} + +async function main() { + const options = parseCliArgs(process.argv.slice(2)); + const lookupSql = buildUserGraphsSql({ ...options, ownedOnly: true }); + const lookupArgs = buildWranglerArgs({ + database: options.database, + config: options.config, + env: options.env, + sql: lookupSql, + }); + const lookupRows = parseWranglerResults(runWranglerQuery(lookupArgs)); + const result = formatUserGraphsResult(lookupRows); + + if (!result) { + fail(`No user found for ${options.lookupLabel}=${options.lookupValue}.`); + } + + printUserGraphsTable(result, "Owned graphs to delete"); + if (result.graphs.length === 0) { + console.log("No owned graphs found. Nothing to delete."); + return; + } + + if (!options.baseUrl) { + fail("Missing worker base URL. Pass --base-url or set DB_SYNC_BASE_URL."); + } + + if (!options.adminToken) { + fail("Missing admin token. Pass --admin-token or set DB_SYNC_ADMIN_TOKEN."); + } + + const confirmed = await confirmDeletion(result); + if (!confirmed) { + console.log("Aborted."); + return; + } + + for (const graph of result.graphs) { + const response = await fetch(buildAdminGraphDeleteUrl(options.baseUrl, graph.graph_id), { + method: "DELETE", + headers: { + "x-db-sync-admin-token": options.adminToken, + }, + }); + + if (!response.ok) { + const body = await response.text(); + fail(`Delete failed for ${graph.graph_id}: ${response.status} ${body}`); + } + + deleteGraphAesKeys(options, graph.graph_id); + } + + console.log(`Deleted ${result.graphs.length} owned graph(s).`); +} + +if (require.main === module) { + main().catch((error) => { + fail(error instanceof Error ? error.message : String(error)); + }); +} + +module.exports = { + confirmDeletion, + parseCliArgs, +}; diff --git a/deps/db-sync/worker/scripts/delete_user_totally.js b/deps/db-sync/worker/scripts/delete_user_totally.js new file mode 100644 index 0000000000..3193f3c37e --- /dev/null +++ b/deps/db-sync/worker/scripts/delete_user_totally.js @@ -0,0 +1,254 @@ +#!/usr/bin/env node + +const path = require("node:path"); +const readline = require("node:readline/promises"); +const { stdin, stdout } = require("node:process"); +const { parseArgs } = require("node:util"); +const { + buildAdminGraphDeleteUrl, + buildUserGraphsSql, + buildWranglerArgs, + defaultConfigPath, + fail, + formatUserGraphsResult, + parseWranglerResults, + printUserGraphsTable, + runWranglerQuery, +} = require("./graph_user_lib"); + +function printHelp() { + console.log(`Delete a db-sync user and all related data from a remote D1 environment. + +Usage: + node worker/scripts/delete_user_totally.js --username [--env prod] + node worker/scripts/delete_user_totally.js --user-id [--env prod] + +Options: + --username Look up the target user by username. + --user-id Look up the target user by user id. + --env Wrangler environment to use. Defaults to "prod". + --database D1 binding or database name. Defaults to "DB". + --config Wrangler config path. Defaults to worker/wrangler.toml. + --base-url Worker base URL. Defaults to DB_SYNC_BASE_URL. + --admin-token Admin delete token. Defaults to DB_SYNC_ADMIN_TOKEN. + --help Show this message. +`); +} + +function parseCliArgs(argv) { + const { values } = parseArgs({ + args: argv, + options: { + username: { type: "string" }, + "user-id": { type: "string" }, + env: { type: "string", default: "prod" }, + database: { type: "string", default: "DB" }, + config: { type: "string", default: defaultConfigPath }, + "base-url": { type: "string", default: process.env.DB_SYNC_BASE_URL }, + "admin-token": { type: "string", default: process.env.DB_SYNC_ADMIN_TOKEN }, + help: { type: "boolean", default: false }, + }, + strict: true, + allowPositionals: false, + }); + + if (values.help) { + printHelp(); + process.exit(0); + } + + const lookupCount = Number(Boolean(values.username)) + Number(Boolean(values["user-id"])); + if (lookupCount !== 1) { + fail("Pass exactly one of --username or --user-id."); + } + + return { + lookupField: values.username ? "username" : "id", + lookupLabel: values.username ? "username" : "user-id", + lookupValue: values.username ?? values["user-id"], + env: values.env, + database: values.database, + config: path.resolve(values.config), + baseUrl: values["base-url"], + adminToken: values["admin-token"], + }; +} + +function escapeSqlValue(value) { + return value.replaceAll("'", "''"); +} + +function runSelectQuery(options, sql) { + const wranglerArgs = buildWranglerArgs({ + database: options.database, + config: options.config, + env: options.env, + sql, + }); + + return parseWranglerResults(runWranglerQuery(wranglerArgs)); +} + +function runMutationQuery(options, sql) { + const wranglerArgs = buildWranglerArgs({ + database: options.database, + config: options.config, + env: options.env, + sql, + }); + + const output = runWranglerQuery(wranglerArgs); + if (!Array.isArray(output) || output.length === 0) { + throw new Error("Unexpected empty response from wrangler."); + } + + output.forEach((statement, index) => { + if (!statement.success) { + throw new Error(`Wrangler reported an unsuccessful mutation (statement ${index + 1}).`); + } + }); + + return output.reduce((sum, statement) => sum + Number(statement?.meta?.changes ?? 0), 0); +} + +function sqlCountToNumber(value) { + const numericValue = Number(value); + return Number.isFinite(numericValue) ? numericValue : 0; +} + +function isDeleteConfirmationAccepted(answer, userId) { + const normalizedAnswer = answer.trim(); + return normalizedAnswer === "DELETE" || normalizedAnswer === `DELETE USER ${userId}`; +} + +async function confirmDeletion({ user, ownedGraphsCount, memberGraphsCount }) { + const rl = readline.createInterface({ input: stdin, output: stdout }); + try { + const answer = await rl.question( + `Type DELETE to permanently delete this user (${user.user_id}; ${ownedGraphsCount} owned graph(s), ${memberGraphsCount} membership(s)): `, + ); + return isDeleteConfirmationAccepted(answer, user.user_id); + } finally { + rl.close(); + } +} + +async function deleteOwnedGraphs(options, ownedGraphs) { + for (const graph of ownedGraphs) { + const response = await fetch(buildAdminGraphDeleteUrl(options.baseUrl, graph.graph_id), { + method: "DELETE", + headers: { + "x-db-sync-admin-token": options.adminToken, + }, + }); + + if (!response.ok) { + const payload = await response.text(); + fail(`Delete failed for owned graph ${graph.graph_id}: ${response.status} ${payload}`); + } + } +} + +async function main() { + const options = parseCliArgs(process.argv.slice(2)); + const graphRows = runSelectQuery(options, buildUserGraphsSql({ ...options, ownedOnly: false })); + const result = formatUserGraphsResult(graphRows); + + if (!result) { + fail(`No user found for ${options.lookupLabel}=${options.lookupValue}.`); + } + + const ownedGraphs = result.graphs.filter((graph) => graph.access_role === "owner"); + const memberGraphs = result.graphs.filter((graph) => graph.access_role !== "owner"); + + printUserGraphsTable(result, "Graphs linked to user"); + console.log(`Owned graphs: ${ownedGraphs.length}`); + console.log(`Member graphs: ${memberGraphs.length}`); + + if (ownedGraphs.length > 0 && !options.baseUrl) { + fail("Missing worker base URL. Pass --base-url or set DB_SYNC_BASE_URL."); + } + + if (ownedGraphs.length > 0 && !options.adminToken) { + fail("Missing admin token. Pass --admin-token or set DB_SYNC_ADMIN_TOKEN."); + } + + const confirmed = await confirmDeletion({ + user: result.user, + ownedGraphsCount: ownedGraphs.length, + memberGraphsCount: memberGraphs.length, + }); + + if (!confirmed) { + console.log("Aborted."); + return; + } + + if (ownedGraphs.length > 0) { + await deleteOwnedGraphs(options, ownedGraphs); + } + + const escapedUserId = escapeSqlValue(result.user.user_id); + const remainingOwnedGraphRows = runSelectQuery( + options, + `select count(1) as owned_graph_count from graphs where user_id = '${escapedUserId}'`, + ); + const remainingOwnedGraphCount = sqlCountToNumber(remainingOwnedGraphRows[0]?.owned_graph_count); + if (remainingOwnedGraphCount > 0) { + fail( + `Owned graph cleanup incomplete: ${remainingOwnedGraphCount} graph(s) still owned by ${result.user.user_id}.`, + ); + } + + const deletedGraphAesKeys = runMutationQuery( + options, + `delete from graph_aes_keys where user_id = '${escapedUserId}'`, + ); + const deletedGraphMembers = runMutationQuery( + options, + `delete from graph_members where user_id = '${escapedUserId}'`, + ); + const clearedInvitedBy = runMutationQuery( + options, + `update graph_members set invited_by = null where invited_by = '${escapedUserId}'`, + ); + const deletedUserRsaKeys = runMutationQuery( + options, + `delete from user_rsa_keys where user_id = '${escapedUserId}'`, + ); + const deletedUsers = runMutationQuery(options, `delete from users where id = '${escapedUserId}'`); + + if (deletedUsers !== 1) { + fail(`Expected to delete exactly one user row, but deleted ${deletedUsers}.`); + } + + const userRowsAfterDelete = runSelectQuery( + options, + `select id from users where id = '${escapedUserId}' limit 1`, + ); + if (userRowsAfterDelete.length > 0) { + fail(`User ${result.user.user_id} still exists after deletion.`); + } + + console.table([ + { step: "owned graphs deleted", rows: ownedGraphs.length }, + { step: "graph_aes_keys deleted", rows: deletedGraphAesKeys }, + { step: "graph_members deleted", rows: deletedGraphMembers }, + { step: "graph_members invited_by cleared", rows: clearedInvitedBy }, + { step: "user_rsa_keys deleted", rows: deletedUserRsaKeys }, + { step: "users deleted", rows: deletedUsers }, + ]); + console.log(`Deleted user ${result.user.user_id} successfully.`); +} + +if (require.main === module) { + main().catch((error) => { + fail(error instanceof Error ? error.message : String(error)); + }); +} + +module.exports = { + confirmDeletion, + isDeleteConfirmationAccepted, + parseCliArgs, +}; diff --git a/deps/db-sync/worker/scripts/delete_user_totally.test.js b/deps/db-sync/worker/scripts/delete_user_totally.test.js new file mode 100644 index 0000000000..9da4958581 --- /dev/null +++ b/deps/db-sync/worker/scripts/delete_user_totally.test.js @@ -0,0 +1,59 @@ +const assert = require("node:assert/strict"); +const { spawnSync } = require("node:child_process"); +const path = require("node:path"); +const test = require("node:test"); + +const { isDeleteConfirmationAccepted, parseCliArgs } = require("./delete_user_totally"); +const { defaultConfigPath } = require("./graph_user_lib"); + +function runCli(args) { + return spawnSync(process.execPath, [path.join(__dirname, "delete_user_totally.js"), ...args], { + encoding: "utf8", + }); +} + +test("parseCliArgs accepts --username", () => { + const parsed = parseCliArgs(["--username", "alice"]); + + assert.equal(parsed.lookupField, "username"); + assert.equal(parsed.lookupLabel, "username"); + assert.equal(parsed.lookupValue, "alice"); + assert.equal(parsed.env, "prod"); + assert.equal(parsed.database, "DB"); + assert.equal(parsed.config, path.resolve(defaultConfigPath)); +}); + +test("parseCliArgs accepts --user-id", () => { + const parsed = parseCliArgs(["--user-id", "user-123"]); + + assert.equal(parsed.lookupField, "id"); + assert.equal(parsed.lookupLabel, "user-id"); + assert.equal(parsed.lookupValue, "user-123"); +}); + +test("CLI --help exits successfully", () => { + const result = runCli(["--help"]); + + assert.equal(result.status, 0); + assert.match(result.stdout, /Delete a db-sync user and all related data/); +}); + +test("CLI rejects passing both --username and --user-id", () => { + const result = runCli(["--username", "alice", "--user-id", "user-123"]); + + assert.equal(result.status, 1); + assert.match(result.stderr, /Pass exactly one of --username or --user-id\./); +}); + +test("confirmation accepts DELETE", () => { + assert.equal(isDeleteConfirmationAccepted("DELETE", "user-123"), true); +}); + +test("confirmation accepts legacy DELETE USER ", () => { + assert.equal(isDeleteConfirmationAccepted("DELETE USER user-123", "user-123"), true); +}); + +test("confirmation rejects unrelated input", () => { + assert.equal(isDeleteConfirmationAccepted("DELETE USER other-user", "user-123"), false); + assert.equal(isDeleteConfirmationAccepted("yes", "user-123"), false); +}); diff --git a/deps/db-sync/worker/scripts/download_graph_db.js b/deps/db-sync/worker/scripts/download_graph_db.js new file mode 100644 index 0000000000..3a8717dd05 --- /dev/null +++ b/deps/db-sync/worker/scripts/download_graph_db.js @@ -0,0 +1,215 @@ +#!/usr/bin/env node + +const Database = require("better-sqlite3"); +const fs = require("node:fs"); +const path = require("node:path"); +const zlib = require("node:zlib"); +const { parseArgs } = require("node:util"); +const { fail } = require("./graph_user_lib"); + +const defaultBaseUrl = "https://api.logseq.com"; + +function printHelp() { + console.log(`Download a graph snapshot and store it as a local sqlite debug DB. + +Usage: + node worker/scripts/download_graph_db.js --graph-id --admin-token + node worker/scripts/download_graph_db.js --graph-id --output ./tmp/my-graph.sqlite + +Options: + --graph-id Target graph id. Required. + --admin-token Admin token. Defaults to DB_SYNC_ADMIN_TOKEN. + --base-url Worker base URL. Defaults to DB_SYNC_BASE_URL or https://api.logseq.com. + --output SQLite output path. Defaults to ./tmp/graph-.snapshot.sqlite. + --help Show this message. + +Notes: + The output sqlite matches local graph DB schema and contains only: + kvs(addr, content, addresses). +`); +} + +function sanitizeGraphIdForFilename(graphId) { + return graphId.replaceAll(/[^a-zA-Z0-9.-]/g, "_"); +} + +function parseCliArgs(argv) { + const { values } = parseArgs({ + args: argv, + options: { + "graph-id": { type: "string" }, + "admin-token": { type: "string", default: process.env.DB_SYNC_ADMIN_TOKEN }, + "base-url": { type: "string", default: process.env.DB_SYNC_BASE_URL || defaultBaseUrl }, + output: { type: "string" }, + help: { type: "boolean", default: false }, + }, + strict: true, + allowPositionals: false, + }); + + if (values.help) { + printHelp(); + process.exit(0); + } + + if (!values["graph-id"]) { + fail("Missing required --graph-id."); + } + + if (!values["admin-token"]) { + fail("Missing admin token. Pass --admin-token or set DB_SYNC_ADMIN_TOKEN."); + } + + const output = values.output + ? path.resolve(values.output) + : path.resolve("tmp", `graph-${sanitizeGraphIdForFilename(values["graph-id"])}.snapshot.sqlite`); + + return { + graphId: values["graph-id"], + adminToken: values["admin-token"], + baseUrl: values["base-url"], + output, + }; +} + +function authHeaders(adminToken) { + return { + "x-db-sync-admin-token": adminToken, + }; +} + +function normalizeBaseUrl(baseUrl) { + return baseUrl.replace(/\/+$/, ""); +} + +async function fetchJson(url, adminToken) { + const response = await fetch(url, { + method: "GET", + headers: authHeaders(adminToken), + }); + + if (!response.ok) { + const body = await response.text(); + throw new Error(`Request failed (${response.status}) for ${url}: ${body}`); + } + + return response.json(); +} + +async function fetchSnapshotDescriptor(options) { + const baseUrl = normalizeBaseUrl(options.baseUrl); + const url = `${baseUrl}/sync/${encodeURIComponent(options.graphId)}/snapshot/download`; + return fetchJson(url, options.adminToken); +} + +async function fetchSnapshotBytes(url, adminToken) { + const response = await fetch(url, { + method: "GET", + headers: authHeaders(adminToken), + }); + + if (!response.ok) { + const body = await response.text(); + throw new Error(`Snapshot download failed (${response.status}) for ${url}: ${body}`); + } + + const buffer = Buffer.from(await response.arrayBuffer()); + const contentEncoding = response.headers.get("content-encoding"); + + return { + buffer, + contentEncoding, + }; +} + +function hasGzipMagic(buffer) { + return buffer.length >= 2 && buffer[0] === 0x1f && buffer[1] === 0x8b; +} + +function maybeDecompressBuffer(buffer, contentEncoding) { + if (contentEncoding === "gzip" && hasGzipMagic(buffer)) { + return zlib.gunzipSync(buffer); + } + + return buffer; +} + +function snapshotBufferToLines(buffer) { + const text = buffer.toString("utf8"); + return text + .split(/\r?\n/) + .filter((line) => line.length > 0); +} + +function writeSnapshotSqlite({ + outputPath, + lines, +}) { + fs.mkdirSync(path.dirname(outputPath), { recursive: true }); + if (fs.existsSync(outputPath)) { + fs.rmSync(outputPath); + } + + const db = new Database(outputPath); + try { + db.exec(` + create table if not exists kvs ( + addr INTEGER primary key, + content TEXT, + addresses JSON + ); + `); + + const upsertKvs = db.prepare( + "insert into kvs (addr, content, addresses) values (?, ?, ?) on conflict(addr) do update set content = excluded.content, addresses = excluded.addresses", + ); + + const writeAll = db.transaction(() => { + for (let index = 0; index < lines.length; index += 1) { + upsertKvs.run(index + 1, lines[index], null); + } + }); + + writeAll(); + } finally { + db.close(); + } +} + +async function main() { + const options = parseCliArgs(process.argv.slice(2)); + const descriptor = await fetchSnapshotDescriptor(options); + if (!descriptor || !descriptor.url) { + fail("Snapshot download response missing URL."); + } + + const snapshot = await fetchSnapshotBytes(descriptor.url, options.adminToken); + const effectiveEncoding = descriptor["content-encoding"] || snapshot.contentEncoding || ""; + const decompressed = maybeDecompressBuffer(snapshot.buffer, effectiveEncoding); + const lines = snapshotBufferToLines(decompressed); + + writeSnapshotSqlite({ + outputPath: options.output, + lines, + }); + + console.log(`Saved graph snapshot sqlite to ${options.output}`); + console.log(`Graph: ${options.graphId}`); + console.log(`Rows: ${lines.length}`); + if (descriptor.key) { + console.log(`Snapshot key: ${descriptor.key}`); + } +} + +if (require.main === module) { + main().catch((error) => { + fail(error instanceof Error ? error.message : String(error)); + }); +} + +module.exports = { + parseCliArgs, + sanitizeGraphIdForFilename, + snapshotBufferToLines, + writeSnapshotSqlite, +}; diff --git a/deps/db-sync/worker/scripts/download_graph_db.test.js b/deps/db-sync/worker/scripts/download_graph_db.test.js new file mode 100644 index 0000000000..f6086edd0a --- /dev/null +++ b/deps/db-sync/worker/scripts/download_graph_db.test.js @@ -0,0 +1,91 @@ +const assert = require("node:assert/strict"); +const { spawnSync } = require("node:child_process"); +const fs = require("node:fs"); +const os = require("node:os"); +const path = require("node:path"); +const test = require("node:test"); + +const Database = require("better-sqlite3"); + +const { + parseCliArgs, + sanitizeGraphIdForFilename, + writeSnapshotSqlite, +} = require("./download_graph_db"); + +function runCli(args, env = {}) { + return spawnSync(process.execPath, [path.join(__dirname, "download_graph_db.js"), ...args], { + encoding: "utf8", + env: { ...process.env, ...env }, + }); +} + +test("parseCliArgs accepts required args and defaults output", () => { + const parsed = parseCliArgs([ + "--graph-id", + "graph-1", + "--admin-token", + "admin-token-value", + ]); + + assert.equal(parsed.graphId, "graph-1"); + assert.equal(parsed.baseUrl, "https://api.logseq.com"); + assert.equal(parsed.adminToken, "admin-token-value"); + assert.equal(parsed.output, path.resolve("tmp", "graph-graph-1.snapshot.sqlite")); +}); + +test("sanitizeGraphIdForFilename replaces unsafe chars", () => { + assert.equal(sanitizeGraphIdForFilename("us-east-1:abc/def"), "us-east-1_abc_def"); +}); + +test("CLI --help exits successfully", () => { + const result = runCli(["--help"]); + + assert.equal(result.status, 0); + assert.match(result.stdout, /Download a graph snapshot and store it as a local sqlite debug DB/); +}); + +test("CLI rejects missing --graph-id", () => { + const result = runCli(["--admin-token", "admin-token-value"]); + + assert.equal(result.status, 1); + assert.match(result.stderr, /Missing required --graph-id\./); +}); + +test("CLI rejects missing admin-token when env is absent", () => { + const result = runCli(["--graph-id", "graph-1"], { DB_SYNC_ADMIN_TOKEN: "" }); + + assert.equal(result.status, 1); + assert.match(result.stderr, /Missing admin token/); +}); + +test("writeSnapshotSqlite writes kvs-only sqlite like local dbs", () => { + const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "db-sync-download-test-")); + const dbPath = path.join(tmpDir, "graph-debug.sqlite"); + + writeSnapshotSqlite({ + outputPath: dbPath, + graphId: "graph-1", + snapshotKey: "graph-1/snapshot-123.snapshot", + snapshotUrl: "https://api.logseq.com/assets/graph-1/snapshot-123.snapshot", + contentEncoding: "gzip", + rawBytes: 512, + lines: ["line-1", "line-2", "line-3"], + }); + + const db = new Database(dbPath, { readonly: true }); + const tableNames = db + .prepare("select name from sqlite_master where type = 'table' order by name") + .all() + .map((row) => row.name); + const rowCount = db.prepare("select count(1) as count from kvs").get().count; + const row3 = db.prepare("select addr, content, addresses from kvs where addr = 3").get(); + + assert.deepEqual(tableNames, ["kvs"]); + assert.equal(rowCount, 3); + assert.equal(row3.addr, 3); + assert.equal(row3.content, "line-3"); + assert.equal(row3.addresses, null); + + db.close(); +}); diff --git a/deps/db-sync/worker/scripts/graph_user_lib.js b/deps/db-sync/worker/scripts/graph_user_lib.js new file mode 100644 index 0000000000..0760bb58ac --- /dev/null +++ b/deps/db-sync/worker/scripts/graph_user_lib.js @@ -0,0 +1,191 @@ +const { execFileSync } = require("node:child_process"); +const path = require("node:path"); + +const repoRoot = path.resolve(__dirname, "..", ".."); +const defaultConfigPath = path.join(repoRoot, "worker", "wrangler.toml"); + +function fail(message) { + console.error(message); + process.exit(1); +} + +function escapeSqlValue(value) { + return value.replaceAll("'", "''"); +} + +function sqlBooleanToBool(value) { + if (value === null || value === undefined) return null; + return Number(value) === 1; +} + +function sqlTimestampToIso(value) { + if (value === null || value === undefined || value === "") return null; + const timestamp = Number(value); + return Number.isFinite(timestamp) ? new Date(timestamp).toISOString() : null; +} + +function buildUserGraphsSql({ lookupField, lookupValue, ownedOnly = false }) { + const escapedValue = escapeSqlValue(lookupValue); + const memberUnion = ownedOnly + ? "" + : ` + union all + select g.graph_id, + g.graph_name, + g.user_id as owner_user_id, + m.role as access_role, + m.invited_by, + g.schema_version, + g.graph_e2ee, + g.graph_ready_for_use, + g.created_at, + g.updated_at + from graph_members m + join graphs g on g.graph_id = m.graph_id + join target_user u on m.user_id = u.id + where g.user_id <> u.id`; + + return `with target_user as ( + select id, email, username + from users + where ${lookupField} = '${escapedValue}' + limit 1 +), +matching_graphs as ( + select g.graph_id, + g.graph_name, + g.user_id as owner_user_id, + 'owner' as access_role, + null as invited_by, + g.schema_version, + g.graph_e2ee, + g.graph_ready_for_use, + g.created_at, + g.updated_at + from graphs g + join target_user u on g.user_id = u.id${memberUnion} +) +select u.id as user_id, + u.email as user_email, + u.username as user_username, + g.graph_id, + g.graph_name, + g.access_role, + g.invited_by, + g.owner_user_id, + owner.email as owner_email, + owner.username as owner_username, + g.schema_version, + g.graph_e2ee, + g.graph_ready_for_use, + g.created_at, + g.updated_at +from target_user u +left join matching_graphs g on 1 = 1 +left join users owner on owner.id = g.owner_user_id +order by g.updated_at desc;`; +} + +function buildWranglerArgs({ database, config, env, sql }) { + return [ + "--yes", + "wrangler", + "d1", + "execute", + database, + "--config", + config, + "--env", + env, + "--remote", + "--json", + "--command", + sql, + ]; +} + +function runWranglerQuery(args) { + const output = execFileSync("npx", args, { + cwd: repoRoot, + encoding: "utf8", + stdio: ["ignore", "pipe", "inherit"], + }); + + return JSON.parse(output); +} + +function parseWranglerResults(output) { + if (!Array.isArray(output) || output.length === 0) { + throw new Error("Unexpected empty response from wrangler."); + } + + const [statement] = output; + if (!statement.success) { + throw new Error("Wrangler reported an unsuccessful D1 query."); + } + + return Array.isArray(statement.results) ? statement.results : []; +} + +function formatUserGraphsResult(rows) { + if (rows.length === 0) { + return null; + } + + const [firstRow] = rows; + const graphs = rows + .filter((row) => row.graph_id) + .map((row) => ({ + graph_id: row.graph_id, + graph_name: row.graph_name, + access_role: row.access_role, + invited_by: row.invited_by ?? null, + owner_user_id: row.owner_user_id, + owner_username: row.owner_username ?? null, + owner_email: row.owner_email ?? null, + schema_version: row.schema_version ?? null, + graph_e2ee: sqlBooleanToBool(row.graph_e2ee), + graph_ready_for_use: sqlBooleanToBool(row.graph_ready_for_use), + created_at: sqlTimestampToIso(row.created_at), + updated_at: sqlTimestampToIso(row.updated_at), + })); + + return { + user: { + user_id: firstRow.user_id, + username: firstRow.user_username ?? null, + email: firstRow.user_email ?? null, + }, + graphs, + }; +} + +function printUserGraphsTable(result, countLabel = "Graphs") { + console.log( + `User: ${result.user.user_id}` + + (result.user.username ? ` (${result.user.username})` : "") + + (result.user.email ? ` <${result.user.email}>` : ""), + ); + console.log(`${countLabel}: ${result.graphs.length}`); + if (result.graphs.length > 0) { + console.table(result.graphs); + } +} + +function buildAdminGraphDeleteUrl(baseUrl, graphId) { + const normalizedBaseUrl = baseUrl.replace(/\/+$/, ""); + return `${normalizedBaseUrl}/admin/graphs/${encodeURIComponent(graphId)}`; +} + +module.exports = { + buildAdminGraphDeleteUrl, + buildUserGraphsSql, + buildWranglerArgs, + defaultConfigPath, + fail, + formatUserGraphsResult, + parseWranglerResults, + printUserGraphsTable, + repoRoot, + runWranglerQuery, +}; diff --git a/deps/db-sync/worker/scripts/show_graphs_for_user.js b/deps/db-sync/worker/scripts/show_graphs_for_user.js new file mode 100644 index 0000000000..b4a69b56dc --- /dev/null +++ b/deps/db-sync/worker/scripts/show_graphs_for_user.js @@ -0,0 +1,104 @@ +#!/usr/bin/env node + +const path = require("node:path"); +const { parseArgs } = require("node:util"); +const { + buildUserGraphsSql, + buildWranglerArgs, + defaultConfigPath, + fail, + formatUserGraphsResult, + parseWranglerResults, + printUserGraphsTable, + runWranglerQuery, +} = require("./graph_user_lib"); + +function printHelp() { + console.log(`Show db-sync graphs for a user from a remote D1 environment. + +Usage: + node worker/scripts/show_graphs_for_user.js --username [--env prod] [--json] + node worker/scripts/show_graphs_for_user.js --user-id [--env prod] [--json] + +Options: + --username Look up the target user by username. + --user-id Look up the target user by user id. + --env Wrangler environment to use. Defaults to "prod". + --database D1 binding or database name. Defaults to "DB". + --config Wrangler config path. Defaults to worker/wrangler.toml. + --json Print JSON instead of a table. + --help Show this message. +`); +} + +function parseCliArgs(argv) { + const { values } = parseArgs({ + args: argv, + options: { + username: { type: "string" }, + "user-id": { type: "string" }, + env: { type: "string", default: "prod" }, + database: { type: "string", default: "DB" }, + config: { type: "string", default: defaultConfigPath }, + json: { type: "boolean", default: false }, + help: { type: "boolean", default: false }, + }, + strict: true, + allowPositionals: false, + }); + + if (values.help) { + printHelp(); + process.exit(0); + } + + const lookupCount = Number(Boolean(values.username)) + Number(Boolean(values["user-id"])); + if (lookupCount !== 1) { + fail("Pass exactly one of --username or --user-id."); + } + + return { + lookupField: values.username ? "username" : "id", + lookupLabel: values.username ? "username" : "user-id", + lookupValue: values.username ?? values["user-id"], + env: values.env, + database: values.database, + config: path.resolve(values.config), + json: values.json, + }; +} + +function main() { + const options = parseCliArgs(process.argv.slice(2)); + const sql = buildUserGraphsSql(options); + const wranglerArgs = buildWranglerArgs({ + database: options.database, + config: options.config, + env: options.env, + sql, + }); + const rows = parseWranglerResults(runWranglerQuery(wranglerArgs)); + const result = formatUserGraphsResult(rows); + + if (!result) { + fail(`No user found for ${options.lookupLabel}=${options.lookupValue}.`); + } + + if (options.json) { + console.log(JSON.stringify(result, null, 2)); + } else { + printUserGraphsTable(result); + } +} + +if (require.main === module) { + try { + main(); + } catch (error) { + fail(error instanceof Error ? error.message : String(error)); + } +} + +module.exports = { + parseCliArgs, +}; diff --git a/deps/db-sync/yarn.lock b/deps/db-sync/yarn.lock index d51aa535d8..439c283428 100644 --- a/deps/db-sync/yarn.lock +++ b/deps/db-sync/yarn.lock @@ -2,19 +2,15 @@ # yarn lockfile v1 -"@apm-js-collab/code-transformer@^0.8.0": - version "0.8.2" - resolved "https://registry.yarnpkg.com/@apm-js-collab/code-transformer/-/code-transformer-0.8.2.tgz#a3160f16d1c4df9cb81303527287ad18d00994d1" - integrity sha512-YRjJjNq5KFSjDUoqu5pFUWrrsvGOxl6c3bu+uMFc9HNNptZ2rNU/TI2nLw4jnhQNtka972Ee2m3uqbvDQtPeCA== - -"@apm-js-collab/tracing-hooks@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@apm-js-collab/tracing-hooks/-/tracing-hooks-0.3.1.tgz#414d3a93c3a15d8be543a3fac561f7c602b6a588" - integrity sha512-Vu1CbmPURlN5fTboVuKMoJjbO5qcq9fA5YXpskx3dXe/zTBvjODFoerw+69rVBlRLrJpwPqSDqEuJDEKIrTldw== +"@fastify/otel@0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@fastify/otel/-/otel-0.17.1.tgz#a7f13edc40dbc2e0c2a59d54e388f11e4d2235ce" + integrity sha512-K4wyxfUZx2ux5o+b6BtTqouYFVILohLZmSbA2tKUueJstNcBnoGPVhllCaOvbQ3ZrXdUxUC/fyrSWSCqHhdOPg== dependencies: - "@apm-js-collab/code-transformer" "^0.8.0" - debug "^4.4.1" - module-details-from-path "^1.0.4" + "@opentelemetry/core" "^2.0.0" + "@opentelemetry/instrumentation" "^0.212.0" + "@opentelemetry/semantic-conventions" "^1.28.0" + minimatch "^10.2.4" "@opentelemetry/api-logs@0.207.0": version "0.207.0" @@ -23,10 +19,17 @@ dependencies: "@opentelemetry/api" "^1.3.0" -"@opentelemetry/api-logs@0.211.0": - version "0.211.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.211.0.tgz#32d9ed98939956a84d4e2ff5e01598cb9d28d744" - integrity sha512-swFdZq8MCdmdR22jTVGQDhwqDzcI4M10nhjXkLr1EsIzXgZBqm4ZlmmcWsg3TSNf+3mzgOiqveXmBLZuDi2Lgg== +"@opentelemetry/api-logs@0.212.0": + version "0.212.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.212.0.tgz#ec66a0951b84b1f082e13fd8a027b9f9d65a3f7a" + integrity sha512-TEEVrLbNROUkYY51sBJGk7lO/OLjuepch8+hmpM6ffMJQ2z/KVCjdHuCFX6fJj8OkJP2zckPjrJzQtXU3IAsFg== + dependencies: + "@opentelemetry/api" "^1.3.0" + +"@opentelemetry/api-logs@0.213.0": + version "0.213.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.213.0.tgz#c7abc7d3c4586cfbfd737c0a2fcfb2323a9def75" + integrity sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw== dependencies: "@opentelemetry/api" "^1.3.0" @@ -35,216 +38,223 @@ resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.9.0.tgz#d03eba68273dc0f7509e2a3d5cba21eae10379fe" integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg== -"@opentelemetry/context-async-hooks@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/context-async-hooks/-/context-async-hooks-2.5.0.tgz#0e6bf31f0dbdd159731f7dbcd266d20f028a6915" - integrity sha512-uOXpVX0ZjO7heSVjhheW2XEPrhQAWr2BScDPoZ9UDycl5iuHG+Usyc3AIfG6kZeC1GyLpMInpQ6X5+9n69yOFw== +"@opentelemetry/context-async-hooks@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/context-async-hooks/-/context-async-hooks-2.6.0.tgz#6c824e900630b378233c1a78ca7f0dc5a3b460b2" + integrity sha512-L8UyDwqpTcbkIK5cgwDRDYDoEhQoj8wp8BwsO19w3LB1Z41yEQm2VJyNfAi9DrLP/YTqXqWpKHyZfR9/tFYo1Q== -"@opentelemetry/core@2.5.0", "@opentelemetry/core@^2.0.0", "@opentelemetry/core@^2.5.0": +"@opentelemetry/core@2.6.0", "@opentelemetry/core@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-2.6.0.tgz#719c829ed98bd7af808a2d2c83374df1fd1f3c66" + integrity sha512-HLM1v2cbZ4TgYN6KEOj+Bbj8rAKriOdkF9Ed3tG25FoprSiQl7kYc+RRT6fUZGOvx0oMi5U67GoFdT+XUn8zEg== + dependencies: + "@opentelemetry/semantic-conventions" "^1.29.0" + +"@opentelemetry/core@^2.0.0": version "2.5.0" resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-2.5.0.tgz#3b2ac6cf471ed9a85eea836048a4de77a2e549d3" integrity sha512-ka4H8OM6+DlUhSAZpONu0cPBtPPTQKxbxVzC4CzVx5+K4JnroJVBtDzLAMx4/3CDTJXRvVFhpFjtl4SaiTNoyQ== dependencies: "@opentelemetry/semantic-conventions" "^1.29.0" -"@opentelemetry/instrumentation-amqplib@0.58.0": - version "0.58.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.58.0.tgz#e3dc86ebfa7d72fe861a63b1c24a062faeb64a8c" - integrity sha512-fjpQtH18J6GxzUZ+cwNhWUpb71u+DzT7rFkg5pLssDGaEber91Y2WNGdpVpwGivfEluMlNMZumzjEqfg8DeKXQ== +"@opentelemetry/instrumentation-amqplib@0.60.0": + version "0.60.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.60.0.tgz#a2b2abe3cf433bea166c18a703c8ddf6accf83da" + integrity sha512-q/B2IvoVXRm1M00MvhnzpMN6rKYOszPXVsALi6u0ss4AYHe+TidZEtLW9N1ZhrobI1dSriHnBqqtAOZVAv07sg== dependencies: "@opentelemetry/core" "^2.0.0" - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.33.0" -"@opentelemetry/instrumentation-connect@0.54.0": - version "0.54.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.54.0.tgz#87312850844b6c57976d00bd3256d55650543772" - integrity sha512-43RmbhUhqt3uuPnc16cX6NsxEASEtn8z/cYV8Zpt6EP4p2h9s4FNuJ4Q9BbEQ2C0YlCCB/2crO1ruVz/hWt8fA== +"@opentelemetry/instrumentation-connect@0.56.0": + version "0.56.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.56.0.tgz#8d846d2f7cf1f6b2723e5b0ff5595e8d31cb7446" + integrity sha512-PKp+sSZ7AfzMvGgO3VCyo1inwNu+q7A1k9X88WK4PQ+S6Hp7eFk8pie+sWHDTaARovmqq5V2osav3lQej2B0nw== dependencies: "@opentelemetry/core" "^2.0.0" - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.27.0" "@types/connect" "3.4.38" -"@opentelemetry/instrumentation-dataloader@0.28.0": - version "0.28.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.28.0.tgz#b857bb038e4a2a3b7278f3da89a1e210bb15339e" - integrity sha512-ExXGBp0sUj8yhm6Znhf9jmuOaGDsYfDES3gswZnKr4MCqoBWQdEFn6EoDdt5u+RdbxQER+t43FoUihEfTSqsjA== - dependencies: - "@opentelemetry/instrumentation" "^0.211.0" - -"@opentelemetry/instrumentation-express@0.59.0": - version "0.59.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-express/-/instrumentation-express-0.59.0.tgz#c2ac7dcb4f9904926518408cdf4efb046e724382" - integrity sha512-pMKV/qnHiW/Q6pmbKkxt0eIhuNEtvJ7sUAyee192HErlr+a1Jx+FZ3WjfmzhQL1geewyGEiPGkmjjAgNY8TgDA== - dependencies: - "@opentelemetry/core" "^2.0.0" - "@opentelemetry/instrumentation" "^0.211.0" - "@opentelemetry/semantic-conventions" "^1.27.0" - -"@opentelemetry/instrumentation-fs@0.30.0": +"@opentelemetry/instrumentation-dataloader@0.30.0": version "0.30.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.30.0.tgz#5e28edde0591dc4ffa471a86a68f91e737fe31fb" - integrity sha512-n3Cf8YhG7reaj5dncGlRIU7iT40bxPOjsBEA5Bc1a1g6e9Qvb+JFJ7SEiMlPbUw4PBmxE3h40ltE8LZ3zVt6OA== + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.30.0.tgz#7fbea57b27165324092639abf090ca3697eb7a80" + integrity sha512-MXHP2Q38cd2OhzEBKAIXUi9uBlPEYzF6BNJbyjUXBQ6kLaf93kRC41vNMIz0Nl5mnuwK7fDvKT+/lpx7BXRwdg== + dependencies: + "@opentelemetry/instrumentation" "^0.213.0" + +"@opentelemetry/instrumentation-express@0.61.0": + version "0.61.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-express/-/instrumentation-express-0.61.0.tgz#49b4d144ab6e9d6e035941a51f5e573e84e3647f" + integrity sha512-Xdmqo9RZuZlL29Flg8QdwrrX7eW1CZ7wFQPKHyXljNymgKhN1MCsYuqQ/7uxavhSKwAl7WxkTzKhnqpUApLMvQ== dependencies: "@opentelemetry/core" "^2.0.0" - "@opentelemetry/instrumentation" "^0.211.0" - -"@opentelemetry/instrumentation-generic-pool@0.54.0": - version "0.54.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.54.0.tgz#9f3ad0cedbfe5011efe4ebdc76c85a73a0b967a6" - integrity sha512-8dXMBzzmEdXfH/wjuRvcJnUFeWzZHUnExkmFJ2uPfa31wmpyBCMxO59yr8f/OXXgSogNgi/uPo9KW9H7LMIZ+g== - dependencies: - "@opentelemetry/instrumentation" "^0.211.0" - -"@opentelemetry/instrumentation-graphql@0.58.0": - version "0.58.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.58.0.tgz#3ca294ba410e04c920dc82ab4caa23ec1c2e1a2e" - integrity sha512-+yWVVY7fxOs3j2RixCbvue8vUuJ1inHxN2q1sduqDB0Wnkr4vOzVKRYl/Zy7B31/dcPS72D9lo/kltdOTBM3bQ== - dependencies: - "@opentelemetry/instrumentation" "^0.211.0" - -"@opentelemetry/instrumentation-hapi@0.57.0": - version "0.57.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.57.0.tgz#27b3a44a51444af3100a321f2e40623e89e5bb75" - integrity sha512-Os4THbvls8cTQTVA8ApLfZZztuuqGEeqog0XUnyRW7QVF0d/vOVBEcBCk1pazPFmllXGEdNbbat8e2fYIWdFbw== - dependencies: - "@opentelemetry/core" "^2.0.0" - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.27.0" -"@opentelemetry/instrumentation-http@0.211.0": - version "0.211.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-http/-/instrumentation-http-0.211.0.tgz#2f12f83f0c21d37917fd9710fb5b755f28858cf6" - integrity sha512-n0IaQ6oVll9PP84SjbOCwDjaJasWRHi6BLsbMLiT6tNj7QbVOkuA5sk/EfZczwI0j5uTKl1awQPivO/ldVtsqA== +"@opentelemetry/instrumentation-fs@0.32.0": + version "0.32.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.32.0.tgz#2010d86da8ab3d543f8e44c8fff81b94f904d91d" + integrity sha512-koR6apx0g0wX6RRiPpjA4AFQUQUbXrK16kq4/SZjVp7u5cffJhNkY4TnITxcGA4acGSPYAfx3NHRIv4Khn1axQ== dependencies: - "@opentelemetry/core" "2.5.0" - "@opentelemetry/instrumentation" "0.211.0" + "@opentelemetry/core" "^2.0.0" + "@opentelemetry/instrumentation" "^0.213.0" + +"@opentelemetry/instrumentation-generic-pool@0.56.0": + version "0.56.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.56.0.tgz#01560f52d5bac6fb6312a1f0bc74bf0939119894" + integrity sha512-fg+Jffs6fqrf0uQS0hom7qBFKsbtpBiBl8+Vkc63Gx8xh6pVh+FhagmiO6oM0m3vyb683t1lP7yGYq22SiDnqg== + dependencies: + "@opentelemetry/instrumentation" "^0.213.0" + +"@opentelemetry/instrumentation-graphql@0.61.0": + version "0.61.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.61.0.tgz#d1f896095a891c9576967645e7fcba935da82a94" + integrity sha512-pUiVASv6nh2XrerTvlbVHh7vKFzscpgwiQ/xvnZuAIzQ5lRjWVdRPUuXbvZJ/Yq79QsE81TZdJ7z9YsXiss1ew== + dependencies: + "@opentelemetry/instrumentation" "^0.213.0" + +"@opentelemetry/instrumentation-hapi@0.59.0": + version "0.59.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.59.0.tgz#412ea19e97ead684c5737e1f1aaa19ff940512d3" + integrity sha512-33wa4mEr+9+ztwdgLor1SeBu4Opz4IsmpcLETXAd3VmBrOjez8uQtrsOhPCa5Vhbm5gzDlMYTgFRLQzf8/YHFA== + dependencies: + "@opentelemetry/core" "^2.0.0" + "@opentelemetry/instrumentation" "^0.213.0" + "@opentelemetry/semantic-conventions" "^1.27.0" + +"@opentelemetry/instrumentation-http@0.213.0": + version "0.213.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-http/-/instrumentation-http-0.213.0.tgz#b379d6bcbae43a7d6d54070f3794527021f176c9" + integrity sha512-B978Xsm5XEPGhm1P07grDoaOFLHapJPkOG9h016cJsyWWxmiLnPu2M/4Nrm7UCkHSiLnkXgC+zVGUAIahy8EEA== + dependencies: + "@opentelemetry/core" "2.6.0" + "@opentelemetry/instrumentation" "0.213.0" "@opentelemetry/semantic-conventions" "^1.29.0" forwarded-parse "2.1.2" -"@opentelemetry/instrumentation-ioredis@0.59.0": - version "0.59.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.59.0.tgz#530d06aa67b73ea732414557adebe1dde7de430f" - integrity sha512-875UxzBHWkW+P4Y45SoFM2AR8f8TzBMD8eO7QXGCyFSCUMP5s9vtt/BS8b/r2kqLyaRPK6mLbdnZznK3XzQWvw== +"@opentelemetry/instrumentation-ioredis@0.61.0": + version "0.61.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.61.0.tgz#e862540cbf188d0ca368d3a75020d165cb8beefb" + integrity sha512-hsHDadUtAFbws1YSDc1XW0svGFKiUbqv2td1Cby+UAiwvojm1NyBo/taifH0t8CuFZ0x/2SDm0iuTwrM5pnVOg== dependencies: - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/redis-common" "^0.38.2" "@opentelemetry/semantic-conventions" "^1.33.0" -"@opentelemetry/instrumentation-kafkajs@0.20.0": - version "0.20.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.20.0.tgz#521db06d10d39f42e842ce336e5c1e48b3da2956" - integrity sha512-yJXOuWZROzj7WmYCUiyT27tIfqBrVtl1/TwVbQyWPz7rL0r1Lu7kWjD0PiVeTCIL6CrIZ7M2s8eBxsTAOxbNvw== +"@opentelemetry/instrumentation-kafkajs@0.22.0": + version "0.22.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.22.0.tgz#a3cf7aca003f96211e514a348b7568799efdfba1" + integrity sha512-wJU4IBQMUikdJAcTChLFqK5lo+flo7pahqd8DSLv7uMxsdOdAHj6RzKYAm8pPfUS6ItKYutYyuicwKaFwQKsoA== dependencies: - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.30.0" -"@opentelemetry/instrumentation-knex@0.55.0": - version "0.55.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.55.0.tgz#fefc17d854a107d99ab0dbc8933d5897efce1abd" - integrity sha512-FtTL5DUx5Ka/8VK6P1VwnlUXPa3nrb7REvm5ddLUIeXXq4tb9pKd+/ThB1xM/IjefkRSN3z8a5t7epYw1JLBJQ== +"@opentelemetry/instrumentation-knex@0.57.0": + version "0.57.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.57.0.tgz#d46622a3f82f3df2ba29c64498d6ef828a40457e" + integrity sha512-vMCSh8kolEm5rRsc+FZeTZymWmIJwc40hjIKnXH4O0Dv/gAkJJIRXCsPX5cPbe0c0j/34+PsENd0HqKruwhVYw== dependencies: - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.33.1" -"@opentelemetry/instrumentation-koa@0.59.0": - version "0.59.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.59.0.tgz#7df8850fa193a8f590e3fbcab00016e25db27041" - integrity sha512-K9o2skADV20Skdu5tG2bogPKiSpXh4KxfLjz6FuqIVvDJNibwSdu5UvyyBzRVp1rQMV6UmoIk6d3PyPtJbaGSg== +"@opentelemetry/instrumentation-koa@0.61.0": + version "0.61.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.61.0.tgz#c12f57b023834afb1c142c11746d560bcc288b5b" + integrity sha512-lvrfWe9ShK/D2X4brmx8ZqqeWPfRl8xekU0FCn7C1dHm5k6+rTOOi36+4fnaHAP8lig9Ux6XQ1D4RNIpPCt1WQ== dependencies: "@opentelemetry/core" "^2.0.0" - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.36.0" -"@opentelemetry/instrumentation-lru-memoizer@0.55.0": - version "0.55.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.55.0.tgz#776d5f10178adfbda7286b4f31adde8bb518d55a" - integrity sha512-FDBfT7yDGcspN0Cxbu/k8A0Pp1Jhv/m7BMTzXGpcb8ENl3tDj/51U65R5lWzUH15GaZA15HQ5A5wtafklxYj7g== +"@opentelemetry/instrumentation-lru-memoizer@0.57.0": + version "0.57.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.57.0.tgz#4da92ecd1bc5d5e9c7de28ea14ed57c9f29cfefd" + integrity sha512-cEqpUocSKJfwDtLYTTJehRLWzkZ2eoePCxfVIgGkGkb83fMB71O+y4MvRHJPbeV2bdoWdOVrl8uO0+EynWhTEA== dependencies: - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" -"@opentelemetry/instrumentation-mongodb@0.64.0": - version "0.64.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.64.0.tgz#0027c13fdd7506eb1f618998245edd244cc23cc7" - integrity sha512-pFlCJjweTqVp7B220mCvCld1c1eYKZfQt1p3bxSbcReypKLJTwat+wbL2YZoX9jPi5X2O8tTKFEOahO5ehQGsA== +"@opentelemetry/instrumentation-mongodb@0.66.0": + version "0.66.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.66.0.tgz#990bf4571382d3b02a9584927411c92c375d2fd4" + integrity sha512-d7m9QnAY+4TCWI4q1QRkfrc6fo/92VwssaB1DzQfXNRvu51b78P+HJlWP7Qg6N6nkwdb9faMZNBCZJfftmszkw== dependencies: - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.33.0" -"@opentelemetry/instrumentation-mongoose@0.57.0": - version "0.57.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.57.0.tgz#2ce3f3bbf66a255958c3a112a92079898d69f624" - integrity sha512-MthiekrU/BAJc5JZoZeJmo0OTX6ycJMiP6sMOSRTkvz5BrPMYDqaJos0OgsLPL/HpcgHP7eo5pduETuLguOqcg== +"@opentelemetry/instrumentation-mongoose@0.59.0": + version "0.59.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.59.0.tgz#8446ece86df59f09c630e7df6d794c8cd08f58d8" + integrity sha512-6/jWU+c1NgznkVLDU/2y0bXV2nJo3o9FWZ9mZ9nN6T/JBNRoMnVXZl2FdBmgH+a5MwaWLs5kmRJTP5oUVGIkPw== dependencies: "@opentelemetry/core" "^2.0.0" - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.33.0" -"@opentelemetry/instrumentation-mysql2@0.57.0": - version "0.57.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.57.0.tgz#928eda47c6f4ab193d3363fcab01d81a70adc46b" - integrity sha512-nHSrYAwF7+aV1E1V9yOOP9TchOodb6fjn4gFvdrdQXiRE7cMuffyLLbCZlZd4wsspBzVwOXX8mpURdRserAhNA== +"@opentelemetry/instrumentation-mysql2@0.59.0": + version "0.59.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.59.0.tgz#938cd4a294b7e4a6e8c3855b8cfe267c8d2e5493" + integrity sha512-n9/xrVCRBfG9egVbffnlU1uhr+HX0vF4GgtAB/Bvm48wpFgRidqD8msBMiym1kRYzmpWvJqTxNT47u1MkgBEdw== dependencies: - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.33.0" "@opentelemetry/sql-common" "^0.41.2" -"@opentelemetry/instrumentation-mysql@0.57.0": - version "0.57.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.57.0.tgz#74d42a1c6d20aee93996f8b6f6b7b69469748754" - integrity sha512-HFS/+FcZ6Q7piM7Il7CzQ4VHhJvGMJWjx7EgCkP5AnTntSN5rb5Xi3TkYJHBKeR27A0QqPlGaCITi93fUDs++Q== +"@opentelemetry/instrumentation-mysql@0.59.0": + version "0.59.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.59.0.tgz#bf43cafbac5928236ea53704a52c718349c22e38" + integrity sha512-r+V/Fh0sm7Ga8/zk/TI5H5FQRAjwr0RrpfPf8kNIehlsKf12XnvIaZi8ViZkpX0gyPEpLXqzqWD6QHlgObgzZw== dependencies: - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.33.0" "@types/mysql" "2.15.27" -"@opentelemetry/instrumentation-pg@0.63.0": - version "0.63.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.63.0.tgz#852ca5519d756c613bb9f3153a5e70c2b805e5cf" - integrity sha512-dKm/ODNN3GgIQVlbD6ZPxwRc3kleLf95hrRWXM+l8wYo+vSeXtEpQPT53afEf6VFWDVzJK55VGn8KMLtSve/cg== +"@opentelemetry/instrumentation-pg@0.65.0": + version "0.65.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.65.0.tgz#f1f76f8c57c5c6fec68c77ce6ee104fee5de13e1" + integrity sha512-W0zpHEIEuyZ8zvb3njaX9AAbHgPYOsSWVOoWmv1sjVRSF6ZpBqtlxBWbU+6hhq1TFWBeWJOXZ8nZS/PUFpLJYQ== dependencies: "@opentelemetry/core" "^2.0.0" - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.34.0" "@opentelemetry/sql-common" "^0.41.2" "@types/pg" "8.15.6" "@types/pg-pool" "2.0.7" -"@opentelemetry/instrumentation-redis@0.59.0": - version "0.59.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-redis/-/instrumentation-redis-0.59.0.tgz#44c1bd7852cdadbe77c1bdfa94185528012558cf" - integrity sha512-JKv1KDDYA2chJ1PC3pLP+Q9ISMQk6h5ey+99mB57/ARk0vQPGZTTEb4h4/JlcEpy7AYT8HIGv7X6l+br03Neeg== +"@opentelemetry/instrumentation-redis@0.61.0": + version "0.61.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-redis/-/instrumentation-redis-0.61.0.tgz#b43b9c3b5d0b124f2e60b055e4529a3a4b55dbc4" + integrity sha512-JnPexA034/0UJRsvH96B0erQoNOqKJZjE2ZRSw9hiTSC23LzE0nJE/u6D+xqOhgUhRnhhcPHq4MdYtmUdYTF+Q== dependencies: - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/redis-common" "^0.38.2" "@opentelemetry/semantic-conventions" "^1.27.0" -"@opentelemetry/instrumentation-tedious@0.30.0": - version "0.30.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.30.0.tgz#4a8906b5322c4add4132e6e086c23e17bc23626b" - integrity sha512-bZy9Q8jFdycKQ2pAsyuHYUHNmCxCOGdG6eg1Mn75RvQDccq832sU5OWOBnc12EFUELI6icJkhR7+EQKMBam2GA== +"@opentelemetry/instrumentation-tedious@0.32.0": + version "0.32.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.32.0.tgz#8204a14adb71adcbf7d72705244d606bb69e428a" + integrity sha512-BQS6gG8RJ1foEqfEZ+wxoqlwfCAzb1ZVG0ad8Gfe4x8T658HJCLGLd4E4NaoQd8EvPfLqOXgzGaE/2U4ytDSWA== dependencies: - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.33.0" "@types/tedious" "^4.0.14" -"@opentelemetry/instrumentation-undici@0.21.0": - version "0.21.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.21.0.tgz#dcb43a364c39e78217946aeb7aa09156e55f4c6c" - integrity sha512-gok0LPUOTz2FQ1YJMZzaHcOzDFyT64XJ8M9rNkugk923/p6lDGms/cRW1cqgqp6N6qcd6K6YdVHwPEhnx9BWbw== +"@opentelemetry/instrumentation-undici@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.23.0.tgz#e328bf6e53847ba7baa2a345d02221cc62917cec" + integrity sha512-LL0VySzKVR2cJSFVZaTYpZl1XTpBGnfzoQPe2W7McS2267ldsaEIqtQY6VXs2KCXN0poFjze5110PIpxHDaDGg== dependencies: "@opentelemetry/core" "^2.0.0" - "@opentelemetry/instrumentation" "^0.211.0" + "@opentelemetry/instrumentation" "^0.213.0" "@opentelemetry/semantic-conventions" "^1.24.0" -"@opentelemetry/instrumentation@0.211.0", "@opentelemetry/instrumentation@^0.211.0": - version "0.211.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.211.0.tgz#d45e20eafa75b5d3e8a9745a6205332893c55f37" - integrity sha512-h0nrZEC/zvI994nhg7EgQ8URIHt0uDTwN90r3qQUdZORS455bbx+YebnGeEuFghUT0HlJSrLF4iHw67f+odY+Q== +"@opentelemetry/instrumentation@0.213.0", "@opentelemetry/instrumentation@^0.213.0": + version "0.213.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.213.0.tgz#55362569efd0cba00aab9921a78dd20dfddf70b6" + integrity sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w== dependencies: - "@opentelemetry/api-logs" "0.211.0" - import-in-the-middle "^2.0.0" + "@opentelemetry/api-logs" "0.213.0" + import-in-the-middle "^3.0.0" require-in-the-middle "^8.0.0" "@opentelemetry/instrumentation@^0.207.0": @@ -256,33 +266,47 @@ import-in-the-middle "^2.0.0" require-in-the-middle "^8.0.0" +"@opentelemetry/instrumentation@^0.212.0": + version "0.212.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.212.0.tgz#238b6e3e2131217ff4acfe7e8e7b6ce1f0ac0ba0" + integrity sha512-IyXmpNnifNouMOe0I/gX7ENfv2ZCNdYTF0FpCsoBcpbIHzk81Ww9rQTYTnvghszCg7qGrIhNvWC8dhEifgX9Jg== + dependencies: + "@opentelemetry/api-logs" "0.212.0" + import-in-the-middle "^2.0.6" + require-in-the-middle "^8.0.0" + "@opentelemetry/redis-common@^0.38.2": version "0.38.2" resolved "https://registry.yarnpkg.com/@opentelemetry/redis-common/-/redis-common-0.38.2.tgz#cefa4f3e79db1cd54f19e233b7dfb56621143955" integrity sha512-1BCcU93iwSRZvDAgwUxC/DV4T/406SkMfxGqu5ojc3AvNI+I9GhV7v0J1HljsczuuhcnFLYqD5VmwVXfCGHzxA== -"@opentelemetry/resources@2.5.0", "@opentelemetry/resources@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-2.5.0.tgz#e7a575b2c534961a9db5153f9498931c786a607a" - integrity sha512-F8W52ApePshpoSrfsSk1H2yJn9aKjCrbpQF1M9Qii0GHzbfVeFUB+rc3X4aggyZD8x9Gu3Slua+s6krmq6Dt8g== +"@opentelemetry/resources@2.6.0", "@opentelemetry/resources@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-2.6.0.tgz#1a945dbb8986043d8b593c358d5d8e3de6becf5a" + integrity sha512-D4y/+OGe3JSuYUCBxtH5T9DSAWNcvCb/nQWIga8HNtXTVPQn59j0nTBAgaAXxUVBDl40mG3Tc76b46wPlZaiJQ== dependencies: - "@opentelemetry/core" "2.5.0" + "@opentelemetry/core" "2.6.0" "@opentelemetry/semantic-conventions" "^1.29.0" -"@opentelemetry/sdk-trace-base@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.5.0.tgz#4b96ae2494a4de5e3bfb36ef7459b30a1ce3332a" - integrity sha512-VzRf8LzotASEyNDUxTdaJ9IRJ1/h692WyArDBInf5puLCjxbICD6XkHgpuudis56EndyS7LYFmtTMny6UABNdQ== +"@opentelemetry/sdk-trace-base@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.6.0.tgz#d7e752a0906f2bcae3c1261e224aef3e3b3746f9" + integrity sha512-g/OZVkqlxllgFM7qMKqbPV9c1DUPhQ7d4n3pgZFcrnrNft9eJXZM2TNHTPYREJBrtNdRytYyvwjgL5geDKl3EQ== dependencies: - "@opentelemetry/core" "2.5.0" - "@opentelemetry/resources" "2.5.0" + "@opentelemetry/core" "2.6.0" + "@opentelemetry/resources" "2.6.0" "@opentelemetry/semantic-conventions" "^1.29.0" -"@opentelemetry/semantic-conventions@^1.24.0", "@opentelemetry/semantic-conventions@^1.27.0", "@opentelemetry/semantic-conventions@^1.29.0", "@opentelemetry/semantic-conventions@^1.30.0", "@opentelemetry/semantic-conventions@^1.33.0", "@opentelemetry/semantic-conventions@^1.33.1", "@opentelemetry/semantic-conventions@^1.34.0", "@opentelemetry/semantic-conventions@^1.36.0", "@opentelemetry/semantic-conventions@^1.39.0": +"@opentelemetry/semantic-conventions@^1.24.0", "@opentelemetry/semantic-conventions@^1.27.0", "@opentelemetry/semantic-conventions@^1.29.0", "@opentelemetry/semantic-conventions@^1.30.0", "@opentelemetry/semantic-conventions@^1.33.0", "@opentelemetry/semantic-conventions@^1.33.1", "@opentelemetry/semantic-conventions@^1.34.0", "@opentelemetry/semantic-conventions@^1.36.0": version "1.39.0" resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.39.0.tgz#f653b2752171411feb40310b8a8953d7e5c543b7" integrity sha512-R5R9tb2AXs2IRLNKLBJDynhkfmx7mX0vi8NkhZb3gUkPWHn6HXk5J8iQ/dql0U3ApfWym4kXXmBDRGO+oeOfjg== +"@opentelemetry/semantic-conventions@^1.28.0", "@opentelemetry/semantic-conventions@^1.40.0": + version "1.40.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.40.0.tgz#10b2944ca559386590683392022a897eefd011d3" + integrity sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw== + "@opentelemetry/sql-common@^0.41.2": version "0.41.2" resolved "https://registry.yarnpkg.com/@opentelemetry/sql-common/-/sql-common-0.41.2.tgz#7f4a14166cfd6c9ffe89096db1cc75eaf6443b19" @@ -290,142 +314,141 @@ dependencies: "@opentelemetry/core" "^2.0.0" -"@prisma/instrumentation@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@prisma/instrumentation/-/instrumentation-7.2.0.tgz#9409a436d8f98e8950c8659aeeba045c4a07e891" - integrity sha512-Rh9Z4x5kEj1OdARd7U18AtVrnL6rmLSI0qYShaB4W7Wx5BKbgzndWF+QnuzMb7GLfVdlT5aYCXoPQVYuYtVu0g== +"@prisma/instrumentation@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@prisma/instrumentation/-/instrumentation-7.4.2.tgz#b05e814d0647343febd26a8ccb039d27ccc69eca" + integrity sha512-r9JfchJF1Ae6yAxcaLu/V1TGqBhAuSDe3mRNOssBfx1rMzfZ4fdNvrgUBwyb/TNTGXFxlH9AZix5P257x07nrg== dependencies: "@opentelemetry/instrumentation" "^0.207.0" -"@sentry/cli-darwin@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@sentry/cli-darwin/-/cli-darwin-3.1.0.tgz#dd7b1e4e14e731206bc1b18717cfbc264845dbc8" - integrity sha512-xT1WlCHenGGO29Lq/wKaIthdqZzNzZhlPs7dXrzlBx9DyA2Jnl0g7WEau0oWi8GyJGVRXCJMiCydR//Tb5qVwA== +"@sentry/cli-darwin@3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@sentry/cli-darwin/-/cli-darwin-3.3.3.tgz#4c821c8d4b676a0159307341941453ba1eb8ecec" + integrity sha512-P8DoL79eX5fhKCfBHHl7xwwTShDPOb2drJC8lizZ3v1iS1JLPrNweM1KEzDefR30zH1wghbLSwsYv/svWdM3wA== -"@sentry/cli-linux-arm64@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@sentry/cli-linux-arm64/-/cli-linux-arm64-3.1.0.tgz#cdacbea691c98d3954832871816d3b0e4f3c72c9" - integrity sha512-Jm/iHLKiHxrZYlAq2tT07amiegEVCOAQT9Unilr6djjcZzS2tcI9ThSRQvjP9tFpFRKop+NyNGE3XHXf69r00g== +"@sentry/cli-linux-arm64@3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@sentry/cli-linux-arm64/-/cli-linux-arm64-3.3.3.tgz#e49fcee71911fee0cc2fd7ea4ebde20fc3bbec94" + integrity sha512-9jaX9RGyTpjo9u2urNi5ciBDpRdTt107YJpFXev+BFHJ6Lwz/owgRuYzPRfAen8hKkOOFheZ3iy07kl576eZzw== -"@sentry/cli-linux-arm@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@sentry/cli-linux-arm/-/cli-linux-arm-3.1.0.tgz#1d01dd5a00e9a5bd8aa26d433cc55d2f64b4a6c3" - integrity sha512-kbP3/8/Ct/Jbm569KDXbFIyMyPypIegObvIT7LdSsfdYSZdBd396GV7vUpSGKiLUVVN0xjn8OqQ48AVGfjmuMg== +"@sentry/cli-linux-arm@3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@sentry/cli-linux-arm/-/cli-linux-arm-3.3.3.tgz#6d7e466aa6286d988bb50a5d07540bc2a7e28ea8" + integrity sha512-a7o/huozveLIImXHe0HDwEMVhvDopOP2tLcopvV7sQsVE8f/QOShR5FudKjmiaZz2opdLzPJO9pv5WuF9jAZPg== -"@sentry/cli-linux-i686@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@sentry/cli-linux-i686/-/cli-linux-i686-3.1.0.tgz#c785a4df8b9e89ffee0c2e5b867d89bae81df970" - integrity sha512-f/PK/EGK5vFOy7LC4Riwb+BEE20Nk7RbEFEMjvRq26DpETCrZYUGlbpIKvJFKOaUmr79aAkFCA/EjJiYfcQP2Q== +"@sentry/cli-linux-i686@3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@sentry/cli-linux-i686/-/cli-linux-i686-3.3.3.tgz#bd1206cc17223a92dde2ae616a7641f526c444dd" + integrity sha512-VngQYzR2kDm2oojCuYF20ebLTK8HKvEwxe785J6gxob8Ef9JvZkERyUqENYppBa9aVgN0pandqPAqOECWykTMA== -"@sentry/cli-linux-x64@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@sentry/cli-linux-x64/-/cli-linux-x64-3.1.0.tgz#dda9400547a40933838edf42a1080626eef7bef8" - integrity sha512-T+v8x1ujhixZrOrH0sVhsW6uLwK4n0WS+B+5xV46WqUKe32cbYotursp2y53ROjgat8SQDGeP/VnC0Qa3Y2fEA== +"@sentry/cli-linux-x64@3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@sentry/cli-linux-x64/-/cli-linux-x64-3.3.3.tgz#6d189a7b8c1a9b826948112cc837349b625b47a0" + integrity sha512-rBxXQeIYGefUNI2cXHxEr0y3bhxDQjOD4G6j/gqLz/Dj+l8gJ/iKP64kTudnoViNIpn0pdYccG69th7zmzM/Fg== -"@sentry/cli-win32-arm64@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@sentry/cli-win32-arm64/-/cli-win32-arm64-3.1.0.tgz#435a9f836de0e6fad706fb18cfa74b6f0f468ca0" - integrity sha512-2DIPq6aW2DC34EDC9J0xwD+9BpFnKdFGdIcQUZMS+5pXlU6V7o8wpZxZAM8TdYNmsPkkQGKp7Dhl/arWpvNgrw== +"@sentry/cli-win32-arm64@3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@sentry/cli-win32-arm64/-/cli-win32-arm64-3.3.3.tgz#b67fa46b942ed6289404526d3175268b6babdd18" + integrity sha512-c52g+YS6BO0rzH8AEHqQPmpqZrw0GJjMWqy0tQ5jcqaGdaLVnxk0mMEubv8R6Dv5MR2LShoKjiNsaeVfrWIMUg== -"@sentry/cli-win32-i686@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@sentry/cli-win32-i686/-/cli-win32-i686-3.1.0.tgz#0a862b5593f7d8490659c5b80ed542cba14bf3bc" - integrity sha512-2NuywEiiZn6xJ1yAV2xjv/nuHiy6kZU5XR3RSAIrPdEZD1nBoMsH/gB2FufQw58Ziz/7otFcX+vtGpJjbIT5mQ== +"@sentry/cli-win32-i686@3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@sentry/cli-win32-i686/-/cli-win32-i686-3.3.3.tgz#68cda8186ea3b53857063dd79aeccb8a21057377" + integrity sha512-DygYzSY/+tS7oFj/mfeg/yzYxsQx3fO8cI+IWc2pns/at+JcJ9O5xyM/x/q55wOxpnwla7RL1D3rsqK2mqkYfg== -"@sentry/cli-win32-x64@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@sentry/cli-win32-x64/-/cli-win32-x64-3.1.0.tgz#0d491cf897c1414eddab122abfcdbf4a43575898" - integrity sha512-Ip405Yqdrr+l9TImsZOJz6c9Nb4zvXcmtOIBKLHc9cowpfXfmlqsHbDp7Xh4+k4L0uLr9i+8ilgQ6ypcuF4UCg== +"@sentry/cli-win32-x64@3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@sentry/cli-win32-x64/-/cli-win32-x64-3.3.3.tgz#6e445d062910ae6a8ab3e6b08929a0c0de21a991" + integrity sha512-i0glPcHwkqbVA2Y+0Yz7CD/l8TSkfft1a+lTU9yk/+DDU8WGkyArEAxAji9bGo4p+k5HIFC8OC2MwpKdcdFM4Q== -"@sentry/cli@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-3.1.0.tgz#67ca7d5f65cb36633379bf1f5bcdfacc4db5948d" - integrity sha512-ngnx6E8XjXpg1uzma45INfKCS8yurb/fl3cZdXTCa2wmek8b4N6WIlmOlTKFTBrV54OauF6mloJxAlpuzoQR6g== +"@sentry/cli@^3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-3.3.3.tgz#e5aed3ef88b6681647d84690727f6908cc8f6378" + integrity sha512-4CZtfgiOraX+BntMjYQhfLDArXwpqt3sEo5Zdj2pqWSZSd4yI3ncfQ21CsxLcI/sUQrjmD5Vzidu4/1OShyxtA== dependencies: progress "^2.0.3" proxy-from-env "^1.1.0" undici "^6.22.0" which "^2.0.2" optionalDependencies: - "@sentry/cli-darwin" "3.1.0" - "@sentry/cli-linux-arm" "3.1.0" - "@sentry/cli-linux-arm64" "3.1.0" - "@sentry/cli-linux-i686" "3.1.0" - "@sentry/cli-linux-x64" "3.1.0" - "@sentry/cli-win32-arm64" "3.1.0" - "@sentry/cli-win32-i686" "3.1.0" - "@sentry/cli-win32-x64" "3.1.0" + "@sentry/cli-darwin" "3.3.3" + "@sentry/cli-linux-arm" "3.3.3" + "@sentry/cli-linux-arm64" "3.3.3" + "@sentry/cli-linux-i686" "3.3.3" + "@sentry/cli-linux-x64" "3.3.3" + "@sentry/cli-win32-arm64" "3.3.3" + "@sentry/cli-win32-i686" "3.3.3" + "@sentry/cli-win32-x64" "3.3.3" -"@sentry/cloudflare@^10.38.0": - version "10.38.0" - resolved "https://registry.yarnpkg.com/@sentry/cloudflare/-/cloudflare-10.38.0.tgz#74a7a3571bd2be0c50f7a5c831151d26704bc322" - integrity sha512-g008TNjxPbS5csEem3u6jBO40qNY4Vky5q1hJXlUjoNnCDt+5vMLPMzVqJVVbAzWWU+dwjdiMzGeNjwn0RYwcQ== +"@sentry/cloudflare@^10.45.0": + version "10.45.0" + resolved "https://registry.yarnpkg.com/@sentry/cloudflare/-/cloudflare-10.45.0.tgz#3f4d6680eb2acfa7dfde2ea4cb1fe0c07889cb7b" + integrity sha512-4rXUCSnBu9MITm7Uj27tYxEhmHczamdMLfeipBjvgeFBJ3LUJBKqrfolCOL5d3q9in/CopgyhMxY7pgUwlCJ8w== dependencies: "@opentelemetry/api" "^1.9.0" - "@sentry/core" "10.38.0" + "@sentry/core" "10.45.0" -"@sentry/core@10.38.0": - version "10.38.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-10.38.0.tgz#391f2535fde084e3eff4b1d2d634aa5619629b34" - integrity sha512-1pubWDZE5y5HZEPMAZERP4fVl2NH3Ihp1A+vMoVkb3Qc66Diqj1WierAnStlZP7tCx0TBa0dK85GTW/ZFYyB9g== +"@sentry/core@10.45.0": + version "10.45.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-10.45.0.tgz#4bac78dd4815588d0089e6594ab20da5b5ed467e" + integrity sha512-s69UXxvefeQxuZ5nY7/THtTrIEvJxNVCp3ns4kwoCw1qMpgpvn/296WCKVmM7MiwnaAdzEKnAvLAwaxZc2nM7Q== -"@sentry/node-core@10.38.0": - version "10.38.0" - resolved "https://registry.yarnpkg.com/@sentry/node-core/-/node-core-10.38.0.tgz#39a0385bca18986072edf1ac5a2d050d9577aa7f" - integrity sha512-ErXtpedrY1HghgwM6AliilZPcUCoNNP1NThdO4YpeMq04wMX9/GMmFCu46TnCcg6b7IFIOSr2S4yD086PxLlHQ== +"@sentry/node-core@10.45.0": + version "10.45.0" + resolved "https://registry.yarnpkg.com/@sentry/node-core/-/node-core-10.45.0.tgz#2cd5eb05cb2f76a12db644565993a70e6c3abe53" + integrity sha512-KQZEvLKM344+EqXiA9HIzWbW5hzq6/9nnFUQ8niaBPoOgR9AiJhrccfIscfgb8vjkriiEtzE03OW/4h1CTgZ3Q== dependencies: - "@apm-js-collab/tracing-hooks" "^0.3.1" - "@sentry/core" "10.38.0" - "@sentry/opentelemetry" "10.38.0" - import-in-the-middle "^2.0.6" + "@sentry/core" "10.45.0" + "@sentry/opentelemetry" "10.45.0" + import-in-the-middle "^3.0.0" -"@sentry/node@^10.38.0": - version "10.38.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-10.38.0.tgz#dc618644d2a19e1a735d1f5fe1fb54792d00d991" - integrity sha512-wriyDtWDAoatn8EhOj0U4PJR1WufiijTsCGALqakOHbFiadtBJANLe6aSkXoXT4tegw59cz1wY4NlzHjYksaPw== +"@sentry/node@^10.45.0": + version "10.45.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-10.45.0.tgz#1844dcddf7ec0e4d6722d61340099fb690aa25df" + integrity sha512-Kpiq9lRGnJc1ex8SwxOBl+FLQNl4Y137BydVooP7AFiAYZ6ftwHsIEF1bcYXaipHMT1YHS2bdhC2UQaaB2jkuQ== dependencies: + "@fastify/otel" "0.17.1" "@opentelemetry/api" "^1.9.0" - "@opentelemetry/context-async-hooks" "^2.5.0" - "@opentelemetry/core" "^2.5.0" - "@opentelemetry/instrumentation" "^0.211.0" - "@opentelemetry/instrumentation-amqplib" "0.58.0" - "@opentelemetry/instrumentation-connect" "0.54.0" - "@opentelemetry/instrumentation-dataloader" "0.28.0" - "@opentelemetry/instrumentation-express" "0.59.0" - "@opentelemetry/instrumentation-fs" "0.30.0" - "@opentelemetry/instrumentation-generic-pool" "0.54.0" - "@opentelemetry/instrumentation-graphql" "0.58.0" - "@opentelemetry/instrumentation-hapi" "0.57.0" - "@opentelemetry/instrumentation-http" "0.211.0" - "@opentelemetry/instrumentation-ioredis" "0.59.0" - "@opentelemetry/instrumentation-kafkajs" "0.20.0" - "@opentelemetry/instrumentation-knex" "0.55.0" - "@opentelemetry/instrumentation-koa" "0.59.0" - "@opentelemetry/instrumentation-lru-memoizer" "0.55.0" - "@opentelemetry/instrumentation-mongodb" "0.64.0" - "@opentelemetry/instrumentation-mongoose" "0.57.0" - "@opentelemetry/instrumentation-mysql" "0.57.0" - "@opentelemetry/instrumentation-mysql2" "0.57.0" - "@opentelemetry/instrumentation-pg" "0.63.0" - "@opentelemetry/instrumentation-redis" "0.59.0" - "@opentelemetry/instrumentation-tedious" "0.30.0" - "@opentelemetry/instrumentation-undici" "0.21.0" - "@opentelemetry/resources" "^2.5.0" - "@opentelemetry/sdk-trace-base" "^2.5.0" - "@opentelemetry/semantic-conventions" "^1.39.0" - "@prisma/instrumentation" "7.2.0" - "@sentry/core" "10.38.0" - "@sentry/node-core" "10.38.0" - "@sentry/opentelemetry" "10.38.0" - import-in-the-middle "^2.0.6" - minimatch "^9.0.0" + "@opentelemetry/context-async-hooks" "^2.6.0" + "@opentelemetry/core" "^2.6.0" + "@opentelemetry/instrumentation" "^0.213.0" + "@opentelemetry/instrumentation-amqplib" "0.60.0" + "@opentelemetry/instrumentation-connect" "0.56.0" + "@opentelemetry/instrumentation-dataloader" "0.30.0" + "@opentelemetry/instrumentation-express" "0.61.0" + "@opentelemetry/instrumentation-fs" "0.32.0" + "@opentelemetry/instrumentation-generic-pool" "0.56.0" + "@opentelemetry/instrumentation-graphql" "0.61.0" + "@opentelemetry/instrumentation-hapi" "0.59.0" + "@opentelemetry/instrumentation-http" "0.213.0" + "@opentelemetry/instrumentation-ioredis" "0.61.0" + "@opentelemetry/instrumentation-kafkajs" "0.22.0" + "@opentelemetry/instrumentation-knex" "0.57.0" + "@opentelemetry/instrumentation-koa" "0.61.0" + "@opentelemetry/instrumentation-lru-memoizer" "0.57.0" + "@opentelemetry/instrumentation-mongodb" "0.66.0" + "@opentelemetry/instrumentation-mongoose" "0.59.0" + "@opentelemetry/instrumentation-mysql" "0.59.0" + "@opentelemetry/instrumentation-mysql2" "0.59.0" + "@opentelemetry/instrumentation-pg" "0.65.0" + "@opentelemetry/instrumentation-redis" "0.61.0" + "@opentelemetry/instrumentation-tedious" "0.32.0" + "@opentelemetry/instrumentation-undici" "0.23.0" + "@opentelemetry/resources" "^2.6.0" + "@opentelemetry/sdk-trace-base" "^2.6.0" + "@opentelemetry/semantic-conventions" "^1.40.0" + "@prisma/instrumentation" "7.4.2" + "@sentry/core" "10.45.0" + "@sentry/node-core" "10.45.0" + "@sentry/opentelemetry" "10.45.0" + import-in-the-middle "^3.0.0" -"@sentry/opentelemetry@10.38.0": - version "10.38.0" - resolved "https://registry.yarnpkg.com/@sentry/opentelemetry/-/opentelemetry-10.38.0.tgz#1472b33c3ab25504e8a5afd8126923083bf01c66" - integrity sha512-YPVhWfYmC7nD3EJqEHGtjp4fp5LwtAbE5rt9egQ4hqJlYFvr8YEz9sdoqSZxO0cZzgs2v97HFl/nmWAXe52G2Q== +"@sentry/opentelemetry@10.45.0": + version "10.45.0" + resolved "https://registry.yarnpkg.com/@sentry/opentelemetry/-/opentelemetry-10.45.0.tgz#f5040c78e7e46e22d3a45e1777b21d26cbd33e94" + integrity sha512-PmuGO+p/gC3ZQ8ddOeJ5P9ApnTTm35i12Bpuyb13AckCbNSJFvG2ggZda35JQOmiFU0kKYiwkoFAa8Mvj9od3Q== dependencies: - "@sentry/core" "10.38.0" + "@sentry/core" "10.45.0" "@types/connect@3.4.38": version "3.4.38" @@ -490,20 +513,20 @@ acorn@^8.15.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +balanced-match@^4.0.2: + version "4.0.4" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-4.0.4.tgz#bfb10662feed8196a2c62e7c68e17720c274179a" + integrity sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA== base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -better-sqlite3@^12.6.2: - version "12.6.2" - resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-12.6.2.tgz#770649f28a62e543a360f3dfa1afe4cc944b1937" - integrity sha512-8VYKM3MjCa9WcaSAI3hzwhmyHVlH8tiGFwf0RlTsZPWJ1I5MkzjiudCo4KC4DxOaL/53A5B1sI/IbldNFDbsKA== +better-sqlite3@^12.8.0: + version "12.8.0" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-12.8.0.tgz#ec9ccd4a426a35f3b9355c147af6c92a6ddd6862" + integrity sha512-RxD2Vd96sQDjQr20kdP+F+dK/1OUNiVOl200vKBZY8u0vTwysfolF6Hq+3ZK2+h8My9YvZhHsF+RSGZW2VYrPQ== dependencies: bindings "^1.5.0" prebuild-install "^7.1.1" @@ -524,12 +547,12 @@ bl@^4.0.3: inherits "^2.0.4" readable-stream "^3.4.0" -brace-expansion@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7" - integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== +brace-expansion@^5.0.2: + version "5.0.4" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.4.tgz#614daaecd0a688f660bbbc909a8748c3d80d4336" + integrity sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg== dependencies: - balanced-match "^1.0.0" + balanced-match "^4.0.2" buffer-from@^1.0.0: version "1.1.2" @@ -562,7 +585,7 @@ cjs-module-lexer@^2.2.0: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz#b3ca5101843389259ade7d88c77bd06ce55849ca" integrity sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ== -debug@^4.3.5, debug@^4.4.1: +debug@^4.3.5: version "4.4.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== @@ -633,6 +656,16 @@ import-in-the-middle@^2.0.0, import-in-the-middle@^2.0.6: cjs-module-lexer "^2.2.0" module-details-from-path "^1.0.4" +import-in-the-middle@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/import-in-the-middle/-/import-in-the-middle-3.0.0.tgz#720c12b4c07ea58b32a54667e70a022e18cc36a3" + integrity sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg== + dependencies: + acorn "^8.15.0" + acorn-import-attributes "^1.9.5" + cjs-module-lexer "^2.2.0" + module-details-from-path "^1.0.4" + inherits@^2.0.3, inherits@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" @@ -658,12 +691,12 @@ mimic-response@^3.1.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -minimatch@^9.0.0: - version "9.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" - integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== +minimatch@^10.2.4: + version "10.2.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.4.tgz#465b3accbd0218b8281f5301e27cedc697f96fde" + integrity sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg== dependencies: - brace-expansion "^2.0.1" + brace-expansion "^5.0.2" minimist@^1.2.0, minimist@^1.2.3: version "1.2.8" @@ -949,7 +982,7 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@^8.18.1, ws@^8.18.3: +ws@^8.18.1, ws@^8.19.0: version "8.19.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.19.0.tgz#ddc2bdfa5b9ad860204f5a72a4863a8895fd8c8b" integrity sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg== diff --git a/deps/db/bb.edn b/deps/db/bb.edn index f4e2662e37..597e24b36d 100644 --- a/deps/db/bb.edn +++ b/deps/db/bb.edn @@ -4,10 +4,10 @@ {logseq/bb-tasks #_{:local/root "../../../bb-tasks"} {:git/url "https://github.com/logseq/bb-tasks" - :git/sha "1d429e223baeade426d30a4ed1c8a110173a2402"}} + :git/sha "acb3d3d5d38c4ac16f617cb10ae6f99fe1b8de6e"}} :pods - {clj-kondo/clj-kondo {:version "2024.09.27"}} + {clj-kondo/clj-kondo {:version "2026.01.19"}} :tasks {test:load-all-namespaces-with-nbb diff --git a/deps/db/deps.edn b/deps/db/deps.edn index c54dff3713..c11109168a 100644 --- a/deps/db/deps.edn +++ b/deps/db/deps.edn @@ -5,19 +5,19 @@ ;; datascript/datascript {:local/root "../../../../datascript"} datascript-transit/datascript-transit {:mvn/version "0.3.0" :exclusions [datascript/datascript]} - cljs-bean/cljs-bean {:mvn/version "1.9.0"} - com.cognitect/transit-cljs {:mvn/version "0.8.280"} - org.flatland/ordered {:mvn/version "1.15.11"} + cljs-bean/cljs-bean {:mvn/version "1.9.0"} + com.cognitect/transit-cljs {:mvn/version "0.8.280"} + org.flatland/ordered {:mvn/version "1.15.12"} ;; Any other deps should be added here and to nbb.edn - logseq/common {:local/root "../common"} + logseq/common {:local/root "../common"} logseq/clj-fractional-indexing {:git/url "https://github.com/logseq/clj-fractional-indexing" :sha "1087f0fb18aa8e25ee3bbbb0db983b7a29bce270"} - borkdude/rewrite-edn {:mvn/version "0.4.9"} - metosin/malli {:mvn/version "0.16.1"} - medley/medley {:mvn/version "1.4.0"}} + borkdude/rewrite-edn {:mvn/version "0.5.9"} + metosin/malli {:mvn/version "0.16.1"} + medley/medley {:mvn/version "1.4.0"}} :aliases {:clj-kondo - {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2024.09.27"}} + {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.01.19"}} :main-opts ["-m" "clj-kondo.main"]}}} diff --git a/deps/db/nbb.edn b/deps/db/nbb.edn index d131a94b34..088fd80ed4 100644 --- a/deps/db/nbb.edn +++ b/deps/db/nbb.edn @@ -5,7 +5,7 @@ medley/medley {:mvn/version "1.4.0"} metosin/malli {:mvn/version "0.16.1"} ;; Used by db scripts with outliner.cli - borkdude/rewrite-edn {:mvn/version "0.4.9"} + borkdude/rewrite-edn {:mvn/version "0.5.9"} logseq/clj-fractional-indexing {:git/url "https://github.com/logseq/clj-fractional-indexing" :sha "1087f0fb18aa8e25ee3bbbb0db983b7a29bce270"} io.github.nextjournal/nbb-test-runner diff --git a/deps/db/package.json b/deps/db/package.json index bbaeee222d..6134c764db 100644 --- a/deps/db/package.json +++ b/deps/db/package.json @@ -4,10 +4,10 @@ "private": true, "devDependencies": { "@logseq/nbb-logseq": "github:logseq/nbb-logseq#feat-db-v33", - "fs-extra": "^11.3.0" + "fs-extra": "^11.3.4" }, "dependencies": { - "better-sqlite3": "^12.6.2" + "better-sqlite3": "^12.8.0" }, "scripts": { "test": "yarn nbb-logseq -cp test -m nextjournal.test-runner", diff --git a/deps/db/src/logseq/db.cljs b/deps/db/src/logseq/db.cljs index 01ce48aecd..771748715b 100644 --- a/deps/db/src/logseq/db.cljs +++ b/deps/db/src/logseq/db.cljs @@ -5,6 +5,7 @@ [clojure.walk :as walk] [datascript.conn :as dc] [datascript.core :as d] + [datascript.storage :as storage] [datascript.impl.entity :as de] [logseq.common.config :as common-config] [logseq.common.plural :as common-plural] @@ -13,13 +14,13 @@ [logseq.db.common.delete-blocks :as delete-blocks] ;; Load entity extensions [logseq.db.common.entity-plus :as entity-plus] [logseq.db.common.initial-data :as common-initial-data] - [logseq.db.common.normalize :as db-normalize] [logseq.db.frontend.class :as db-class] [logseq.db.frontend.db :as db-db] [logseq.db.frontend.entity-util :as entity-util] [logseq.db.frontend.property :as db-property] [logseq.db.frontend.validate :as db-validate] - [logseq.db.sqlite.util :as sqlite-util]) + [logseq.db.sqlite.util :as sqlite-util] + [logseq.common.log :as log]) (:refer-clojure :exclude [object?])) (def built-in? entity-util/built-in?) @@ -33,6 +34,7 @@ (defonce *transact-fn (atom nil)) (defonce *transact-invalid-callback (atom nil)) (defonce *transact-pipeline-fn (atom nil)) +(defonce *debounce-fn (atom nil)) (defn register-transact-fn! [f] @@ -43,11 +45,15 @@ (defn register-transact-pipeline-fn! [f] (when f (reset! *transact-pipeline-fn f))) +(defn register-debounce-fn! + [f] + (when f (reset! *debounce-fn f))) (defn- remove-temp-block-data [tx-data] (let [remove-block-temp-f (fn [m] - (->> (remove (fn [[k _v]] (= "block.temp" (namespace k))) m) + (->> (remove (fn [[k _v]] + (= "block.temp" (namespace k))) m) (into {})))] (keep (fn [data] (cond @@ -81,15 +87,6 @@ f)) tx-data)) -(comment - (defn- skip-db-validate? - [datoms] - (every? - (fn [d] - (contains? #{:logseq.property/created-by-ref :block/refs :block/tx-id} - (:a d))) - datoms))) - (defn- throw-if-page-has-block-parent! [db tx-data] (when (some (fn [d] (and (:added d) @@ -99,6 +96,15 @@ (throw (ex-info "Page can't have block as parent" {:tx-data tx-data})))) +(defn debounced-store-db + [conn] + (when-some [_storage (storage/storage @conn)] + (when-not (:batch-tx? @conn) + (let [f (if (exists? js/process) + d/store + (or @*debounce-fn d/store))] + (f @conn))))) + (defn- transact-sync [conn tx-data tx-meta] (try @@ -106,23 +112,25 @@ db-based? (entity-plus/db-based-graph? db)] (if (and db-based? (not - (or (:batch-temp-conn? @conn) - (:rtc-download-graph? tx-meta) + (or (:rtc-download-graph? tx-meta) (:reset-conn! tx-meta) (:initial-db? tx-meta) (:skip-validate-db? tx-meta false) + ;; used by `batch-transact-with-temp-conn!` + (:skip-validate-db? @conn) (:logseq.graph-parser.exporter/new-graph? tx-meta)))) (let [tx-report* (d/with db tx-data tx-meta) pipeline-f @*transact-pipeline-fn - tx-report (if-let [f pipeline-f] (f tx-report*) tx-report*) + tx-report (if pipeline-f (pipeline-f tx-report*) tx-report*) _ (throw-if-page-has-block-parent! (:db-after tx-report) (:tx-data tx-report)) [validate-result errors] (db-validate/validate-tx-report tx-report nil)] (cond validate-result - (when (and tx-report (seq (:tx-data tx-report))) + (when (and tx-report + (seq (:tx-data tx-report))) ;; perf enhancement: avoid repeated call on `d/with` (reset! conn (:db-after tx-report)) - (dc/store-after-transact! conn tx-report) + (debounced-store-db conn) (dc/run-callbacks conn tx-report)) :else @@ -181,36 +189,72 @@ (if-let [transact-fn @*transact-fn] (transact-fn repo-or-conn tx-data tx-meta) (transact-sync repo-or-conn tx-data tx-meta)))))) -(def remove-conflict-datoms db-normalize/remove-conflict-datoms) -(defn transact-with-temp-conn! +(defn batch-transact-with-temp-conn! "Validate db and store once for a batch transaction, the `temp` conn can still load data from disk, - however it can't write to the disk." + however it can't write to the disk. + This fn supports nested calls, however, don't rely on the tx-report for undo/redo." [conn tx-meta batch-tx-fn & {:keys [listen-db]}] (let [temp-conn (d/conn-from-db @conn) - *batch-tx-data (volatile! [])] + *batch-tx-data (volatile! []) + *complete? (volatile! false)] ;; can read from disk, write is disallowed (swap! temp-conn assoc :skip-store? true - :batch-temp-conn? true) + :batch-tx? true + :skip-validate-db? true) (d/listen! temp-conn ::temp-conn-batch-tx (fn [{:keys [tx-data] :as tx-report}] (vswap! *batch-tx-data into tx-data) (when (fn? listen-db) (listen-db tx-report)))) - (batch-tx-fn temp-conn *batch-tx-data) - (let [tx-data @*batch-tx-data - temp-after-db @temp-conn] - (d/unlisten! temp-conn ::temp-conn-batch-tx) - (reset! temp-conn nil) - (vreset! *batch-tx-data nil) - (when (seq tx-data) - ;; transact tx-data to `conn` and validate db - (let [tx-data' (->> - tx-data - remove-conflict-datoms - (db-normalize/replace-attr-retract-with-retract-entity temp-after-db))] - (transact! conn tx-data' tx-meta)))))) + (try + (batch-tx-fn temp-conn *batch-tx-data) + (vreset! *complete? true) + (finally + (let [tx-data @*batch-tx-data] + (d/unlisten! temp-conn ::temp-conn-batch-tx) + (reset! temp-conn nil) + (vreset! *batch-tx-data nil) + (when (and @*complete? (seq tx-data)) + ;; transact tx-data to `conn` and validate db + (transact! conn tx-data tx-meta))))))) + +(defn batch-transact! + "Store once for a batch transaction, notice that this fn doesn't support nest `batch-transact` calls" + [conn tx-meta batch-tx-fn & {:keys [listen-db]}] + (let [db-before @conn + *tx-data (atom [])] + (try + (when (:batch-tx @conn) + (throw (ex-info "batch-transact! can't be nested called" {:tx-meta tx-meta}))) + (when (fn? listen-db) (d/listen! conn ::batch-tx + (fn [tx-report] + (swap! *tx-data into (:tx-data tx-report)) + (listen-db tx-report)))) + (swap! conn assoc :skip-store? true :batch-tx? true) + (batch-tx-fn conn) + (when (fn? listen-db) (d/unlisten! conn ::batch-tx)) + + (swap! conn dissoc :skip-store? :batch-tx?) + + (when-some [_storage (storage/storage @conn)] + (d/store @conn)) + + (let [batch-tx-data @*tx-data + _ (reset! *tx-data nil) + tx-report {:db-before db-before + :db-after @conn + :tx-meta tx-meta + :tx-data batch-tx-data}] + (dc/run-callbacks conn tx-report) + tx-report) + (catch :default e + (log/error e) + (reset! conn db-before) + (swap! conn dissoc :skip-store? :batch-tx?) + (reset! *tx-data nil) + (throw e))))) (def page? entity-util/page?) (def internal-page? entity-util/internal-page?) @@ -219,6 +263,7 @@ (def closed-value? entity-util/closed-value?) (def journal? entity-util/journal?) (def hidden? entity-util/hidden?) +(def recycled? entity-util/recycled?) (def object? entity-util/object?) (def asset? entity-util/asset?) (def public-built-in-property? db-property/public-built-in-property?) @@ -281,23 +326,73 @@ :else (:block/_parent parent))))) +(defn- get-right-sibling-for-property-children + [block parent] + (assert (or (de/entity? block) (nil? block))) + (let [children (get-block-children-or-property-children block parent) + right (some (fn [child] (when (> (compare (:block/order child) (:block/order block)) 0) child)) children)] + (when (not= (:db/id right) (:db/id block)) + right))) + (defn get-right-sibling [block] (assert (or (de/entity? block) (nil? block))) (when-let [parent (:block/parent block)] - (let [children (get-block-children-or-property-children block parent) - right (some (fn [child] (when (> (compare (:block/order child) (:block/order block)) 0) child)) children)] - (when (not= (:db/id right) (:db/id block)) - right)))) + (cond + (:block/closed-value-property block) + (get-right-sibling-for-property-children block parent) + + (:logseq.property/created-from-property block) + (get-right-sibling-for-property-children block parent) + + :else + (let [db (.-db block) + datoms (d/datoms db :avet :block/parent (:db/id parent)) + child-orders (->> (map (fn [d] + [(:e d) + (:v (first (d/datoms db :eavt (:e d) :block/order)))]) datoms) + (sort-by last)) + block-order (:block/order block)] + + (some (fn [[e child-order]] + (when (and (> (compare child-order block-order) 0) + (not (seq (d/datoms db :avet :logseq.property/created-from-property e))) + (not (seq (d/datoms db :avet :block/closed-value-property e)))) + (d/entity db e))) child-orders))))) + +(defn- get-left-sibling-for-property-children + [block parent] + (assert (or (de/entity? block) (nil? block))) + (let [children (reverse (get-block-children-or-property-children block parent)) + left (some (fn [child] (when (< (compare (:block/order child) (:block/order block)) 0) child)) children)] + (when (not= (:db/id left) (:db/id block)) + left))) (defn get-left-sibling [block] (assert (or (de/entity? block) (nil? block))) (when-let [parent (:block/parent block)] - (let [children (reverse (get-block-children-or-property-children block parent)) - left (some (fn [child] (when (< (compare (:block/order child) (:block/order block)) 0) child)) children)] - (when (not= (:db/id left) (:db/id block)) - left)))) + (cond + (:block/closed-value-property block) + (get-left-sibling-for-property-children block parent) + + (:logseq.property/created-from-property block) + (get-left-sibling-for-property-children block parent) + + :else + (let [db (.-db block) + datoms (d/datoms db :avet :block/parent (:db/id parent)) + child-orders (->> (map (fn [d] + [(:e d) + (:v (first (d/datoms db :eavt (:e d) :block/order)))]) datoms) + (sort-by last) + reverse) + block-order (:block/order block)] + (some (fn [[e child-order]] + (when (and (< (compare child-order block-order) 0) + (not (seq (d/datoms db :avet :logseq.property/created-from-property e))) + (not (seq (d/datoms db :avet :block/closed-value-property e)))) + (d/entity db e))) child-orders))))) (defn get-down [block] @@ -684,6 +779,23 @@ (update acc class-id (fnil conj #{}) entity) acc)) +(defn- build-bidirectional-property-group + [db [class-id entities]] + (let [class (d/entity db class-id)] + (when (true? (:logseq.property.class/enable-bidirectional? class)) + (let [custom-title (when-let [custom (:logseq.property.class/bidirectional-property-title class)] + (if (string? custom) + custom + (db-property/property-value-content custom))) + title (if (string/blank? custom-title) + (common-plural/plural (:block/title class)) + custom-title)] + {:title title + :class (-> (into {} class) + (assoc :db/id (:db/id class))) + :entities (->> entities + (sort-by :block/created-at))})))) + (defn get-bidirectional-properties "Given a target entity id, returns a seq of maps with: * :class - class entity @@ -705,31 +817,19 @@ (when (bidirectional-property-attr-cached? a) (when-let [entity (d/entity db e)] (when (and (not= (:db/id entity) target-id) + (not (entity-util/recycled? entity)) (not (entity-util/class? entity)) (not (entity-util/property? entity))) (let [classes (filter entity-util/class? (:block/tags entity))] (when (seq classes) (keep (fn [class-ent] - (when-not (built-in? class-ent) + (when (and (not (built-in? class-ent)) + (not (entity-util/recycled? class-ent))) [(:db/id class-ent) entity])) classes)))))))) (mapcat identity) (reduce (fn [acc [class-ent entity]] (add-entity acc class-ent entity)) {}) - (keep (fn [[class-id entities]] - (let [class (d/entity db class-id)] - (when (true? (:logseq.property.class/enable-bidirectional? class)) - (let [custom-title (when-let [custom (:logseq.property.class/bidirectional-property-title class)] - (if (string? custom) - custom - (db-property/property-value-content custom))) - title (if (string/blank? custom-title) - (common-plural/plural (:block/title class)) - custom-title)] - {:title title - :class (-> (into {} class) - (assoc :db/id (:db/id class))) - :entities (->> entities - (sort-by :block/created-at))}))))) + (keep (partial build-bidirectional-property-group db)) (sort-by (comp :block/created-at :class)))))) diff --git a/deps/db/src/logseq/db/common/entity_plus.cljc b/deps/db/src/logseq/db/common/entity_plus.cljc index 54feb1add6..01f3d06cf5 100644 --- a/deps/db/src/logseq/db/common/entity_plus.cljc +++ b/deps/db/src/logseq/db/common/entity_plus.cljc @@ -221,6 +221,7 @@ (extend-type Entity cljs.core/IEncodeJS (-clj->js [_this] nil) ; avoid `clj->js` overhead when entity was passed to rum components + (-key->js [_this] nil) IAssociative (-assoc [this k v] diff --git a/deps/db/src/logseq/db/common/initial_data.cljs b/deps/db/src/logseq/db/common/initial_data.cljs index c2b61249ca..fa1b8db2ee 100644 --- a/deps/db/src/logseq/db/common/initial_data.cljs +++ b/deps/db/src/logseq/db/common/initial_data.cljs @@ -343,9 +343,10 @@ user-datoms (get-all-user-datoms db) pages-datoms (let [contents-id (get-first-page-by-title db "Contents") capture-page-id (:db/id (db-db/get-built-in-page db common-config/quick-add-page-name)) - views-id (get-first-page-by-title db common-config/views-page-name)] + views-id (get-first-page-by-title db common-config/views-page-name) + recycle-id (get-first-page-by-title db "Recycle")] (mapcat #(d/datoms db :eavt %) - (remove nil? [contents-id capture-page-id views-id]))) + (remove nil? [contents-id capture-page-id views-id recycle-id]))) data (->> (concat idents structured-datoms user-datoms diff --git a/deps/db/src/logseq/db/common/normalize.cljs b/deps/db/src/logseq/db/common/normalize.cljs index 68b211706f..693b9bf744 100644 --- a/deps/db/src/logseq/db/common/normalize.cljs +++ b/deps/db/src/logseq/db/common/normalize.cljs @@ -38,18 +38,29 @@ (defn replace-attr-retract-with-retract-entity [db-after tx-data] - (let [e-datoms (->> (group-by first tx-data) - (sort-by first))] - (mapcat - (fn [[_e datoms]] - (if-let [d (some (fn [d] - (when (and (= :block/uuid (:a d)) - (false? (:added d)) - (nil? (d/entity db-after [:block/uuid (:v d)]))) - d)) datoms)] ; retract entity - [[:db/retractEntity [:block/uuid (:v d)]]] - datoms)) - e-datoms))) + (let [retract-eids-by-entity + (into {} + (keep (fn [d] + (when (and (= :block/uuid (:a d)) + (false? (:added d))) + (let [entity (d/entity db-after [:block/uuid (:v d)])] + (when (not= (:db/id entity) (:e d)) ; eid changed + [(:e d) (if entity + (:e d) + [:block/uuid (:v d)])]))))) + tx-data)] + (loop [result [] + seen #{} + [d & more] tx-data] + (if-not d + result + (if-let [eid (get retract-eids-by-entity (:e d))] + (if (contains? seen (:e d)) + (recur result seen more) + (recur (conj result [:db/retractEntity eid]) + (conj seen (:e d)) + more)) + (recur (conj result d) seen more)))))) (defn eid->lookup [db e] @@ -90,6 +101,36 @@ ;; sort by :tx, use nth to make this fn works on both vector and datom (sort-by #(nth % 3)))) +(defn- retract-entity-op? + [item] + (and (= 2 (count item)) + (= :db/retractEntity (first item)))) + +(defn- retract-entity-match-keys + [e] + (if (and (vector? e) (= :block/uuid (first e))) + (let [block-uuid (second e)] + #{e block-uuid (str block-uuid)}) + #{e})) + +(defn- reorder-retract-entity-first + [tx-data] + (let [retract-ops (filter retract-entity-op? tx-data) + retract-keys (->> retract-ops + (map second) + (mapcat retract-entity-match-keys) + set) + datom-for-retracted-eid? + (fn [item] + (and (= 5 (count item)) + (contains? retract-keys (second item)))) + datoms-for-retracted-eids (filter datom-for-retracted-eid? tx-data) + others (remove (fn [item] + (or (retract-entity-op? item) + (datom-for-retracted-eid? item))) + tx-data)] + (concat retract-ops datoms-for-retracted-eids others))) + (defn normalize-tx-data [db-after db-before tx-data] (let [title-updated-entities @@ -132,6 +173,12 @@ (if added [:db/add e' a v' t] [:db/retract e' a v' t]))))) - d))) + (when-let [[op e] (and (= 2 (count d)) + (= :db/retractEntity (first d)) + d)] + (when-let [e' (or (eid->lookup db-before e) + e)] + [op e']))))) (remove-retract-entity-ref db-after) + reorder-retract-entity-first distinct))) diff --git a/deps/db/src/logseq/db/common/view.cljs b/deps/db/src/logseq/db/common/view.cljs index f63b115f14..67b0254c69 100644 --- a/deps/db/src/logseq/db/common/view.cljs +++ b/deps/db/src/logseq/db/common/view.cljs @@ -219,11 +219,11 @@ (if entity? (let [property (d/entity db property-ident)] (if (match-property-value-as-entity? (first value') property) - (boolean (empty? (set/intersection (set (map :block/uuid value')) match))) - (boolean (empty? (set/intersection (set (map db-property/property-value-content value')) - (set (map (comp db-property/property-value-content #(d/entity db [:block/uuid %])) - match))))))) - (boolean (empty? (set/intersection (set value') match))))) + (empty? (set/intersection (set (map :block/uuid value')) match)) + (empty? (set/intersection (set (map db-property/property-value-content value')) + (set (map (comp db-property/property-value-content #(d/entity db [:block/uuid %])) + match)))))) + (empty? (set/intersection (set value') match)))) :text-contains (some (fn [v] @@ -295,7 +295,8 @@ exclude-ids (get-exclude-page-ids db)] (keep (fn [d] (let [e (entity-plus/unsafe->Entity db (:e d))] - (when-not (exclude-ids (:db/id e)) + (when-not (or (exclude-ids (:db/id e)) + (entity-util/hidden? e)) (cond-> e refs-count? (assoc :block.temp/refs-count (common-initial-data/get-block-refs-count db (:e d))))))) diff --git a/deps/db/src/logseq/db/frontend/entity_util.cljs b/deps/db/src/logseq/db/frontend/entity_util.cljs index 5368e34830..6300286e54 100644 --- a/deps/db/src/logseq/db/frontend/entity_util.cljs +++ b/deps/db/src/logseq/db/frontend/entity_util.cljs @@ -57,12 +57,34 @@ (defn hidden? [page] - (boolean - (when page - (if (string? page) - (string/starts-with? page "$$$") - (when (or (map? page) (de/entity? page)) - (:logseq.property/hide? page)))))) + (letfn [(hidden-parent? [entity seen] + (when (and entity + (:db/id entity) + (not (contains? seen (:db/id entity)))) + (or (:logseq.property/hide? entity) + (:logseq.property/deleted-at entity) + (hidden-parent? (:block/parent entity) (conj seen (:db/id entity))))))] + (boolean + (when page + (if (string? page) + (string/starts-with? page "$$$") + (when (or (map? page) (de/entity? page)) + (or (:logseq.property/hide? page) + (:logseq.property/deleted-at page) + (hidden-parent? (:block/parent page) #{})))))))) + +(defn recycled? + [entity] + (letfn [(recycled-parent? [parent seen] + (when (and parent + (:db/id parent) + (not (contains? seen (:db/id parent)))) + (or (:logseq.property/deleted-at parent) + (recycled-parent? (:block/parent parent) (conj seen (:db/id parent))))))] + (boolean + (when (or (map? entity) (de/entity? entity)) + (or (:logseq.property/deleted-at entity) + (recycled-parent? (:block/parent entity) #{})))))) (defn object? [node] diff --git a/deps/db/src/logseq/db/frontend/malli_schema.cljs b/deps/db/src/logseq/db/frontend/malli_schema.cljs index 2efcf516b1..adecac1943 100644 --- a/deps/db/src/logseq/db/frontend/malli_schema.cljs +++ b/deps/db/src/logseq/db/frontend/malli_schema.cljs @@ -283,13 +283,15 @@ [[:block/uuid :uuid] [:block/created-at :int] [:block/updated-at :int] + [:logseq.property/deleted-at {:optional true} :int] ;; Injected by update-properties-in-ents [:block/properties {:optional true} block-properties] [:block/tags {:optional true} block-tags] [:block/refs {:optional true} [:set :int]] [:block/tx-id {:optional true} :int] [:block/collapsed? {:optional true} :boolean] - [:block/warning {:optional true} [:keyword]]]) + [:block/warning {:optional true} [:keyword]] + [:logseq.property/created-by-ref {:optional true} :int]]) (def page-attrs "Common attributes for pages" @@ -440,13 +442,13 @@ [:block/uuid :uuid] [:logseq.property.reaction/emoji-id :string] [:logseq.property.reaction/target :int] - [:block/properties {:optional true} block-properties] [:block/created-at :int] [:block/tx-id {:optional true} :int] + [:logseq.property/created-by-ref {:optional true} :int] [:block/refs {:optional true} [:set :int]]])) (def property-history-block* - [:map + [:map {:error/path ["property-history-block"]} [:block/uuid :uuid] [:block/created-at :int] [:block/updated-at {:optional true} :int] @@ -454,6 +456,7 @@ [:logseq.property.history/property :int] [:logseq.property.history/ref-value {:optional true} :int] [:logseq.property.history/scalar-value {:optional true} :any] + [:block/properties {:optional true} block-properties] [:block/tx-id {:optional true} :int]]) (def property-history-block @@ -561,7 +564,8 @@ :property (entity-util/class? d) :class - (entity-util/hidden? d) + (and (entity-util/page? d) + (true? (:logseq.property/hide? d))) :hidden ;; TODO: Remove deprecated (whiteboard? d) diff --git a/deps/db/src/logseq/db/frontend/property.cljs b/deps/db/src/logseq/db/frontend/property.cljs index 29f285ff0d..3d3e8a8d73 100644 --- a/deps/db/src/logseq/db/frontend/property.cljs +++ b/deps/db/src/logseq/db/frontend/property.cljs @@ -619,6 +619,26 @@ :schema {:type :entity :hide? true} :queryable? true} + :logseq.property/deleted-at {:title "Deleted at" + :schema {:type :datetime + :hide? true + :public? false}} + :logseq.property/deleted-by-ref {:title "Deleted by" + :schema {:type :entity + :hide? true + :public? false}} + :logseq.property.recycle/original-parent {:title "Recycle original parent" + :schema {:type :node + :hide? true + :public? false}} + :logseq.property.recycle/original-page {:title "Recycle original page" + :schema {:type :node + :hide? true + :public? false}} + :logseq.property.recycle/original-order {:title "Recycle original order" + :schema {:type :string + :hide? true + :public? false}} :logseq.property.reaction/emoji-id {:title "Reaction emoji" :schema {:type :string :public? false @@ -699,7 +719,8 @@ "logseq.property.code" "logseq.property.repeat" "logseq.property.journal" "logseq.property.class" "logseq.property.view" "logseq.property.user" "logseq.property.history" "logseq.property.embedding" - "logseq.property.reaction" "logseq.property.sync" "logseq.property.publish"}) + "logseq.property.reaction" "logseq.property.sync" "logseq.property.publish" + "logseq.property.recycle"}) (defn logseq-property? "Determines if keyword is a logseq property" @@ -758,6 +779,7 @@ (when db (when-let [property (d/entity db property-id)] (some->> (:block/_closed-value-property property) + (remove entity-util/recycled?) (sort-by :block/order))))) (defn closed-value-content @@ -892,7 +914,7 @@ :else false))) - values))) + (remove entity-util/recycled? values)))) (defn lookup "Get the property value by a built-in property's db-ident from coll" diff --git a/deps/db/src/logseq/db/frontend/schema.cljs b/deps/db/src/logseq/db/frontend/schema.cljs index c6b2582114..67ca58a7eb 100644 --- a/deps/db/src/logseq/db/frontend/schema.cljs +++ b/deps/db/src/logseq/db/frontend/schema.cljs @@ -30,7 +30,7 @@ (map (juxt :major :minor) [(parse-schema-version x) (parse-schema-version y)]))) -(def version (parse-schema-version "65.23")) +(def version (parse-schema-version "65.24")) (defn major-version "Return a number. diff --git a/deps/db/src/logseq/db/frontend/validate.cljs b/deps/db/src/logseq/db/frontend/validate.cljs index 9c5208d1b3..48fbefd421 100644 --- a/deps/db/src/logseq/db/frontend/validate.cljs +++ b/deps/db/src/logseq/db/frontend/validate.cljs @@ -82,7 +82,7 @@ :dispatch-key (->> (dissoc ent :db/id) (db-malli-schema/entity-dispatch-key db)) :errors errors'}))))) -(defn validate-db! +(defn validate-db "Validates all the entities of the given db using :eavt datoms. Returns a map with info about db being validated. If there are errors, they are placed on :errors and grouped by entity" diff --git a/deps/db/src/logseq/db/sqlite/create_graph.cljs b/deps/db/src/logseq/db/sqlite/create_graph.cljs index e32098cd00..c5b69e094a 100644 --- a/deps/db/src/logseq/db/sqlite/create_graph.cljs +++ b/deps/db/src/logseq/db/sqlite/create_graph.cljs @@ -182,6 +182,16 @@ :logseq.property/hide? true :logseq.property/built-in? true})])) +(defn- build-recycle-page + [] + [(sqlite-util/block-with-timestamps + {:block/uuid (common-uuid/gen-uuid :builtin-block-uuid "Recycle") + :block/name (common-util/page-name-sanity-lc "Recycle") + :block/title "Recycle" + :block/tags [:logseq.class/Page] + :logseq.property/hide? true + :logseq.property/built-in? true})]) + (defn- build-favorites-page [] [(sqlite-util/block-with-timestamps @@ -247,7 +257,7 @@ default-classes (build-initial-classes db-ident->properties) default-pages (->> (map sqlite-util/build-new-page built-in-pages-names) (map mark-block-as-built-in)) - hidden-pages (concat (build-initial-views) (build-favorites-page)) + hidden-pages (concat (build-initial-views) (build-favorites-page) (build-recycle-page)) ;; These classes bootstrap our tags and properties as they depend on each other e.g. ;; Root <-> Tag, classes-tx depends on logseq.property.class/extends, properties-tx depends on Property bootstrap-class? (fn [c] (contains? #{:logseq.class/Root :logseq.class/Property :logseq.class/Tag :logseq.class/Template} (:db/ident c))) diff --git a/deps/db/test/logseq/db/sqlite/export_test.cljs b/deps/db/test/logseq/db/sqlite/export_test.cljs index c8ceaa8928..de35f0b6de 100644 --- a/deps/db/test/logseq/db/sqlite/export_test.cljs +++ b/deps/db/test/logseq/db/sqlite/export_test.cljs @@ -734,6 +734,10 @@ :blocks []} {:page {:block/title "Quick add" :build/properties {:logseq.property/built-in? true :logseq.property/hide? true}}, :blocks []} + {:page {:block/title "Recycle" + :build/properties {:logseq.property/built-in? true + :logseq.property/hide? true}} + :blocks []} {:page {:block/title "Contents" :build/properties {:logseq.property/built-in? true}} :blocks [{:block/title "right sidebar"}]} {:page {:block/title common-config/favorites-page-name @@ -1080,4 +1084,4 @@ ":logseq.property/asset should export as a uuid ref") (is (= [:block/uuid asset2-uuid] (get-in annotation-image [:build/properties :logseq.property.pdf/hl-image])) - ":logseq.property.pdf/hl-image should export as a uuid ref"))) \ No newline at end of file + ":logseq.property.pdf/hl-image should export as a uuid ref"))) diff --git a/deps/db/test/logseq/db_test.cljs b/deps/db/test/logseq/db_test.cljs index dae945bd16..2a64920a63 100644 --- a/deps/db/test/logseq/db_test.cljs +++ b/deps/db/test/logseq/db_test.cljs @@ -95,7 +95,7 @@ (d/datom 1 :property :v1 (+ tx 2) true)])) (is (= :v1 (:property (d/entity @conn 1))))))) -(deftest test-transact-with-temp-conn! +(deftest test-batch-transact! (testing "DB validation should be running after the whole transaction" (let [conn (db-test/create-conn)] (testing "#Task shouldn't be converted to property" @@ -104,10 +104,10 @@ (db-test/silence-stderr (ldb/transact! conn [{:db/ident :logseq.class/Task :block/tags :logseq.class/Property}])))))) - (ldb/transact-with-temp-conn! + (ldb/batch-transact-with-temp-conn! conn {} - (fn [temp-conn _*batch-tx-data] + (fn [temp-conn] (ldb/transact! temp-conn [{:db/ident :logseq.class/Task :block/tags :logseq.class/Property}]) (ldb/transact! temp-conn [[:db/retract :logseq.class/Task :block/tags :logseq.class/Property]])))))) @@ -151,6 +151,22 @@ (is (= ["Alice"] (map :block/title (:entities (first results)))))))) +(deftest get-bidirectional-properties-ignores-recycled-entities + (let [conn (db-test/create-conn-with-blocks + {:properties {:friend {:logseq.property/type :node + :build/property-classes [:Person]}} + :classes {:Person {:build/properties {:logseq.property.class/enable-bidirectional? true}}} + :pages-and-blocks + [{:page {:block/title "Alice" + :build/tags [:Person] + :build/properties {:friend [:build/page {:block/title "Bob"}]}}} + {:page {:block/title "Bob"}}]}) + alice (db-test/find-page-by-title @conn "Alice") + target (db-test/find-page-by-title @conn "Bob")] + (d/transact! conn [{:db/id (:db/id alice) + :logseq.property/deleted-at 1}]) + (is (empty? (ldb/get-bidirectional-properties @conn (:db/id target)))))) + (defn- bidirectional-perf-conn [n property-titles] (let [target-page {:page {:block/title "Target"}} diff --git a/deps/db/yarn.lock b/deps/db/yarn.lock index 3a9fc039c1..cf7ee7af85 100644 --- a/deps/db/yarn.lock +++ b/deps/db/yarn.lock @@ -13,10 +13,10 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -better-sqlite3@^12.6.2: - version "12.6.2" - resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-12.6.2.tgz#770649f28a62e543a360f3dfa1afe4cc944b1937" - integrity sha512-8VYKM3MjCa9WcaSAI3hzwhmyHVlH8tiGFwf0RlTsZPWJ1I5MkzjiudCo4KC4DxOaL/53A5B1sI/IbldNFDbsKA== +better-sqlite3@^12.8.0: + version "12.8.0" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-12.8.0.tgz#ec9ccd4a426a35f3b9355c147af6c92a6ddd6862" + integrity sha512-RxD2Vd96sQDjQr20kdP+F+dK/1OUNiVOl200vKBZY8u0vTwysfolF6Hq+3ZK2+h8My9YvZhHsF+RSGZW2VYrPQ== dependencies: bindings "^1.5.0" prebuild-install "^7.1.1" @@ -89,10 +89,10 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@^11.3.0: - version "11.3.2" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.2.tgz#c838aeddc6f4a8c74dd15f85e11fe5511bfe02a4" - integrity sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A== +fs-extra@^11.3.4: + version "11.3.4" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.4.tgz#ab6934eca8bcf6f7f6b82742e33591f86301d6fc" + integrity sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" diff --git a/deps/graph-parser/bb.edn b/deps/graph-parser/bb.edn index 9f089d8636..7bcfe3bf0f 100644 --- a/deps/graph-parser/bb.edn +++ b/deps/graph-parser/bb.edn @@ -3,10 +3,10 @@ {logseq/bb-tasks #_{:local/root "../../../bb-tasks"} {:git/url "https://github.com/logseq/bb-tasks" - :git/sha "70d3edeb287f5cec7192e642549a401f7d6d4263"}} + :git/sha "acb3d3d5d38c4ac16f617cb10ae6f99fe1b8de6e"}} :pods - {clj-kondo/clj-kondo {:version "2024.09.27"}} + {clj-kondo/clj-kondo {:version "2026.01.19"}} :tasks {test:load-all-namespaces-with-nbb diff --git a/deps/graph-parser/deps.edn b/deps/graph-parser/deps.edn index 8af5ee4bd2..26003397b2 100644 --- a/deps/graph-parser/deps.edn +++ b/deps/graph-parser/deps.edn @@ -7,7 +7,7 @@ cljs-bean/cljs-bean {:mvn/version "1.9.0"} ;; Any other deps should be added here and to nbb.edn - borkdude/rewrite-edn {:mvn/version "0.4.9"} + borkdude/rewrite-edn {:mvn/version "0.5.9"} logseq/db {:local/root "../db"} logseq/common {:local/root "../common"} ;; stubbed via logseq.common.log @@ -15,5 +15,14 @@ :git/sha "30328a045141717aadbbb693465aed55f0904976"}} :aliases - {:clj-kondo {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2024.09.27"}} + ;; This runs tests with nodejs. Would be nice to run this with in a browser env + ;; since this is how its normally run in the app but this requires more setup + ;; with karma, shadow-cljs.edn and headless mode on CI + {:test {:extra-paths ["test"] + :extra-deps {olical/cljs-test-runner {:mvn/version "3.8.1"} + org.clojure/clojurescript {:mvn/version "1.11.132"} + logseq/outliner {:local/root "../outliner"}} + :main-opts ["-m" "cljs-test-runner.main"]} + + :clj-kondo {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.01.19"}} :main-opts ["-m" "clj-kondo.main"]}}} diff --git a/deps/graph-parser/nbb.edn b/deps/graph-parser/nbb.edn index 182b64284c..aa0cf2f06d 100644 --- a/deps/graph-parser/nbb.edn +++ b/deps/graph-parser/nbb.edn @@ -8,5 +8,5 @@ {:local/root "../outliner"} io.github.nextjournal/nbb-test-runner {:git/sha "b379325cfa5a3306180649da5de3bf5166414e71"} - borkdude/rewrite-edn {:mvn/version "0.4.9"} + borkdude/rewrite-edn {:mvn/version "0.5.9"} io.github.pez/baldr {:mvn/version "1.0.9"}}} \ No newline at end of file diff --git a/deps/graph-parser/package.json b/deps/graph-parser/package.json index e81eaaf923..abc2d2d45e 100644 --- a/deps/graph-parser/package.json +++ b/deps/graph-parser/package.json @@ -4,11 +4,11 @@ "private": true, "devDependencies": { "@logseq/nbb-logseq": "github:logseq/nbb-logseq#feat-db-v33", - "better-sqlite3": "^12.6.2" + "better-sqlite3": "^12.8.0" }, "dependencies": { "mldoc": "^1.5.9", - "sanitize-filename": "1.6.3" + "sanitize-filename": "1.6.4" }, "scripts": { "test": "nbb-logseq -cp test -m nextjournal.test-runner", diff --git a/deps/graph-parser/src/logseq/graph_parser/block.cljs b/deps/graph-parser/src/logseq/graph_parser/block.cljs index 8ca5d5b522..516127c282 100644 --- a/deps/graph-parser/src/logseq/graph_parser/block.cljs +++ b/deps/graph-parser/src/logseq/graph_parser/block.cljs @@ -397,19 +397,19 @@ db-based? sanitize-hashtag-name) [page _page-entity] (cond - (and original-page-name (string? original-page-name)) - (page-name-string->map original-page-name db date-formatter - (assoc options :with-timestamp? with-timestamp?)) - :else - (let [page (cond (and (map? original-page-name) (:block/uuid original-page-name)) - original-page-name + (and original-page-name (string? original-page-name)) + (page-name-string->map original-page-name db date-formatter + (assoc options :with-timestamp? with-timestamp?)) + :else + (let [page (cond (and (map? original-page-name) (:block/uuid original-page-name)) + original-page-name - (map? original-page-name) - (assoc original-page-name :block/uuid (or page-uuid (d/squuid))) + (map? original-page-name) + (assoc original-page-name :block/uuid (or page-uuid (d/squuid))) - :else - nil)] - [page nil]))] + :else + nil)] + [page nil]))] (when page (if db-based? (let [tags (if class? [:logseq.class/Tag] @@ -880,4 +880,4 @@ [others parents' result'])))] (recur blocks parents result)))) result' (map (fn [block] (assoc block :block/order (db-order/gen-key))) result)] - (concat result' other-blocks))) \ No newline at end of file + (concat result' other-blocks))) diff --git a/deps/graph-parser/yarn.lock b/deps/graph-parser/yarn.lock index b96dab79e7..d180bf82c1 100644 --- a/deps/graph-parser/yarn.lock +++ b/deps/graph-parser/yarn.lock @@ -23,10 +23,10 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -better-sqlite3@^12.6.2: - version "12.6.2" - resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-12.6.2.tgz#770649f28a62e543a360f3dfa1afe4cc944b1937" - integrity sha512-8VYKM3MjCa9WcaSAI3hzwhmyHVlH8tiGFwf0RlTsZPWJ1I5MkzjiudCo4KC4DxOaL/53A5B1sI/IbldNFDbsKA== +better-sqlite3@^12.8.0: + version "12.8.0" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-12.8.0.tgz#ec9ccd4a426a35f3b9355c147af6c92a6ddd6862" + integrity sha512-RxD2Vd96sQDjQr20kdP+F+dK/1OUNiVOl200vKBZY8u0vTwysfolF6Hq+3ZK2+h8My9YvZhHsF+RSGZW2VYrPQ== dependencies: bindings "^1.5.0" prebuild-install "^7.1.1" @@ -425,10 +425,10 @@ safe-buffer@^5.0.1, safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -sanitize-filename@1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" - integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== +sanitize-filename@1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.4.tgz#b6b39ebed9bd1a1898b85c5c03089da74590d6f8" + integrity sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg== dependencies: truncate-utf8-bytes "^1.0.0" diff --git a/deps/outliner/.carve/config.edn b/deps/outliner/.carve/config.edn index b3b8b2d4f2..84716ce275 100644 --- a/deps/outliner/.carve/config.edn +++ b/deps/outliner/.carve/config.edn @@ -6,5 +6,7 @@ logseq.outliner.core logseq.outliner.db-pipeline logseq.outliner.property + logseq.outliner.op.construct + logseq.outliner.recycle logseq.outliner.tree] :report {:format :ignore}} diff --git a/deps/outliner/.carve/ignore b/deps/outliner/.carve/ignore index 19b8dfdc74..48400ba132 100644 --- a/deps/outliner/.carve/ignore +++ b/deps/outliner/.carve/ignore @@ -6,3 +6,9 @@ logseq.outliner.op/register-op-handlers! logseq.outliner.page/delete! ;; API fn logseq.outliner.page/create! +;; Symbol +logseq.outliner.recycle/gc-interval-ms +;; API fn +logseq.outliner.recycle/restore! +;; API fn +logseq.outliner.recycle/gc! diff --git a/deps/outliner/bb.edn b/deps/outliner/bb.edn index 91085725a1..8fb92e312d 100644 --- a/deps/outliner/bb.edn +++ b/deps/outliner/bb.edn @@ -3,10 +3,10 @@ {logseq/bb-tasks #_{:local/root "../../../bb-tasks"} {:git/url "https://github.com/logseq/bb-tasks" - :git/sha "70d3edeb287f5cec7192e642549a401f7d6d4263"}} + :git/sha "acb3d3d5d38c4ac16f617cb10ae6f99fe1b8de6e"}} :pods - {clj-kondo/clj-kondo {:version "2024.09.27"}} + {clj-kondo/clj-kondo {:version "2026.01.19"}} :tasks {test:load-all-namespaces-with-nbb diff --git a/deps/outliner/deps.edn b/deps/outliner/deps.edn index f168846a37..3f707cd699 100644 --- a/deps/outliner/deps.edn +++ b/deps/outliner/deps.edn @@ -8,8 +8,11 @@ ;; Any other deps should be added here and to nbb.edn logseq/db {:local/root "../db"} logseq/graph-parser {:local/root "../graph-parser"} - metosin/malli {:mvn/version "0.16.1"}} + metosin/malli {:mvn/version "0.16.1"} + ;; stubbed via logseq.common.log + com.lambdaisland/glogi {:git/url "https://github.com/lambdaisland/glogi" + :git/sha "30328a045141717aadbbb693465aed55f0904976"}} :aliases {:clj-kondo - {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2024.09.27"}} + {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.01.19"}} :main-opts ["-m" "clj-kondo.main"]}}} diff --git a/deps/outliner/package.json b/deps/outliner/package.json index 2e3811ffc6..e96ad94880 100644 --- a/deps/outliner/package.json +++ b/deps/outliner/package.json @@ -6,7 +6,7 @@ "@logseq/nbb-logseq": "github:logseq/nbb-logseq#feat-db-v33" }, "dependencies": { - "better-sqlite3": "^12.6.2", + "better-sqlite3": "^12.8.0", "mldoc": "^1.5.9" }, "scripts": { diff --git a/deps/outliner/src/logseq/outliner/batch_tx.cljc b/deps/outliner/src/logseq/outliner/batch_tx.cljc deleted file mode 100644 index fee6c2b647..0000000000 --- a/deps/outliner/src/logseq/outliner/batch_tx.cljc +++ /dev/null @@ -1,53 +0,0 @@ -(ns logseq.outliner.batch-tx - "Batch process multiple transactions. - When batch-processing, don't refresh ui." - #?(:cljs (:require-macros [logseq.outliner.batch-tx]))) - -(defmacro with-batch-tx-mode - "1. start batch-tx mode - 2. run body - 3. exit batch-tx mode" - [conn {:keys [additional-tx] :as opts} & body] - `(if (some? (logseq.outliner.batch-tx/get-batch-db-before)) - (do ~@body) - (try - (let [tx-meta# (assoc (dissoc ~opts :additional-tx :transact-opts) - :batch-tx/batch-tx-mode? true)] - (logseq.outliner.batch-tx/set-batch-opts tx-meta#) - (logseq.outliner.batch-tx/set-batch-db-before! @~conn) - ~@body - (when (seq ~additional-tx) - (logseq.db/transact! ~conn ~additional-tx {})) - (datascript.core/transact! ~conn [] {:batch-tx/exit? true}) - (logseq.outliner.batch-tx/exit-batch-txs-mode!)) - (catch :default e# - (logseq.outliner.batch-tx/exit-batch-txs-mode!) - (throw e#))))) - -#?(:cljs - (do - (defonce ^:private state - (atom {;; store db before batch-tx - :batch/db-before nil - ;; Opts for with-batch-tx-mode - :batch/opts nil})) - (defn ^:api set-batch-db-before! - [db] - (swap! state assoc :batch/db-before db)) - - (defn ^:api get-batch-db-before - [] - (:batch/db-before @state)) - - (defn ^:api set-batch-opts - [opts] - (swap! state assoc :batch/opts opts)) - - (defn get-batch-opts - [] - (:batch/opts @state)) - - (defn ^:api exit-batch-txs-mode! - [] - (swap! state assoc :batch/db-before nil) - (swap! state assoc :batch/opts nil)))) diff --git a/deps/outliner/src/logseq/outliner/core.cljs b/deps/outliner/src/logseq/outliner/core.cljs index 1306c353d7..24e5bfb1d6 100644 --- a/deps/outliner/src/logseq/outliner/core.cljs +++ b/deps/outliner/src/logseq/outliner/core.cljs @@ -13,14 +13,43 @@ [logseq.db.frontend.class :as db-class] [logseq.db.frontend.schema :as db-schema] [logseq.db.sqlite.create-graph :as sqlite-create-graph] - [logseq.outliner.batch-tx :include-macros true :as batch-tx] [logseq.outliner.datascript :as ds] [logseq.outliner.pipeline :as outliner-pipeline] [logseq.outliner.tree :as otree] + [logseq.outliner.tx-meta :as outliner-tx-meta] [logseq.outliner.validate :as outliner-validate] [malli.core :as m] [malli.util :as mu])) +(defn- direct-op-entry + [outliner-op args] + (case outliner-op + :save-block + (let [[_conn block opts] args] + [:save-block [block opts]]) + + :insert-blocks + (let [[_conn blocks target-block opts] args] + [:insert-blocks [blocks (:db/id target-block) opts]]) + + :delete-blocks + (let [[_conn blocks opts] args] + [:delete-blocks [(mapv :db/id blocks) opts]]) + + :move-blocks + (let [[_conn blocks target-block opts] args] + [:move-blocks [(mapv :db/id blocks) (:db/id target-block) opts]]) + + :move-blocks-up-down + (let [[_conn blocks up?] args] + [:move-blocks-up-down [(mapv :db/id blocks) up?]]) + + :indent-outdent-blocks + (let [[_conn blocks indent? opts] args] + [:indent-outdent-blocks [(mapv :db/id blocks) indent? opts]]) + + nil)) + (def ^:private block-map (mu/optional-keys [:map @@ -133,11 +162,12 @@ ;; Update :block/tag to reference ids from :block/refs (map (fn [tag] (if (contains? refs (:block/name tag)) - (assoc tag :block/uuid - (:block/uuid - (first (filter (fn [r] (= (:block/name tag) + (let [matched-ref (first (filter (fn [r] (= (:block/name tag) (:block/name r))) - (:block/refs m))))) + (:block/refs m)))] + (cond-> (assoc tag :block/uuid (:block/uuid matched-ref)) + (:db/ident matched-ref) + (assoc :db/ident (:db/ident matched-ref)))) tag)) tags) @@ -462,15 +492,20 @@ ;;; ### insert-blocks, delete-blocks, move-blocks (defn- get-block-orders - [blocks target-block sibling? keep-block-order?] + [db blocks target-block sibling? keep-block-order? right-sibling-id] (if (and keep-block-order? (every? :block/order blocks)) (map :block/order blocks) (let [target-order (:block/order target-block) - next-sibling-order (:block/order (ldb/get-right-sibling target-block)) - first-child (ldb/get-down target-block) - first-child-order (:block/order first-child) start-order (when sibling? target-order) - end-order (if sibling? next-sibling-order first-child-order) + end-order (if sibling? + (let [right-sibling (when right-sibling-id + (d/entity db right-sibling-id))] + (if (= (:db/id (:block/parent right-sibling)) + (:db/id (:block/parent target-block))) + (:block/order right-sibling) + (:block/order (ldb/get-right-sibling target-block)))) + (let [first-child (ldb/get-down target-block)] + (:block/order first-child))) orders (db-order/gen-n-keys (count blocks) start-order end-order)] orders))) @@ -505,10 +540,10 @@ (:db/id target-block))) (defn- build-insert-blocks-tx - [db target-block blocks uuids get-new-id {:keys [sibling? outliner-op replace-empty-target? insert-template? keep-block-order?]}] + [db target-block blocks uuids get-new-id {:keys [sibling? outliner-op replace-empty-target? insert-template? keep-block-order? right-sibling-id]}] (let [block-ids (set (map :block/uuid blocks)) target-page (get-target-block-page target-block sibling?) - orders (get-block-orders blocks target-block sibling? keep-block-order?)] + orders (get-block-orders db blocks target-block sibling? keep-block-order? right-sibling-id)] (map-indexed (fn [idx {:block/keys [parent] :as block}] (when-let [uuid' (get uuids (:block/uuid block))] (let [block (remove-disallowed-inline-classes db block) @@ -682,7 +717,7 @@ ``" [db blocks target-block {:keys [_sibling? keep-uuid? keep-block-order? outliner-op outliner-real-op replace-empty-target? update-timestamps? - insert-template?] + insert-template? right-sibling-id] :as opts :or {update-timestamps? true}}] {:pre [(seq blocks) @@ -731,7 +766,8 @@ :keep-uuid? keep-uuid? :keep-block-order? keep-block-order? :outliner-op outliner-op - :insert-template? insert-template?} + :insert-template? insert-template? + :right-sibling-id right-sibling-id} {:keys [id->new-uuid blocks-tx]} (insert-blocks-aux db blocks' target-block insert-opts)] (if (some (fn [b] (or (nil? (:block/parent b)) (nil? (:block/order b)))) blocks-tx) (throw (ex-info "Invalid outliner data" @@ -796,7 +832,7 @@ (defn ^:api ^:large-vars/cleanup-todo delete-blocks "Delete blocks from the tree." - [db blocks] + [db blocks _opts] (let [top-level-blocks (filter-top-level-blocks db blocks) non-consecutive? (and (> (count top-level-blocks) 1) (seq (ldb/get-non-consecutive-blocks db top-level-blocks))) top-level-blocks* (get-top-level-blocks top-level-blocks non-consecutive?) @@ -913,20 +949,28 @@ (let [parents' (->> (ldb/get-block-parents db (:block/uuid target-block) {}) (map :db/id) (set)) - move-parents-to-child? (some parents' (map :db/id blocks))] + move-parents-to-child? (some parents' (map :db/id blocks)) + op-entry [:move-blocks [(mapv :db/id top-level-blocks) + (:db/id target-block) + opts]]] (when-not move-parents-to-child? - (batch-tx/with-batch-tx-mode conn {:outliner-op :move-blocks} - (doseq [[idx block] (map vector (range (count blocks)) blocks)] - (let [first-block? (zero? idx) - sibling? (if first-block? sibling? true) - target-block (if first-block? target-block - (d/entity @conn (:db/id (nth blocks (dec idx))))) - block (d/entity @conn (:db/id block))] - (when-not (move-to-original-position? [block] target-block sibling? false) - (let [tx-data (move-block @conn block target-block sibling?)] - ;; (prn "==>> move blocks tx:" tx-data) - (ldb/transact! conn tx-data {:sibling? sibling? - :outliner-op (or outliner-op :move-blocks)})))))) + (ldb/batch-transact-with-temp-conn! + conn + {:outliner-op :move-blocks + :outliner-ops [op-entry]} + (fn [conn] + (doseq [[idx block] (map vector (range (count blocks)) blocks)] + (let [first-block? (zero? idx) + sibling? (if first-block? sibling? true) + target-block (if first-block? target-block + (d/entity @conn (:db/id (nth blocks (dec idx))))) + block (d/entity @conn (:db/id block))] + (when-not (move-to-original-position? [block] target-block sibling? false) + (let [tx-data (move-block @conn block target-block sibling?)] + ;; FIXME: move-blocks should be pure fn + ;; (prn "==>> move blocks tx:" tx-data) + (ldb/transact! conn tx-data {:sibling? sibling? + :outliner-op (or outliner-op :move-blocks)}))))))) nil))))) (defn- move-blocks-up-down @@ -1040,7 +1084,10 @@ (try (let [result (apply f args)] (when result - (let [tx-meta (assoc (:tx-meta result) + (let [tx-meta (outliner-tx-meta/ensure-outliner-ops + (:tx-meta result) + (direct-op-entry outliner-op args)) + tx-meta (assoc tx-meta :outliner-op outliner-op)] (ldb/transact! (first args) (:tx-data result) tx-meta))) result) @@ -1067,8 +1114,8 @@ opts (assoc opts :outliner-op :insert-blocks))))) -(let [f (fn [conn blocks _opts] - (delete-blocks @conn blocks))] +(let [f (fn [conn blocks opts] + (delete-blocks @conn blocks opts))] (defn delete-blocks! [conn blocks opts] (op-transact! :delete-blocks f conn blocks opts))) diff --git a/deps/outliner/src/logseq/outliner/op.cljs b/deps/outliner/src/logseq/outliner/op.cljs index 2c2a85a71f..5c60cf2a9b 100644 --- a/deps/outliner/src/logseq/outliner/op.cljs +++ b/deps/outliner/src/logseq/outliner/op.cljs @@ -1,10 +1,12 @@ (ns logseq.outliner.op "Transact outliner ops" - (:require [datascript.core :as d] + (:require [clojure.string :as string] + [datascript.core :as d] [logseq.common.util :as common-util] [logseq.db :as ldb] [logseq.db.sqlite.export :as sqlite-export] [logseq.outliner.core :as outliner-core] + [logseq.outliner.page :as outliner-page] [logseq.outliner.property :as outliner-property] [logseq.outliner.transaction :as outliner-tx] [malli.core :as m])) @@ -20,6 +22,10 @@ [:catn [:op :keyword] [:args [:tuple ::blocks ::id ::option]]]] + [:apply-template + [:catn + [:op :keyword] + [:args [:tuple ::id ::id ::option]]]] [:delete-blocks [:catn [:op :keyword] @@ -120,7 +126,7 @@ [:delete-page [:catn [:op :keyword] - [:args [:tuple ::uuid]]]] + [:args [:tuple ::uuid ::option]]]] [:toggle-reaction [:catn @@ -152,8 +158,6 @@ (def ^:private ops-validator (m/validator ops-schema)) -(defonce ^:private *op-handlers (atom {})) - (defn- reaction-user-id [reaction] (:db/id (:logseq.property/created-by-ref reaction))) @@ -186,10 +190,6 @@ {:outliner-op :toggle-reaction}) true))))) -(defn register-op-handlers! - [handlers] - (reset! *op-handlers handlers)) - (defn- import-edn-data [conn *result export-map {:keys [tx-meta] :as import-options}] (let [{:keys [init-tx block-props-tx misc-tx error] :as _txs} @@ -207,101 +207,213 @@ (js/console.error "Unexpected Import EDN error:" e) (reset! *result {:error (str "Unexpected Import EDN error: " (pr-str (ex-message e)))})))))) -(defn ^:large-vars/cleanup-todo apply-ops! +(defn- apply-insert-blocks-op! + [conn *result [blocks target-block-id opts]] + (when-let [target-block (d/entity @conn target-block-id)] + (let [result (outliner-core/insert-blocks! conn blocks target-block opts)] + (reset! *result result)))) + +(defn- template-children-blocks + [db template-id] + (when-let [template (d/entity db template-id)] + (let [template-blocks (some->> (ldb/get-block-and-children db (:block/uuid template) + {:include-property-block? true}) + rest)] + (when (seq template-blocks) + (cons (assoc (first template-blocks) + :logseq.property/used-template (:db/id template)) + (rest template-blocks)))))) + +(defn- apply-template-op! + [conn *result [template-id target-block-id opts]] + (when-let [target (d/entity @conn target-block-id)] + (let [blocks (template-children-blocks @conn template-id)] + (when (seq blocks) + (let [sibling? (:sibling? opts) + sibling?' (cond + (some? sibling?) + sibling? + + (seq (:block/_parent target)) + false + + :else + true) + result (outliner-core/insert-blocks! conn blocks target + (assoc opts + :sibling? sibling?' + :insert-template? true + :outliner-op :insert-template-blocks))] + (reset! *result result)))))) + +(defn- ^:large-vars/cleanup-todo apply-op! + [conn opts' *result [op args]] + (case op + ;; blocks + :save-block + (apply outliner-core/save-block! conn args) + + :insert-blocks + (apply-insert-blocks-op! conn *result args) + + :apply-template + (apply-template-op! conn *result args) + + :delete-blocks + (let [[block-ids opts] args + blocks (keep #(d/entity @conn %) block-ids)] + (outliner-core/delete-blocks! conn blocks (merge opts opts'))) + + :move-blocks + (let [[block-ids target-block-id opts] args + blocks (keep #(d/entity @conn %) block-ids) + target-block (d/entity @conn target-block-id)] + (when (and target-block (seq blocks)) + (outliner-core/move-blocks! conn blocks target-block opts))) + + :move-blocks-up-down + (let [[block-ids up?] args + blocks (keep #(d/entity @conn %) block-ids)] + (when (seq blocks) + (outliner-core/move-blocks-up-down! conn blocks up?))) + + :indent-outdent-blocks + (let [[block-ids indent? opts] args + blocks (keep #(d/entity @conn %) block-ids)] + (when (seq blocks) + (outliner-core/indent-outdent-blocks! conn blocks indent? opts))) + + ;; properties + :upsert-property + (reset! *result (apply outliner-property/upsert-property! conn args)) + + :set-block-property + (apply outliner-property/set-block-property! conn args) + + :remove-block-property + (apply outliner-property/remove-block-property! conn args) + + :delete-property-value + (apply outliner-property/delete-property-value! conn args) + + :create-property-text-block + (apply outliner-property/create-property-text-block! conn args) + + :batch-set-property + (apply outliner-property/batch-set-property! conn args) + + :batch-remove-property + (apply outliner-property/batch-remove-property! conn args) + + :batch-delete-property-value + (apply outliner-property/batch-delete-property-value! conn args) + + :class-add-property + (apply outliner-property/class-add-property! conn args) + + :class-remove-property + (apply outliner-property/class-remove-property! conn args) + + :upsert-closed-value ; don't support undo/redo + (apply outliner-property/upsert-closed-value! conn args) + + :delete-closed-value ; don't support undo/redo + (apply outliner-property/delete-closed-value! conn args) + + :add-existing-values-to-closed-values ; don't support undo/redo + (apply outliner-property/add-existing-values-to-closed-values! conn args) + + :batch-import-edn ; don't support undo/redo + (apply import-edn-data conn *result args) + + :transact ; don't support undo/redo + (apply ldb/transact! conn args) + + :create-page + (let [[title options] args] + (reset! *result (outliner-page/create! conn title (or options {})))) + + :rename-page + (let [[page-uuid new-title] args] + (if (string/blank? new-title) + (throw (ex-info "Page name shouldn't be blank" {:block/uuid page-uuid + :block/title new-title})) + (outliner-core/save-block! conn + {:block/uuid page-uuid + :block/title new-title}))) + + :delete-page + (let [[page-uuid opts] args] + (outliner-page/delete! conn page-uuid (merge opts opts'))) + + :toggle-reaction + (reset! *result (apply toggle-reaction! conn args)) + nil)) + +(defn- apply-single-op! + [conn ops *result opts' clean-tx-meta] + (let [db @conn + op (first ops) + result (case (ffirst ops) + :save-block + (apply outliner-core/save-block db (second op)) + :insert-blocks + (let [[blocks target-block-id insert-opts] (second op)] + (outliner-core/insert-blocks db blocks + (d/entity db target-block-id) + insert-opts)) + :delete-blocks + (let [[block-ids opts] (second op) + blocks (keep #(d/entity db %) block-ids)] + (outliner-core/delete-blocks db blocks (merge opts opts')))) + additional-tx (:additional-tx opts') + full-tx (concat (:tx-data result) additional-tx)] + (ldb/transact! conn full-tx clean-tx-meta) + (reset! *result result))) + +(defn- apply-save-followed-by-insert! + [conn ops *result opts' clean-tx-meta] + (let [save-block-tx (:tx-data (apply outliner-core/save-block @conn (second (first ops)))) + [blocks target-block-id insert-opts] (second (second ops)) + insert-blocks-result (outliner-core/insert-blocks @conn blocks + (d/entity @conn target-block-id) + insert-opts) + additional-tx (:additional-tx opts') + full-tx (concat save-block-tx + (:tx-data insert-blocks-result) + additional-tx)] + (ldb/transact! conn full-tx clean-tx-meta) + (reset! *result insert-blocks-result))) + +(defn apply-ops! [conn ops opts] (assert (ops-validator ops) ops) - (let [opts' (assoc opts - :transact-opts {:conn conn} - :local-tx? true) - *result (atom nil)] - (outliner-tx/transact! - opts' - (doseq [[op args] ops] - (case op - ;; blocks - :save-block - (apply outliner-core/save-block! conn args) + (let [single-op-outliner-op (when (= 1 (count ops)) + (first (first ops))) + opts' (cond-> (assoc opts + :transact-opts {:conn conn} + :local-tx? true + :outliner-ops ops + :db-sync/tx-id (or (:db-sync/tx-id opts) (random-uuid))) + (and single-op-outliner-op + (nil? (:outliner-op opts))) + (assoc :outliner-op single-op-outliner-op)) + *result (atom nil) + clean-tx-meta (dissoc opts' :additional-tx :transact-opts :current-block)] + (cond + (and single-op-outliner-op + (contains? #{:save-block :insert-blocks :delete-blocks} (ffirst ops))) + (apply-single-op! conn ops *result opts' clean-tx-meta) - :insert-blocks - (let [[blocks target-block-id opts] args] - (when-let [target-block (d/entity @conn target-block-id)] - (let [result (outliner-core/insert-blocks! conn blocks target-block opts)] - (reset! *result result)))) + (and (= 2 (count ops)) + (= :save-block (ffirst ops)) + (= :insert-blocks (first (second ops)))) + (apply-save-followed-by-insert! conn ops *result opts' clean-tx-meta) - :delete-blocks - (let [[block-ids opts] args - blocks (keep #(d/entity @conn %) block-ids)] - (outliner-core/delete-blocks! conn blocks (merge opts opts'))) - - :move-blocks - (let [[block-ids target-block-id opts] args - blocks (keep #(d/entity @conn %) block-ids) - target-block (d/entity @conn target-block-id)] - (when (and target-block (seq blocks)) - (outliner-core/move-blocks! conn blocks target-block opts))) - - :move-blocks-up-down - (let [[block-ids up?] args - blocks (keep #(d/entity @conn %) block-ids)] - (when (seq blocks) - (outliner-core/move-blocks-up-down! conn blocks up?))) - - :indent-outdent-blocks - (let [[block-ids indent? opts] args - blocks (keep #(d/entity @conn %) block-ids)] - (when (seq blocks) - (outliner-core/indent-outdent-blocks! conn blocks indent? opts))) - - ;; properties - :upsert-property - (reset! *result (apply outliner-property/upsert-property! conn args)) - - :set-block-property - (apply outliner-property/set-block-property! conn args) - - :remove-block-property - (apply outliner-property/remove-block-property! conn args) - - :delete-property-value - (apply outliner-property/delete-property-value! conn args) - - :create-property-text-block - (apply outliner-property/create-property-text-block! conn args) - - :batch-set-property - (apply outliner-property/batch-set-property! conn args) - - :batch-remove-property - (apply outliner-property/batch-remove-property! conn args) - - :batch-delete-property-value - (apply outliner-property/batch-delete-property-value! conn args) - - :class-add-property - (apply outliner-property/class-add-property! conn args) - - :class-remove-property - (apply outliner-property/class-remove-property! conn args) - - :upsert-closed-value - (apply outliner-property/upsert-closed-value! conn args) - - :delete-closed-value - (apply outliner-property/delete-closed-value! conn args) - - :add-existing-values-to-closed-values - (apply outliner-property/add-existing-values-to-closed-values! conn args) - - :batch-import-edn - (apply import-edn-data conn *result args) - - :transact - (apply ldb/transact! conn args) - - :toggle-reaction - (reset! *result (apply toggle-reaction! conn args)) - - (when-let [handler (get @*op-handlers op)] - (reset! *result (handler conn args)))))) + :else + (outliner-tx/transact! + opts' + (doseq [op-entry ops] + (apply-op! conn opts' *result op-entry)))) @*result)) diff --git a/deps/outliner/src/logseq/outliner/op/construct.cljc b/deps/outliner/src/logseq/outliner/op/construct.cljc new file mode 100644 index 0000000000..3f64e31485 --- /dev/null +++ b/deps/outliner/src/logseq/outliner/op/construct.cljc @@ -0,0 +1,1045 @@ +(ns logseq.outliner.op.construct + "Construct canonical forward and reverse outliner ops for history actions." + (:require [clojure.string :as string] + [datascript.core :as d] + [logseq.common.util :as common-util] + [logseq.common.util.date-time :as date-time-util] + [logseq.common.uuid :as common-uuid] + [logseq.db :as ldb] + [logseq.db.frontend.content :as db-content] + [logseq.db.frontend.property :as db-property] + [logseq.db.frontend.property.type :as db-property-type])) + +(def ^:private semantic-outliner-ops + #{:save-block + :insert-blocks + :apply-template + :move-blocks + :move-blocks-up-down + :indent-outdent-blocks + :delete-blocks + :create-page + :rename-page + :delete-page + :restore-recycled + :set-block-property + :remove-block-property + :batch-set-property + :batch-remove-property + :delete-property-value + :batch-delete-property-value + :create-property-text-block + :upsert-property + :class-add-property + :class-remove-property + :upsert-closed-value + :add-existing-values-to-closed-values + :delete-closed-value}) + +(def ^:private transient-block-keys + #{:db/id + :block/tx-id + :block/created-at + :block/updated-at + :block/meta + :block/unordered + :block/level + :block.temp/ast-title + :block.temp/ast-body + :block.temp/load-status + :block.temp/has-children? + :logseq.property/created-by-ref + :logseq.property.embedding/hnsw-label-updated-at}) + +(def ^:api rebase-refs-key :block.temp/sync-rebase-refs) +(def ^:api rebase-created-refs-key :block.temp/sync-created-refs) +(def ^:api canonical-transact-op [[:transact nil]]) + +(defn- stable-entity-ref + [db x] + (cond + (map? x) (let [eid (or (:db/id x) + (when-let [id (:block/uuid x)] + (:db/id (d/entity db [:block/uuid id]))))] + (stable-entity-ref db eid)) + (and (integer? x) (not (neg? x))) + (if-let [ent (d/entity db x)] + (cond + (:block/uuid ent) [:block/uuid (:block/uuid ent)] + (:db/ident ent) (:db/ident ent) + :else x) + x) + :else x)) + +(defn- sanitize-ref-value + [db v] + (cond + (vector? v) (stable-entity-ref db v) + (or (set? v) (sequential? v)) (set (map #(stable-entity-ref db %) v)) + :else (stable-entity-ref db v))) + +(defn- sanitize-block-refs + [refs] + (->> refs + (keep (fn [ref-entity] + (when (:block/uuid ref-entity) + (select-keys ref-entity [:block/uuid :block/title :db/ident])))) + vec)) + +(defn- ref-attr? + [db a] + (and (keyword? a) + (= :db.type/ref + (:db/valueType (d/entity db a))))) + +(defn- sanitize-block-payload + ([db block] + (sanitize-block-payload db block nil)) + ([db block {:keys [created-uuids]}] + (if (map? block) + (let [refs (sanitize-block-refs (:block/refs block)) + created-ref-uuids (when (and (seq created-uuids) (seq refs)) + (->> refs + (keep :block/uuid) + (filter (set created-uuids)) + distinct + vec)) + m (reduce-kv + (fn [m k v] + (cond + (contains? transient-block-keys k) m + (= "block.temp" (namespace k)) m + (ref-attr? db k) + (assoc m k (sanitize-ref-value db v)) + :else + (assoc m k v))) + {} + block)] + (cond-> m + (seq refs) + (assoc rebase-refs-key refs) + + (seq created-ref-uuids) + (assoc rebase-created-refs-key created-ref-uuids))) + block))) + +(defn- get-missing-ref-by-lookup + [missing-refs tag-lookups] + (let [now (common-util/time-ms)] + (->> missing-refs + (keep (fn [{:block/keys [title] :as block :keys [db/ident]}] + (when-let [block-id (:block/uuid block)] + (let [lookup [:block/uuid block-id] + tag-ref? (contains? tag-lookups lookup) + entity (cond-> {:block/uuid block-id + :block/title (or title "") + :block/created-at now + :block/updated-at now + :block/tags (if tag-ref? :logseq.class/Tag :logseq.class/Page)} + (string? title) + (assoc :block/name (common-util/page-name-sanity-lc title)) + tag-ref? + (assoc :logseq.property.class/extends :logseq.class/Root) + ident + (assoc :db/ident ident))] + [lookup entity])))) + (into {})))) + +(defn rewrite-block-title-with-retracted-refs + [db block] + (let [refs (get block rebase-refs-key) + created-ref-uuids (set (get block rebase-created-refs-key)) + missing-refs (remove (fn [ref-entity] (d/entity db [:block/uuid (:block/uuid ref-entity)])) refs) + retracted-refs (remove (fn [block] + (contains? created-ref-uuids (:block/uuid block))) + missing-refs) + tag-lookups (->> (:block/tags block) + (filter (fn [v] + (and (vector? v) + (= :block/uuid (first v))))) + set) + missing-ref-by-lookup (get-missing-ref-by-lookup missing-refs tag-lookups) + rewrite-retracted-refs (fn [v] + (let [rewrite-ref (fn [block-ref] + (or (get missing-ref-by-lookup block-ref) + block-ref))] + (map rewrite-ref v))) + block' (cond-> block + (seq retracted-refs) + (update :block/title + (fn [title] + (-> title + (db-content/content-id-ref->page retracted-refs)))) + + (seq missing-ref-by-lookup) + (-> (update :block/refs rewrite-retracted-refs) + (update :block/tags rewrite-retracted-refs)))] + (dissoc block' rebase-refs-key rebase-created-refs-key))) + +(defn- sanitize-insert-block-payload + [db block] + (let [block' (sanitize-block-payload db block)] + (if (map? block') + (dissoc block' :block/page :block/order rebase-refs-key) + block'))) + +(defn- stable-id-coll + [db ids] + (mapv #(stable-entity-ref db %) ids)) + +(defn- resolve-move-target + [db ids] + (when-let [first-block (some->> ids first (d/entity db))] + (if-let [left-sibling (ldb/get-left-sibling first-block)] + [(:db/id left-sibling) true] + (when-let [parent (:block/parent first-block)] + [(:db/id parent) false])))) + +(defn- stable-property-value + [db property-id v] + (let [property-type (some-> (d/entity db property-id) :logseq.property/type)] + (if (contains? db-property-type/all-ref-property-types property-type) + (sanitize-ref-value db v) + v))) + +(defn- created-block-uuids-from-tx-data + [tx-data] + (->> tx-data + (keep (fn [item] + (cond + (and (map? item) (:block/uuid item)) + (:block/uuid item) + + (and (some? (:a item)) + (= :block/uuid (:a item)) + (true? (:added item))) + (:v item) + + (and (vector? item) + (= :db/add (first item)) + (>= (count item) 4) + (= :block/uuid (nth item 2))) + (nth item 3) + + :else + nil))) + distinct + vec)) + +(defn- created-page-uuid-from-tx-data + [tx-data title] + (or + (some (fn [item] + (when (and (map? item) + (= title (:block/title item)) + (:block/uuid item)) + (:block/uuid item))) + tx-data) + (let [grouped (group-by :e tx-data)] + (some (fn [[_ datoms]] + (let [title' (some (fn [datom] + (when (and (= :block/title (:a datom)) + (true? (:added datom))) + (:v datom))) + datoms) + uuid' (some (fn [datom] + (when (and (= :block/uuid (:a datom)) + (true? (:added datom))) + (:v datom))) + datoms)] + (when (and (= title title') (uuid? uuid')) + uuid'))) + grouped)))) + +(defn- created-db-ident-from-tx-data + [tx-data] + (or + (some (fn [item] + (when (and (map? item) + (qualified-keyword? (:db/ident item))) + (:db/ident item))) + tx-data) + (some (fn [item] + (when (and (map? item) + (= :db/ident (:a item)) + (qualified-keyword? (:v item))) + (:v item))) + tx-data) + (some (fn [item] + (when (and (vector? item) + (keyword? (nth item 1 nil)) + (= :db/ident (nth item 1 nil)) + (qualified-keyword? (nth item 2 nil))) + (nth item 2))) + tx-data) + (some (fn [item] + (when (and (vector? item) + (= :db/add (first item)) + (>= (count item) 4) + (= :db/ident (nth item 2)) + (qualified-keyword? (nth item 3))) + (nth item 3))) + tx-data))) + +(defn- property-ident-by-title + [db property-name] + (some-> (d/q '[:find ?ident . + :in $ ?title + :where + [?e :block/title ?title] + [?e :block/tags :logseq.class/Property] + [?e :db/ident ?ident]] + db + property-name) + (as-> ident + (when (qualified-keyword? ident) + ident)))) + +(defn- maybe-rewrite-delete-block-ids + [db tx-data ids] + (let [ids' (stable-id-coll db ids) + created-uuids (created-block-uuids-from-tx-data tx-data) + unresolved-created-lookups? (and (seq created-uuids) + (= (count ids') (count created-uuids)) + (every? (fn [id] + (and (vector? id) + (= :block/uuid (first id)) + (nil? (d/entity db id)))) + ids'))] + (if unresolved-created-lookups? + (mapv (fn [block-uuid] [:block/uuid block-uuid]) created-uuids) + ids'))) + +(defn- moved-block-ids-from-tx-data + [tx-data] + (->> tx-data + (keep (fn [[e a _v _t added?]] + (when (and (= :block/parent a) (true? added?)) + e))) + distinct + vec)) + +(defn- canonicalize-insert-blocks-op + [db tx-data args] + (let [[blocks target-id opts] args + created-uuids (created-block-uuids-from-tx-data tx-data) + blocks* (mapv #(sanitize-insert-block-payload db %) blocks) + target-ref (stable-entity-ref db target-id) + target (d/entity db target-id) + block-with-new-id (fn [block block-uuid] + (assoc block + :block/uuid block-uuid + :block/parent (let [parent (:block/parent (d/entity db [:block/uuid block-uuid]))] + [:block/uuid (:block/uuid parent)]))) + blocks* (if (seq created-uuids) + (if (and (:replace-empty-target? opts) + (= (inc (count created-uuids)) (count blocks))) + (let [[fst-block & rst-blocks] blocks* + created-rst-uuids created-uuids] + (into [(assoc fst-block :block/uuid (:block/uuid target))] + (if (seq created-rst-uuids) + (map block-with-new-id rst-blocks created-rst-uuids) + rst-blocks))) + (mapv block-with-new-id blocks* created-uuids)) + blocks)] + [blocks* + target-ref + (assoc (dissoc (or opts {}) :outliner-op) + :keep-uuid? true)])) + +(defn- canonical-move-op-for-block + [db block-id opts] + (when-let [[target-id sibling?] (resolve-move-target db [block-id])] + [:move-blocks [[(stable-entity-ref db block-id)] + (stable-entity-ref db target-id) + (assoc (dissoc (or opts {}) :outliner-op) + :sibling? sibling?)]])) + +(defn- canonicalize-indent-outdent-op + [db tx-data ids indent? opts] + (let [moved-ids (moved-block-ids-from-tx-data tx-data)] + (if (seq moved-ids) + (let [move-ops (->> moved-ids + (keep #(canonical-move-op-for-block db % opts)) + vec)] + (if (= (count moved-ids) (count move-ops)) + move-ops + [[:indent-outdent-blocks [(stable-id-coll db ids) + indent? + opts]]])) + [[:indent-outdent-blocks [(stable-id-coll db ids) + indent? + opts]]]))) + +(defn- ^:large-vars/cleanup-todo canonicalize-semantic-outliner-op + [db tx-data [op args]] + (case op + :save-block + (let [[block opts] args + created-uuids (created-block-uuids-from-tx-data tx-data)] + [:save-block [(sanitize-block-payload db block {:created-uuids created-uuids}) opts]]) + + :insert-blocks + [:insert-blocks + (canonicalize-insert-blocks-op db tx-data args)] + + :apply-template + (let [[template-id target-id opts] args + template-ref (stable-entity-ref db template-id) + target-ref (stable-entity-ref db target-id) + opts' (dissoc opts + :template-blocks + :template-id + :outliner-op)] + (when-not (and template-ref target-ref) + (throw (ex-info "Invalid apply-template args" + {:args args}))) + [:apply-template [template-ref target-ref opts']]) + + :move-blocks-up-down + (let [[ids up?] args] + [:move-blocks-up-down + [(stable-id-coll db ids) + up?]]) + + :indent-outdent-blocks + (let [[ids indent? opts] args] + (canonicalize-indent-outdent-op db tx-data ids indent? opts)) + + :move-blocks + (let [[ids target-id opts] args] + [:move-blocks [(stable-id-coll db ids) + (stable-entity-ref db target-id) + opts]]) + + :delete-blocks + (let [[ids opts] args] + [:delete-blocks [(maybe-rewrite-delete-block-ids db tx-data ids) opts]]) + + :create-page + (let [[title opts] args + page-uuid (created-page-uuid-from-tx-data tx-data title)] + [:create-page [title + (cond-> (or opts {}) + page-uuid + (assoc :uuid page-uuid))]]) + + :rename-page + (let [[page-uuid new-title] args] + [:save-block [{:block/uuid page-uuid + :block/title new-title} + {}]]) + + :delete-page + (let [[page-uuid opts] args] + [:delete-page [page-uuid opts]]) + + :restore-recycled + (let [[root-id] args] + [:restore-recycled [root-id]]) + + :set-block-property + (let [[block-eid property-id v] args] + [:set-block-property [(stable-entity-ref db block-eid) + property-id + (stable-property-value db property-id v)]]) + + :remove-block-property + (let [[block-eid property-id] args] + [:remove-block-property [(stable-entity-ref db block-eid) property-id]]) + + :batch-set-property + (let [[block-ids property-id v opts] args] + [:batch-set-property [(stable-id-coll db block-ids) + property-id + (stable-property-value db property-id v) + opts]]) + + :batch-remove-property + (let [[block-ids property-id] args] + [:batch-remove-property [(stable-id-coll db block-ids) property-id]]) + + :delete-property-value + (let [[block-eid property-id property-value] args] + [:delete-property-value [(stable-entity-ref db block-eid) + property-id + (stable-property-value db property-id property-value)]]) + + :batch-delete-property-value + (let [[block-eids property-id property-value] args] + [:batch-delete-property-value [(stable-id-coll db block-eids) + property-id + (stable-property-value db property-id property-value)]]) + + :create-property-text-block + (let [[block-id property-id value opts] args] + [:create-property-text-block [(stable-entity-ref db block-id) + (stable-entity-ref db property-id) + value + opts]]) + + :upsert-property + (let [[property-id schema opts] args + property-id' (or (stable-entity-ref db property-id) + (property-ident-by-title db (:property-name opts)) + (created-db-ident-from-tx-data tx-data))] + [:upsert-property [property-id' schema opts]]) + + :class-add-property + (let [[class-id property-id] args] + [:class-add-property [(stable-entity-ref db class-id) (stable-entity-ref db property-id)]]) + + :class-remove-property + (let [[class-id property-id] args] + [:class-remove-property [(stable-entity-ref db class-id) (stable-entity-ref db property-id)]]) + + :upsert-closed-value + (let [[property-id opts] args] + [:upsert-closed-value [property-id opts]]) + + :add-existing-values-to-closed-values + (let [[property-id values] args] + [:add-existing-values-to-closed-values [property-id values]]) + + :delete-closed-value + (let [[property-id value-block-id] args] + [:delete-closed-value [property-id (stable-entity-ref db value-block-id)]]) + + [op args])) + +(defn- save-block-keys + [block] + (->> (keys block) + (remove transient-block-keys) + (remove #(= :db/other-tx %)) + (remove nil?))) + +(defn- worker-ref-attr? + [db a] + (and (keyword? a) + (= :db.type/ref + (:db/valueType (d/entity db a))))) + +(defn- block-entity + [db block] + (cond + (map? block) + (or (when-let [block-uuid (:block/uuid block)] + (d/entity db [:block/uuid block-uuid])) + (when-let [db-id (:db/id block)] + (d/entity db db-id))) + + (integer? block) + (d/entity db block) + + (vector? block) + (d/entity db block) + + :else + nil)) + +(defn- build-inverse-save-block + [db-before block opts] + (when-let [before-ent (block-entity db-before block)] + (let [keys-to-restore (save-block-keys block) + inverse-block (reduce + (fn [m k] + (let [v (if (= :block/title k) + (:block/raw-title before-ent) + (get before-ent k))] + (assoc m k + (if (worker-ref-attr? db-before k) + (sanitize-ref-value db-before v) + v)))) + {:block/uuid (:block/uuid before-ent)} + keys-to-restore)] + [:save-block [inverse-block opts]]))) + +(defn- property-ref-value + [db property-id value] + (let [property-type (some-> (d/entity db property-id) :logseq.property/type)] + (if (contains? db-property-type/all-ref-property-types property-type) + (sanitize-ref-value db value) + value))) + +(defn- block-property-value + [db block-id property-id] + (when-let [value (some-> (d/entity db block-id) + (get property-id))] + (property-ref-value db property-id value))) + +(defn- inverse-property-op + [db-before op args] + (case op + :set-block-property + (let [[block-id property-id _value] args + before-value (block-property-value db-before block-id property-id) + block-ref (stable-entity-ref db-before block-id)] + (if (nil? before-value) + [:remove-block-property [block-ref property-id]] + [:set-block-property [block-ref property-id before-value]])) + + :remove-block-property + (let [[block-id property-id] args + before-value (block-property-value db-before block-id property-id) + block-ref (stable-entity-ref db-before block-id)] + (when (some? before-value) + [:set-block-property [block-ref property-id before-value]])) + + :batch-set-property + (let [[block-ids property-id _value _opts] args] + (->> block-ids + (keep (fn [block-id] + (let [before-value (block-property-value db-before block-id property-id) + block-ref (stable-entity-ref db-before block-id)] + (if (nil? before-value) + [:remove-block-property [block-ref property-id]] + [:set-block-property [block-ref property-id before-value]])))) + vec + seq)) + + :batch-remove-property + (let [[block-ids property-id _opts] args] + (->> block-ids + (keep (fn [block-id] + (let [before-value (block-property-value db-before block-id property-id) + block-ref (stable-entity-ref db-before block-id)] + (when (some? before-value) + [:set-block-property [block-ref property-id before-value]])))) + vec + seq)) + + nil)) + +(defn- build-insert-block-payload + [db-before ent] + (when-let [block-uuid (:block/uuid ent)] + (->> (save-block-keys ent) + (remove #(string/starts-with? (name %) "_")) + (reduce (fn [m k] + (let [v (get ent k)] + (assoc m k + (if (worker-ref-attr? db-before k) + (sanitize-ref-value db-before v) + v)))) + {:block/uuid block-uuid})))) + +(defn- selected-block-roots + [db-before ids] + (let [entities (reduce (fn [acc id] + (if-let [ent (d/entity db-before id)] + (if (some #(= (:db/id %) (:db/id ent)) acc) + acc + (conj acc ent)) + acc)) + [] + ids) + selected-ids (set (map :db/id entities)) + has-selected-ancestor? (fn [ent] + (loop [parent (:block/parent ent)] + (if-let [parent-id (some-> parent :db/id)] + (if (contains? selected-ids parent-id) + true + (recur (:block/parent parent))) + false)))] + (->> entities + (remove has-selected-ancestor?) + vec))) + +(defn- block-restore-target + [ent] + (if-let [left-sibling-id (:db/id (ldb/get-left-sibling ent))] + [left-sibling-id true] + (when-let [parent-id (or (:db/id (:block/parent ent)) + (:db/id (:block/page ent)))] + [parent-id false]))) + +(defn- to-insert-op + [db-before {:keys [blocks target-id sibling?]}] + [:insert-blocks [blocks + (stable-entity-ref db-before target-id) + {:sibling? (boolean sibling?) + :keep-uuid? true + :keep-block-order? true}]]) + +(defn- delete-root->restore-plan + [db-before root] + (let [root-id (:db/id root) + root-uuid (:block/uuid root) + blocks (when root-uuid + (->> (ldb/get-block-and-children db-before root-uuid) + (keep #(build-insert-block-payload db-before %)) + vec)) + [target-id sibling?] (block-restore-target root) + [target-id sibling?] (if (and target-id (= target-id root-id)) + [(or (:db/id (:block/parent root)) + (:db/id (:block/page root))) + false] + [target-id sibling?])] + (when (and (seq blocks) (some? target-id)) + {:blocks blocks + :target-id target-id + :sibling? sibling?}))) + +(defn- build-inverse-delete-blocks + [db-before ids] + (let [roots (selected-block-roots db-before ids) + plans (mapv #(delete-root->restore-plan db-before %) roots)] + (when (and (seq roots) + (every? some? plans)) + (->> plans + (mapv #(to-insert-op db-before %)) + seq)))) + +(defn- move-root->restore-op + [db-before root] + (let [root-id (:db/id root) + [target-id sibling?] (block-restore-target root) + parent-id (some-> root :block/parent :db/id) + page-id (some-> root :block/page :db/id) + fallback-target (or (when parent-id (stable-entity-ref db-before parent-id)) + (when page-id (stable-entity-ref db-before page-id)))] + (when (and (some? root-id) + (some? target-id)) + [:move-blocks + [[(stable-entity-ref db-before root-id)] + (stable-entity-ref db-before target-id) + (cond-> {:sibling? (boolean sibling?)} + sibling? + (assoc :fallback-target fallback-target))]]))) + +(defn- build-inverse-move-blocks + [db-before ids] + (let [roots (selected-block-roots db-before ids) + restore-ops (mapv #(move-root->restore-op db-before %) roots)] + (when (and (seq roots) + (every? some? restore-ops)) + (seq restore-ops)))) + +(defn- page-top-level-blocks + [page] + (let [page-id (:db/id page)] + (->> (:block/_page page) + (filter #(= page-id (some-> % :block/parent :db/id))) + ldb/sort-by-order + vec))) + +(defn- entity->save-op + [db-before ent] + (build-inverse-save-block db-before (into {} ent) nil)) + +(defn- build-inverse-delete-page + [db-before page-uuid] + (when-let [page (d/entity db-before [:block/uuid page-uuid])] + (let [class-or-property? (or (ldb/class? page) + (ldb/property? page)) + today-page? (when-let [day (:block/journal-day page)] + (= (date-time-util/ms->journal-day (common-util/time-ms)) day)) + root-plans (mapv #(delete-root->restore-plan db-before %) (page-top-level-blocks page))] + (cond + class-or-property? + (let [page-save-op (entity->save-op db-before (assoc (into {} page) :db/ident (:db/ident page))) + create-op (if (ldb/class? page) + (let [class-ident-namespace (some-> (:db/ident page) namespace)] + [:create-page + [(:block/title page) + (cond-> {:uuid page-uuid + :class? true + :redirect? false + :split-namespace? true} + class-ident-namespace + (assoc :class-ident-namespace class-ident-namespace))]]) + [:upsert-property + [(:db/ident page) + (db-property/get-property-schema (into {} page)) + {:property-name (:block/title page)}]]) + restore-root-ops (when (every? some? root-plans) + (mapv #(to-insert-op db-before %) root-plans))] + (cond-> [] + create-op + (conj create-op) + page-save-op + (conj page-save-op) + (seq restore-root-ops) + (into restore-root-ops) + :always + seq)) + + today-page? + (when (every? some? root-plans) + (->> root-plans + (mapv #(to-insert-op db-before %)) + seq)) + + :else + ;; Soft-deleted pages are moved to Recycle with recycle metadata. + ;; Use restore semantics instead of save-block to retract recycle markers. + [:restore-recycled [page-uuid]])))) + +(defn- restore-target-insert-op + [db-before db-after target-id opts] + (when (:replace-empty-target? opts) + (when-let [target-ref (stable-entity-ref db-before target-id)] + (when (d/entity db-after target-ref) + (when-let [target (d/entity db-before target-ref)] + [[:delete-blocks [[target-ref] {}]] + (build-inverse-save-block db-before target opts)]))))) + +(defn- build-inverse-insert-like + [db-before db-after tx-data args] + (let [[_blocks target-id opts] args + new-block-eids (keep + (fn [d] + (when (and (= :block/uuid (:a d)) + (:added d) + (nil? (d/entity db-before (:e d)))) + [:block/uuid (:v d)])) + tx-data) + restore-op (restore-target-insert-op db-before db-after target-id opts)] + (cond-> [] + (seq new-block-eids) + (conj [:delete-blocks [new-block-eids {}]]) + + restore-op + (into restore-op) + + :always + seq))) + +(defn- ^:large-vars/cleanup-todo build-strict-inverse-outliner-ops + [db-before db-after tx-data forward-ops] + (when (seq forward-ops) + (let [inverse-entries + (mapv (fn [[op args]] + (let [inverse-entry + (case op + :save-block + (let [[block opts] args] + (build-inverse-save-block db-before block opts)) + + :insert-blocks + (build-inverse-insert-like db-before db-after tx-data args) + + :apply-template + (build-inverse-insert-like db-before db-after tx-data args) + + :move-blocks + (let [[ids _target-id _opts] args] + (build-inverse-move-blocks db-before ids)) + + :indent-outdent-blocks + (let [[ids indent? opts] args] + [:indent-outdent-blocks [(stable-id-coll db-before ids) + (not indent?) + opts]]) + + :move-blocks-up-down + (let [[ids up?] args] + [:move-blocks-up-down + [(stable-id-coll db-before ids) + (not up?)]]) + + :delete-blocks + (let [[ids _opts] args] + (build-inverse-delete-blocks db-before ids)) + + :create-page + (let [[_title opts] args] + (when-let [page-uuid (:uuid opts)] + [:delete-page [page-uuid {}]])) + + :delete-page + (let [[page-uuid _opts] args] + (build-inverse-delete-page db-before page-uuid)) + + :set-block-property + (inverse-property-op db-before op args) + + :remove-block-property + (inverse-property-op db-before op args) + + :batch-set-property + (inverse-property-op db-before op args) + + :batch-remove-property + (inverse-property-op db-before op args) + + :create-property-text-block + (let [[_block-id _property-id _value opts] args + new-block-id (:new-block-id opts) + new-block-ref (cond + (vector? new-block-id) + new-block-id + + (uuid? new-block-id) + [:block/uuid new-block-id] + + :else + (stable-entity-ref db-before new-block-id))] + (when new-block-ref + [:delete-blocks [[new-block-ref] {}]])) + + :class-add-property + (let [[class-id property-id] args] + [:class-remove-property [(stable-entity-ref db-before class-id) + (stable-entity-ref db-before property-id)]]) + + :class-remove-property + (let [[class-id property-id] args] + [:class-add-property [(stable-entity-ref db-before class-id) + (stable-entity-ref db-before property-id)]]) + + :upsert-property + (let [[property-id _schema _opts] args] + (when (qualified-keyword? property-id) + [:delete-page [(common-uuid/gen-uuid :db-ident-block-uuid property-id) {}]])) + + nil)] + (if (and (sequential? inverse-entry) + (empty? inverse-entry)) + nil + inverse-entry))) + forward-ops)] + ;; Any missing inverse entry means the whole semantic inverse is incomplete. + ;; Use raw reversed tx instead of partially replaying. + (when (every? some? inverse-entries) + (some->> inverse-entries + (mapcat #(if (and (sequential? %) + (sequential? (first %))) + % + [%])) + vec + seq))))) + +(defn- has-replace-empty-target-insert-op? + [forward-ops] + (some (fn [[op [_blocks _target-id opts]]] + (and (contains? #{:insert-blocks :apply-template} op) + (:replace-empty-target? opts))) + forward-ops)) + +(defn contains-transact-op? + [ops] + (some (fn [[op]] + (= :transact op)) + ops)) + +(defn- canonicalize-explicit-outliner-ops + [db tx-data ops] + (cond + (nil? ops) + nil + + (seq ops) + (do + (when-not (every? (fn [[op]] + (contains? semantic-outliner-ops op)) + ops) + (throw (ex-info "Not every op is semantic" {:ops ops}))) + (->> ops + (mapcat (fn [op] + (let [canonicalized-op (canonicalize-semantic-outliner-op db tx-data op)] + (if (and (sequential? canonicalized-op) + (sequential? (first canonicalized-op)) + (keyword? (ffirst canonicalized-op))) + canonicalized-op + [canonicalized-op])))) + vec)) + + :else + nil)) + +(defn- patch-inverse-delete-block-ops + [inverse-outliner-ops forward-outliner-ops] + (let [forward-insert-ops* (atom (->> forward-outliner-ops + reverse + (filter #(contains? #{:insert-blocks :apply-template} (first %))) + vec))] + (mapv (fn [[op args :as inverse-op]] + (if (and (= :delete-blocks op) + (seq @forward-insert-ops*)) + (let [[_ [blocks _target-id _opts]] (first @forward-insert-ops*) + ids (->> blocks + (keep (fn [block] + (when-let [block-uuid (:block/uuid block)] + [:block/uuid block-uuid]))) + vec)] + (swap! forward-insert-ops* subvec 1) + (if (seq ids) + [:delete-blocks [ids (second args)]] + inverse-op)) + inverse-op)) + inverse-outliner-ops))) + +(defn- patch-forward-delete-block-op-ids + [db-before outliner-ops] + (some->> outliner-ops + (mapv (fn [[op args :as op-entry]] + (if (= :delete-blocks op) + (let [[ids opts] args] + [:delete-blocks [(stable-id-coll db-before ids) opts]]) + op-entry))) + seq + vec)) + +(defn- canonicalize-outliner-ops + [db tx-meta tx-data] + (let [explicit-forward-ops (:db-sync/forward-outliner-ops tx-meta) + outliner-ops (:outliner-ops tx-meta)] + (cond + (seq explicit-forward-ops) + (canonicalize-explicit-outliner-ops db tx-data explicit-forward-ops) + + (seq outliner-ops) + (if (every? (fn [[op]] + (contains? semantic-outliner-ops op)) + outliner-ops) + (canonicalize-explicit-outliner-ops db tx-data outliner-ops) + canonical-transact-op) + + (contains? #{:transact :batch-import-edn} (:outliner-op tx-meta)) + canonical-transact-op))) + +(defn derive-history-outliner-ops + [db-before db-after tx-data tx-meta] + (let [forward-outliner-ops (patch-forward-delete-block-op-ids + db-before + (canonicalize-outliner-ops db-after tx-meta tx-data)) + forward-outliner-ops (some-> forward-outliner-ops seq vec) + forward-outliner-ops (when (seq forward-outliner-ops) + (if (and (> (count forward-outliner-ops) 1) + (some (fn [[op]] (= :transact op)) forward-outliner-ops)) + canonical-transact-op + forward-outliner-ops)) + built-inverse-outliner-ops (some-> (build-strict-inverse-outliner-ops db-before db-after tx-data forward-outliner-ops) + seq + vec) + explicit-inverse-outliner-ops (some-> (canonicalize-explicit-outliner-ops db-after tx-data (:db-sync/inverse-outliner-ops tx-meta)) + (patch-inverse-delete-block-ops forward-outliner-ops) + seq + vec) + inverse-outliner-ops (cond + (and (= :apply-template (:outliner-op tx-meta)) + (:undo? tx-meta) + (seq (:db-sync/inverse-outliner-ops tx-meta))) + (:db-sync/inverse-outliner-ops tx-meta) + + (has-replace-empty-target-insert-op? forward-outliner-ops) + built-inverse-outliner-ops + + (seq built-inverse-outliner-ops) + built-inverse-outliner-ops + + (nil? explicit-inverse-outliner-ops) + nil + + ;; Treat explicit transact placeholder as "no semantic inverse". + ;; Keep nil so semantic replay must fail-fast when required. + (= canonical-transact-op explicit-inverse-outliner-ops) + nil + + :else + explicit-inverse-outliner-ops) + inverse-outliner-ops (some-> inverse-outliner-ops seq vec)] + {:forward-outliner-ops forward-outliner-ops + :inverse-outliner-ops inverse-outliner-ops})) diff --git a/deps/outliner/src/logseq/outliner/page.cljs b/deps/outliner/src/logseq/outliner/page.cljs index df56ecec87..a6ce73a00b 100644 --- a/deps/outliner/src/logseq/outliner/page.cljs +++ b/deps/outliner/src/logseq/outliner/page.cljs @@ -18,10 +18,12 @@ [logseq.db.frontend.property.build :as db-property-build] [logseq.graph-parser.block :as gp-block] [logseq.graph-parser.text :as text] + [logseq.outliner.recycle :as outliner-recycle] + [logseq.outliner.tx-meta :as outliner-tx-meta] [logseq.outliner.validate :as outliner-validate])) -(defn- db-refs->page - "Replace [[page name]] with page name" +(defn- page-ref-rewrite-targets + "Collect entities that reference `page-entity` via node refs and need title rewrite." [page-entity] (let [refs (->> (:block/_refs page-entity) ;; remove child or self that refed this page @@ -29,65 +31,120 @@ (or (= (:db/id ref) (:db/id page-entity)) (= (:db/id (:block/page ref)) (:db/id page-entity)))))) id-ref->page #(db-content/content-id-ref->page % [page-entity])] - (when (seq refs) - (let [tx-data (mapcat (fn [{:block/keys [raw-title] :as ref}] - ;; block content - (when raw-title - (let [content' (id-ref->page raw-title) - content-tx (when (not= raw-title content') - {:db/id (:db/id ref) - :block/title content'}) - tx content-tx] - (concat - [[:db/retract (:db/id ref) :block/refs (:db/id page-entity)]] - (when tx [tx]))))) refs)] - tx-data)))) + (->> refs + (keep (fn [ref] + (let [raw-title (:block/raw-title ref) + block-uuid (:block/uuid ref)] + (when raw-title + (let [content' (id-ref->page raw-title)] + (when (not= raw-title content') + (let [remaining-refs (->> (:block/refs ref) + (remove (fn [ref'] + (= (:db/id ref') (:db/id page-entity)))) + vec)] + {:ref-id (:db/id ref) + :ref-uuid block-uuid + :title content' + :refs remaining-refs}))))))) + seq))) + +(defn- db-refs->page + "Replace [[page name]] with page name." + [page-entity] + (let [page-id (:db/id page-entity)] + (some->> (page-ref-rewrite-targets page-entity) + (mapcat (fn [{:keys [ref-id title]}] + [[:db/retract ref-id :block/refs page-id] + {:db/id ref-id + :block/title title}]))))) + +(defn- db-refs->page-save-ops + [page-entity] + (some->> (page-ref-rewrite-targets page-entity) + (keep (fn [{:keys [ref-uuid title refs]}] + (when ref-uuid + [:save-block [{:block/uuid ref-uuid + :block/title title + :block/refs refs} + {}]]))) + seq + vec)) + +(defn- build-page-retract-tx + "Build cleanup tx-data for deleting a schema page. + This is pure and can be reused by sync repair." + [db page & [{:keys [include-page-retract? today-page?] + :or {include-page-retract? true}}]] + (let [page-id (:db/id page) + page-blocks-tx-data (->> (:block/_page page) + (keep (fn [block] + (when (d/entity db [:block/uuid (:block/uuid block)]) + [:db/retractEntity [:block/uuid (:block/uuid block)]])))) + property-pair-tx-data (when (ldb/property? page) + (->> (d/datoms db :avet (:db/ident page)) + (map (fn [d] [:db/retract (:e d) (:a d) (:v d)])))) + restore-class-parent-tx (when (ldb/class? page) + (->> (filter ldb/class? (:logseq.property.class/_extends page)) + (map (fn [p] + {:db/id (:db/id p) + :logseq.property.class/extends :logseq.class/Root})))) + page-tx (when (and include-page-retract? + (d/entity db page-id)) + [[:db/retractEntity page-id]])] + (if today-page? + page-blocks-tx-data + (concat page-blocks-tx-data + property-pair-tx-data + restore-class-parent-tx + (db-refs->page page) + page-tx)))) (defn delete! "Deletes a page. Returns true if able to delete page. If unable to delete, - calls error-handler fn and returns false" - [conn page-uuid & {:keys [persist-op? rename? error-handler] + calls error-handler fn and returns false. + Rules: + 1. today page can't be deleted + 2. properties and tags will be hard retracted + 3. other pages will be moved to Recycle" + [conn page-uuid & {:keys [persist-op? rename? error-handler deleted-by-uuid now-ms] :or {persist-op? true error-handler (fn [{:keys [msg]}] (js/console.error msg))}}] (assert (uuid? page-uuid) (str ::delete! " wrong page-uuid: " (if page-uuid page-uuid "nil"))) (when page-uuid (when-let [page (d/entity @conn [:block/uuid page-uuid])] - (let [blocks (:block/_page page) - truncate-blocks-tx-data (mapv - (fn [block] - [:db/retractEntity [:block/uuid (:block/uuid block)]]) - blocks)] + (let [today-page? (when-let [day (:block/journal-day page)] + (= (date-time-util/ms->journal-day (js/Date.)) day)) + tx-meta (cond-> (outliner-tx-meta/ensure-outliner-ops + {:outliner-op :delete-page + :deleted-page (:block/title page) + :persist-op? persist-op?} + [:delete-page [page-uuid {:deleted-by-uuid deleted-by-uuid + :now-ms now-ms}]]) + rename? + (assoc :real-outliner-op :rename-page))] ;; TODO: maybe we should add $$$favorites to built-in pages? - (if (or (ldb/built-in? page) (ldb/hidden? page)) + (cond + (or (ldb/built-in? page) (ldb/hidden? page)) (do (error-handler {:msg "Built-in page cannot be deleted"}) false) - (let [delete-property-tx (when (ldb/property? page) - (concat - (let [datoms (d/datoms @conn :avet (:db/ident page))] - (map (fn [d] [:db/retract (:e d) (:a d)]) datoms)) - (map (fn [d] [:db/retractEntity (:e d)]) - (d/datoms @conn :avet :logseq.property.history/property (:db/ident page))))) - today-page? (when-let [day (:block/journal-day page)] - (= (date-time-util/ms->journal-day (js/Date.)) day)) - delete-page-tx (when-not today-page? - (concat (db-refs->page page) - delete-property-tx - [[:db/retractEntity (:db/id page)]])) - restore-class-parent-tx (->> (filter ldb/class? (:logseq.property.class/_extends page)) - (map (fn [p] - {:db/id (:db/id p) - :logseq.property.class/extends :logseq.class/Root}))) - tx-data (concat truncate-blocks-tx-data - restore-class-parent-tx - delete-page-tx)] - (ldb/transact! conn tx-data - (cond-> {:outliner-op :delete-page - :deleted-page (str (:block/uuid page)) - :persist-op? persist-op?} - rename? - (assoc :real-outliner-op :rename-page))) + (or (ldb/class? page) (ldb/property? page) today-page?) + (let [tx-data (build-page-retract-tx @conn page {:today-page? today-page?})] + (ldb/transact! conn tx-data tx-meta) + true) + + :else + (let [ref-rewrite-tx-data (db-refs->page page) + ref-rewrite-save-ops (db-refs->page-save-ops page) + tx-data (concat ref-rewrite-tx-data + (outliner-recycle/recycle-page-tx-data @conn page {:deleted-by-uuid deleted-by-uuid + :now-ms now-ms})) + tx-meta' (cond-> tx-meta + (seq ref-rewrite-save-ops) + (update :outliner-ops (fnil into []) ref-rewrite-save-ops))] + (when (seq tx-data) + (ldb/transact! conn tx-data tx-meta')) true)))))) (defn- build-page-tx [db properties page {:keys [class? tags class-ident-namespace]}] @@ -265,22 +322,26 @@ :block/uuid) existing-page-by-journal-uuid (when (uuid? journal-page-uuid) (d/entity db [:block/uuid journal-page-uuid])) - existing-page-id (some->> existing-names-page - (filter #(try (when-let [e (and class-ident-namespace? (d/entity db %))] - (let [ns' (namespace (:db/ident e))] - (= (str ns') class-ident-namespace))) - (catch :default _ false))) - (first)) + existing-page-id (if class-ident-namespace? + (some->> existing-names-page + (filter #(try (when-let [e (d/entity db %)] + (let [ns' (namespace (:db/ident e))] + (= (str ns') class-ident-namespace))) + (catch :default _ false))) + (first)) + (first existing-names-page)) existing-page (or (some->> existing-page-id (d/entity db)) existing-page-by-journal-uuid)] (if (and existing-page (or (:block/journal-day existing-page) - (not (:block/parent existing-page)))) + (not (:block/parent existing-page)) + (ldb/recycled? existing-page))) (let [tx-meta {:persist-op? persist-op? :outliner-op :save-block}] - (if (and class? - (not (ldb/class? existing-page)) - (ldb/internal-page? existing-page)) + (cond + (and class? + (not (ldb/class? existing-page)) + (ldb/internal-page? existing-page)) ;; Convert existing page to class (let [tx-data [(merge (db-class/build-new-class db (select-keys existing-page [:block/title :block/uuid :block/created-at]) @@ -292,7 +353,20 @@ :tx-data tx-data :page-uuid (:block/uuid existing-page) :title (:block/title existing-page)}) + + (ldb/recycled? existing-page) + (let [options' (assoc options :uuid (:block/uuid existing-page)) + tx-meta' (outliner-tx-meta/ensure-outliner-ops + {:persist-op? persist-op? + :outliner-op :create-page} + [:create-page [title options']])] + {:tx-meta tx-meta' + :tx-data (outliner-recycle/restore-tx-data db existing-page) + :page-uuid (:block/uuid existing-page) + :title (:block/title existing-page)}) + ;; Just return existing page info + :else {:page-uuid (:block/uuid existing-page) :title (:block/title existing-page)})) (let [page (gp-block/page-name->map title db true date-formatter @@ -319,8 +393,10 @@ ;; transact doesn't support entities (remove de/entity? parents') page-txs) - tx-meta (cond-> {:persist-op? persist-op? - :outliner-op :create-page} + tx-meta (cond-> (outliner-tx-meta/ensure-outliner-ops + {:persist-op? persist-op? + :outliner-op :create-page} + [:create-page [title options]]) today-journal? (assoc :create-today-journal? true :today-journal-name title))] diff --git a/deps/outliner/src/logseq/outliner/property.cljs b/deps/outliner/src/logseq/outliner/property.cljs index 0358e7dbab..a43da4aa89 100644 --- a/deps/outliner/src/logseq/outliner/property.cljs +++ b/deps/outliner/src/logseq/outliner/property.cljs @@ -19,6 +19,7 @@ [logseq.db.sqlite.util :as sqlite-util] [logseq.outliner.core :as outliner-core] [logseq.outliner.page :as outliner-page] + [logseq.outliner.tx-meta :as outliner-tx-meta] [logseq.outliner.validate :as outliner-validate] [malli.core :as m] [malli.error :as me] @@ -281,6 +282,16 @@ [id] (if (uuid? id) [:block/uuid id] id)) +(defn- with-op-entry + [op-entry f] + (binding [outliner-tx-meta/*outliner-op-entry* + (or outliner-tx-meta/*outliner-op-entry* op-entry)] + (f))) + +(defn- transact-with-op! + [conn tx-data tx-meta] + (ldb/transact! conn tx-data (outliner-tx-meta/ensure-outliner-ops tx-meta nil))) + (defn- raw-set-block-property! "Adds the raw property pair (value not modified) to the given block if the property value is valid" [conn block property new-value] @@ -288,31 +299,34 @@ (throw-error-if-invalid-property-value @conn property new-value) (let [property-id (:db/ident property) tx-data (build-property-value-tx-data conn block property-id new-value)] - (ldb/transact! conn tx-data {:outliner-op :save-block}))) + (transact-with-op! conn tx-data {:outliner-op :save-block}))) (defn create-property-text-block! "Creates a property value block for the given property and value. Adds it to block if given block." [conn block-id property-id value {:keys [new-block-id]}] - (let [property (d/entity @conn property-id) - block (when block-id (d/entity @conn block-id)) - _ (assert (some? property) (str "Property " property-id " doesn't exist yet")) - value' (convert-property-input-string (:logseq.property/type block) - property value) - _ (when (and (not= (:logseq.property/type property) :number) - (not (string? value'))) - (throw (ex-info "value should be a string" {:block-id block-id - :property-id property-id - :value value'}))) - new-value-block (cond-> (db-property-build/build-property-value-block (or block property) property value') - new-block-id - (assoc :block/uuid new-block-id))] - (ldb/transact! conn [new-value-block] {:outliner-op :insert-blocks}) - (let [property-id (:db/ident property)] - (when (and property-id block) - (when-let [block-id (:db/id (d/entity @conn [:block/uuid (:block/uuid new-value-block)]))] - (raw-set-block-property! conn block property block-id))) - (:block/uuid new-value-block)))) + (with-op-entry + [:create-property-text-block [block-id property-id value {:new-block-id new-block-id}]] + (fn [] + (let [property (d/entity @conn property-id) + block (when block-id (d/entity @conn block-id)) + _ (assert (some? property) (str "Property " property-id " doesn't exist yet")) + value' (convert-property-input-string (:logseq.property/type block) + property value) + _ (when (and (not= (:logseq.property/type property) :number) + (not (string? value'))) + (throw (ex-info "value should be a string" {:block-id block-id + :property-id property-id + :value value'}))) + new-value-block (cond-> (db-property-build/build-property-value-block (or block property) property value') + new-block-id + (assoc :block/uuid new-block-id))] + (transact-with-op! conn [new-value-block] {:outliner-op :insert-blocks}) + (let [property-id (:db/ident property)] + (when (and property-id block) + (when-let [block-id (:db/id (d/entity @conn [:block/uuid (:block/uuid new-value-block)]))] + (raw-set-block-property! conn block property block-id))) + (:block/uuid new-value-block)))))) (defn- get-property-value-eid [db property-id raw-value] @@ -435,36 +449,56 @@ (defn batch-remove-property! [conn block-ids property-id] - (throw-error-if-read-only-property property-id) - (let [block-eids (map ->eid block-ids) - blocks (keep (fn [id] (d/entity @conn id)) block-eids) - block-id-set (set (map :db/id blocks))] - (validate-batch-deletion-of-property blocks property-id) - (when (seq blocks) - (when-let [property (d/entity @conn property-id)] - (let [txs (mapcat - (fn [block] - (let [value (get block property-id) - entities (cond - (de/entity? value) [value] - (and (sequential? value) (every? de/entity? value)) value - :else nil) - deleting-entities (filter - (fn [value] - (and - (:logseq.property/created-from-property value) - (not (or (entity-util/page? value) (ldb/closed-value? value))) - (empty? (set/difference (set (map :e (d/datoms @conn :avet (:db/ident property) (:db/id value)))) block-id-set)))) - entities) - ;; Delete property value block if it's no longer used by other blocks - retract-blocks-tx (when (seq deleting-entities) - (:tx-data (outliner-core/delete-blocks @conn deleting-entities)))] - (concat - [[:db/retract (:db/id block) (:db/ident property)]] - retract-blocks-tx))) - blocks)] - (when (seq txs) - (ldb/transact! conn txs {:outliner-op :save-block}))))))) + (with-op-entry + [:batch-remove-property [block-ids property-id]] + (fn [] + (throw-error-if-read-only-property property-id) + (let [block-eids (map ->eid block-ids) + blocks (keep (fn [id] (d/entity @conn id)) block-eids) + block-id-set (set (map :db/id blocks))] + (validate-batch-deletion-of-property blocks property-id) + (when (seq blocks) + (when-let [property (d/entity @conn property-id)] + (let [txs (mapcat + (fn [block] + (let [value (get block property-id) + entities (cond + (de/entity? value) [value] + (and (sequential? value) (every? de/entity? value)) value + :else nil) + deleting-entities (filter + (fn [value] + (let [value-referrers* + (d/q '[:find [?e ...] + :in $ ?property-id ?value-id + :where + [?e ?property-id ?value-id]] + @conn + (:db/ident property) + (:db/id value)) + value-referrers + (cond + (nil? value-referrers*) + #{} + + (coll? value-referrers*) + (set value-referrers*) + + :else + #{value-referrers*})] + (and + (:logseq.property/created-from-property value) + (not (or (entity-util/page? value) (ldb/closed-value? value))) + (empty? (set/difference value-referrers block-id-set))))) + entities) + retract-blocks-tx (when (seq deleting-entities) + (:tx-data (outliner-core/delete-blocks @conn deleting-entities {})))] + (concat + [[:db/retract (:db/id block) (:db/ident property)]] + retract-blocks-tx))) + blocks)] + (when (seq txs) + (transact-with-op! conn txs {:outliner-op :save-block}))))))))) (defn batch-set-property! "Sets properties for multiple blocks. Automatically handles property value refs. @@ -474,9 +508,12 @@ ([conn block-ids property-id v] (batch-set-property! conn block-ids property-id v {})) ([conn block-ids property-id v options] - (assert property-id "property-id is nil") - (throw-error-if-read-only-property property-id) - (if (nil? v) + (with-op-entry + [:batch-set-property [block-ids property-id v options]] + (fn [] + (assert property-id "property-id is nil") + (throw-error-if-read-only-property property-id) + (if (nil? v) (batch-remove-property! conn block-ids property-id) (let [block-eids (map ->eid block-ids) _ (when (= property-id :block/tags) @@ -524,47 +561,50 @@ (js/console.error "Skipping setting a block's property because the block id could not be found:" eid))) block-eids))] (when (seq txs) - (ldb/transact! conn txs {:outliner-op :save-block})))))) + (ldb/transact! conn txs {:outliner-op :save-block})))))))) (defn remove-block-property! [conn eid property-id] - (throw-error-if-read-only-property property-id) - (let [eid (->eid eid) - block (d/entity @conn eid) - property (d/entity @conn property-id)] - ;; Can skip for extends b/c below tx ensures it has a default value - (when-not (= :logseq.property.class/extends property-id) - (validate-batch-deletion-of-property [block] property-id)) - (when block - (cond - (= :logseq.property/empty-placeholder (:db/ident (get block property-id))) - nil + (with-op-entry + [:remove-block-property [eid property-id]] + (fn [] + (throw-error-if-read-only-property property-id) + (let [eid (->eid eid) + block (d/entity @conn eid) + property (d/entity @conn property-id)] + (when-not (= :logseq.property.class/extends property-id) + (validate-batch-deletion-of-property [block] property-id)) + (when block + (cond + (= :logseq.property/empty-placeholder (:db/ident (get block property-id))) + nil - (= :logseq.property/status property-id) - (ldb/transact! conn - [[:db/retract (:db/id block) property-id] - [:db/retract (:db/id block) :block/tags :logseq.class/Task]] - {:outliner-op :save-block}) + (= :logseq.property/status property-id) + (transact-with-op! conn + [[:db/retract (:db/id block) property-id] + [:db/retract (:db/id block) :block/tags :logseq.class/Task]] + {:outliner-op :save-block}) - (and (:logseq.property/default-value property) - (= (:logseq.property/default-value property) (get block property-id))) - (ldb/transact! conn - [{:db/id (:db/id block) - property-id :logseq.property/empty-placeholder}] - {:outliner-op :save-block}) + (and (:logseq.property/default-value property) + (= (:logseq.property/default-value property) (get block property-id))) + (transact-with-op! conn + [{:db/id (:db/id block) + property-id :logseq.property/empty-placeholder}] + {:outliner-op :save-block}) - (and (ldb/class? block) (= property-id :logseq.property.class/extends)) - (ldb/transact! conn - [[:db/retract (:db/id block) :logseq.property.class/extends] - [:db/add (:db/id block) :logseq.property.class/extends :logseq.class/Root]] - {:outliner-op :save-block}) + (and (ldb/class? block) (= property-id :logseq.property.class/extends)) + (transact-with-op! conn + [[:db/retract (:db/id block) :logseq.property.class/extends] + [:db/add (:db/id block) :logseq.property.class/extends :logseq.class/Root]] + {:outliner-op :save-block}) - (contains? db-property/db-attribute-properties property-id) - (ldb/transact! conn - [[:db/retract (:db/id block) property-id]] - {:outliner-op :save-block}) - :else - (batch-remove-property! conn [eid] property-id))))) + (contains? db-property/db-attribute-properties property-id) + (transact-with-op! conn + [[:db/retract (:db/id block) property-id]] + {:outliner-op :save-block}) + + :else + (batch-remove-property! conn [eid] property-id))))))) (defn- set-block-db-attribute! [conn db block property property-id v] @@ -574,126 +614,151 @@ [{:db/id (:db/id block) property-id v}] (= property-id :logseq.property.class/extends) (conj [:db/retract (:db/id block) :logseq.property.class/extends :logseq.class/Root]))] - (ldb/transact! conn tx-data - {:outliner-op :save-block})))) + (transact-with-op! conn tx-data + {:outliner-op :save-block})))) -(defn set-block-property! +(defn ^:large-vars/cleanup-todo set-block-property! "Updates a block property's value for an existing property-id and block. If property is a ref type, automatically handles a raw property value i.e. you can pass \"value\" instead of the property value entity. Also handle db attributes as properties" [conn block-eid property-id v] - (throw-error-if-read-only-property property-id) - (let [db @conn - block-eid (->eid block-eid) - _ (assert (qualified-keyword? property-id) "property-id should be a keyword") - block (d/entity @conn block-eid) - db-attribute? (some? (db-schema/schema property-id)) - property (d/entity @conn property-id) - property-type (get property :logseq.property/type :default) - ref? (db-property-type/all-ref-property-types property-type) - v' (if ref? - (convert-ref-property-value conn property-id v property-type) - v)] - (when-not (and block property) - (throw (ex-info "Set block property failed: block or property doesn't exist" - {:block-eid block-eid - :property-id property-id - :block block - :property property}))) - (if (nil? v') - (remove-block-property! conn block-eid property-id) - (do - (when (= property-id :block/tags) - (outliner-validate/validate-tags-property @conn [block-eid] v')) - (when (= property-id :logseq.property.class/extends) - (outliner-validate/validate-extends-property @conn v' [block])) - (cond - db-attribute? - (set-block-db-attribute! conn db block property property-id v) + (with-op-entry + [:set-block-property [block-eid property-id v]] + (fn [] + (throw-error-if-read-only-property property-id) + (let [db @conn + block-eid (->eid block-eid) + _ (assert (qualified-keyword? property-id) "property-id should be a keyword") + block (d/entity @conn block-eid) + db-attribute? (some? (db-schema/schema property-id)) + property (d/entity @conn property-id) + property-type (get property :logseq.property/type :default) + ref? (db-property-type/all-ref-property-types property-type) + v' (if ref? + (convert-ref-property-value conn property-id v property-type) + v)] + (when-not (and block property) + (throw (ex-info "Set block property failed: block or property doesn't exist" + {:block-eid block-eid + :property-id property-id + :block block + :property property}))) + (if (nil? v') + (remove-block-property! conn block-eid property-id) + (do + (when (= property-id :block/tags) + (outliner-validate/validate-tags-property @conn [block-eid] v')) + (when (= property-id :logseq.property.class/extends) + (outliner-validate/validate-extends-property @conn v' [block])) + (cond + db-attribute? + (set-block-db-attribute! conn db block property property-id v) - :else - (let [_ (assert (some? property) (str "Property " property-id " doesn't exist yet")) - ref? (db-property-type/all-ref-property-types property-type) - existing-value (get block property-id) - many? (= :db.cardinality/many (:db/cardinality property)) - value-matches? (if ref? - (if (and many? (coll? v')) - (= (set (map :db/id existing-value)) (set v')) - (= existing-value v')) - (= existing-value v'))] - (throw-error-if-self-value block v' ref?) - - (when-not value-matches? - (raw-set-block-property! conn block property v')))))))) + :else + (let [_ (assert (some? property) (str "Property " property-id " doesn't exist yet")) + ref? (db-property-type/all-ref-property-types property-type) + existing-value (get block property-id) + many? (= :db.cardinality/many (:db/cardinality property)) + many-ref-value-ids (fn [value] + (->> (cond + (nil? value) [] + (de/entity? value) [value] + (sequential? value) value + :else [value]) + (map (fn [item] + (if (de/entity? item) + (:db/id item) + item))) + set)) + value-matches? (if ref? + (if (and many? (coll? v')) + (= (many-ref-value-ids existing-value) + (many-ref-value-ids v')) + (= existing-value v')) + (= existing-value v'))] + (throw-error-if-self-value block v' ref?) + (when-not value-matches? + (raw-set-block-property! conn block property v')))))))))) (defn upsert-property! "Updates property if property-id is given. Otherwise creates a property - with the given property-id or :property-name option. When a property is created - it is ensured to have a unique :db/ident" + with the given property-id or :property-name option. When a property is created + it is ensured to have a unique :db/ident" [conn property-id schema {:keys [property-name properties] :as opts}] - (let [db @conn - db-ident (or property-id - (try (db-property/create-user-property-ident-from-name property-name) - (catch :default e - (throw (ex-info (str e) - {:type :notification - :payload {:message "Property failed to create. Please try a different property name." - :type :error}})))))] - (assert (qualified-keyword? db-ident)) - (when (and (contains? #{:checkbox} (:logseq.property/type schema)) - (= :db.cardinality/many (:db/cardinality schema))) - (throw (ex-info ":checkbox property doesn't allow multiple values" {:property-id property-id - :schema schema}))) - (if-let [property (and (qualified-keyword? property-id) (d/entity db db-ident))] - (update-property conn db-ident property schema opts) - (let [k-name (or (and property-name (name property-name)) - (name property-id)) - db-ident' (db-ident/ensure-unique-db-ident @conn db-ident)] - (assert (some? k-name) - (prn "property-id: " property-id ", property-name: " property-name)) - (outliner-validate/validate-page-title k-name {:node {:db/ident db-ident'}}) - (outliner-validate/validate-page-title-characters k-name {:node {:db/ident db-ident'}}) - (outliner-validate/validate-property-title k-name {:node {:db/ident db-ident'}}) - (let [db-id (:db/id properties) - opts (cond-> {:title k-name - :properties properties} - (integer? db-id) - (assoc :block-uuid (:block/uuid (d/entity db db-id))))] - (ldb/transact! conn - (concat - [(sqlite-util/build-new-property db-ident' schema opts)] + (with-op-entry + [:upsert-property [property-id schema opts]] + (fn [] + (let [db @conn + db-ident (or property-id + (try (db-property/create-user-property-ident-from-name property-name) + (catch :default e + (throw (ex-info (str e) + {:type :notification + :payload {:message "Property failed to create. Please try a different property name." + :type :error}})))))] + (assert (qualified-keyword? db-ident)) + (when (and (contains? #{:checkbox} (:logseq.property/type schema)) + (= :db.cardinality/many (:db/cardinality schema))) + (throw (ex-info ":checkbox property doesn't allow multiple values" {:property-id property-id + :schema schema}))) + (if-let [property (and (qualified-keyword? property-id) (d/entity db db-ident))] + (update-property conn db-ident property schema opts) + (let [k-name (or (and property-name (name property-name)) + (name property-id)) + db-ident' (db-ident/ensure-unique-db-ident @conn db-ident)] + (assert (some? k-name) + (prn "property-id: " property-id ", property-name: " property-name)) + (outliner-validate/validate-page-title k-name {:node {:db/ident db-ident'}}) + (outliner-validate/validate-page-title-characters k-name {:node {:db/ident db-ident'}}) + (outliner-validate/validate-property-title k-name {:node {:db/ident db-ident'}}) + (let [db-id (:db/id properties) + opts (cond-> {:title k-name + :properties properties} + (integer? db-id) + (assoc :block-uuid (:block/uuid (d/entity db db-id))))] + (ldb/transact! conn + (concat + [(sqlite-util/build-new-property db-ident' schema opts)] ;; Convert page to property - (when db-id - [[:db/retract db-id :block/tags :logseq.class/Page]])) - {:outliner-op :upsert-property})) - (d/entity @conn db-ident'))))) + (when db-id + [[:db/retract db-id :block/tags :logseq.class/Page]])) + {:outliner-op :upsert-property})) + (d/entity @conn db-ident'))))))) (defn batch-delete-property-value! "batch delete value when a property has multiple values" [conn block-eids property-id property-value] - (when-let [property (d/entity @conn property-id)] - (when (and (db-property/many? property) - (not (some #(= property-id (:db/ident (d/entity @conn %))) block-eids))) - (when (= property-id :block/tags) - (outliner-validate/validate-tags-property-deletion @conn block-eids property-value)) - (if (= property-id :block/tags) - (let [tx-data (map (fn [id] [:db/retract id property-id property-value]) block-eids)] - (ldb/transact! conn tx-data {:outliner-op :save-block})) - (doseq [block-eid block-eids] - (when-let [block (d/entity @conn block-eid)] - (let [current-val (get block property-id) - fv (first current-val)] - (if (and (= 1 (count current-val)) (or (= property-value fv) (= property-value (:db/id fv)))) - (remove-block-property! conn (:db/id block) property-id) - (ldb/transact! conn - [[:db/retract (:db/id block) property-id property-value]] - {:outliner-op :save-block}))))))))) + (with-op-entry + [:batch-delete-property-value [block-eids property-id property-value]] + (fn [] + (when-let [property (d/entity @conn property-id)] + (when (and (db-property/many? property) + (not (some #(= property-id (:db/ident (d/entity @conn %))) block-eids))) + (when (= property-id :block/tags) + (outliner-validate/validate-tags-property-deletion @conn block-eids property-value)) + (if (= property-id :block/tags) + (let [tx-data (map (fn [id] [:db/retract id property-id property-value]) block-eids)] + (transact-with-op! conn tx-data {:outliner-op :save-block})) + (doseq [block-eid block-eids] + (when-let [block (d/entity @conn block-eid)] + (let [current-val (get block property-id) + fv (first current-val)] + (if (and (= 1 (count current-val)) + (or (= property-value fv) + (= property-value (:db/id fv)))) + (remove-block-property! conn (:db/id block) property-id) + (transact-with-op! conn + [[:db/retract (:db/id block) property-id property-value]] + {:outliner-op :save-block}))))))))))) (defn delete-property-value! "Delete value if a property has multiple values" [conn block-eid property-id property-value] - (batch-delete-property-value! conn [block-eid] property-id property-value)) + (with-op-entry + [:delete-property-value [block-eid property-id property-value]] + (fn [] + (batch-delete-property-value! conn [block-eid] property-id property-value)))) (defn ^:api get-classes-parents [tags] @@ -806,109 +871,120 @@ (defn upsert-closed-value! "id should be a block UUID or nil" [conn property-id {:keys [id value description _scoped-class-id] :as opts}] - (assert (or (nil? id) (uuid? id))) - (let [db @conn - property (d/entity db property-id) - property-type (:logseq.property/type property)] - (when (contains? db-property-type/closed-value-property-types property-type) - (let [value' (if (string? value) (string/trim value) value) - resolved-value (convert-property-input-string nil property value') - validate-message (validate-property-value-aux - (get-property-value-schema @conn property-type property {:new-closed-value? true}) - resolved-value - {:many? (db-property/many? property)})] - (cond - (some (fn [b] - (and (= (str resolved-value) (str (or (db-property/closed-value-content b) - (:block/uuid b)))) - (not= id (:block/uuid b)))) - (entity-plus/lookup-kv-then-entity property :property/closed-values)) + (with-op-entry + [:upsert-closed-value [property-id opts]] + (fn [] + (assert (or (nil? id) (uuid? id))) + (let [db @conn + property (d/entity db property-id) + property-type (:logseq.property/type property)] + (when (contains? db-property-type/closed-value-property-types property-type) + (let [value' (if (string? value) (string/trim value) value) + resolved-value (convert-property-input-string nil property value') + validate-message (validate-property-value-aux + (get-property-value-schema @conn property-type property {:new-closed-value? true}) + resolved-value + {:many? (db-property/many? property)})] + (cond + (some (fn [b] + (and (= (str resolved-value) (str (or (db-property/closed-value-content b) + (:block/uuid b)))) + (not= id (:block/uuid b)))) + (entity-plus/lookup-kv-then-entity property :property/closed-values)) + (throw (ex-info "Closed value choice already exists" + {:error :value-exists + :type :notification + :payload {:message "Choice already exists" + :type :warning}})) - ;; Make sure to update frontend.handler.db-based.property-test when updating ex-info message - (throw (ex-info "Closed value choice already exists" - {:error :value-exists - :type :notification - :payload {:message "Choice already exists" - :type :warning}})) + validate-message + (throw (ex-info "Invalid property value" + {:error :value-invalid + :type :notification + :payload {:message validate-message + :type :warning}})) - validate-message - ;; Make sure to update frontend.handler.db-based.property-test when updating ex-info message - (throw (ex-info "Invalid property value" - {:error :value-invalid - :type :notification - :payload {:message validate-message - :type :warning}})) + (nil? resolved-value) + nil - (nil? resolved-value) - nil - - :else - (let [tx-data (build-closed-value-tx @conn property resolved-value opts)] - (ldb/transact! conn tx-data {:outliner-op :save-block}) - (when (seq description) - (if-let [desc-ent (and id (:logseq.property/description (d/entity db [:block/uuid id])))] - (ldb/transact! conn - [(outliner-core/block-with-updated-at {:db/id (:db/id desc-ent) - :block/title description})] - {:outliner-op :save-block}) - (set-block-property! conn - ;; new closed value is first in tx-data - [:block/uuid (or id (:block/uuid (first tx-data)))] - :logseq.property/description - description))))))))) + :else + (let [tx-data (build-closed-value-tx @conn property resolved-value opts)] + (transact-with-op! conn tx-data {:outliner-op :insert-blocks}) + (when (seq description) + (if-let [desc-ent (and id (:logseq.property/description (d/entity db [:block/uuid id])))] + (transact-with-op! conn + [(outliner-core/block-with-updated-at {:db/id (:db/id desc-ent) + :block/title description})] + {:outliner-op :save-block}) + (set-block-property! conn + [:block/uuid (or id (:block/uuid (first tx-data)))] + :logseq.property/description + description))))))))))) (defn add-existing-values-to-closed-values! "Adds existing values as closed values and returns their new block uuids" [conn property-id values] - (when-let [property (d/entity @conn property-id)] - (when (seq values) - (let [values' (remove string/blank? values)] - (assert (every? uuid? values') "existing values should all be UUIDs") - (let [values (keep #(d/entity @conn [:block/uuid %]) values')] - (when (seq values) - (let [value-property-tx (map (fn [id] - {:db/id id - :block/closed-value-property (:db/id property)}) - (map :db/id values)) - property-tx (outliner-core/block-with-updated-at {:db/id (:db/id property)})] - (ldb/transact! conn (cons property-tx value-property-tx) - {:outliner-op :save-blocks})))))))) + (with-op-entry + [:add-existing-values-to-closed-values [property-id values]] + (fn [] + (when-let [property (d/entity @conn property-id)] + (when (seq values) + (let [values' (remove string/blank? values)] + (assert (every? uuid? values') "existing values should all be UUIDs") + (let [values (keep #(d/entity @conn [:block/uuid %]) values')] + (when (seq values) + (let [value-property-tx (map (fn [id] + {:db/id id + :block/closed-value-property (:db/id property)}) + (map :db/id values)) + property-tx (outliner-core/block-with-updated-at {:db/id (:db/id property)})] + (transact-with-op! conn (cons property-tx value-property-tx) + {:outliner-op :save-blocks})))))))))) (defn delete-closed-value! "Returns true when deleted or if not deleted displays warning and returns false" [conn property-id value-block-id] - (when (or (nil? property-id) - (nil? value-block-id)) - (throw (ex-info "empty property-id or value-block-id when delete-closed-value!" - {:property-id property-id - :value-block-id value-block-id}))) - (when-let [value-block (d/entity @conn value-block-id)] - (if (ldb/built-in? value-block) - (throw (ex-info "The choice can't be deleted" - {:type :notification - :payload {:message "The choice can't be deleted because it's built-in." - :type :warning}})) - (let [data (:tx-data (outliner-core/delete-blocks @conn [value-block])) - tx-data (conj data (outliner-core/block-with-updated-at - {:db/id property-id}))] - (ldb/transact! conn tx-data))))) + (with-op-entry + [:delete-closed-value [property-id value-block-id]] + (fn [] + (when (or (nil? property-id) + (nil? value-block-id)) + (throw (ex-info "empty property-id or value-block-id when delete-closed-value!" + {:property-id property-id + :value-block-id value-block-id}))) + (when-let [value-block (d/entity @conn value-block-id)] + (if (ldb/built-in? value-block) + (throw (ex-info "The choice can't be deleted" + {:type :notification + :payload {:message "The choice can't be deleted because it's built-in." + :type :warning}})) + (let [tx-data (conj (:tx-data (outliner-core/delete-blocks @conn [value-block] {})) + (outliner-core/block-with-updated-at {:db/id property-id}))] + (transact-with-op! conn tx-data {}))))))) (defn class-add-property! [conn class-id property-id] - (when-not (contains? #{:logseq.property/empty-placeholder} property-id) - (when-let [class (d/entity @conn class-id)] - (if (ldb/class? class) - (ldb/transact! conn - [[:db/add (:db/id class) :logseq.property.class/properties property-id]] - {:outliner-op :save-block}) - (throw (ex-info "Can't add a property to a block that isn't a class" - {:class-id class-id :property-id property-id})))))) + (with-op-entry + [:class-add-property [class-id property-id]] + (fn [] + (when-not (contains? #{:logseq.property/empty-placeholder} property-id) + (when-let [class (d/entity @conn class-id)] + (if (ldb/class? class) + (transact-with-op! conn + [[:db/add (:db/id class) :logseq.property.class/properties property-id]] + {:outliner-op :save-block}) + (throw (ex-info "Can't add a property to a block that isn't a class" + {:class-id class-id :property-id property-id})))))))) (defn class-remove-property! [conn class-id property-id] - (when-let [class (d/entity @conn class-id)] - (when (ldb/class? class) - (when-let [property (d/entity @conn property-id)] - (when-not (ldb/built-in-class-property? class property) - (ldb/transact! conn [[:db/retract (:db/id class) :logseq.property.class/properties property-id]] - {:outliner-op :save-block})))))) + (with-op-entry + [:class-remove-property [class-id property-id]] + (fn [] + (when-let [class (d/entity @conn class-id)] + (when (ldb/class? class) + (when-let [property (d/entity @conn property-id)] + (when-not (ldb/built-in-class-property? class property) + (transact-with-op! conn + [[:db/retract (:db/id class) :logseq.property.class/properties property-id]] + {:outliner-op :save-block})))))))) diff --git a/deps/outliner/src/logseq/outliner/recycle.cljs b/deps/outliner/src/logseq/outliner/recycle.cljs new file mode 100644 index 0000000000..7211e32a07 --- /dev/null +++ b/deps/outliner/src/logseq/outliner/recycle.cljs @@ -0,0 +1,255 @@ +(ns logseq.outliner.recycle + "Recycle-based soft delete helpers for DB graphs" + (:require [datascript.core :as d] + [logseq.common.util :as common-util] + [logseq.common.uuid :as common-uuid] + [logseq.db :as ldb] + [logseq.db.common.initial-data :as common-initial-data] + [logseq.db.common.order :as db-order])) + +(def ^:private recycle-page-title "Recycle") +(def ^:private retention-ms (* 30 24 3600 1000)) +(def gc-interval-ms (* 24 3600 1000)) + +(defn- recycled? + [entity] + (some? (:logseq.property/deleted-at entity))) + +(defn- build-recycle-page-tx + [db-id] + (let [now (common-util/time-ms)] + {:db/id db-id + :block/uuid (common-uuid/gen-uuid :builtin-block-uuid recycle-page-title) + :block/name (common-util/page-name-sanity-lc recycle-page-title) + :block/title recycle-page-title + :block/created-at now + :block/updated-at now + :logseq.property/hide? true + :logseq.property/built-in? true})) + +(defn- recycle-page + [db] + (ldb/get-built-in-page db recycle-page-title)) + +(defn- ensure-recycle-page + [db] + (if-let [page (recycle-page db)] + {:page page + :page-id (:db/id page) + :tx-data []} + {:page nil + :page-id "recycle-page" + :tx-data [(build-recycle-page-tx "recycle-page")]})) + +(defn- next-child-order + [parent] + (let [last-child (last (ldb/sort-by-order (:block/_parent parent)))] + (db-order/gen-key (:block/order last-child) nil))) + +(defn- maybe-assoc-ref + [m k entity] + (if (and entity (:db/id entity)) + (assoc m k (:db/id entity)) + m)) + +(defn- maybe-assoc + [m k v] + (if (some? v) + (assoc m k v) + m)) + +(defn- resolve-entity + [db value] + (cond + (and value (:db/id value)) value + (int? value) (d/entity db value) + (vector? value) (d/entity db value) + :else nil)) + +(defn- block-subtree + [db block] + (let [ids (cons (:db/id block) + (common-initial-data/get-block-full-children-ids db (:db/id block)))] + (keep #(d/entity db %) ids))) + +(defn- page-descendants + [page] + (loop [pages [page] + result []] + (if-let [page' (first pages)] + (let [children (->> (:block/_parent page') + (filter ldb/page?) + ldb/sort-by-order)] + (recur (concat (rest pages) children) + (conj result page'))) + result))) + +(defn- page-block-subtree-ids + [db page] + (->> (:block/_page page) + ldb/sort-by-order + (mapcat (fn [block] + (map :db/id (block-subtree db block)))))) + +(defn- page-tree-ids + [db page] + (->> (page-descendants page) + (mapcat (fn [page'] + (cons (:db/id page') + (page-block-subtree-ids db page')))) + distinct)) + +(defn- deleted-by-id + [db deleted-by-uuid] + (some-> deleted-by-uuid + (#(d/entity db [:block/uuid %])) + :db/id)) + +(defn recycle-blocks-tx-data + [db blocks {:keys [deleted-by-uuid now-ms]}] + (let [{:keys [page page-id tx-data]} (ensure-recycle-page db) + deleted-by-id' (deleted-by-id db deleted-by-uuid) + now-ms (or now-ms (common-util/time-ms)) + [recycle-tx _previous-order] + (reduce + (fn [[txs previous-order] block] + (let [subtree (block-subtree db block) + order (db-order/gen-key previous-order nil) + root-tx (cond-> {:db/id (:db/id block) + :block/parent page-id + :block/page page-id + :block/order order + :logseq.property/deleted-at now-ms} + true + (maybe-assoc-ref :logseq.property/deleted-by-ref (d/entity db deleted-by-id')) + true + (maybe-assoc-ref :logseq.property.recycle/original-parent (:block/parent block)) + true + (maybe-assoc-ref :logseq.property.recycle/original-page (:block/page block)) + true + (maybe-assoc :logseq.property.recycle/original-order (:block/order block))) + subtree-page-tx (map (fn [node] + {:db/id (:db/id node) + :block/page page-id}) + subtree)] + [(into txs (cons root-tx (rest subtree-page-tx))) order])) + [[] (some->> page :block/_parent ldb/sort-by-order last :block/order)] + blocks)] + (concat tx-data recycle-tx))) + +(defn recycle-page-tx-data + [db page {:keys [deleted-by-uuid now-ms]}] + (let [{recycle-page-id :page-id + recycle-page-init-tx-data :tx-data + recycle-page-existing :page} (ensure-recycle-page db) + deleted-by-db-id (deleted-by-id db deleted-by-uuid) + now-ms (or now-ms (common-util/time-ms))] + (concat recycle-page-init-tx-data + [(cond-> {:db/id (:db/id page) + :block/parent recycle-page-id + :block/order (if recycle-page-existing + (next-child-order recycle-page-existing) + (db-order/gen-key nil nil)) + :logseq.property/deleted-at now-ms} + true + (maybe-assoc-ref :logseq.property/deleted-by-ref (d/entity db deleted-by-db-id)) + true + (maybe-assoc-ref :logseq.property.recycle/original-parent (:block/parent page)) + true + (maybe-assoc-ref :logseq.property.recycle/original-page page) + true + (maybe-assoc :logseq.property.recycle/original-order (:block/order page)))]))) + +(defn- restore-order + [target-parent] + (next-child-order target-parent)) + +(defn- restore-target + [db root] + (let [original-parent (resolve-entity db (:logseq.property.recycle/original-parent root)) + original-page (resolve-entity db (:logseq.property.recycle/original-page root)) + parent-valid? (and original-parent + (not (recycled? original-parent)) + (d/entity db (:db/id original-parent)))] + (cond + (ldb/page? root) + {:parent (when parent-valid? original-parent) + :page root + :order (or (:logseq.property.recycle/original-order root) + (when parent-valid? (restore-order original-parent)))} + + parent-valid? + {:parent original-parent + :page original-page + :order (or (:logseq.property.recycle/original-order root) + (restore-order original-parent))} + + (and original-page + (d/entity db (:db/id original-page)) + (not (recycled? original-page))) + {:parent original-page + :page original-page + :order (restore-order original-page)} + + :else + nil))) + +(defn ^:api restore-tx-data + [db root] + (when-let [{:keys [parent page order]} (restore-target db root)] + (let [subtree (when-not (ldb/page? root) + (block-subtree db root)) + clear-structure [[:db/retract (:db/id root) :block/parent] + [:db/retract (:db/id root) :block/order] + (when-not (ldb/page? root) + [:db/retract (:db/id root) :block/page])] + clear-meta [[:db/retract (:db/id root) :logseq.property/deleted-at] + [:db/retract (:db/id root) :logseq.property/deleted-by-ref] + [:db/retract (:db/id root) :logseq.property.recycle/original-parent] + [:db/retract (:db/id root) :logseq.property.recycle/original-page] + [:db/retract (:db/id root) :logseq.property.recycle/original-order]] + root-tx (cond-> {:db/id (:db/id root)} + parent + (assoc :block/parent (:db/id parent)) + order + (assoc :block/order order) + (not (ldb/page? root)) + (assoc :block/page (:db/id page))) + subtree-page-tx (when (seq subtree) + (map (fn [node] + {:db/id (:db/id node) + :block/page (:db/id page)}) + subtree))] + (concat clear-structure [root-tx] subtree-page-tx (remove nil? clear-meta))))) + +(defn ^:api restore! + [conn root-uuid] + (when-let [root (d/entity @conn [:block/uuid root-uuid])] + (when-let [tx-data (seq (restore-tx-data @conn root))] + (ldb/transact! conn tx-data {:outliner-op :restore-recycled}) + true))) + +(defn- gc-tx-data + [db {:keys [now-ms] :or {now-ms (common-util/time-ms)}}] + (let [cutoff (- now-ms retention-ms)] + (->> + (d/q '[:find [?e ...] + :in $ ?cutoff + :where + [?e :logseq.property/deleted-at ?deleted-at] + [(<= ?deleted-at ?cutoff)]] + db cutoff) + (map #(d/entity db %)) + (filter recycled?) + (mapcat (fn [entity] + (if (ldb/page? entity) + (map (fn [id] [:db/retractEntity id]) (page-tree-ids db entity)) + (map (fn [node] [:db/retractEntity (:db/id node)]) (block-subtree db entity))))) + distinct))) + +(defn ^:api gc! + [conn opts] + (when-let [tx-data (seq (gc-tx-data @conn opts))] + (ldb/transact! conn tx-data {:outliner-op :recycle-gc + :persist-op? false}) + true)) diff --git a/deps/outliner/src/logseq/outliner/transaction.cljc b/deps/outliner/src/logseq/outliner/transaction.cljc index fd750c6755..1e19396e0d 100644 --- a/deps/outliner/src/logseq/outliner/transaction.cljc +++ b/deps/outliner/src/logseq/outliner/transaction.cljc @@ -3,8 +3,20 @@ transient state from logseq.outliner.core" #?(:cljs (:require-macros [logseq.outliner.transaction]))) +(defmacro ^:api with-batch-tx + [conn opts & body] + (let [conn-sym (gensym "conn__")] + `(logseq.db/batch-transact-with-temp-conn! + ~conn + (dissoc ~opts :additional-tx :transact-opts :current-block) + (fn [~conn-sym] + (let [~conn ~conn-sym] + ~@body + (when (seq (:additional-tx ~opts)) + (logseq.db/transact! ~conn-sym (:additional-tx ~opts) {}))))))) + (defmacro ^:api transact! - "Batch all the transactions in `body` to a single transaction, Support nested transact! calls. + "Batch all the transactions in `body` to a single transaction. Currently there are no options, it'll execute body and collect all transaction data generated by body. If no transactions are included in `body`, it does not save a transaction. `Args`: @@ -20,8 +32,8 @@ (move-blocks! ...) (delete-blocks! ...))" [opts & body] - `(let [opts# (dissoc ~opts :transact-opts :current-block)] - (logseq.outliner.batch-tx/with-batch-tx-mode - (:conn (:transact-opts ~opts)) - opts# + `(let [~'conn (:conn (:transact-opts ~opts))] + (logseq.outliner.transaction/with-batch-tx + ~'conn + ~opts ~@body))) diff --git a/deps/outliner/src/logseq/outliner/tx_meta.cljs b/deps/outliner/src/logseq/outliner/tx_meta.cljs new file mode 100644 index 0000000000..1966faa180 --- /dev/null +++ b/deps/outliner/src/logseq/outliner/tx_meta.cljs @@ -0,0 +1,11 @@ +(ns logseq.outliner.tx-meta + "Helpers for normalizing tx metadata with explicit outliner op entries.") + +(def ^:dynamic *outliner-op-entry* nil) + +(defn ensure-outliner-ops + [tx-meta fallback-op-entry] + (let [entry (or *outliner-op-entry* fallback-op-entry)] + (cond-> (or tx-meta {}) + (and entry (nil? (:outliner-ops tx-meta))) + (assoc :outliner-ops [entry])))) diff --git a/deps/outliner/test/logseq/outliner/core_test.cljs b/deps/outliner/test/logseq/outliner/core_test.cljs index ef2f1d1584..276f144829 100644 --- a/deps/outliner/test/logseq/outliner/core_test.cljs +++ b/deps/outliner/test/logseq/outliner/core_test.cljs @@ -6,30 +6,26 @@ [logseq.outliner.core :as outliner-core])) (deftest test-delete-block-with-default-property - (testing "Delete block with default property" + (testing "Delete block with default property hard retracts the block subtree" (let [conn (db-test/create-conn-with-blocks [{:page {:block/title "page1"} :blocks [{:block/title "b1" :build/properties {:default "test block"}}]}]) - property-value (:user.property/default (db-test/find-block-by-content @conn "b1")) - _ (assert (:db/id property-value)) block (db-test/find-block-by-content @conn "b1")] (outliner-core/delete-blocks! conn [block] {}) - (is (nil? (db-test/find-block-by-content @conn "b1"))) - (is (nil? (db-test/find-block-by-content @conn "test block")))))) + (is (nil? (db-test/find-block-by-content @conn "b1")))))) (deftest test-delete-page-with-outliner-core - (testing "Pages shouldn't be deleted through outliner-core/delete-blocks" + (testing "Deleting pages through outliner-core/delete-blocks detaches page position only" (let [conn (db-test/create-conn-with-blocks [{:page {:block/title "page1"} :blocks [{:block/title "b1"}]} {:page {:block/title "page2"} :blocks [{:block/title "b3"} {:block/title "b4"}]}]) - page1 (ldb/get-page @conn "page1") page2 (ldb/get-page @conn "page2") _ (d/transact! conn [{:db/id (:db/id page2) :block/order "a1" - :block/parent (:db/id page1)}]) + :block/parent (:db/id (ldb/get-page @conn "page1"))}]) b3 (db-test/find-block-by-content @conn "b3") b4 (db-test/find-block-by-content @conn "b4")] (outliner-core/delete-blocks! conn [b3 b4 page2] {}) @@ -39,3 +35,18 @@ (is (= "page2" (:block/title page2'))) (is (nil? (:block/parent page2'))) (is (nil? (:block/order page2'))))))) + +(deftest delete-blocks-hard-retracts-subtree + (let [user-uuid (random-uuid) + conn (db-test/create-conn-with-blocks + [{:page {:block/title "page1"} + :blocks [{:block/title "parent" + :build/children [{:block/title "child"}]}]}]) + parent (db-test/find-block-by-content @conn "parent")] + (d/transact! conn [{:block/uuid user-uuid + :block/title "Alice"}]) + (outliner-core/delete-blocks! conn [parent] {:deleted-by-uuid user-uuid}) + (let [parent' (db-test/find-block-by-content @conn "parent") + child' (db-test/find-block-by-content @conn "child")] + (is (nil? parent')) + (is (nil? child'))))) diff --git a/deps/outliner/test/logseq/outliner/op_construct_test.cljs b/deps/outliner/test/logseq/outliner/op_construct_test.cljs new file mode 100644 index 0000000000..4fddf4d8a9 --- /dev/null +++ b/deps/outliner/test/logseq/outliner/op_construct_test.cljs @@ -0,0 +1,404 @@ +(ns logseq.outliner.op-construct-test + (:require [cljs.test :refer [deftest is testing]] + [datascript.core :as d] + [logseq.common.util.date-time :as date-time-util] + [logseq.common.uuid :as common-uuid] + [logseq.db :as ldb] + [logseq.db.test.helper :as db-test] + [logseq.outliner.core :as outliner-core] + [logseq.outliner.op.construct :as op-construct])) + +(defn- run-direct-outdent + [conn block] + (let [{:keys [tx-data]} + (#'outliner-core/indent-outdent-blocks + conn [block] false + :parent-original nil + :logical-outdenting? nil) + tx-report (d/with @conn tx-data {})] + {:tx-data (:tx-data tx-report) + :db-after (:db-after tx-report)})) + +(deftest derive-history-outliner-ops-canonicalizes-create-page-and-builds-delete-inverse-test + (testing "create-page forward op keeps created uuid and reverse op deletes that page" + (let [conn (db-test/create-conn-with-blocks {:pages-and-blocks []}) + page-uuid (random-uuid) + tx-data [{:e 1 :a :block/title :v "Created Page" :added true} + {:e 1 :a :block/uuid :v page-uuid :added true}] + tx-meta {:outliner-op :create-page + :outliner-ops [[:create-page ["Created Page" + {:redirect? false + :split-namespace? true + :tags ()}]]]} + {:keys [forward-outliner-ops inverse-outliner-ops]} + (op-construct/derive-history-outliner-ops @conn @conn tx-data tx-meta)] + (is (= :create-page (ffirst forward-outliner-ops))) + (is (= page-uuid (get-in forward-outliner-ops [0 1 1 :uuid]))) + (is (= [[:delete-page [page-uuid {}]]] + inverse-outliner-ops))))) + +(deftest derive-history-outliner-ops-collapses-mixed-stream-to-transact-placeholder-test + (testing "mixed semantic/non-semantic ops collapse to transact placeholder" + (let [conn (db-test/create-conn-with-blocks + {:pages-and-blocks + [{:page {:block/title "page"} + :blocks [{:block/title "child"}]}]}) + child (db-test/find-block-by-content @conn "child") + tx-meta {:outliner-op :save-block + :outliner-ops [[:save-block [{:block/uuid (:block/uuid child) + :block/title "changed"} {}]] + [:transact nil]]} + {:keys [forward-outliner-ops inverse-outliner-ops]} + (op-construct/derive-history-outliner-ops @conn @conn [] tx-meta)] + (is (= [[:transact nil]] forward-outliner-ops)) + (is (nil? inverse-outliner-ops))))) + +(deftest derive-history-outliner-ops-handles-replace-empty-target-insert-inverse-test + (testing "replace-empty-target insert keeps source uuid and inverse deletes target placeholder" + (let [conn (db-test/create-conn-with-blocks + {:pages-and-blocks + [{:page {:block/title "page"} + :blocks [{:block/title ""}]}]}) + empty-target (db-test/find-block-by-content @conn "") + parent-uuid (random-uuid) + child-uuid (random-uuid) + tx-meta {:outliner-op :insert-blocks + :outliner-ops [[:insert-blocks [[{:block/uuid parent-uuid + :block/title "paste parent"} + {:block/uuid child-uuid + :block/title "paste child" + :block/parent [:block/uuid parent-uuid]}] + (:db/id empty-target) + {:sibling? true + :replace-empty-target? true + :outliner-op :paste}]]]} + {:keys [forward-outliner-ops inverse-outliner-ops]} + (op-construct/derive-history-outliner-ops @conn @conn [] tx-meta)] + (is (= parent-uuid + (get-in forward-outliner-ops [0 1 0 0 :block/uuid]))) + (is (= true (get-in forward-outliner-ops [0 1 2 :keep-uuid?]))) + (is (some #(and (= :delete-blocks (first %)) + (= [[:block/uuid (:block/uuid empty-target)]] + (vec (get-in % [1 0])))) + (remove nil? inverse-outliner-ops))) + (is (not-any? #(= :save-block (first %)) + (remove nil? inverse-outliner-ops)))))) + +(deftest derive-history-outliner-ops-builds-upsert-property-inverse-delete-page-test + (testing "upsert-property with qualified keyword builds delete-page inverse" + (let [conn (db-test/create-conn-with-blocks {:pages-and-blocks []}) + property-id :user.property/custom-prop + tx-meta {:outliner-op :upsert-property + :outliner-ops [[:upsert-property [property-id + {:logseq.property/type :default} + {:property-name "custom-prop"}]]]} + {:keys [inverse-outliner-ops]} + (op-construct/derive-history-outliner-ops @conn @conn [] tx-meta) + expected-page-uuid (common-uuid/gen-uuid :db-ident-block-uuid property-id)] + (is (= [[:delete-page [expected-page-uuid {}]]] + inverse-outliner-ops))))) + +(deftest derive-history-outliner-ops-delete-blocks-inverse-avoids-self-target-test + (testing "delete-blocks inverse falls back to parent target when left sibling resolves to self" + (let [conn (db-test/create-conn-with-blocks + {:pages-and-blocks + [{:page {:block/title "page"} + :blocks [{:block/title "parent" + :build/children [{:block/title "child"}]}]}]}) + child (db-test/find-block-by-content @conn "child") + child-id (:db/id child) + child-uuid (:block/uuid child) + parent-uuid (some-> child :block/parent :block/uuid) + tx-meta {:outliner-op :delete-blocks + :outliner-ops [[:delete-blocks [[child-id] {}]]]}] + ;; Simulate stale sibling lookup returning the same entity as the deleted root. + (with-redefs [ldb/get-left-sibling (fn [_] child)] + (let [{:keys [inverse-outliner-ops]} + (op-construct/derive-history-outliner-ops @conn @conn [] tx-meta) + insert-op (first inverse-outliner-ops)] + (is (= :insert-blocks (first insert-op))) + (is (= [:block/uuid parent-uuid] + (get-in insert-op [1 1]))) + (is (= false (get-in insert-op [1 2 :sibling?]))) + (is (not= [:block/uuid child-uuid] + (get-in insert-op [1 1])))))))) + +(deftest derive-history-outliner-ops-builds-delete-page-inverse-for-class-property-and-today-page-test + (testing "delete-page inverse restores hard-retracted class/property/today pages with stable db/ident" + (let [today (date-time-util/ms->journal-day (js/Date.)) + conn (db-test/create-conn-with-blocks + {:classes {:Movie {}} + :properties {:rating {:logseq.property/type :number}} + :pages-and-blocks [{:page {:build/journal today} + :blocks [{:block/title "today child"}]}]}) + class-page (ldb/get-page @conn "Movie") + property-page (d/entity @conn :user.property/rating) + today-page (db-test/find-journal-by-journal-day @conn today) + today-child (db-test/find-block-by-content @conn "today child") + class-inverse (:inverse-outliner-ops + (op-construct/derive-history-outliner-ops + @conn @conn [] {:outliner-op :delete-page + :outliner-ops [[:delete-page [(:block/uuid class-page) {}]]]})) + property-inverse (:inverse-outliner-ops + (op-construct/derive-history-outliner-ops + @conn @conn [] {:outliner-op :delete-page + :outliner-ops [[:delete-page [(:block/uuid property-page) {}]]]})) + today-inverse (:inverse-outliner-ops + (op-construct/derive-history-outliner-ops + @conn @conn [] {:outliner-op :delete-page + :outliner-ops [[:delete-page [(:block/uuid today-page) {}]]]}))] + (is (some #(= :create-page (first %)) class-inverse)) + (is (some #(= :save-block (first %)) class-inverse)) + (is (= (:db/ident class-page) + (get-in (some #(when (= :save-block (first %)) %) class-inverse) + [1 0 :db/ident]))) + + (is (some #(= :upsert-property (first %)) property-inverse)) + (is (some #(= :save-block (first %)) property-inverse)) + (is (= (:db/ident property-page) + (get-in (some #(when (= :save-block (first %)) %) property-inverse) + [1 0 :db/ident]))) + + (is (not-any? #(= :restore-recycled (first %)) today-inverse)) + (let [today-insert-op (some #(when (= :insert-blocks (first %)) %) today-inverse)] + (is (some? today-insert-op)) + (is (= (:block/uuid today-page) + (second (get-in today-insert-op [1 1])))) + (is (= (:block/uuid today-child) + (get-in today-insert-op [1 0 0 :block/uuid]))))))) + +(deftest derive-history-outliner-ops-builds-inverse-for-all-supported-ops-test + (let [conn (db-test/create-conn-with-blocks + {:classes {:c1 {:build/class-properties [:p1]}} + :properties {:p1 {:logseq.property/type :default}} + :pages-and-blocks + [{:page {:block/title "page"} + :blocks [{:block/title "parent" + :build/children [{:block/title "child-a"} + {:block/title "child-b"}]} + {:block/title "prop-block-1" + :build/properties {:p1 "before-1"}} + {:block/title "prop-block-2"}]}]}) + page (db-test/find-page-by-title @conn "page") + parent (db-test/find-block-by-content @conn "parent") + child-a (db-test/find-block-by-content @conn "child-a") + child-b (db-test/find-block-by-content @conn "child-b") + prop-block-1 (db-test/find-block-by-content @conn "prop-block-1") + prop-block-2 (db-test/find-block-by-content @conn "prop-block-2") + class-id (:db/id (d/entity @conn :user.class/c1)) + class-uuid (:block/uuid (d/entity @conn class-id)) + property-id (:db/id (d/entity @conn :user.property/p1)) + property-page-uuid (:block/uuid (d/entity @conn property-id)) + prop-value-1-id (:db/id (:user.property/p1 prop-block-1))] + (testing ":save-block" + (let [{:keys [inverse-outliner-ops]} + (op-construct/derive-history-outliner-ops + @conn @conn [] {:outliner-op :save-block + :outliner-ops [[:save-block [{:block/uuid (:block/uuid child-a) + :block/title "changed"} {}]]]})] + (is (= :save-block (ffirst inverse-outliner-ops))) + (is (= (:block/uuid child-a) + (get-in inverse-outliner-ops [0 1 0 :block/uuid]))))) + + (testing ":insert-blocks" + (let [inserted-uuid (random-uuid) + tx-data [{:e 999999 :a :block/uuid :v inserted-uuid :added true}] + {:keys [inverse-outliner-ops]} + (op-construct/derive-history-outliner-ops + @conn @conn tx-data {:outliner-op :insert-blocks + :outliner-ops [[:insert-blocks [[{:block/uuid inserted-uuid + :block/title "new"}] + (:db/id parent) + {:sibling? false}]]]})] + (is (= :delete-blocks (ffirst inverse-outliner-ops))) + (is (= [[:block/uuid inserted-uuid]] + (vec (get-in inverse-outliner-ops [0 1 0])))))) + + (testing ":move-blocks" + (let [{:keys [inverse-outliner-ops]} + (op-construct/derive-history-outliner-ops + @conn @conn [] {:outliner-op :move-blocks + :outliner-ops [[:move-blocks [[(:db/id child-b)] + (:db/id parent) + {:sibling? false}]]]})] + (is (= :move-blocks (ffirst inverse-outliner-ops))) + (is (= [[:block/uuid (:block/uuid child-b)]] + (get-in inverse-outliner-ops [0 1 0]))))) + + (testing ":delete-blocks" + (let [{:keys [inverse-outliner-ops]} + (op-construct/derive-history-outliner-ops + @conn @conn [] {:outliner-op :delete-blocks + :outliner-ops [[:delete-blocks [[(:db/id child-b)] {}]]]})] + (is (= :insert-blocks (ffirst inverse-outliner-ops))) + (is (= (:block/uuid child-b) + (get-in inverse-outliner-ops [0 1 0 0 :block/uuid]))))) + + (testing ":create-page" + (let [page-uuid (random-uuid) + tx-data [{:e 1 :a :block/title :v "P2" :added true} + {:e 1 :a :block/uuid :v page-uuid :added true}] + {:keys [inverse-outliner-ops]} + (op-construct/derive-history-outliner-ops + @conn @conn tx-data {:outliner-op :create-page + :outliner-ops [[:create-page ["P2" {:redirect? false}]]]})] + (is (= [[:delete-page [page-uuid {}]]] + inverse-outliner-ops)))) + + (testing ":delete-page" + (let [{:keys [inverse-outliner-ops]} + (op-construct/derive-history-outliner-ops + @conn @conn [] {:outliner-op :delete-page + :outliner-ops [[:delete-page [(:block/uuid page) {}]]]})] + (is (= [[:restore-recycled [(:block/uuid page)]]] + inverse-outliner-ops)))) + + (testing ":set-block-property" + (let [{:keys [inverse-outliner-ops]} + (op-construct/derive-history-outliner-ops + @conn @conn [] {:outliner-op :set-block-property + :outliner-ops [[:set-block-property [(:db/id prop-block-1) + :user.property/p1 + "new-value"]]]})] + (is (= :set-block-property (ffirst inverse-outliner-ops))) + (is (= [:block/uuid (:block/uuid prop-block-1)] + (get-in inverse-outliner-ops [0 1 0]))) + (is (= :user.property/p1 (get-in inverse-outliner-ops [0 1 1]))) + (is (= prop-value-1-id (get-in inverse-outliner-ops [0 1 2 :db/id]))))) + + (testing ":remove-block-property" + (let [{:keys [inverse-outliner-ops]} + (op-construct/derive-history-outliner-ops + @conn @conn [] {:outliner-op :remove-block-property + :outliner-ops [[:remove-block-property [(:db/id prop-block-1) + :user.property/p1]]]})] + (is (= :set-block-property (ffirst inverse-outliner-ops))) + (is (= [:block/uuid (:block/uuid prop-block-1)] + (get-in inverse-outliner-ops [0 1 0]))) + (is (= :user.property/p1 (get-in inverse-outliner-ops [0 1 1]))) + (is (= prop-value-1-id (get-in inverse-outliner-ops [0 1 2 :db/id]))))) + + (testing ":batch-set-property" + (let [{:keys [inverse-outliner-ops]} + (op-construct/derive-history-outliner-ops + @conn @conn [] {:outliner-op :batch-set-property + :outliner-ops [[:batch-set-property [[(:db/id prop-block-1) + (:db/id prop-block-2)] + :user.property/p1 + "new-value" + {}]]]})] + (is (= 2 (count inverse-outliner-ops))) + (is (= :set-block-property (ffirst inverse-outliner-ops))) + (is (= :remove-block-property (ffirst (rest inverse-outliner-ops)))))) + + (testing ":batch-remove-property" + (let [{:keys [inverse-outliner-ops]} + (op-construct/derive-history-outliner-ops + @conn @conn [] {:outliner-op :batch-remove-property + :outliner-ops [[:batch-remove-property [[(:db/id prop-block-1) + (:db/id prop-block-2)] + :user.property/p1]]]})] + (is (= 1 (count inverse-outliner-ops))) + (is (= :set-block-property (ffirst inverse-outliner-ops))) + (is (= [:block/uuid (:block/uuid prop-block-1)] + (get-in inverse-outliner-ops [0 1 0]))) + (is (= :user.property/p1 (get-in inverse-outliner-ops [0 1 1]))) + (is (= prop-value-1-id (get-in inverse-outliner-ops [0 1 2 :db/id]))))) + + (testing ":class-add-property" + (let [{:keys [inverse-outliner-ops]} + (op-construct/derive-history-outliner-ops + @conn @conn [] {:outliner-op :class-add-property + :outliner-ops [[:class-add-property [class-id property-id]]]})] + (is (= [[:class-remove-property [[:block/uuid class-uuid] + [:block/uuid property-page-uuid]]]] + inverse-outliner-ops)))) + + (testing ":class-remove-property" + (let [{:keys [inverse-outliner-ops]} + (op-construct/derive-history-outliner-ops + @conn @conn [] {:outliner-op :class-remove-property + :outliner-ops [[:class-remove-property [class-id property-id]]]})] + (is (= [[:class-add-property [[:block/uuid class-uuid] + [:block/uuid property-page-uuid]]]] + inverse-outliner-ops)))) + + (testing ":upsert-property" + (let [property-ident :user.property/test-inverse + expected-page-uuid (common-uuid/gen-uuid :db-ident-block-uuid property-ident) + {:keys [inverse-outliner-ops]} + (op-construct/derive-history-outliner-ops + @conn @conn [] {:outliner-op :upsert-property + :outliner-ops [[:upsert-property [property-ident + {:logseq.property/type :default} + {:property-name "test-inverse"}]]]})] + (is (= [[:delete-page [expected-page-uuid {}]]] + inverse-outliner-ops)))))) + +(deftest build-history-action-metadata-direct-outdent-builds-indent-outdent-forward-and-inverse-test + (testing "direct outdent keeps canonical indent-outdent forward and inverse ops" + (let [conn (db-test/create-conn-with-blocks + {:pages-and-blocks + [{:page {:block/title "page"} + :blocks [{:block/title "parent" + :build/children [{:block/title "child-1"} + {:block/title "child-2"} + {:block/title "child-3"}]}]}]}) + child-3 (db-test/find-block-by-content @conn "child-3") + {:keys [tx-data db-after]} (run-direct-outdent conn child-3) + tx-meta {:outliner-op :move-blocks + :outliner-ops [[:indent-outdent-blocks [[(:db/id child-3)] + false + {:parent-original nil + :logical-outdenting? nil}]]]} + {:keys [forward-outliner-ops inverse-outliner-ops]} + (op-construct/derive-history-outliner-ops @conn db-after tx-data tx-meta)] + (is (= [[:indent-outdent-blocks [[[:block/uuid (:block/uuid child-3)]] + false + {:parent-original nil + :logical-outdenting? nil}]]] + forward-outliner-ops)) + (is (= [[:indent-outdent-blocks [[[:block/uuid (:block/uuid child-3)]] + true + {:parent-original nil + :logical-outdenting? nil}]]] + inverse-outliner-ops))))) + +(deftest derive-history-outliner-ops-direct-outdent-with-extra-moved-blocks-keeps-semantic-ops-test + (testing "direct outdent keeps semantic indent-outdent op and inverse" + (let [conn (db-test/create-conn-with-blocks + {:pages-and-blocks + [{:page {:block/title "page"} + :blocks [{:block/title "parent" + :build/children [{:block/title "child-1"} + {:block/title "child-2"} + {:block/title "child-3"}]}]}]}) + child-2 (db-test/find-block-by-content @conn "child-2") + {:keys [tx-data db-after]} (run-direct-outdent conn child-2) + tx-meta {:outliner-op :move-blocks + :outliner-ops [[:indent-outdent-blocks [[(:db/id child-2)] + false + {:parent-original nil + :logical-outdenting? nil}]]]} + {:keys [forward-outliner-ops inverse-outliner-ops]} + (op-construct/derive-history-outliner-ops @conn db-after tx-data tx-meta)] + (is (= [[:indent-outdent-blocks [[[:block/uuid (:block/uuid child-2)]] + false + {:parent-original nil + :logical-outdenting? nil}]]] + forward-outliner-ops)) + (is (= [[:indent-outdent-blocks [[[:block/uuid (:block/uuid child-2)]] + true + {:parent-original nil + :logical-outdenting? nil}]]] + inverse-outliner-ops))))) + +(deftest build-history-action-metadata-non-semantic-outliner-op-does-not-throw-test + (testing "non-semantic outliner-op with transact placeholder should not fail strict semantic validation" + (let [conn (db-test/create-conn-with-blocks {:pages-and-blocks []}) + tx-meta {:outliner-op :restore-recycled + :outliner-ops [[:transact nil]]} + result (op-construct/derive-history-outliner-ops @conn @conn [] tx-meta)] + (is (= [[:transact nil]] + (:forward-outliner-ops result))) + (is (nil? (:inverse-outliner-ops result)))))) diff --git a/deps/outliner/test/logseq/outliner/op_test.cljs b/deps/outliner/test/logseq/outliner/op_test.cljs index cba76e68da..f4e53d23e2 100644 --- a/deps/outliner/test/logseq/outliner/op_test.cljs +++ b/deps/outliner/test/logseq/outliner/op_test.cljs @@ -3,7 +3,8 @@ [datascript.core :as d] [logseq.db :as ldb] [logseq.db.test.helper :as db-test] - [logseq.outliner.op :as outliner-op])) + [logseq.outliner.op :as outliner-op] + [logseq.outliner.property :as outliner-property])) (deftest toggle-reaction-op (testing "toggles reactions via outliner ops" @@ -38,3 +39,80 @@ {}) (let [block-entity (d/entity @conn [:block/uuid target-uuid])] (is (empty? (:logseq.property.reaction/_target block-entity)))))))) + +(deftest apply-ops-plugin-property-sequence-test + (testing "plugin property ops remain visible after a single apply-ops! batch" + (let [conn (db-test/create-conn-with-blocks + [{:page {:block/title "Test"} + :blocks [{:block/title "Block"}]}]) + block (db-test/find-block-by-content @conn "Block") + block-id (:db/id block)] + (outliner-op/apply-ops! + conn + [[:upsert-property [:plugin.property._test_plugin/x1 {:logseq.property/type :checkbox + :db/cardinality :db.cardinality/one} + {:property-name :x1}]] + [:set-block-property [block-id :plugin.property._test_plugin/x1 true]] + [:upsert-property [:plugin.property._test_plugin/x2 {:logseq.property/type :url + :db/cardinality :db.cardinality/one} + {:property-name :x2}]] + [:set-block-property [block-id :plugin.property._test_plugin/x2 "https://logseq.com"]] + [:upsert-property [:plugin.property._test_plugin/x3 {:logseq.property/type :number + :db/cardinality :db.cardinality/one} + {:property-name :x3}]] + [:set-block-property [block-id :plugin.property._test_plugin/x3 1]] + [:upsert-property [:plugin.property._test_plugin/x4 {:logseq.property/type :number + :db/cardinality :db.cardinality/many} + {:property-name :x4}]] + [:set-block-property [block-id :plugin.property._test_plugin/x4 1]] + [:upsert-property [:plugin.property._test_plugin/x5 {:logseq.property/type :json + :db/cardinality :db.cardinality/one} + {:property-name :x5}]] + [:set-block-property [block-id :plugin.property._test_plugin/x5 "{\"foo\":\"bar\"}"]] + [:upsert-property [:plugin.property._test_plugin/x6 {:logseq.property/type :page + :db/cardinality :db.cardinality/one} + {:property-name :x6}]] + [:set-block-property [block-id :plugin.property._test_plugin/x6 "Page x"]] + [:upsert-property [:plugin.property._test_plugin/x7 {:logseq.property/type :page + :db/cardinality :db.cardinality/many} + {:property-name :x7}]] + [:set-block-property [block-id :plugin.property._test_plugin/x7 "Page y"]] + [:set-block-property [block-id :plugin.property._test_plugin/x7 "Page z"]] + [:upsert-property [:plugin.property._test_plugin/x8 {:logseq.property/type :default + :db/cardinality :db.cardinality/one} + {:property-name :x8}]] + [:set-block-property [block-id :plugin.property._test_plugin/x8 "some content"]]] + {}) + (let [block' (d/entity @conn block-id)] + (is (true? (:plugin.property._test_plugin/x1 block'))) + (is (= "https://logseq.com" + (:block/title (:plugin.property._test_plugin/x2 block')))) + (is (= 1 + (:logseq.property/value (:plugin.property._test_plugin/x3 block')))) + (is (= #{1} + (set (map :logseq.property/value (:plugin.property._test_plugin/x4 block'))))) + (is (= "{\"foo\":\"bar\"}" (:plugin.property._test_plugin/x5 block'))) + (is (= "page x" + (:block/name (:plugin.property._test_plugin/x6 block')))) + (is (= #{"page y" "page z"} + (set (map :block/name (:plugin.property._test_plugin/x7 block'))))) + (is (= "some content" + (:block/title (:plugin.property._test_plugin/x8 block')))))))) + +(deftest direct-plugin-many-page-property-appends-values-test + (testing "direct property operations keep both page values" + (let [conn (db-test/create-conn-with-blocks + [{:page {:block/title "Test"} + :blocks [{:block/title "Block"}]}]) + block (db-test/find-block-by-content @conn "Block") + block-id (:db/id block) + property-id :plugin.property._test_plugin/x7] + (outliner-property/upsert-property! conn property-id + {:logseq.property/type :page + :db/cardinality :db.cardinality/many} + {:property-name :x7}) + (outliner-property/set-block-property! conn block-id property-id "Page y") + (outliner-property/set-block-property! conn block-id property-id "Page z") + (is (= #{"page y" "page z"} + (set (map :block/name + (:plugin.property._test_plugin/x7 (d/entity @conn block-id))))))))) diff --git a/deps/outliner/test/logseq/outliner/page_test.cljs b/deps/outliner/test/logseq/outliner/page_test.cljs index 26b81e755e..672b6a39ad 100644 --- a/deps/outliner/test/logseq/outliner/page_test.cljs +++ b/deps/outliner/test/logseq/outliner/page_test.cljs @@ -4,6 +4,7 @@ [logseq.common.config :as common-config] [logseq.common.util.page-ref :as page-ref] [logseq.db :as ldb] + [logseq.db.common.order :as db-order] [logseq.db.frontend.db :as db-db] [logseq.db.test.helper :as db-test] [logseq.outliner.page :as outliner-page])) @@ -120,8 +121,43 @@ (is (contains? (set (map :db/id (:block/refs (d/entity @conn (:db/id b1))))) (:db/id d1))) (outliner-page/delete! conn (:block/uuid d1)) - (is (nil? (d/entity @conn (:db/id d1)))) - (is (nil? (d/entity @conn (:db/id b1)))))) + (let [d1' (d/entity @conn (:db/id d1)) + b1' (d/entity @conn (:db/id b1)) + recycle-page (ldb/get-built-in-page @conn "Recycle")] + (is (some? d1')) + (is (some? b1')) + (is (= (:block/uuid recycle-page) (:block/uuid (:block/parent d1')))) + (is (integer? (:logseq.property/deleted-at d1'))) + (is (nil? (:block/raw-title b1'))) + (is (contains? (set (map :db/id (:block/refs b1'))) + (:db/id d1))) + (is (= (:block/uuid d1') (:block/uuid (:block/page b1'))))))) + +(deftest delete-class-page-hard-retracts-page-tree + (let [conn (db-test/create-conn-with-blocks {:classes {:Movie {}}}) + class-page (ldb/get-page @conn "Movie") + child-uuid (random-uuid) + _ (d/transact! conn [{:block/uuid child-uuid + :block/title "class child" + :block/page (:db/id class-page) + :block/parent (:db/id class-page) + :block/order (db-order/gen-key)}])] + (outliner-page/delete! conn (:block/uuid class-page)) + (is (nil? (d/entity @conn [:block/uuid (:block/uuid class-page)]))) + (is (nil? (d/entity @conn [:block/uuid child-uuid]))))) + +(deftest delete-property-page-hard-retracts-page-tree + (let [conn (db-test/create-conn-with-blocks {:properties {:rating {:logseq.property/type :number}}}) + property-page (d/entity @conn :user.property/rating) + child-uuid (random-uuid) + _ (d/transact! conn [{:block/uuid child-uuid + :block/title "property child" + :block/page (:db/id property-page) + :block/parent (:db/id property-page) + :block/order (db-order/gen-key)}])] + (outliner-page/delete! conn (:block/uuid property-page)) + (is (nil? (d/entity @conn :user.property/rating))) + (is (nil? (d/entity @conn [:block/uuid child-uuid]))))) (deftest create-journal (let [conn (db-test/create-conn) diff --git a/deps/outliner/test/logseq/outliner/property_test.cljs b/deps/outliner/test/logseq/outliner/property_test.cljs index 1dcfa6910e..3e4f5f0b58 100644 --- a/deps/outliner/test/logseq/outliner/property_test.cljs +++ b/deps/outliner/test/logseq/outliner/property_test.cljs @@ -369,8 +369,18 @@ :blocks [{:block/title "b1" :user.property/default [:block/uuid used-closed-value-uuid]}]}]}) _ (assert (:user.property/default (db-test/find-block-by-content @conn "b1"))) property-id (:db/id (d/entity @conn :user.property/default)) + closed-value-id (:db/id (d/entity @conn [:block/uuid closed-value-uuid])) + child-uuid (random-uuid) + _ (d/transact! conn [{:block/uuid child-uuid + :block/title "closed value child" + :block/page property-id + :block/parent closed-value-id + :block/order "a0"}]) _ (outliner-property/delete-closed-value! conn property-id [:block/uuid closed-value-uuid])] - (is (nil? (d/entity @conn [:block/uuid closed-value-uuid]))))) + (is (nil? (d/entity @conn [:block/uuid closed-value-uuid]))) + (is (nil? (d/entity @conn [:block/uuid child-uuid]))) + (is (= [used-closed-value-uuid] + (mapv :block/uuid (:block/_closed-value-property (d/entity @conn :user.property/default))))))) (deftest class-add-property! (let [conn (db-test/create-conn-with-blocks diff --git a/deps/outliner/test/logseq/outliner/recycle_test.cljs b/deps/outliner/test/logseq/outliner/recycle_test.cljs new file mode 100644 index 0000000000..2f60044d7b --- /dev/null +++ b/deps/outliner/test/logseq/outliner/recycle_test.cljs @@ -0,0 +1,18 @@ +(ns logseq.outliner.recycle-test + (:require [cljs.test :refer [deftest is]] + [logseq.db :as ldb] + [logseq.db.test.helper :as db-test] + [logseq.outliner.recycle :as recycle])) + +(deftest restore-recycled-page-removes-recycle-parent + (let [conn (db-test/create-conn-with-blocks + [{:page {:block/title "page1"} + :blocks [{:block/title "b1"}]}]) + page (ldb/get-page @conn "page1")] + (recycle/recycle-page-tx-data @conn page {}) + (ldb/transact! conn (recycle/recycle-page-tx-data @conn page {}) {:outliner-op :delete-page}) + (recycle/restore! conn (:block/uuid page)) + (let [page' (ldb/get-page @conn "page1")] + (is (nil? (:block/parent page'))) + (is (nil? (:logseq.property/deleted-at page'))) + (is (nil? (:logseq.property.recycle/original-parent page')))))) diff --git a/deps/outliner/yarn.lock b/deps/outliner/yarn.lock index c5e4760996..557826b909 100644 --- a/deps/outliner/yarn.lock +++ b/deps/outliner/yarn.lock @@ -23,10 +23,10 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -better-sqlite3@^12.6.2: - version "12.6.2" - resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-12.6.2.tgz#770649f28a62e543a360f3dfa1afe4cc944b1937" - integrity sha512-8VYKM3MjCa9WcaSAI3hzwhmyHVlH8tiGFwf0RlTsZPWJ1I5MkzjiudCo4KC4DxOaL/53A5B1sI/IbldNFDbsKA== +better-sqlite3@^12.8.0: + version "12.8.0" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-12.8.0.tgz#ec9ccd4a426a35f3b9355c147af6c92a6ddd6862" + integrity sha512-RxD2Vd96sQDjQr20kdP+F+dK/1OUNiVOl200vKBZY8u0vTwysfolF6Hq+3ZK2+h8My9YvZhHsF+RSGZW2VYrPQ== dependencies: bindings "^1.5.0" prebuild-install "^7.1.1" diff --git a/deps/publish/bb.edn b/deps/publish/bb.edn index 8fede91650..45d101ce73 100644 --- a/deps/publish/bb.edn +++ b/deps/publish/bb.edn @@ -3,10 +3,10 @@ {logseq/bb-tasks #_{:local/root "../../../bb-tasks"} {:git/url "https://github.com/logseq/bb-tasks" - :git/sha "70d3edeb287f5cec7192e642549a401f7d6d4263"}} + :git/sha "acb3d3d5d38c4ac16f617cb10ae6f99fe1b8de6e"}} :pods - {clj-kondo/clj-kondo {:version "2024.09.27"}} + {clj-kondo/clj-kondo {:version "2026.01.19"}} :tasks {test:load-all-namespaces-with-nbb diff --git a/deps/publish/deps.edn b/deps/publish/deps.edn index 7089766b52..4a426f558e 100644 --- a/deps/publish/deps.edn +++ b/deps/publish/deps.edn @@ -13,15 +13,15 @@ logseq/common {:local/root "../common"} logseq/graph-parser {:local/root "../graph-parser"} logseq/db {:local/root "../db"} - missionary/missionary {:mvn/version "b.46"} + missionary/missionary {:mvn/version "b.47"} com.cognitect/transit-cljs {:mvn/version "0.8.280"} hiccups/hiccups {:mvn/version "0.3.0"}} :aliases - {:cljs {:extra-deps {org.clojure/tools.namespace {:mvn/version "0.2.11"} - cider/cider-nrepl {:mvn/version "0.55.1"} + {:cljs {:extra-deps {org.clojure/tools.namespace {:mvn/version "1.5.0"} + cider/cider-nrepl {:mvn/version "0.58.0"} org.clojars.knubie/cljs-run-test {:mvn/version "1.0.1"} - tortue/spy {:mvn/version "2.14.0"}} + tortue/spy {:mvn/version "2.15.0"}} :main-opts ["-m" "shadow.cljs.devtools.cli"]} :clj-kondo - {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2024.09.27"}} + {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.01.19"}} :main-opts ["-m" "clj-kondo.main"]}}} diff --git a/deps/publish/src/logseq/publish/publish.css b/deps/publish/src/logseq/publish/publish.css index 9ff804c84d..b2b55ff1cd 100644 --- a/deps/publish/src/logseq/publish/publish.css +++ b/deps/publish/src/logseq/publish/publish.css @@ -1,4 +1,4 @@ -@import url("https://cdn.jsdelivr.net/npm/katex@0.16.10/dist/katex.min.css"); +@import url("https://cdn.jsdelivr.net/npm/katex@0.16.38/dist/katex.min.css"); @import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;600&display=swap"); :root { diff --git a/deps/publish/src/logseq/publish/publish.js b/deps/publish/src/logseq/publish/publish.js index 9a3da60939..1366fb2f98 100644 --- a/deps/publish/src/logseq/publish/publish.js +++ b/deps/publish/src/logseq/publish/publish.js @@ -1,4 +1,4 @@ -import katexPkg from "https://esm.sh/katex@0.16.10?bundle"; +import katexPkg from "https://esm.sh/katex@0.16.38?bundle"; // Core CodeMirror pieces import { EditorState } from "https://esm.sh/@codemirror/state@6"; diff --git a/deps/publishing/bb.edn b/deps/publishing/bb.edn index 5d322c87f5..125d75b24f 100644 --- a/deps/publishing/bb.edn +++ b/deps/publishing/bb.edn @@ -3,10 +3,10 @@ {logseq/bb-tasks #_{:local/root "../../../bb-tasks"} {:git/url "https://github.com/logseq/bb-tasks" - :git/sha "70d3edeb287f5cec7192e642549a401f7d6d4263"}} + :git/sha "acb3d3d5d38c4ac16f617cb10ae6f99fe1b8de6e"}} :pods - {clj-kondo/clj-kondo {:version "2024.09.27"}} + {clj-kondo/clj-kondo {:version "2026.01.19"}} :tasks {test:load-all-namespaces-with-nbb diff --git a/deps/publishing/deps.edn b/deps/publishing/deps.edn index ef790e6daa..1e681765b4 100644 --- a/deps/publishing/deps.edn +++ b/deps/publishing/deps.edn @@ -3,5 +3,5 @@ {logseq/db {:local/root "../db"}} :aliases - {:clj-kondo {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2024.09.27"}} + {:clj-kondo {:replace-deps {clj-kondo/clj-kondo {:mvn/version "2026.01.19"}} :main-opts ["-m" "clj-kondo.main"]}}} diff --git a/deps/publishing/package.json b/deps/publishing/package.json index 2837666d1c..fba62ebd7d 100644 --- a/deps/publishing/package.json +++ b/deps/publishing/package.json @@ -7,8 +7,8 @@ "mldoc": "^1.5.9" }, "dependencies": { - "better-sqlite3": "^12.6.2", - "fs-extra": "^11.3.0" + "better-sqlite3": "^12.8.0", + "fs-extra": "^11.3.4" }, "scripts": { "test": "yarn nbb-logseq -cp test -m nextjournal.test-runner" diff --git a/deps/publishing/yarn.lock b/deps/publishing/yarn.lock index bfc0596f69..b3077ba9b2 100644 --- a/deps/publishing/yarn.lock +++ b/deps/publishing/yarn.lock @@ -23,10 +23,10 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -better-sqlite3@^12.6.2: - version "12.6.2" - resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-12.6.2.tgz#770649f28a62e543a360f3dfa1afe4cc944b1937" - integrity sha512-8VYKM3MjCa9WcaSAI3hzwhmyHVlH8tiGFwf0RlTsZPWJ1I5MkzjiudCo4KC4DxOaL/53A5B1sI/IbldNFDbsKA== +better-sqlite3@^12.8.0: + version "12.8.0" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-12.8.0.tgz#ec9ccd4a426a35f3b9355c147af6c92a6ddd6862" + integrity sha512-RxD2Vd96sQDjQr20kdP+F+dK/1OUNiVOl200vKBZY8u0vTwysfolF6Hq+3ZK2+h8My9YvZhHsF+RSGZW2VYrPQ== dependencies: bindings "^1.5.0" prebuild-install "^7.1.1" @@ -154,7 +154,7 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@^11.3.0: +fs-extra@^11.3.4: version "11.3.4" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.4.tgz#ab6934eca8bcf6f7f6b82742e33591f86301d6fc" integrity sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA== diff --git a/deps/shui/src/logseq/shui/popup/core.cljs b/deps/shui/src/logseq/shui/popup/core.cljs index a2b8bb2524..de07cffaf0 100644 --- a/deps/shui/src/logseq/shui/popup/core.cljs +++ b/deps/shui/src/logseq/shui/popup/core.cljs @@ -34,6 +34,7 @@ (defonce ^:private *popups (atom [])) (defonce ^:private *id (atom 0)) (defonce ^:private gen-id #(reset! *id (inc @*id))) +(def *opened-sub-menus (atom #{})) (defn get-popup [id] @@ -104,11 +105,11 @@ event :else [0 0])] (some-> @*target (d/set-attr! "data-popup-active" (if (keyword? id) (name id) (str id)))) - (let [on-before-hide (fn [] - (some-> on-after-hide (apply nil)) + (let [on-before-hide (fn [^js e] (when-let [^js trigger (and (not (false? focus-trigger?)) (some-> @*target (.closest "[tabindex='0']")))] - (js/setTimeout #(.focus trigger) 16)))] + (js/setTimeout #(.focus trigger) 16)) + (some-> on-before-hide (apply [e])))] (upsert-popup! (merge opts {:id id :target (deref *target) @@ -127,18 +128,18 @@ ([] (when-let [id (some-> (get-popups) (last) :id)] (hide! id 0))) ([id] (hide! id 0 {})) ([id delay] (hide! id delay {})) - ([id delay {:keys [_all?]}] + ([id delay {:keys [_all? ^js event]}] (when-let [popup (get-popup id)] (let [config (last popup) target (:target config) f (fn [] (detach-popup! id) (some-> (:on-after-hide config) (apply [])))] - (some-> (:on-before-hide config) (apply [])) - (some-> target (d/remove-attr! "data-popup-active")) - (if (and (number? delay) (> delay 0)) - (js/setTimeout f delay) - (f)))))) + (when (not (false? (some-> (:on-before-hide config) (apply [event])))) + (some-> target (d/remove-attr! "data-popup-active")) + (if (and (number? delay) (> delay 0)) + (js/setTimeout f delay) + (f))))))) (defn hide-all! [] @@ -166,10 +167,10 @@ (and (not as-mask?) auto-side?) (assoc :side (auto-side-fn))) handle-key-escape! (fn [^js e] (when-not (false? (some-> content-props (:onEscapeKeyDown) (apply [e]))) - (hide! id 1))) + (hide! id 1 {:event e}))) handle-pointer-outside! (fn [^js e] (when-not (false? (some-> content-props (:onPointerDownOutside) (apply [e]))) - (hide! id 1)))] + (hide! id 1 {:event e})))] (popup-root (merge root-props {:open open?}) (popup-trigger diff --git a/deps/shui/src/logseq/shui/stories/badge_story.cljs b/deps/shui/src/logseq/shui/stories/badge_story.cljs deleted file mode 100644 index 3ea849a581..0000000000 --- a/deps/shui/src/logseq/shui/stories/badge_story.cljs +++ /dev/null @@ -1,16 +0,0 @@ -(ns logseq.shui.stories.badge-story - (:require [logseq.shui.ui :as ui] - [cljs-bean.core :as bean] - [rum.core :as rum]) - (:require-macros [logseq.shui.storybook :refer [defmeta defstory]])) - -(defmeta - :Shui/Badge - {:component ui/badge - :argTypes {:variant {:control :select - :options [:default :destructive :outline :secondary]} - :class {:control {:type :text}}} - :args {:children "a badge" - :class ""}}) - -(defstory Default {}) \ No newline at end of file diff --git a/deps/shui/src/logseq/shui/stories/button_story.cljs b/deps/shui/src/logseq/shui/stories/button_story.cljs deleted file mode 100644 index e86f115fa9..0000000000 --- a/deps/shui/src/logseq/shui/stories/button_story.cljs +++ /dev/null @@ -1,49 +0,0 @@ -(ns logseq.shui.stories.button-story - (:require [logseq.shui.ui :as ui] - [cljs-bean.core :as bean] - [rum.core :as rum]) - (:require-macros [logseq.shui.storybook :refer [defmeta defstory]])) - -(defmeta - :Shui/Button - {:component ui/button - :tags ["autodocs"] - :argTypes {:size {:control :select - :options [:default :md :sm :xs :lg :icon]} - :variant {:control :select - :options [:default :solid :destructive :outline :secondary :ghost :link]} - :disabled {:control :boolean} - :children {:description "`string` | `ReactElement`" - :control {:hideNoControlsWarning true}}} - :args {:children "Button" - :disabled false - :variant :default}}) - -(defstory Primary - {:args - {:variant :default - :size :sm - :children "Primary button"}}) - -(defstory Secondary - {:args - {:variant :secondary - :children - (fn [] - [:<> - (ui/tabler-icon "brand-soundcloud") - "Get Logseq Desktop" - (ui/tabler-icon "arrow-right")])}}) - -(defstory LoadingButton - {:args - {:children - (fn [] - [:<> - (ui/tabler-icon "loader" {:class "animate-spin"}) - "Loading Button with custom icon"])}}) - - - - - diff --git a/deps/shui/src/logseq/shui/stories/toaster_story.cljs b/deps/shui/src/logseq/shui/stories/toaster_story.cljs deleted file mode 100644 index fd779051cc..0000000000 --- a/deps/shui/src/logseq/shui/stories/toaster_story.cljs +++ /dev/null @@ -1,78 +0,0 @@ -(ns logseq.shui.stories.toaster-story - (:require [logseq.shui.ui :as ui] - [logseq.shui.toaster.core :as toaster] - [rum.core :as rum]) - (:require-macros [logseq.shui.storybook :refer [defmeta defstory]])) - -(defmeta - :Shui/Toaster - {:component #() - :tags ["autodocs"] - :argTypes {:title {:control :text - :description "`string` | `(ctx) => void` | `ReactElement`"} - :description {:control :text - :description "`string` | `(ctx) => void` | `ReactElement`"} - :duration {:control :number - :description "milliseconds or 0 for not auto close!" - :table {:defaultValue {:summary 5000}}} - :variant {:control :select - :description "-" - :options [:default :destructive :info :success :warning :error]} - :onDismiss {:type :function - :description "hook on the toast item dismissed `func`" - :control {:hideNoControlsWarning true}} - :#Shadcn {:description "https://ui.shadcn.com/docs/components/toast" - :control {:hideNoControlsWarning true} - :table {:category :more - :type {:detail nil}}} - :#Radix {:description "https://www.radix-ui.com/primitives/docs/components/toast#root" - :control {:hideNoControlsWarning true} - :table {:category :more - :type {:detail nil}}}} - - :args {:title "" - :description "This is description content" - :variant :default - :duration 3000}}) - -(defstory ImperativeAPI - {:render - (rum/defc Toaster [props] - [:<> - [:p.flex.space-x-3 - ;; basic - (ui/button - {:on-click - #(ui/toast! - [:b (:description props)] - (:variant props) - {:title (:title props) - :duration (:duration props)})} - "open default toast") - - ;; update - (ui/button - {:class "primary-yellow" - :on-click #(ui/toast! - (fn [{:keys [dismiss! update!]}] - [:div - [:p.text-6xl.text-green-500 "toast content..."] - [:p.pt-4.space-x-2.flex - (ui/button - {:variant :destructive :size :sm :on-click dismiss!} - ":handle close") - (ui/button - {:size :sm - :on-click (fn [] (update! {:title [:b.text-2xl (js/Date.now)]}))} - ":handle update")]]))} - "open callback toast") - - ;; clear all - (ui/button - {:variant :destructive - :on-click #(ui/toast-dismiss!)} - (ui/tabler-icon "x") "dismiss all")] - - ;; install toaster - (toaster/install-toaster) - ])}) diff --git a/deps/shui/src/logseq/shui/storybook.clj b/deps/shui/src/logseq/shui/storybook.clj deleted file mode 100644 index 1b6e3fce85..0000000000 --- a/deps/shui/src/logseq/shui/storybook.clj +++ /dev/null @@ -1,32 +0,0 @@ -(ns logseq.shui.storybook) - -(defmacro defmeta - [title configs] - `(def ~(with-meta - 'default - {:export true}) - (let [ret# ~(assoc configs :title (-> (str title) (clojure.string/replace ":" ""))) - cp# (:component ret#) - ret# (cond-> ret# - (fn? cp#) - (assoc :component - (fn [^js args#] - (let [{:keys [~'children] :as args#} (cljs-bean.core/->clj args#)] - (cp# (dissoc args# :children) - (if (fn? ~'children) (~'children) ~'children))))))] - (cljs-bean.core/->js ret#)))) - -(defmacro defstory - [title configs] - `(def ~(with-meta (symbol (name title)) {:export true}) - (let [ret# ~configs - render# (:render ret#) - ret# (cond-> ret# - (fn? render#) - (assoc :render - (fn [^js args#] - (let [{:keys [~'children] :as args#} (cljs-bean.core/->clj args#)] - (let [~'res (render# (dissoc args# :children) - (if (fn? ~'children) (~'children) ~'children))] - (daiquiri.interpreter/interpret ~'res))))))] - (cljs-bean.core/->js ret#)))) \ No newline at end of file diff --git a/deps/shui/src/logseq/shui/storybook.cljs b/deps/shui/src/logseq/shui/storybook.cljs deleted file mode 100644 index 215b39942c..0000000000 --- a/deps/shui/src/logseq/shui/storybook.cljs +++ /dev/null @@ -1,7 +0,0 @@ -(ns logseq.shui.storybook - (:require [logseq.shui.stories.button-story] - [logseq.shui.stories.toaster-story] - [logseq.shui.stories.badge-story] - [logseq.shui.ui])) - -(prn "[shui storybook] init") \ No newline at end of file diff --git a/docs/accessibility.md b/docs/accessibility.md index 31d52aaa07..34ac1fdcae 100644 --- a/docs/accessibility.md +++ b/docs/accessibility.md @@ -16,7 +16,7 @@ - Focus management is extremely important for [keyboard navigation](https://developer.mozilla.org/en-US/docs/Web/Accessibility/Understanding_WCAG/Keyboard). Focusable elements can help people with motor disabilities navigate. [Focus Order](https://www.w3.org/TR/UNDERSTANDING-WCAG20/navigation-mechanisms-focus-order.html) plays an important role in this. - ## Automated testing - There is a [huge list of tools](https://www.w3.org/WAI/ER/tools/) that can help us test our application. Most of them use [axe-core](https://github.com/dequelabs/axe-core) internally. There are [browser extensions](https://www.deque.com/axe/browser-extensions/) based on axe, a [VSCode Linter Plugin](https://marketplace.visualstudio.com/items?itemName=deque-systems.vscode-axe-linter) and also [multiple community projects](https://github.com/dequelabs/axe-core/blob/develop/doc/projects.md#community-projects). - - Basic accessibility testing could be integrated into our CI, by using the appropriate axe package (e.g. [@axe-core/playwright](https://github.com/dequelabs/axe-core-npm/blob/develop/packages/playwright/README.md)) + - Basic accessibility testing could be integrated into our CI by adding a dedicated browser-based accessibility test line, for example with a Playwright-compatible axe adapter such as [@axe-core/playwright](https://github.com/dequelabs/axe-core-npm/blob/develop/packages/playwright/README.md). The current repository does not maintain that test line today, so it would need to be added explicitly instead of assumed to exist. - ## Manual testing - In theory, all of the cases described by WCAG should be testable. In practice, there are issues that can't be replicated by code. Also, manual accessibility testing would help us have a better understanding of the difficulties that certain people might encounter. Even if all the individual cases pass the tests, the overall navigation might be nonsensical. - ### Manual accessibility testing musts diff --git a/docs/adr/0001-undo-redo-worker-sync.md b/docs/adr/0002-undo-redo-worker-sync.md similarity index 98% rename from docs/adr/0001-undo-redo-worker-sync.md rename to docs/adr/0002-undo-redo-worker-sync.md index f3bf92aa6a..bdd61c259a 100644 --- a/docs/adr/0001-undo-redo-worker-sync.md +++ b/docs/adr/0002-undo-redo-worker-sync.md @@ -1,4 +1,4 @@ -# ADR 0001: Undo/Redo scoped to local changes in worker sync +# ADR 0002: Undo/Redo scoped to local changes in worker sync Date: 2026-01-28 Status: Accepted diff --git a/docs/adr/0002-optional-sync-graph-encryption.md b/docs/adr/0003-optional-sync-graph-encryption.md similarity index 98% rename from docs/adr/0002-optional-sync-graph-encryption.md rename to docs/adr/0003-optional-sync-graph-encryption.md index 7323f9b50e..b84bae3b95 100644 --- a/docs/adr/0002-optional-sync-graph-encryption.md +++ b/docs/adr/0003-optional-sync-graph-encryption.md @@ -1,4 +1,4 @@ -# ADR 0002: Optional Encryption When Creating a Sync Graph +# ADR 0003: Optional Encryption When Creating a Sync Graph Date: 2026-02-11 Status: Proposed diff --git a/docs/adr/0004-sync-tx-entry-outliner-op.md b/docs/adr/0004-sync-tx-entry-outliner-op.md new file mode 100644 index 0000000000..73a8348809 --- /dev/null +++ b/docs/adr/0004-sync-tx-entry-outliner-op.md @@ -0,0 +1,66 @@ +# ADR 0004: Sync batches are ordered tx entries with persisted `:outliner-op` + +Date: 2026-03-16 +Status: Accepted + +## Context +DB sync previously treated a client upload batch as one transit-encoded tx blob +and the client pull path could flatten remote tx entries into one local apply. +That made sync failures hard to debug because: +- a failed sync apply did not clearly identify which tx entry failed +- the server did not persist the original `:outliner-op` +- the client carried cross-batch tempid repair logic to make split txs work + +We want sync errors to point to one specific tx entry and one specific +operation intent. + +We also want the server and client to follow the same mental model: +- a batch is an ordered list of tx entries +- each tx entry is applied one by one +- each tx entry may carry its own `:outliner-op` + +## Decision +1) `tx/batch` now sends a list of tx entries instead of one encoded tx blob. +2) Each tx entry contains: + - `:tx` + - optional `:outliner-op` +3) The server applies tx entries one by one, in order. +4) The server persists `:outliner-op` in `tx_log` and returns it in `pull/ok`. +5) The client applies pulled tx entries one by one and includes the returned + `:outliner-op` in tx-meta for remote apply. +6) Cross-batch tempid reuse is unsupported by contract. A tempid must be fully + resolved within a single tx entry. + +## Storage and Protocol Notes +- The persisted sync tx log is the per-graph SQLite store initialized in + `logseq.db-sync.storage`, not the Cloudflare D1 graph index schema. +- Because of that, `outliner_op` is added via runtime SQLite schema setup for + the per-graph store, not a D1 migration under `worker/migrations/`. +- `pull/ok` entries now have shape: + - `{:t ... :tx ... :outliner-op ...}` +- `tx/batch` entries now have shape: + - `{:tx ... :outliner-op ...}` + +## Consequences +- Positive: + - Sync failures can be traced to one tx entry and its `:outliner-op`. + - Client and server now share the same ordered per-entry apply model. + - The protocol is simpler than carrying cross-batch tempid repair logic. +- Negative: + - Older assumptions that tempids can be reused across tx entries are no + longer valid. + - The wire format changed for `tx/batch` and `pull/ok`. + +## Follow-up Constraints +- New sync producers must keep each tx entry self-contained. +- If a future feature needs cross-entry references again, it must be introduced + explicitly as protocol behavior rather than repaired implicitly by the + client. + +## Verification +- Updated frontend worker db-sync tests. +- Updated `deps/db-sync` storage, handler, and node-adapter tests. +- Passed: + - `bb dev:test -v frontend.worker.db-sync-test` + - `yarn test` in `deps/db-sync` + - `bb dev:lint-and-test` diff --git a/docs/adr/0005-atomic-outliner-batches-via-temp-conn.md b/docs/adr/0005-atomic-outliner-batches-via-temp-conn.md new file mode 100644 index 0000000000..9d7f60a48d --- /dev/null +++ b/docs/adr/0005-atomic-outliner-batches-via-temp-conn.md @@ -0,0 +1,49 @@ +# ADR 0005: Atomic Outliner Batches via Temp Conn + +Date: 2026-03-16 +Status: Accepted + +## Context +Outliner batch operations previously used a "batch-tx mode" that wrote each +inner transaction to the real conn immediately, then reconstructed one logical +batch in the db listener by collecting tx reports and emitting a synthetic +batch exit event. + +That approach had two problems: +- it was not truly atomic because intermediate writes were visible on the real + conn before the batch finished +- batch flattening in `transact-with-temp-conn!` did not normalize logical + entity identity the same way sync already does, which made some multi-step + batches generate invalid final tx data + +The failing db-sync sim showed this clearly: multi-step outliner batches could +leave the final merged tx with conflicting entity ids for the same block uuid. + +## Decision +1. Outliner batch execution now uses `logseq.db/transact-with-temp-conn!`. +2. A batch writes to a temp conn for the full duration of the batch and commits + once to the real conn at the end. +3. Nested outliner batches reuse the current temp conn instead of opening a + second batch. +4. The final tx emitted from `transact-with-temp-conn!` is normalized with the + existing `logseq.db.common.normalize/normalize-tx-data` helper before it is + committed to the real conn. +5. Worker db listeners no longer reconstruct batch tx reports from + `:batch-tx/*` metadata, because the real conn now receives one final tx. + +## Consequences +- Positive: + - Outliner batches are actually atomic from the real conn's perspective. + - Listener code is simpler because it no longer has to stitch together a + logical batch from multiple intermediate tx reports. + - Temp-id and lookup-id conflicts are handled by the existing tx + normalization path instead of a batch-specific merge. +- Negative: + - Batch execution now depends on temp-conn context instead of tx-meta flags, + so any future code that expects `:batch-tx/*` metadata must not be readded. + +## Verification +- Passed targeted regression: + - `bb dev:test -v frontend.worker.db-sync-sim-test/three-clients-single-repo-sim-test` +- Passed focused batch helper coverage: + - `bb dev:test -v logseq.db-test/test-transact-with-temp-conn!` diff --git a/docs/adr/0006-sync-entity-checksum.md b/docs/adr/0006-sync-entity-checksum.md new file mode 100644 index 0000000000..597a4db8a8 --- /dev/null +++ b/docs/adr/0006-sync-entity-checksum.md @@ -0,0 +1,73 @@ +# ADR 0006: Sync Entity Checksum for Server/Client Parity + +Date: 2026-03-16 +Status: Accepted + +## Context +DB sync currently treats matching `t` values as the main convergence signal. +That is necessary, but it is not sufficient to guarantee that the client and +server represent the same block graph. + +We have seen cases where temp-id handling and rebase bugs produced logically +divergent entities while `t` still advanced normally. In those cases, the +server and client could believe they were in sync even though some entities had +different content or references. + +We need a cheap parity check that works on both the frontend worker and the +Cloudflare Worker, and the server must stay within a 128 MB memory limit. + +## Decision +1. Add a shared DB sync checksum over block entities only. +2. The compared attrs depend on whether the graph is E2EE: + - Unencrypted graphs compare: + - `:block/uuid` + - `:block/title` + - `:block/name` + - `:block/parent` + - `:block/page` + - E2EE graphs compare: + - `:block/uuid` + - `:block/parent` + - `:block/page` +3. Reference attrs are normalized to referenced block UUID strings before + hashing, so client/server entity ids do not affect the result. +4. Runtime checksum is maintained incrementally from changed entities in tx + reports and persisted locally: + - client stores it in client-op metadata + - server stores it in `sync_meta` +5. A full recompute checksum path is kept for simulation and test verification. +6. The server includes the checksum in state-bearing sync responses: + - `hello` + - `pull/ok` + - `tx/batch/ok` +7. The client compares the remote checksum against its local checksum only when + sync is expected to have converged: + - local `t` equals remote `t` + - no pending local txs + - no inflight upload txs +8. On mismatch, the client fails fast with `:db-sync/checksum-mismatch` instead + of silently continuing with a divergent graph. + +## Consequences +- Positive: + - Matching `t` is now backed by entity-level parity over the core sync attrs. + - Runtime checksum is fast and memory-light on both client and server because + it does not rescan the whole graph on each compare. + - Divergence is detected immediately at the sync boundary instead of surfacing + later as harder-to-debug invalid entities. +- Negative: + - The checksum is a fast additive hash, not a cryptographic digest. + - E2EE graphs intentionally do not compare encrypted title/name fields. + - It intentionally ignores attrs outside the sync-invariant set above. + - Mismatch handling is fail-fast in this change; it does not automatically + repair a divergent graph. + +## Verification +- Frontend worker coverage: + - `bb dev:test -v frontend.worker.db-sync-test/hello-checksum-mismatch-fails-fast-test` + - `bb dev:test -v frontend.worker.db-sync-test/pull-ok-out-of-order-stale-response-is-ignored-test` +- Sim parity coverage: + - `bb dev:test -v frontend.worker.db-sync-sim-test/two-clients-cut-paste-random-sim-test` +- Sync compatibility coverage: + - `bb dev:test -v frontend.worker.db-sync-test/pending-txs-rewrite-old-string-tempids-test` + - `bb dev:test -v frontend.worker.db-sync-test/rebase-order-fix-for-new-blocks-does-not-keep-string-tempids-test` diff --git a/docs/adr/0007-db-sync-recycle-simplification.md b/docs/adr/0007-db-sync-recycle-simplification.md new file mode 100644 index 0000000000..05c732c5ed --- /dev/null +++ b/docs/adr/0007-db-sync-recycle-simplification.md @@ -0,0 +1,58 @@ +# ADR 0007: Simplify Client DB-Sync for Recycle Semantics + +Date: 2026-03-17 +Status: Accepted + +## Context +Client DB sync still contains logic shaped around hard delete. +That logic tracks deleted UUIDs, computes deleted subtrees, and runs a second +cleanup pass in temp connections to remove nodes after remote apply and local +rebase. + +The recycle refactor changed deletion semantics. +Deleted pages and blocks now remain in the graph with stable UUIDs and are +hidden by placement and metadata instead of disappearing. + +That means the deleted-context and delete-nodes cleanup flow is no longer the +right model for client sync. +It adds complexity, creates stale test assumptions around `db/retractEntity`, +and makes the rebase path harder to reason about. + +## Decision +1. Client DB sync will stop treating deletion as entity disappearance. +2. The rebase/apply pipeline will operate on ordinary tx streams plus current DB + state. +3. `sanitize-tx-data` will no longer accept or derive deleted subtree state. +4. The extra temp-conn cleanup pass that deletes locally or remotely deleted + nodes will be removed. +5. Sync sanitization will keep only the behaviors that still matter: + - broken temp-id cleanup + - missing/ref-invalid datom cleanup + - remote/local conflict dropping + - page consistency fixes + - duplicate order fixes +6. Recycled targets are treated as invalid active refs by current DB state, + rather than through a separate deleted-context channel. + +## Consequences +- Positive: + - The client sync implementation becomes shorter and easier to reason about. + - Delete and restore semantics stay consistent across local UI, undo/redo, + sync, and rebase. + - Tests can assert recycle behavior directly instead of hard-delete + side-effects. +- Negative: + - Old tests and assumptions built on `db/retractEntity` delete behavior must + be updated. + - Minimal stripped-down test DBs need recycle-aware helpers so they do not + count recycled nodes as active graph nodes. + +## Verification +- DB sync unit coverage: + - `bb dev:test -v frontend.worker.db-sync-test` +- DB sync simulation coverage: + - `bb dev:test -v frontend.worker.db-sync-sim-test` +- Undo/redo compatibility coverage: + - `bb dev:test -v frontend.undo-redo-test` +- Recycle-aware long outliner helper coverage: + - `bb dev:test -e long -v frontend.modules.outliner.core-test/test-batch-transact` diff --git a/docs/adr/0008-db-sync-simulation-and-replay-coverage.md b/docs/adr/0008-db-sync-simulation-and-replay-coverage.md new file mode 100644 index 0000000000..784e54dd12 --- /dev/null +++ b/docs/adr/0008-db-sync-simulation-and-replay-coverage.md @@ -0,0 +1,73 @@ +# ADR 0008: Strengthen DB-Sync Simulation and Replay Coverage + +Date: 2026-03-17 +Status: Accepted + +## Context +Recent DB-sync bugs have repeatedly escaped existing unit and simulation tests. +The failures were only exposed by real user sessions and browser logs, usually +after long offline editing, undo/redo, delete/recreate, recycle, and +sequential reconnect flows. + +The current test suite has good focused coverage for many individual sync +helpers, but it still misses several classes of real-world behavior: +- editor-style multi-step writes such as `insert empty block -> save title` +- long-lived pending local tx queues +- undo/redo stacks that survive many sync rounds +- sequential reconnect flows where one client uploads first and another + reconnects later +- replay of real bad `local-txs` and `remote-txs` captured from logs + +That gap makes DB-sync regressions too dependent on manual reproduction and +post-hoc log analysis. + +## Decision +1. Treat DB-sync simulation as a first-class regression surface, not just a + long-running smoke test. +2. Keep adding deterministic repro tests for every real sync bug that reaches + logs or manual QA. +3. Expand offline multi-client sims to cover: + - both reconnect orders + - repeated offline/online cycles + - long undo/redo stacks + - heavier weighting for `delete-blocks`, `move-blocks`, + `cut-paste-block-with-child`, `undo`, and `redo` +4. Add invariant checks during simulation, not only after final convergence: + - no malformed pending tx items + - no malformed reversed tx items + - no invalid lookup-only reverse txs + - no DB structural issues such as missing parent/page or page mismatch +5. Introduce replay-oriented tests that can execute compact fixtures extracted + from real logs: + - persisted `local-txs` + - remote tx batches + - reconnect order +6. Prefer editor-faithful simulation helpers over simplified synthetic ops for + block creation and editing. +7. Keep a small corpus of fixed seeds and exact repro flows in the repository, + so future regressions are rerun automatically in CI and local test runs. + +## Consequences +- Positive: + - Real sync bugs can be captured once and kept as permanent regressions. + - Multi-client offline behavior gets closer to real user workflows. + - Broken pending/reverse tx shapes fail earlier and closer to the source. + - Investigation time drops because logs can be turned into executable tests. +- Negative: + - Long-running DB-sync tests become more expensive. + - Some simulations may still approximate, rather than exactly match, UI + timing and browser worker behavior. + - The test suite will need ongoing curation so fixed seeds and replay + fixtures stay useful instead of becoming noisy. + +## Verification +- Exact repro simulation coverage: + - `bb dev:test -v frontend.worker.db-sync-sim-test/two-clients-offline-delete-vs-children-undo-redo-repro-test` +- Aggressive offline random coverage: + - `bb dev:test -v frontend.worker.db-sync-sim-test/two-clients-both-offline-random-undo-redo-sequential-reconnect-sim-test` +- Reverse/pending tx shape coverage: + - `bb dev:test -v frontend.worker.db-sync-test/reverse-local-txs-skips-invalid-reverse-step-test` + - `bb dev:test -v frontend.worker.db-sync-test/reverse-local-txs-skips-missing-lookup-entity-step-test` + - `bb dev:test -v frontend.worker.db-sync-test/replace-string-block-tempids-rewrites-retract-entity-string-uuid-test` +- Undo/redo validity coverage: + - `bb dev:test -v frontend.undo-redo-test/undo-validation-rejects-invalid-recycle-restore-tx-test` diff --git a/docs/adr/0009-hybrid-schema-deletion.md b/docs/adr/0009-hybrid-schema-deletion.md new file mode 100644 index 0000000000..641cc33eac --- /dev/null +++ b/docs/adr/0009-hybrid-schema-deletion.md @@ -0,0 +1,69 @@ +# ADR 0009: Hybrid Delete Semantics for Schema Entities + +Date: 2026-03-18 +Status: Accepted + +## Context +`delete-blocks` and page deletion now recycle entities instead of hard deleting +them. + +That works well for ordinary content because users can restore deleted blocks +and pages from Recycle, and active UI/search can treat recycled content as +hidden state. + +It does not work as well for DB-schema entities. +Tag pages, property pages, and closed-value blocks continue to exist after +deletion and can leak into active semantics such as: +- class/property enumeration +- closed-value lookup and scoped choices +- bidirectional/property-derived views +- sync repair logic when schema roots disappear but dependents still reference + them + +At the same time, sync still needs to remain robust when `:db/retractEntity` +appears again for this subset of entities and for their descendants. + +## Decision +1. Adopt hybrid delete semantics: + - recycle ordinary blocks and ordinary content pages + - hard retract tag/class pages, property pages, and closed-value blocks +2. When deleting a schema root page, retract the schema page tree rather than + moving it to Recycle. +3. When deleting a closed-value block, retract the choice entity directly. +4. Keep raw entity access unchanged; deleted schema entities should disappear by + DB state, not by UI-only filtering. +5. Keep recycle-aware behavior for content entities: + - deleted-state page route for recycled content + - deleted styling for recycled references/embeds + - search/index filtering for recycled content and descendants +6. Make sync robust for missing content locations: + - if a content node loses `:block/parent` or `:block/page` during sync + application, move it to Recycle rather than leaving it structurally + invalid +7. Preserve valid `:db/retractEntity` handling in sync sanitize/rebase/apply for + schema deletions. + +## Consequences +- Positive: + - Schema entities return to true disappearance semantics, which matches how + most schema helpers already reason about deletion. + - Content keeps recycle/restore UX. + - Sync has a deterministic repair rule for orphaned content blocks. +- Negative: + - Delete semantics are now mixed by entity kind, so the rule must remain + centralized in the outliner/domain layer. + - Some old recycled schema entities may still need active-use filtering until + users delete them under the new semantics. + - Sync logic is slightly more complex because it must accept both recycle and + hard-retract flows. + +## Verification +- Model/helper coverage: + - `bb dev:test -v frontend.db.db-based-model-test/get-all-classes-filters-recycled-test` + - `bb dev:test -v frontend.db.db-based-model-test/get-all-properties-filters-recycled-test` +- Sync repair coverage: + - `bb dev:test -v frontend.worker.db-sync-test/missing-parent-after-remote-retract-moves-child-to-recycle-test` +- Additional targeted coverage to keep or extend: + - page/property/closed-value delete semantics + - bidirectional helper behavior with deleted or recycled entities + - search index invalidation for recycled content diff --git a/docs/adr/0010-op-driven-client-rebase.md b/docs/adr/0010-op-driven-client-rebase.md new file mode 100644 index 0000000000..84d0d7f12e --- /dev/null +++ b/docs/adr/0010-op-driven-client-rebase.md @@ -0,0 +1,147 @@ +# ADR 0010: Canonical Op-Driven Client Rebase With Legacy Tx Surgery Isolation + +Date: 2026-03-19 +Status: Accepted + +## Context +Client sync rebase currently relies on custom tx-data surgery to keep pending +local changes alive after remote txs are applied. + +That approach has several problems: +- the logic is hard to reason about because it edits datoms instead of replaying + user intent +- it does not preserve intent well when a local change originated from a higher + level outliner action +- the helper set keeps growing with special cases for missing refs, structural + conflicts, and deleted entities +- the outliner-op surface is too large to replay directly without first + reducing it + +At the same time, not every outliner op needs to remain a first-class replay +operation. +Many ops can be safely represented by `:transact` when their tx-data is already +self-contained and does not depend on rerunning outliner logic. + +We also have existing persisted pending rows that only store tx-data and reverse +tx-data. +Those rows still need a compatibility path, but that path should not define the +new rebase architecture. + +## Decision +1. New pending local tx rows will persist semantic `:outliner-ops` in addition + to their existing tx-data payload. +2. Client rebase will become op-driven for all new pending rows: + - reverse local txs + - apply remote txs + - transform or drop stored local ops against the post-remote temp db + - replay the surviving ops to regenerate rebased tx-data +3. Reduce the replay-visible outliner-op surface to a small canonical set: + - `:insert-blocks` + - `:save-block` + - `:move-blocks` + - `:delete-blocks` + - `:transact` +4. Normalize higher-level ops into that canonical set before persistence. + Examples: + - `:indent-outdent-blocks` becomes `:move-blocks` + - `:move-blocks-up-down` becomes `:move-blocks` + - `:rename-page` becomes `:save-block` +5. Introduce an explicit safe-`:transact` classifier: + - if replaying tx-data directly is sufficient and does not require rerunning + outliner logic, persist the op as canonical `:transact` + - otherwise keep it as one of the canonical outliner replay ops + - expected canonical `:transact` cases include direct tx replay actions such + as undo, redo, import replay, reaction toggles, and property-value updates +6. Treat undo/redo as canonical `:transact` actions. + - persist the exact tx-data that the successful undo or redo applied + - keep the action atomic as one pending tx row + - do not reconstruct the original higher-level outliner ops that were + undone or redone +7. Treat `:batch-import-edn` as canonical `:transact` after successful local + execution. + - persist the exact tx-data that the import applied + - do not rerun import expansion during rebase +8. Keep the following op kinds as replay-visible semantic ops because they must + be reevaluated against current DB state: + - `:save-block` + - `:insert-blocks` + - `:move-blocks` + - `:delete-blocks` + - `:create-page` + - `:delete-page` + - `:upsert-property` +9. Stop using raw tx-data surgery in the normal rebase path for new rows. +10. Move the current tx-data surgery helpers into a dedicated legacy namespace. + That legacy namespace is only for compatibility handling of old persisted + pending rows that do not have stored `:outliner-ops`. +11. Add explicit owned-block filtering in the new op-driven rebase path. + Initially cover: + - reaction blocks owned by `:logseq.property.reaction/target` + - property history blocks owned by `:logseq.property.history/block` + - property history blocks whose effective owner disappears through deleted + `:logseq.property.history/ref-value` +12. If a local op creates or updates one of those owned blocks and the owning + block was deleted remotely, drop that op. +13. Treat each pending tx row as one user action and keep it atomic during + rebase. +14. If any op in a pending tx becomes invalid during rebase, drop the whole + pending tx rather than keeping a partial replay of that user action. +15. Keep this refactor client-only for now. + The sync wire format and server tx log remain unchanged. + +## Consequences +- Positive: + - Rebase reasons about user intent instead of datom accidents. + - The number of op kinds that rebase must understand becomes much smaller. + - Safe direct tx replay remains available through canonical `:transact` + without forcing every operation through outliner code. + - Undo/redo stays aligned with its real intent: replay the exact applied tx, + not rerun a reconstructed higher-level command. + - Import replay stays aligned with its real intent: preserve the exact local + import result rather than recomputing import expansion later. + - Legacy compatibility is isolated instead of contaminating the new design. + - Owned-block cleanup becomes an explicit semantic rule rather than another + tx-data patch. + - Rebase behavior stays aligned with the mental model that one pending tx is + one user action that either survives or is discarded as a whole. +- Negative: + - We must maintain a canonicalization layer from original outliner ops to the + reduced replay set. + - Some existing ops need careful classification to decide whether they are + safe `:transact` or must stay true outliner replays. + - For a transition period, the codebase will contain both the new rebase path + and the isolated legacy compatibility path. + - If one invalid op is grouped together with otherwise valid work in the same + pending tx, the whole user action will be lost during rebase. + +## Follow-up Constraints +- New pending tx producers must persist canonical `:outliner-ops`. +- New pending tx producers must preserve user-action boundaries because rebase + will treat each persisted tx row atomically. +- Canonicalization should happen when persisting local pending txs, not lazily + during rebase. +- Undo/redo producers should persist canonical `:transact` actions using the + exact tx-data they applied. +- Import producers should persist canonical `:transact` actions using the exact + tx-data they applied. +- The main sync apply namespace should not call legacy tx-surgery helpers for + new pending rows. +- The legacy namespace should be clearly named and easy to delete once old + pending-row compatibility is no longer needed. + +## Verification +- Add or update frontend worker db-sync coverage for: + - persistence of canonical `:outliner-ops` + - canonical reduction of `:indent-outdent-blocks` and + `:move-blocks-up-down` into `:move-blocks` + - safe `:transact` replay versus true outliner replay classification + - undo/redo persistence as atomic canonical `:transact` actions + - `:batch-import-edn` persistence as atomic canonical `:transact` + - `:rename-page` canonicalization to `:save-block` + - op-driven rebase preserving pending tx boundaries + - dropping owned reaction/history ops when their owner was deleted remotely + - dropping the whole pending tx when any op in that user action becomes + invalid + - routing legacy pending rows without stored ops through the legacy namespace +- Expected targeted command: + - `bb dev:test -v frontend.worker.db-sync-test` diff --git a/docs/adr/0011-undo-redo-semantic-inverse-op-persistence.md b/docs/adr/0011-undo-redo-semantic-inverse-op-persistence.md new file mode 100644 index 0000000000..ddcdeaf46d --- /dev/null +++ b/docs/adr/0011-undo-redo-semantic-inverse-op-persistence.md @@ -0,0 +1,378 @@ +# ADR 0011: Undo/Redo Semantic Inverse-Op Persistence and Local-Op Referenced UI History + +Date: 2026-03-21 +Status: Proposed + +## Context +ADR 0010 deliberately classified undo and redo as canonical `:transact` actions. + +That choice kept pending-row persistence simple, but it also preserved undo and redo as raw datom replay rather than preserving their intent. + +That tradeoff is now the main weakness in the sync rebase model. + +During client rebase, pending local actions are reversed, remote txs are applied, and then pending local actions are replayed. + +That architecture works well when the persisted action is a semantic op such as `:save-block`, `:insert-blocks`, or `:move-blocks`. + +It works poorly when the persisted action is a raw undo or redo tx payload because the replay logic can no longer distinguish commutative remote updates from true semantic conflicts. + +The current undo/redo design also duplicates DB history across two places. + +The main thread owns the undo and redo stacks because it stores UI state such as route state, editor cursor, and focus context. + +At the same time, the worker already persists local DB actions in client-ops storage with a stable `tx-id`. + +Those two histories are related but not unified. + +As a result, sync rebase, undo/redo, and pending local action persistence can drift apart. + +The user action identity is already represented in the worker by `:db-sync/tx-id`, but the UI undo stack still stores the DB tx payload itself instead of referencing that persisted action. + +This ADR defines a plan to make the client-op row the source of truth for DB history while keeping the main thread as the source of truth for UI state. + +Constraints: +- The main thread must continue to own UI-only undo state. +- The sync wire protocol should remain unchanged. +- Existing persisted pending rows without semantic metadata are intentionally out of scope for this change. +- Rebase should continue to preserve one logical pending row as one user action. +- The design must preserve redo, not just undo. + +Related ADRs: +- Builds on ADR 0002. +- Builds on ADR 0010. +- Supersedes ADR 0010 decision 6, which treated undo/redo as canonical `:transact`. + +## Problem Summary +The current model has three tightly coupled problems. + +First, undo and redo are persisted as raw tx replay. + +That makes rebase unable to reason about their semantics. + +Second, the undo stack on the main thread stores DB payloads directly instead of referencing the persisted local action row in worker storage. + +That means the UI history and worker history are not guaranteed to stay aligned. + +Third, the current worker pending-row schema persists forward tx data and reverse tx data, but it does not persist both semantic forward ops and semantic inverse ops as first-class action metadata. + +That prevents robust rebase and robust redo from using the same action identity. + +The result is that a benign remote update such as a title edit can still force undo/redo to fall back to raw replay, which is unnecessarily lossy and much harder to classify correctly. + +## Decision +1. The worker client-op row identified by `:db-sync/tx-id` becomes the source of truth for DB undo/redo history. +2. The main-thread undo/redo stacks will store UI state plus a reference to that worker action row, not the DB tx payload itself. +3. New client-op rows will persist both forward semantic outliner ops and inverse semantic outliner ops. +4. Redo will replay the persisted forward semantic ops for the referenced action row. +5. Undo will replay the persisted inverse semantic ops for the referenced action row. +6. New rebase logic will use semantic forward or inverse ops for new undo/redo-backed action rows instead of raw datom replay. +7. Existing `normalized-tx-data` and `reversed-tx-data` fields remain temporarily for debugging, validation, and controlled cleanup, but they will not define replay behavior for the new undo/redo architecture. +8. The logical `tx-id` remains stable across rebase rewrites so that main-thread stack entries do not break when the worker rewrites the row contents. +9. Undo/redo rows that cannot be represented with semantic inverse ops are unsupported until a semantic representation is added explicitly. + +## Target Architecture +The architecture separates UI history from DB history while keeping both linked through one stable action identifier. + +```text ++-------------------+ tx-id +----------------------------+ +| Main thread | -----------------------> | Worker client-ops storage | +| undo/redo stack | | one row per logical action | +| | <----------------------- | stable tx-id | +| UI state | action result | forward semantic ops | +| editor cursor | | inverse semantic ops | +| route/sidebar | | normalized tx data | ++-------------------+ | reverse tx data (legacy) | + +----------------------------+ + | + v + +----------------------------+ + | Sync rebase + upload | + | replay by semantic ops | + +----------------------------+ +``` + +The main thread continues to own UI-only history because the worker should not become responsible for route or editor selection state. + +The worker becomes responsible for DB action identity and replay semantics because that is the same place that already owns pending local action persistence, sync upload, and rebase. + +## Data Model Changes +The client-op row needs to distinguish between the identity of a logical action and the concrete tx-data that happened to be generated on the current device revision. + +The row should keep the existing logical `tx-id`. + +The row should add explicit semantic operation fields for both directions. + +Recommended schema additions: + +| Field | Purpose | +| --- | --- | +| `:db-sync/forward-outliner-ops` | Canonical semantic ops that reapply the action. | +| `:db-sync/inverse-outliner-ops` | Canonical semantic ops that undo the action. | +| `:db-sync/history-kind` | Distinguishes regular action rows from specialized worker history rows if needed. | +| `:db-sync/source-tx-id` | Optional link from an undo/redo execution row back to the original action row during migration. | +| `:db-sync/semantic-persistence-version` | Marks rows that are safe for semantic replay. | + +The existing fields should remain during migration: + +| Existing field | Migration role | +| --- | --- | +| `:db-sync/normalized-tx-data` | Validation reference and emergency cleanup aid. | +| `:db-sync/reversed-tx-data` | Local safety checks and controlled cleanup aid. | +| `:db-sync/outliner-op` | Existing summary/debug field. | +| `:db-sync/outliner-ops` | Can be folded into `forward-outliner-ops` once migration is complete. | + +The main-thread undo stack entry shape should change accordingly. + +The DB portion of a stack entry should become a small reference object instead of an embedded tx payload. + +Recommended main-thread DB history payload: + +| Field | Purpose | +| --- | --- | +| `:local-op-tx-id` | Stable reference to worker client-op row. | +| `:history-direction` | `:forward` in undo stack and `:inverse` in redo stack if needed for UI bookkeeping. | +| `:history-version` | Allows invalidating stale stack entries across releases. | + +The main-thread stack entry should continue to store editor cursor and UI route state as it does today. + +## Semantic Persistence Rules +The plan depends on persisting semantic inverse ops instead of reconstructing them later from raw datoms. + +That means the inverse ops must be created at the time a local action is first recorded into undo history. + +The worker should never have to guess the inverse of an already-lost user intent from only tx-data if the action was produced by a known canonical outliner op. + +The persistence rules are: + +1. A regular local action row persists canonical forward ops. +2. The undo stack entry points at that action row by `tx-id`. +3. Undo execution uses the inverse semantic ops stored on the referenced row. +4. Redo execution uses the forward semantic ops stored on the referenced row. +5. If a row does not have semantic inverse ops, it must not enter the semantic rebase path. + +## Canonical Op Surface +This ADR does not require every outliner op to become replay-visible immediately. + +It does require the canonical replay-visible surface for undo/redo to be explicit and versioned. + +Recommended canonical surface for forward and inverse persistence: +- `:save-block` +- `:insert-blocks` +- `:move-blocks` +- `:delete-blocks` +- `:set-block-property` +- `:remove-block-property` +- `:batch-set-property` +- `:batch-remove-property` +- `:delete-property-value` +- `:batch-delete-property-value` +- `:create-property-text-block` +- `:upsert-closed-value` +- `:delete-closed-value` +- `:add-existing-values-to-closed-values` +- `:create-page` +- `:delete-page` +- `:rename-page` + +If an action cannot be expressed in that surface with a safe inverse, it should remain unsupported until a semantic representation is added deliberately. + +That is preferable to reclassifying it as safe raw replay by accident. + +## Inverse Op Generation Strategy +Inverse semantic ops should be created from the original action metadata and the pre-action DB state, not by reverse-engineering datoms after the fact. + +The current main-thread undo history already retains the original tx meta, which includes `:outliner-ops` for many actions. + +That existing signal should be preserved and extended rather than discarded. + +The generation strategy should be: + +1. Start from the original canonical forward ops attached to the local action. +2. Resolve all entity references to stable ids at persistence time. +3. Build inverse canonical ops while the pre-action DB state is still available. +4. Persist both directions on the action row under the same `tx-id`. + +Representative inverse mappings: + +| Forward op | Inverse op strategy | +| --- | --- | +| `:save-block` | Persist a `:save-block` payload built from pre-action block content and relevant pre-action refs. | +| `:insert-blocks` | Persist `:delete-blocks` for the created roots, or a more specific inverse if a safer canonical form exists. | +| `:move-blocks` | Persist `:move-blocks` back to the pre-action target with stable target id and structural opts. | +| `:delete-blocks` | Persist a hard-delete inverse only if block recreation is represented explicitly. Recycle-based restoration is no longer part of block deletion semantics. | +| `:set-block-property` | Persist `:set-block-property` or `:remove-block-property` depending on whether the property existed before the action. | +| `:batch-set-property` | Persist a batch inverse that restores prior values per block rather than a single blind batch overwrite. | +| `:create-page` | Persist `:delete-page` or a page retract inverse depending on page type. | +| `:delete-page` | Persist `:create-page` plus restoration of prior page content and relationships, or represent page restoration as a dedicated canonical op. | + +The plan does not require every mapping to be implemented in one patch. + +It does require the migration plan to make unsupported actions explicit so that they cannot silently flow into the new architecture. + +## Why `tx-id` Must Be the Main-Thread DB History Reference +The UI stack needs a stable identifier for the DB action because that action may be: +- pending locally and not yet synced +- rebased by the worker +- acknowledged by the server +- rewritten during local compaction +- invalidated because the worker dropped it as unreplayable + +If the main thread stores raw tx-data instead of `tx-id`, the UI stack and worker pending history can diverge. + +If the main thread stores `tx-id`, the worker can rewrite the row contents while preserving logical action identity. + +That makes the worker free to update the concrete replay payload during rebase without breaking the main-thread history pointer. + +The worker must therefore treat `tx-id` as logical action identity rather than as a disposable row key. + +## Cutover Plan +This change intentionally uses a strict cutover instead of a backward-compatible migration for old pending rows. + +Cutover rules: + +1. Existing pending rows without semantic persistence fields are cleared or dropped at startup. +2. Existing main-thread stack entries without `tx-id` are invalid after the cutover. +3. Old-format in-memory history is not preserved across the change. +4. New rows must always be written with the new semantic fields once the feature flag is enabled. + +## Implementation Plan +### Phase 1. Add action-identity and semantic fields to client-op storage. +- Update `/Users/tiensonqin/Codes/projects/logseq/web/src/main/frontend/worker/sync/client_op.cljs` schema for forward and inverse semantic ops plus version metadata. +- Keep existing fields intact. +- Ensure `tx-id` remains stable when a pending row is rewritten after rebase. + +### Phase 2. Make the worker action row the source of truth for DB history. +- Update `/Users/tiensonqin/Codes/projects/logseq/web/src/main/frontend/worker/sync/apply_txs.cljs` so local action persistence writes both directions when available. +- Split the meaning of existing `:db-sync/outliner-ops` from the new explicit forward and inverse fields rather than overloading one field for two roles. +- Preserve current `normalized-tx-data` and `reversed-tx-data` during migration. + +### Phase 3. Change main-thread undo stack payloads from embedded tx data to `tx-id` references. +- Update `/Users/tiensonqin/Codes/projects/logseq/web/src/main/frontend/undo_redo.cljs` so stack entries keep UI state and worker action references instead of DB tx payloads. +- Keep cursor and route state on the main thread. +- Remove the assumption that main-thread history owns the DB replay payload. + +### Phase 4. Add a worker API for undo and redo execution by `tx-id`. +- Introduce a worker-facing command that resolves the client-op row by `tx-id`. +- Undo execution should replay `inverse-outliner-ops`. +- Redo execution should replay `forward-outliner-ops`. +- The command should return enough result metadata for the main thread to restore cursor and UI state after the worker confirms DB success. + +### Phase 5. Replace raw undo/redo sync persistence with semantic persistence. +- Stop classifying new undo/redo executions as canonical raw `:transact` in `/Users/tiensonqin/Codes/projects/logseq/web/src/main/frontend/worker/sync/apply_txs.cljs`. +- Instead, persist their semantic forward and inverse operations under the same logical action identity. +- Remove the old undo/redo raw replay path for pending-row persistence instead of keeping a compatibility branch. + +### Phase 6. Extend rebase to use semantic inverse and forward ops for undo/redo rows. +- In `/Users/tiensonqin/Codes/projects/logseq/web/src/main/frontend/worker/sync/apply_txs.cljs`, route undo/redo rows through semantic replay only. +- Preserve one-row-per-user-action atomicity. +- If any op in a row becomes invalid, drop or quarantine the whole row rather than partially replaying it. + +### Phase 7. Add explicit invalidation rules for main-thread stack entries. +- If the worker drops or quarantines a referenced action row, the main-thread stack entry that points at that `tx-id` must be invalidated. +- Add a worker-to-main-thread signal so the UI can clear stale history references without guessing. +- Avoid silent dangling `tx-id` references in the UI stack. + +### Phase 8. Add compaction and cleanup rules. +- Decide when an acknowledged action row can be compacted while still remaining undoable. +- If compaction rewrites stored payloads, preserve `tx-id`. +- If compaction removes a row, invalidate any stack references to it first. + +## Required Code Areas +The following files are expected to change. + +| File | Responsibility | +| --- | --- | +| `/Users/tiensonqin/Codes/projects/logseq/web/src/main/frontend/undo_redo.cljs` | Change stack payloads to `tx-id` references and route DB replay to worker by action id. | +| `/Users/tiensonqin/Codes/projects/logseq/web/src/main/frontend/handler/history.cljs` | Keep UI restore flow but consume worker-driven undo/redo result metadata. | +| `/Users/tiensonqin/Codes/projects/logseq/web/src/main/frontend/worker/sync/client_op.cljs` | Extend client-op schema with semantic forward and inverse fields plus version metadata. | +| `/Users/tiensonqin/Codes/projects/logseq/web/src/main/frontend/worker/sync/apply_txs.cljs` | Persist semantic undo/redo ops, keep stable `tx-id`, and use semantic replay in rebase. | +| `/Users/tiensonqin/Codes/projects/logseq/web/deps/outliner/src/logseq/outliner/op.cljs` | Reuse canonical op shapes and extend replay-visible surface if new canonical ops are introduced. | +| `/Users/tiensonqin/Codes/projects/logseq/web/deps/outliner/src/logseq/outliner/recycle.cljs` | Provide a replay-safe restoration entrypoint if `:restore-recycled` becomes canonical. | +| `/Users/tiensonqin/Codes/projects/logseq/web/src/test/frontend/undo_redo_test.cljs` | Cover `tx-id`-referenced history behavior and main-thread invalidation. | +| `/Users/tiensonqin/Codes/projects/logseq/web/src/test/frontend/worker/db_sync_test.cljs` | Cover semantic persistence and rebase of undo/redo action rows. | +| `/Users/tiensonqin/Codes/projects/logseq/web/src/test/frontend/worker/db_sync_sim_test.cljs` | Cover multi-client rebase scenarios where remote txs commute or conflict with undo/redo. | + +## Edge Cases That Must Be Designed Explicitly +### Remote non-conflicting updates. +A remote title update on an unrelated block should not invalidate a local undo stack entry. + +### Remote updates on the same entity but different attrs. +The design should allow semantic replay when the attrs commute and reject it when they do not. + +### Structural conflicts. +Parent, page, order, delete, recycle, and missing-ref conflicts must invalidate the whole action row, not a subset of its ops. + +### Undo of a batch action. +One logical batch action should remain one `tx-id` and should not split into multiple undoable rows during persistence or rebase. + +### Redo after rebase. +Redo must continue to point at the same action identity even if the worker rewrote the row payloads during remote rebase. + +### Session boundary. +Main-thread stacks are in-memory only today. + +That remains acceptable, but the new `tx-id` reference model must not assume the stack survives app restart unless a later ADR decides to persist it. + +### Unsupported inverse mappings. +An unsupported op must be explicit and traceable. + +It must not silently fall back to safe-looking semantic replay if it is actually raw replay. + +### Old pending rows. +Existing rows without semantic fields are intentionally not supported after the cutover. + +They should be cleared rather than replayed. + +## Risks +The largest risk is trying to migrate everything at once. + +Undo/redo touches the main thread, the worker, client-op persistence, and rebase logic. + +The plan therefore intentionally stages the work so that logical action identity and schema changes land before the main-thread stack rewrite and before the semantic rebase cutover. + +Another risk is under-specifying inverse mappings for high-level actions such as delete-page. + +Those mappings should be treated as explicit product decisions, not left to raw tx fallback by accident. + +Another risk is user-visible loss of old pending rows during the cutover. + +That tradeoff is accepted because preserving old raw replay rows would preserve the exact failure mode this ADR is intended to remove. + +## Verification Plan +Verification must cover both behavior and migration safety. + +Required coverage: +- main-thread undo stack entry stores `tx-id` plus UI state, not raw DB tx payload +- worker persists semantic forward and inverse ops on new local action rows +- undo executes by `tx-id` and replays inverse semantic ops +- redo executes by `tx-id` and replays forward semantic ops +- new undo/redo rows no longer persist as canonical raw `:transact` +- rebase preserves logical `tx-id` while rewriting row payloads +- benign remote updates continue to allow undo/redo replay +- structural conflicts invalidate the whole referenced action row +- dropped or quarantined worker rows invalidate corresponding UI history entries +- old rows without semantic fields are cleared and do not replay + +Targeted commands once implementation begins: +- `bb dev:test -v frontend.undo-redo-test` +- `bb dev:test -v frontend.worker.db-sync-test` +- `bb dev:test -v frontend.worker.db-sync-sim-test` + +## Consequences +Positive consequences: +- Undo/redo DB history and sync pending history converge on one logical action model. +- Rebase can reason about intent instead of replaying raw datoms for new undo/redo rows. +- The main thread keeps ownership of UI-only state without also becoming the long-term store of DB replay payloads. +- `tx-id` becomes a durable action identity that can survive rebase rewrites. + +Negative consequences: +- The worker schema and the main-thread undo model both change at the same time. +- Several inverse-op mappings require explicit product and implementation decisions. +- The cutover is intentionally strict and may discard old pending rows that cannot satisfy the new semantic contract. + +## Follow-up Notes +This ADR intentionally does not specify the final retention policy for acknowledged action rows. + +It only requires that action-row lifetime be compatible with undo/redo stack references. + +If future work decides to persist the UI stack across restarts, that should be handled in a separate ADR after this action-identity model is in place. diff --git a/docs/adr/0012-worker-owned-undo-redo.md b/docs/adr/0012-worker-owned-undo-redo.md new file mode 100644 index 0000000000..9eed274461 --- /dev/null +++ b/docs/adr/0012-worker-owned-undo-redo.md @@ -0,0 +1,308 @@ +# ADR 0012: Move Undo/Redo Recording and Replay to the DB Worker + +Date: 2026-03-21 +Status: Proposed + +## Context +`frontend.undo-redo` currently runs on the main thread. + +That means undo and redo recording depends on main-thread listeners observing DB +tx reports after they have already crossed the worker boundary. + +This split has become a recurring source of drift: + +- the worker is the source of truth for the browser Datascript DB +- the worker already persists local actions in client-op storage +- the worker already owns rebase and semantic replay +- the main thread still owns undo/redo stack mutation for DB history + +That architecture forces the main thread to reconstruct DB history from a +worker-synchronized tx report instead of observing the DB change at the place +where it actually happens. + +The result is fragile metadata flow. + +We have already seen bugs caused by: + +- `:outliner-ops` being stripped or reshaped during worker-to-main-thread sync +- undo/redo-generated tx rows overwriting the original client-op row +- semantic forward and inverse ops diverging between worker persistence and + main-thread undo stack payloads +- special cases such as `:replace-empty-target?`, block concat, and + `:set-block-property` depending on worker-local replay behavior anyway + +The one main-thread-only input that `frontend.undo-redo` still needs is +`@state/*editor-info`. + +Today that atom is read and reset on the main thread inside +`frontend.undo-redo/gen-undo-ops!`. + +If undo/redo recording moves to the worker, the worker can no longer deref the +main-thread atom directly. + +## Decision +1. DB undo/redo recording and replay move to the DB worker. +2. The worker becomes the only place that listens to DB tx reports for DB + history generation. +3. The main thread remains responsible for UI-derived history inputs only: + editor cursor/focus metadata and UI-state snapshots. +4. `@state/*editor-info` will not be read from the worker directly. + It will be replaced by an explicit main-thread-to-worker handoff protocol. +5. The worker owns the undo stack and redo stack for DB actions and UI-adjacent + metadata attached to those actions. +6. The main thread will invoke worker APIs for: + - recording pending editor info + - recording UI-only state history entries + - undo + - redo + - clear history +7. The main thread will stop generating DB undo history from `:db/sync-changes` + events. +8. The worker-owned history row should not keep a separate persisted + `:db-sync/outliner-ops` field. + `:db-sync/forward-outliner-ops` is the only canonical persisted forward + semantic field. + +## Rationale +The worker is already the place where all browser DB facts become real: + +- local outliner ops are applied there +- remote sync txs are applied there +- pending local rows are persisted there +- semantic forward and inverse ops are canonicalized there +- rebase happens there + +Undo/redo recording should therefore observe worker DB tx reports directly +instead of reconstructing them after the worker has serialized, sanitized, and +rebroadcast them. + +That removes an entire class of metadata transport bugs. + +It also matches ADR 0011 more closely: the worker action row is supposed to be +the source of truth for DB history. Recording DB history on the main thread is +in tension with that decision. + +## Target Architecture +```text ++------------------------------+ thread-api +---------------------------+ +| Main thread | ----------------------------> | DB worker | +| | | | +| editor lifecycle | push pending editor-info | pending editor-info store | +| route/sidebar state | push ui-state entries | undo stack | +| history handler | undo / redo / clear | redo stack | +| restore cursor + route | <---------------------------- | DB replay + result meta | ++------------------------------+ +---------------------------+ +``` + +The worker stack entry becomes the single logical history item for both: + +- DB replay metadata +- UI-adjacent metadata needed after replay + +Representative worker stack item: + +```clojure +{:tx-id #uuid "..." + :kind :db-action ; or :ui-state-only + :editor-info {:block-uuid ... + :container-id ... + :start-pos ... + :end-pos ...} + :ui-state-str "...optional transit..." + :forward-outliner-ops [...] + :inverse-outliner-ops [...] + :outliner-op :save-block} +``` + +The target row schema is therefore: + +- `:db-sync/tx-id` +- `:db-sync/outliner-op` +- `:db-sync/forward-outliner-ops` +- `:db-sync/inverse-outliner-ops` +- worker-owned cursor/UI metadata as needed + +It intentionally does not include a separate persisted +`:db-sync/outliner-ops`. + +## `*editor-info` Handoff +The worker must not read `@state/*editor-info` directly. + +That atom lives on the main thread and represents ephemeral UI state. + +Instead, we will replace the implicit shared-state read with an explicit +handoff. + +### Rule +The main thread owns editor-info production. +The worker owns editor-info consumption. + +### Mechanism +Add a worker-side pending editor-info slot keyed by repo. + +Suggested API: + +- `:thread-api/undo-redo-set-pending-editor-info` + - args: `repo`, `editor-info-or-nil` +- `:thread-api/undo-redo-record-ui-state` + - args: `repo`, `ui-state-str` +- `:thread-api/undo-redo-undo` + - args: `repo` +- `:thread-api/undo-redo-redo` + - args: `repo` +- `:thread-api/undo-redo-clear-history` + - args: `repo` + +### Consumption and reset semantics +When the worker records a new local DB action into undo history: + +1. read pending editor-info for the repo +2. attach it to the new stack item if present +3. clear the pending editor-info slot immediately after the stack item is + created + +This preserves the current one-shot semantics of `@state/*editor-info` without +requiring the worker to deref or mutate main-thread state directly. + +### Main-thread responsibilities +The main thread should: + +- capture editor-info at the same points it does today +- send the current snapshot to the worker before the local DB action is + submitted or immediately when editor focus/cursor changes, whichever path is + simpler and consistent +- stop relying on worker `:db/sync-changes` to retroactively capture cursor + state + +The main thread may still keep a local `*editor-info` atom for editor UI code, +but it is no longer the undo recorder’s source of truth. + +## UI-State History +UI-state-only undo entries such as route/sidebar snapshots cannot be generated +by the worker from DB tx reports. + +Those entries should be pushed explicitly from the main thread into the worker +history stack. + +Two entry classes will therefore exist in the worker stack: + +1. `:db-action` +2. `:ui-state-only` + +Undo/redo execution will return enough metadata for the main thread to restore: + +- route +- sidebar state +- editor cursor + +The worker should not attempt to perform UI restoration itself. + +## Consequences +### Positive +- DB undo/redo history is recorded at the actual DB source of truth. +- No more dependence on `:db/sync-changes` preserving semantic metadata exactly. +- Worker persistence, worker replay, and worker history all use the same action + identity. +- Main-thread history bugs caused by tx-meta sanitization disappear. +- Undo/redo debugging becomes simpler because the worker owns the full DB + history lifecycle. + +### Negative +- The worker history stack now stores UI-adjacent metadata that originates on + the main thread. +- New thread APIs are required. +- Main-thread editor lifecycle code must actively synchronize pending + `editor-info`. +- The migration touches both undo/redo and worker message flow at once. + +## Implementation Plan +### Phase 1. Introduce worker-owned undo/redo module +- Create a worker namespace, e.g. + `/Users/tiensonqin/Codes/projects/logseq/web/src/main/frontend/worker/undo_redo.cljs` +- Move stack storage and DB history generation there. +- Register worker DB listener(s) against the worker Datascript conn. +- Remove persisted `:db-sync/outliner-ops` from the target worker history row + shape instead of carrying it forward as a parallel field. + +### Phase 2. Replace main-thread DB history generation +- Remove DB-history recording from + `/Users/tiensonqin/Codes/projects/logseq/web/src/main/frontend/undo_redo.cljs` +- Keep only main-thread coordination helpers if still needed. +- Route history handler calls through worker thread APIs. + +### Phase 3. Add pending editor-info handoff +- Add worker API to set pending editor-info. +- Update + `/Users/tiensonqin/Codes/projects/logseq/web/src/main/frontend/modules/outliner/ui.cljc` + and any direct local transact paths to send editor-info to the worker. +- Consume and clear the pending editor-info slot when a local history item is + recorded. + +### Phase 4. Move UI-state history writes to worker +- Replace `record-ui-state!` main-thread stack mutation with worker API calls. +- Keep route/sidebar serialization on the main thread. + +### Phase 5. Return worker-owned undo/redo result metadata +- Worker undo/redo APIs should return: + - `:undo?` + - `:editor-info` + - `:ui-state-str` + - optional block content or replay diagnostics +- Main-thread history handler restores cursor and route from that result. + +## Files Expected to Change +| File | Change | +| --- | --- | +| `/Users/tiensonqin/Codes/projects/logseq/web/src/main/frontend/undo_redo.cljs` | Remove main-thread DB listener ownership, keep only coordinator logic if still needed. | +| `/Users/tiensonqin/Codes/projects/logseq/web/src/main/frontend/handler/history.cljs` | Call worker undo/redo APIs and restore UI from returned metadata. | +| `/Users/tiensonqin/Codes/projects/logseq/web/src/main/frontend/modules/outliner/ui.cljc` | Send editor-info snapshots to the worker before local action submission. | +| `/Users/tiensonqin/Codes/projects/logseq/web/src/main/frontend/handler/editor/lifecycle.cljs` | Stop recording editor-info directly into main-thread undo stack; feed worker pending editor-info instead. | +| `/Users/tiensonqin/Codes/projects/logseq/web/src/main/frontend/worker/db_worker.cljs` | Expose worker thread APIs for pending editor-info, UI-state history, undo, redo, and clear-history. | +| `/Users/tiensonqin/Codes/projects/logseq/web/src/main/frontend/worker/db_listener.cljs` | Attach worker undo/redo recording directly to worker DB tx reports. | +| `/Users/tiensonqin/Codes/projects/logseq/web/src/main/frontend/worker/sync/client_op.cljs` | Remove `:db-sync/outliner-ops` from the target worker-owned undo/redo row model and use `:db-sync/forward-outliner-ops` instead. | +| `/Users/tiensonqin/Codes/projects/logseq/web/src/main/frontend/worker/sync/apply_txs.cljs` | Keep worker replay aligned with worker-owned history rows. | +| `/Users/tiensonqin/Codes/projects/logseq/web/src/test/frontend/undo_redo_test.cljs` | Replace main-thread DB-history expectations with coordinator/result expectations. | +| `/Users/tiensonqin/Codes/projects/logseq/web/src/test/frontend/worker/db_sync_test.cljs` | Add worker-owned history recording and replay coverage. | + +## Alternatives Considered +### 1. Keep `frontend.undo-redo` on the main thread and preserve more tx-meta +Rejected. + +This keeps the wrong ownership boundary. +It reduces one transport bug at a time but does not remove the architectural +duplication between main-thread history and worker DB history. + +### 2. Let the worker call back into the main thread to read `@state/*editor-info` +Rejected. + +That would create an implicit cross-thread read dependency around ephemeral UI +state. +It is harder to reason about than explicit handoff, and reset semantics become +ambiguous. + +### 3. Keep DB history in the worker and UI history in a separate main-thread stack +Possible, but inferior to a single worker-owned stack item keyed by `tx-id`. + +It still splits one logical action across two structures and reintroduces +alignment problems. + +## Open Questions +1. Should pending editor-info be pushed: + - only at transact boundaries + - or eagerly on every cursor change with last-write-wins semantics? + +Recommendation: +push at transact boundaries first. +It matches current one-shot behavior and avoids unnecessary worker chatter. + +2. Should `:ui-state-only` entries live in the same stack as DB actions? + +Recommendation: +yes. +One logical undo/redo stream is simpler than coordinating two stacks. + +3. Do we still need `@state/*editor-info` after the migration? + +Recommendation: +keep it as a UI helper until the move is complete, but stop using it as undo +history source of truth. diff --git a/docs/adr/0013-worker-owned-undo-redo-test-ownership.md b/docs/adr/0013-worker-owned-undo-redo-test-ownership.md new file mode 100644 index 0000000000..2f7a18358b --- /dev/null +++ b/docs/adr/0013-worker-owned-undo-redo-test-ownership.md @@ -0,0 +1,187 @@ +# ADR 0013: Worker-Owned Undo/Redo Test Ownership + +Date: 2026-03-21 +Status: Proposed + +## Context +ADR 0012 moves DB undo/redo ownership from the main thread to the db worker. + +That architectural move is not complete if the test suite still treats +`src/test/frontend/undo_redo_test.cljs` as the primary place to assert DB +history behavior. + +Today the old main-thread file still contains most undo/redo tests, including: + +- local tx recording +- semantic forward and inverse metadata +- insert/save/delete replay sequences +- replay conflict and skip behavior +- validation behavior tied to DB replay + +Those tests were correct for the old design, but they now encourage the wrong +ownership boundary. + +The worker already owns: + +- worker datascript DB mutation +- client-op persistence +- semantic replay +- pending action identity +- replay safety decisions + +The main thread now mainly owns: + +- route/sidebar UI restoration +- cursor restoration from worker result metadata +- thin browser-facing proxy calls + +The test suite should reflect that split directly. + +## Decision +1. `src/test/frontend/worker/undo_redo_test.cljs` becomes the primary home for + DB-history-focused undo/redo tests. +2. `src/test/frontend/undo_redo_test.cljs` is reduced to main-thread-only + coordination tests. +3. Replay, conflict, and rebase-heavy assertions that are really worker replay + behavior belong in `src/test/frontend/worker/db_sync_test.cljs`, not in + either undo-redo namespace test file. +4. No new DB-history behavior test should be added to + `src/test/frontend/undo_redo_test.cljs`. + +## Test Ownership Rules + +### Keep in `src/test/frontend/worker/undo_redo_test.cljs` + +- local tx recording gates +- semantic metadata persistence +- worker-owned undo stack and redo stack mutation +- canonical action-id and semantic op persistence +- worker-owned DB-history entries that include pending editor-info and UI-state + metadata + +### Keep in `src/test/frontend/worker/db_sync_test.cljs` + +- `apply-history-action!` replay behavior +- semantic replay correctness +- conflict and skip behavior caused by worker replay safety +- rebase interactions +- client-op row persistence and rewrite behavior + +### Keep in `src/test/frontend/undo_redo_test.cljs` + +- route/sidebar UI-state restoration on the main thread +- cursor restoration from worker result metadata +- browser-facing proxy semantics in `frontend.undo-redo` and + `frontend.handler.history` +- any pure coordination helper that still lives only on the main thread + +## Migration Buckets + +### Bucket 1. Recording and metadata tests. + +Move these first: + +- `undo-records-only-local-txs-test` +- `undo-history-records-semantic-action-metadata-test` +- `undo-history-records-forward-ops-for-editor-save-block-test` +- `undo-history-canonicalizes-insert-block-uuids-test` + +These tests map directly to worker history ownership and do not require route or +cursor restoration. + +### Bucket 2. Basic local replay tests. + +Move next, but only after the worker fixture persists matching client-op rows: + +- `undo-works-for-local-graph-test` +- `repeated-save-block-content-undo-redo-test` +- `repeated-editor-save-block-content-undo-redo-test` +- `editor-save-two-blocks-undo-targets-latest-block-test` +- `new-local-save-clears-redo-stack-test` + +If a test still depends on browser-only helpers, rewrite it to assert worker DB +behavior directly or leave it temporarily unmoved. + +### Bucket 3. Delete/recycle sequence tests. + +Reclassify before moving: + +- `insert-save-delete-sequence-undo-redo-test` +- `undo-redo-works-for-recycle-delete-test` + +If the real behavior under test is semantic replay, keep or move it to +`src/test/frontend/worker/db_sync_test.cljs`. + +### Bucket 4. Conflict and skip tests. + +Reclassify these into worker replay coverage unless they are truly worker stack +mutation tests: + +- `undo-conflict-clears-history-test` +- `undo-works-with-remote-updates-test` +- `undo-skips-when-parent-missing-test` +- `undo-skips-when-block-deleted-remote-test` +- `undo-skips-when-undo-would-create-cycle-test` +- `undo-skips-conflicted-move-and-keeps-earlier-history-test` +- `redo-builds-reversed-tx-when-target-parent-is-recycled-test` +- `undo-skips-move-when-original-parent-is-recycled-test` + +### Bucket 5. Main-thread leftovers. + +After Buckets 1-4: + +- keep only route restoration +- keep only cursor restoration +- keep only proxy/coordination tests +- add a namespace comment in `src/test/frontend/undo_redo_test.cljs` that it is + no longer the DB-history source-of-truth test file + +## Implementation Rules + +1. Every moved worker test must use a fixture that owns both: + - worker datascript conn + - worker client-ops conn +2. That fixture must route tx reports through both: + - `frontend.worker.sync/enqueue-local-tx!` + - `frontend.worker.undo-redo/gen-undo-ops!` +3. Tests that expect persisted action lookup must attach a stable + `:db-sync/tx-id`. +4. Do not duplicate replay tests between `worker/undo_redo_test.cljs` and + `worker/db_sync_test.cljs`. +5. Delete the original test only after the worker version passes. + +## Consequences + +### Positive + +- The test suite matches the actual runtime ownership boundary. +- Worker replay regressions are caught where they actually happen. +- The old main-thread test file becomes much easier to reason about. + +### Negative + +- Some existing tests need adaptation rather than straight copy because they + implicitly relied on old main-thread stack storage. +- The migration requires explicit decisions about whether a test is about + worker history ownership or worker replay behavior. + +## Verification + +Representative focused commands during migration: + +```bash +bb dev:test -v frontend.worker.undo-redo-test/undo-records-only-local-txs-test +bb dev:test -v frontend.worker.undo-redo-test/undo-history-records-semantic-action-metadata-test +bb dev:test -v frontend.worker.undo-redo-test/undo-history-canonicalizes-insert-block-uuids-test +bb dev:test -v frontend.worker.db-sync-test/apply-history-action-redo-replays-save-block-test +bb dev:test -v frontend.worker.db-sync-test/apply-history-action-redo-replays-block-concat-test +bb dev:test -v frontend.worker.db-sync-test/apply-history-action-redo-replays-paste-into-empty-target-test +``` + +## Exit Criteria + +- `src/test/frontend/worker/undo_redo_test.cljs` owns the DB-history recording + tests. +- `src/test/frontend/undo_redo_test.cljs` contains only main-thread coordination + tests. +- No worker-owned DB-history scenario is tested only in the main-thread file. diff --git a/docs/agent-guide/db-sync/protocol.md b/docs/agent-guide/db-sync/protocol.md index ba8b866544..a7109cf970 100644 --- a/docs/agent-guide/db-sync/protocol.md +++ b/docs/agent-guide/db-sync/protocol.md @@ -19,21 +19,23 @@ - Optional keepalive; server replies `pong`. ## Server -> Client -- `{"type":"hello","t":}` - - Server hello with current t. +- `{"type":"hello","t":,"checksum":""}` + - Server hello with current t and entity checksum. - `{"type":"online-users","online-users":[{"user-id":"...","email":"...","username":"...","name":"..."}...]}` - Presence update - Optional `editing-block-uuid` indicates the block the user is editing. -- `{"type":"pull/ok","t":,"txs":[{"t":,"tx":""}...]}` - - Pull response with txs. -- `{"type":"tx/batch/ok","t":}` - - Batch accepted; server advanced to t. +- `{"type":"pull/ok","t":,"checksum":"","txs":[{"t":,"tx":""}...]}` + - Pull response with txs and post-apply entity checksum. +- `{"type":"tx/batch/ok","t":,"checksum":""}` + - Batch accepted; server advanced to t and returns the resulting entity checksum. - `{"type":"changed","t":}` - Broadcast that server state advanced; client should pull. - `{"type":"tx/reject","reason":"stale","t":}` - Client tx is based on stale t. - `{"type":"tx/reject","reason":"cycle","data":" :server-values ...}>"}` - Cycle detected with server values. +- `{"type":"tx/reject","reason":"db transact failed","t":,"data":"\" :outliner-op ...}>"}` + - Server-side transact/validation failed for one tx entry in the batch; `data` echoes the rejected tx entry for debugging. - `{"type":"tx/reject","reason":"empty tx data"|"invalid tx"|"invalid t-before"}` - Invalid batch. - `{"type":"pong"}` @@ -85,12 +87,12 @@ - `GET /sync/:graph-id/health` - Health check. Response: `{"ok":true}`. - `GET /sync/:graph-id/pull?since=` - - Same as WS pull. Response: `{"type":"pull/ok","t":,"txs":[{"t":,"tx":""}...]}`. + - Same as WS pull. Response: `{"type":"pull/ok","t":,"checksum":"","txs":[{"t":,"tx":""}...]}`. - Error response (400): `{"error":"invalid since"}`. - Error response (409): `{"error":"graph not ready"}` when bootstrap upload/import has not finished. - `POST /sync/:graph-id/tx/batch` - Same as WS tx/batch. Body: `{"t-before":,"txs":["", ...]}`. - - Response: `{"type":"tx/batch/ok","t":}` or `{"type":"tx/reject","reason":...}`. + - Response: `{"type":"tx/batch/ok","t":,"checksum":""}` or `{"type":"tx/reject","reason":...}`. - Error response (400): `{"error":"missing body"|"invalid tx"}`. - Error response (409): `{"error":"graph not ready"}` when bootstrap upload/import has not finished. - `GET /sync/:graph-id/snapshot/download` diff --git a/gulpfile.js b/gulpfile.js index 8cf59b18d4..aea200f330 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -15,6 +15,8 @@ const mobileJsPath = path.join(mobilePath, 'js') const sourcePath = path.join(__dirname, 'src/main/frontend') const resourceFilePath = path.join(resourcesPath, '**') const outputFilePath = path.join(outputPath, '**') +const rawCopySrc = (globs, options = {}) => + gulp.src(globs, { encoding: false, ...options }) const staticCleanKeep = new Set([ 'entitlements.plist', 'forge.config.js', @@ -76,24 +78,23 @@ const common = { }, syncResourceFile () { - return gulp.src(resourceFilePath).pipe(gulp.dest(outputPath)) + return rawCopySrc(resourceFilePath).pipe(gulp.dest(outputPath)) }, // NOTE: All assets from node_modules are copied to the output directory syncAssetFiles (...params) { return gulp.series( - () => gulp.src([ + () => rawCopySrc([ 'node_modules/katex/dist/katex.min.js', 'node_modules/katex/dist/contrib/mhchem.min.js', 'node_modules/html2canvas/dist/html2canvas.min.js', 'node_modules/interactjs/dist/interact.min.js', 'node_modules/photoswipe/dist/umd/*.js', - 'node_modules/shepherd.js/dist/js/shepherd.min.js', - 'node_modules/marked/marked.min.js', + 'node_modules/marked/lib/marked.umd.js', 'node_modules/@highlightjs/cdn-assets/highlight.min.js', 'node_modules/@isomorphic-git/lightning-fs/dist/lightning-fs.min.js', 'packages/ui/dist/ui.js', - 'node_modules/@sqlite.org/sqlite-wasm/sqlite-wasm/jswasm/sqlite3.wasm', + 'node_modules/@sqlite.org/sqlite-wasm/dist/sqlite3.wasm', 'node_modules/react/umd/react.production.min.js', 'node_modules/react/umd/react.development.js', 'node_modules/react-dom/umd/react-dom.production.min.js', @@ -107,32 +108,31 @@ const common = { pipe(replace('"@tabler/icons-react"]={},a.react,', '"tablerIcons"]={},a.React,')). pipe(gulp.dest(path.join(outputPath, 'js'))), - () => gulp.src([ + () => rawCopySrc([ 'node_modules/@glidejs/glide/dist/glide.min.js', 'node_modules/@glidejs/glide/dist/css/glide.core.min.css', 'node_modules/@glidejs/glide/dist/css/glide.theme.min.css', ]).pipe(gulp.dest(path.join(outputPath, 'js', 'glide'))), - () => gulp.src([ + () => rawCopySrc([ 'node_modules/pdfjs-dist/legacy/build/pdf.mjs', 'node_modules/pdfjs-dist/legacy/build/pdf.worker.mjs', 'node_modules/pdfjs-dist/legacy/web/pdf_viewer.mjs', ]).pipe(gulp.dest(path.join(outputPath, 'js', 'pdfjs'))), - () => gulp.src([ + () => rawCopySrc([ 'node_modules/pdfjs-dist/cmaps/*.*', ]).pipe(gulp.dest(path.join(outputPath, 'js', 'pdfjs', 'cmaps'))), - () => gulp.src([ + () => rawCopySrc([ 'node_modules/inter-ui/inter.css', ]).pipe(gulp.dest(path.join(outputPath, 'css'))), - () => gulp.src('node_modules/inter-ui/Inter (web)/*.*'). - pipe(gulp.dest(path.join(outputPath, 'css', 'Inter (web)'))), - () => gulp.src([ - 'node_modules/@tabler/icons-webfont/fonts/**', + () => rawCopySrc('node_modules/inter-ui/web/*.*'). + pipe(gulp.dest(path.join(outputPath, 'css', 'web'))), + () => rawCopySrc([ 'node_modules/katex/dist/fonts/*.woff2', ]).pipe(gulp.dest(path.join(outputPath, 'css', 'fonts'))), - () => gulp.src([ + () => rawCopySrc([ 'node_modules/katex/dist/katex.min.js', 'node_modules/katex/dist/contrib/mhchem.min.js', - 'node_modules/marked/marked.min.js', + 'node_modules/marked/lib/marked.umd.js', 'node_modules/@highlightjs/cdn-assets/highlight.min.js', 'node_modules/@isomorphic-git/lightning-fs/dist/lightning-fs.min.js', 'node_modules/react/umd/react.production.min.js', @@ -143,15 +143,14 @@ const common = { 'node_modules/interactjs/dist/interact.min.js', 'node_modules/photoswipe/dist/umd/*.js', 'packages/ui/dist/ui.js', - 'node_modules/@sqlite.org/sqlite-wasm/sqlite-wasm/jswasm/sqlite3.wasm', + 'node_modules/@sqlite.org/sqlite-wasm/dist/sqlite3.wasm', ]).pipe(gulp.dest(path.join(outputPath, 'mobile', 'js'))), - () => gulp.src([ + () => rawCopySrc([ 'node_modules/inter-ui/inter.css', ]).pipe(gulp.dest(path.join(outputPath, 'mobile', 'css'))), - () => gulp.src('node_modules/inter-ui/Inter (web)/*.*'). - pipe(gulp.dest(path.join(outputPath, 'mobile', 'css', 'Inter (web)'))), - () => gulp.src([ - 'node_modules/@tabler/icons-webfont/fonts/**', + () => rawCopySrc('node_modules/inter-ui/web/*.*'). + pipe(gulp.dest(path.join(outputPath, 'mobile', 'css', 'web'))), + () => rawCopySrc([ 'node_modules/katex/dist/fonts/*.woff2', ]).pipe(gulp.dest(path.join(outputPath, 'mobile', 'css', 'fonts'))), )(...params) @@ -163,7 +162,7 @@ const common = { }, syncAllStatic () { - return gulp.src([ + return rawCopySrc([ outputFilePath, '!' + path.join(outputPath, 'node_modules/**'), '!' + path.join(outputPath, 'mobile/**'), diff --git a/insert-batches-test b/insert-batches-test deleted file mode 100644 index 98428f0c09..0000000000 --- a/insert-batches-test +++ /dev/null @@ -1,11 +0,0 @@ -yarn run v1.22.22 -$ clojure -M:test compile test -[:test] Compiling ... -[:test] Build completed. (831 files, 25 compiled, 0 warnings, 6.94s) -Done in 10.38s. -yarn run v1.22.22 -$ node static/tests.js -v logseq.db-sync.batch-test/rows- -:run-background-task :logseq.db.common.entity-plus/reset-immutable-entities-cache! -:run-background-task :frontend.background-tasks/sync-to-worker-network-online-status -:run-background-task :frontend.worker.embedding/subscribe-state -info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command. diff --git a/libs/cljs-sdk/bb.edn b/libs/cljs-sdk/bb.edn index a53432bf04..00443bf0e8 100644 --- a/libs/cljs-sdk/bb.edn +++ b/libs/cljs-sdk/bb.edn @@ -1,6 +1,6 @@ {:paths ["src" "test"] - :deps {org.babashka/cli {:mvn/version "0.7.53"} - slipset/deps-deploy {:mvn/version "0.2.1"}} + :deps {org.babashka/cli {:mvn/version "0.8.67"} + slipset/deps-deploy {:mvn/version "0.2.2"}} :tasks {:requires ([babashka.cli :as cli]) :init (do diff --git a/libs/package.json b/libs/package.json index f9b9dba5d7..436112e6e6 100644 --- a/libs/package.json +++ b/libs/package.json @@ -18,32 +18,31 @@ "build:docs:json": "typedoc --json docs/out.json ./src/LSPlugin.user.ts" }, "dependencies": { - "csstype": "3.1.0", - "debug": "4.3.4", + "change-case": "^5.4.4", + "csstype": "3.2.3", + "debug": "4.4.3", "deepmerge": "4.3.1", - "dompurify": "3.3.1", - "eventemitter3": "4.0.7", + "dompurify": "3.3.3", + "eventemitter3": "5.0.4", "fast-deep-equal": "3.1.3", - "lodash-es": "4.17.21", - "path": "0.12.7", - "snake-case": "3.0.4" + "lodash-es": "4.17.23", + "path": "0.12.7" }, "devDependencies": { - "ts-morph": "^22.0.0", - "@babel/core": "^7.20.2", - "@babel/preset-env": "^7.20.2", - "@types/debug": "^4.1.5", - "@types/dompurify": "2.4.0", - "@types/lodash-es": "4.17.6", - "babel-loader": "^9.1.0", - "prettier": "^2.6.2", - "prettier-config-standard": "^5.0.0", - "terser-webpack-plugin": "^5.3.6", - "ts-loader": "9.3.0", - "typedoc": "0.28.15", + "ts-morph": "^27.0.2", + "@babel/core": "^7.29.0", + "@babel/preset-env": "^7.29.2", + "@types/debug": "^4.1.13", + "@types/lodash-es": "4.17.12", + "babel-loader": "^10.1.1", + "prettier": "^3.8.1", + "prettier-config-standard": "^7.0.0", + "terser-webpack-plugin": "^5.4.0", + "ts-loader": "9.5.4", + "typedoc": "0.28.17", "typescript": "5.9.3", - "webpack": "5.94.0", - "webpack-bundle-analyzer": "4.5.0", - "webpack-cli": "4.9.2" + "webpack": "5.105.4", + "webpack-bundle-analyzer": "5.2.0", + "webpack-cli": "^7.0.2" } } diff --git a/libs/src/helpers.ts b/libs/src/helpers.ts index 63397c1bf6..742dc761a3 100644 --- a/libs/src/helpers.ts +++ b/libs/src/helpers.ts @@ -3,7 +3,7 @@ import { PluginLocal } from './LSPlugin.core' import * as nodePath from 'path' import DOMPurify from 'dompurify' import merge from 'deepmerge' -import { snakeCase } from 'snake-case' +import { snakeCase } from 'change-case' import * as callables from './callable.apis' import EventEmitter from 'eventemitter3' diff --git a/libs/tsconfig.json b/libs/tsconfig.json index ff62b5ee8e..c65c48182e 100644 --- a/libs/tsconfig.json +++ b/libs/tsconfig.json @@ -53,7 +53,7 @@ // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ /* Module Resolution Options */ - "moduleResolution": "node", + "moduleResolution": "bundler", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ diff --git a/libs/yarn.lock b/libs/yarn.lock index a9deb39562..d756f80e0e 100644 --- a/libs/yarn.lock +++ b/libs/yarn.lock @@ -2,73 +2,51 @@ # yarn lockfile v1 -"@ampproject/remapping@^2.1.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== +"@babel/code-frame@^7.28.6", "@babel/code-frame@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.0.tgz#7cd7a59f15b3cc0dcd803038f7792712a7d0b15c" + integrity sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw== dependencies: - "@jridgewell/gen-mapping" "^0.1.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@babel/helper-validator-identifier" "^7.28.5" + js-tokens "^4.0.0" + picocolors "^1.1.1" -"@babel/code-frame@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== +"@babel/compat-data@^7.28.6", "@babel/compat-data@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.29.0.tgz#00d03e8c0ac24dd9be942c5370990cbe1f17d88d" + integrity sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg== + +"@babel/core@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.29.0.tgz#5286ad785df7f79d656e88ce86e650d16ca5f322" + integrity sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA== dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== - dependencies: - "@babel/highlight" "^7.22.13" - chalk "^2.4.2" - -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.0", "@babel/compat-data@^7.20.1": - version "7.20.1" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.1.tgz#f2e6ef7790d8c8dbf03d379502dcc246dcce0b30" - integrity sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ== - -"@babel/core@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.2.tgz#8dc9b1620a673f92d3624bd926dc49a52cf25b92" - integrity sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.2" - "@babel/helper-compilation-targets" "^7.20.0" - "@babel/helper-module-transforms" "^7.20.2" - "@babel/helpers" "^7.20.1" - "@babel/parser" "^7.20.2" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.20.1" - "@babel/types" "^7.20.2" - convert-source-map "^1.7.0" + "@babel/code-frame" "^7.29.0" + "@babel/generator" "^7.29.0" + "@babel/helper-compilation-targets" "^7.28.6" + "@babel/helper-module-transforms" "^7.28.6" + "@babel/helpers" "^7.28.6" + "@babel/parser" "^7.29.0" + "@babel/template" "^7.28.6" + "@babel/traverse" "^7.29.0" + "@babel/types" "^7.29.0" + "@jridgewell/remapping" "^2.3.5" + convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" - json5 "^2.2.1" - semver "^6.3.0" + json5 "^2.2.3" + semver "^6.3.1" -"@babel/generator@^7.20.2": - version "7.20.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.4.tgz#4d9f8f0c30be75fd90a0562099a26e5839602ab8" - integrity sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA== +"@babel/generator@^7.29.0": + version "7.29.1" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.1.tgz#d09876290111abbb00ef962a7b83a5307fba0d50" + integrity sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw== dependencies: - "@babel/types" "^7.20.2" - "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" - -"@babel/generator@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== - dependencies: - "@babel/types" "^7.23.0" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" + "@babel/parser" "^7.29.0" + "@babel/types" "^7.29.0" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" + jsesc "^3.0.2" "@babel/helper-annotate-as-pure@^7.18.6": version "7.18.6" @@ -77,38 +55,38 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" - integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== +"@babel/helper-annotate-as-pure@^7.27.1", "@babel/helper-annotate-as-pure@^7.27.3": + version "7.27.3" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz#f31fd86b915fc4daf1f3ac6976c59be7084ed9c5" + integrity sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg== dependencies: - "@babel/helper-explode-assignable-expression" "^7.18.6" - "@babel/types" "^7.18.9" + "@babel/types" "^7.27.3" -"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.0": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz#6bf5374d424e1b3922822f1d9bdaa43b1a139d0a" - integrity sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ== +"@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz#32c4a3f41f12ed1532179b108a4d746e105c2b25" + integrity sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA== dependencies: - "@babel/compat-data" "^7.20.0" - "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.21.3" - semver "^6.3.0" + "@babel/compat-data" "^7.28.6" + "@babel/helper-validator-option" "^7.27.1" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.18.6": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz#3c08a5b5417c7f07b5cf3dfb6dc79cbec682e8c2" - integrity sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA== +"@babel/helper-create-class-features-plugin@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz#611ff5482da9ef0db6291bcd24303400bca170fb" + integrity sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow== dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-member-expression-to-functions" "^7.18.9" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-replace-supers" "^7.19.1" - "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-member-expression-to-functions" "^7.28.5" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/helper-replace-supers" "^7.28.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/traverse" "^7.28.6" + semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.19.0": +"@babel/helper-create-regexp-features-plugin@^7.18.6": version "7.19.0" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz#7976aca61c0984202baca73d84e2337a5424a41b" integrity sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw== @@ -116,860 +94,719 @@ "@babel/helper-annotate-as-pure" "^7.18.6" regexpu-core "^5.1.0" -"@babel/helper-define-polyfill-provider@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" - integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== +"@babel/helper-create-regexp-features-plugin@^7.27.1", "@babel/helper-create-regexp-features-plugin@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz#7c1ddd64b2065c7f78034b25b43346a7e19ed997" + integrity sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw== dependencies: - "@babel/helper-compilation-targets" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" - debug "^4.1.1" + "@babel/helper-annotate-as-pure" "^7.27.3" + regexpu-core "^6.3.1" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.6.7": + version "0.6.7" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.7.tgz#8d01cba97de419115ad3497573a476db15dc6c6a" + integrity sha512-6Fqi8MtQ/PweQ9xvux65emkLQ83uB+qAVtfHkC9UodyHMIZdxNI01HjLCLUtybElp2KY2XNE0nOgyP1E1vXw9w== + dependencies: + "@babel/helper-compilation-targets" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" + debug "^4.4.3" lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" + resolve "^1.22.11" -"@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== +"@babel/helper-globals@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" + integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-explode-assignable-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" - integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== +"@babel/helper-member-expression-to-functions@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz#f3e07a10be37ed7a63461c63e6929575945a6150" + integrity sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg== dependencies: - "@babel/types" "^7.18.6" + "@babel/traverse" "^7.28.5" + "@babel/types" "^7.28.5" -"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" - integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== +"@babel/helper-module-imports@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz#60632cbd6ffb70b22823187201116762a03e2d5c" + integrity sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw== dependencies: - "@babel/template" "^7.18.10" - "@babel/types" "^7.19.0" + "@babel/traverse" "^7.28.6" + "@babel/types" "^7.28.6" -"@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== +"@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz#9312d9d9e56edc35aeb6e95c25d4106b50b9eb1e" + integrity sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA== dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" + "@babel/helper-module-imports" "^7.28.6" + "@babel/helper-validator-identifier" "^7.28.5" + "@babel/traverse" "^7.28.6" -"@babel/helper-hoist-variables@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" - integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== +"@babel/helper-optimise-call-expression@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz#c65221b61a643f3e62705e5dd2b5f115e35f9200" + integrity sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.27.1" -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-member-expression-to-functions@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815" - integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg== - dependencies: - "@babel/types" "^7.18.9" - -"@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.19.6", "@babel/helper-module-transforms@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz#ac53da669501edd37e658602a21ba14c08748712" - integrity sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.20.2" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.20.1" - "@babel/types" "^7.20.2" - -"@babel/helper-optimise-call-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" - integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6": version "7.20.2" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== -"@babel/helper-remap-async-to-generator@^7.18.6", "@babel/helper-remap-async-to-generator@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" - integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-wrap-function" "^7.18.9" - "@babel/types" "^7.18.9" +"@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz#6f13ea251b68c8532e985fd532f28741a8af9ac8" + integrity sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug== -"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz#e1592a9b4b368aa6bdb8784a711e0bcbf0612b78" - integrity sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw== +"@babel/helper-remap-async-to-generator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz#4601d5c7ce2eb2aea58328d43725523fcd362ce6" + integrity sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA== dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-member-expression-to-functions" "^7.18.9" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/traverse" "^7.19.1" - "@babel/types" "^7.19.0" + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-wrap-function" "^7.27.1" + "@babel/traverse" "^7.27.1" -"@babel/helper-simple-access@^7.19.4", "@babel/helper-simple-access@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" - integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== +"@babel/helper-replace-supers@^7.27.1", "@babel/helper-replace-supers@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz#94aa9a1d7423a00aead3f204f78834ce7d53fe44" + integrity sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg== dependencies: - "@babel/types" "^7.20.2" + "@babel/helper-member-expression-to-functions" "^7.28.5" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/traverse" "^7.28.6" -"@babel/helper-skip-transparent-expression-wrappers@^7.18.9": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" - integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== +"@babel/helper-skip-transparent-expression-wrappers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz#62bb91b3abba8c7f1fec0252d9dbea11b3ee7a56" + integrity sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg== dependencies: - "@babel/types" "^7.20.0" - -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" "@babel/helper-string-parser@^7.19.4": version "7.19.4" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": +"@babel/helper-validator-identifier@^7.19.1": version "7.19.1" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== +"@babel/helper-validator-identifier@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== -"@babel/helper-validator-option@^7.18.6": +"@babel/helper-validator-option@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" + integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== + +"@babel/helper-wrap-function@^7.27.1": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz#4e349ff9222dab69a93a019cc296cdd8442e279a" + integrity sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ== + dependencies: + "@babel/template" "^7.28.6" + "@babel/traverse" "^7.28.6" + "@babel/types" "^7.28.6" + +"@babel/helpers@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.6.tgz#fca903a313ae675617936e8998b814c415cbf5d7" + integrity sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw== + dependencies: + "@babel/template" "^7.28.6" + "@babel/types" "^7.28.6" + +"@babel/parser@^7.28.6", "@babel/parser@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.0.tgz#669ef345add7d057e92b7ed15f0bac07611831b6" + integrity sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww== + dependencies: + "@babel/types" "^7.29.0" + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz#fbde57974707bbfa0376d34d425ff4fa6c732421" + integrity sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.28.5" + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz#43f70a6d7efd52370eefbdf55ae03d91b293856d" + integrity sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz#beb623bd573b8b6f3047bd04c32506adc3e58a72" + integrity sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz#e134a5479eb2ba9c02714e8c1ebf1ec9076124fd" + integrity sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/plugin-transform-optional-chaining" "^7.27.1" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz#0e8289cec28baaf05d54fd08d81ae3676065f69f" + integrity sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g== + dependencies: + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/traverse" "^7.28.6" + +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== + +"@babel/plugin-syntax-import-assertions@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz#ae9bc1923a6ba527b70104dd2191b0cd872c8507" + integrity sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw== + dependencies: + "@babel/helper-plugin-utils" "^7.28.6" + +"@babel/plugin-syntax-import-attributes@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz#b71d5914665f60124e133696f17cd7669062c503" + integrity sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw== + dependencies: + "@babel/helper-plugin-utils" "^7.28.6" + +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" - integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== - -"@babel/helper-wrap-function@^7.18.9": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz#89f18335cff1152373222f76a4b37799636ae8b1" - integrity sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg== - dependencies: - "@babel/helper-function-name" "^7.19.0" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.0" - "@babel/types" "^7.19.0" - -"@babel/helpers@^7.20.1": - version "7.20.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.1.tgz#2ab7a0fcb0a03b5bf76629196ed63c2d7311f4c9" - integrity sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg== - dependencies: - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.20.1" - "@babel/types" "^7.20.0" - -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.18.10", "@babel/parser@^7.20.2": - version "7.20.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.3.tgz#5358cf62e380cf69efcb87a7bb922ff88bfac6e2" - integrity sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg== - -"@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" - integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz#a11af19aa373d68d561f08e0a57242350ed0ec50" - integrity sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" - "@babel/plugin-proposal-optional-chaining" "^7.18.9" - -"@babel/plugin-proposal-async-generator-functions@^7.20.1": - version "7.20.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz#352f02baa5d69f4e7529bdac39aaa02d41146af9" - integrity sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-remap-async-to-generator" "^7.18.9" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-class-properties@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" - integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-proposal-class-static-block@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz#8aa81d403ab72d3962fc06c26e222dacfc9b9020" - integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-proposal-dynamic-import@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" - integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-proposal-export-namespace-from@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" - integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" - integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz#8148cbb350483bf6220af06fa6db3690e14b2e23" - integrity sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" - integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-proposal-numeric-separator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" - integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-object-rest-spread@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz#a556f59d555f06961df1e572bb5eca864c84022d" - integrity sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ== - dependencies: - "@babel/compat-data" "^7.20.1" - "@babel/helper-compilation-targets" "^7.20.0" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.20.1" - -"@babel/plugin-proposal-optional-catch-binding@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" - integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-proposal-optional-chaining@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz#e8e8fe0723f2563960e4bf5e9690933691915993" - integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-proposal-private-methods@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" - integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-proposal-private-property-in-object@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz#a64137b232f0aca3733a67eb1a144c192389c503" - integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" - integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== +"@babel/plugin-transform-arrow-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz#6e2061067ba3ab0266d834a9f94811196f2aba9a" + integrity sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== +"@babel/plugin-transform-async-generator-functions@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz#63ed829820298f0bf143d5a4a68fb8c06ffd742f" + integrity sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-remap-async-to-generator" "^7.27.1" + "@babel/traverse" "^7.29.0" -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== +"@babel/plugin-transform-async-to-generator@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz#bd97b42237b2d1bc90d74bcb486c39be5b4d7e77" + integrity sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-module-imports" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-remap-async-to-generator" "^7.27.1" -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== +"@babel/plugin-transform-block-scoped-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz#558a9d6e24cf72802dd3b62a4b51e0d62c0f57f9" + integrity sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== +"@babel/plugin-transform-block-scoping@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz#e1ef5633448c24e76346125c2534eeb359699a99" + integrity sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-syntax-import-assertions@^7.20.0": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4" - integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== +"@babel/plugin-transform-class-properties@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz#d274a4478b6e782d9ea987fda09bdb6d28d66b72" + integrity sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw== dependencies: - "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-create-class-features-plugin" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== +"@babel/plugin-transform-class-static-block@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz#1257491e8259c6d125ac4d9a6f39f9d2bf3dba70" + integrity sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-create-class-features-plugin" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== +"@babel/plugin-transform-classes@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz#8f6fb79ba3703978e701ce2a97e373aae7dda4b7" + integrity sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-compilation-targets" "^7.28.6" + "@babel/helper-globals" "^7.28.0" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-replace-supers" "^7.28.6" + "@babel/traverse" "^7.28.6" -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== +"@babel/plugin-transform-computed-properties@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz#936824fc71c26cb5c433485776d79c8e7b0202d2" + integrity sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/template" "^7.28.6" -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== +"@babel/plugin-transform-destructuring@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz#b8402764df96179a2070bb7b501a1586cf8ad7a7" + integrity sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.28.5" -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== +"@babel/plugin-transform-dotall-regex@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz#def31ed84e0fb6e25c71e53c124e7b76a4ab8e61" + integrity sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-create-regexp-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== +"@babel/plugin-transform-duplicate-keys@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz#f1fbf628ece18e12e7b32b175940e68358f546d1" + integrity sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz#8014b8a6cfd0e7b92762724443bf0d2400f26df1" + integrity sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-create-regexp-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== +"@babel/plugin-transform-dynamic-import@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz#4c78f35552ac0e06aa1f6e3c573d67695e8af5a4" + integrity sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== +"@babel/plugin-transform-explicit-resource-management@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.6.tgz#dd6788f982c8b77e86779d1d029591e39d9d8be7" + integrity sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/plugin-transform-destructuring" "^7.28.5" -"@babel/plugin-transform-arrow-functions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz#19063fcf8771ec7b31d742339dac62433d0611fe" - integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ== +"@babel/plugin-transform-exponentiation-operator@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz#5e477eb7eafaf2ab5537a04aaafcf37e2d7f1091" + integrity sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-async-to-generator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz#ccda3d1ab9d5ced5265fdb13f1882d5476c71615" - integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== +"@babel/plugin-transform-export-namespace-from@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz#71ca69d3471edd6daa711cf4dfc3400415df9c23" + integrity sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ== dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-remap-async-to-generator" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-block-scoped-functions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" - integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== +"@babel/plugin-transform-for-of@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz#bc24f7080e9ff721b63a70ac7b2564ca15b6c40a" + integrity sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" -"@babel/plugin-transform-block-scoping@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz#f59b1767e6385c663fd0bce655db6ca9c8b236ed" - integrity sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ== +"@babel/plugin-transform-function-name@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz#4d0bf307720e4dce6d7c30fcb1fd6ca77bdeb3a7" + integrity sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-compilation-targets" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.27.1" -"@babel/plugin-transform-classes@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz#c0033cf1916ccf78202d04be4281d161f6709bb2" - integrity sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g== +"@babel/plugin-transform-json-strings@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz#4c8c15b2dc49e285d110a4cf3dac52fd2dfc3038" + integrity sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw== dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-compilation-targets" "^7.20.0" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-replace-supers" "^7.19.1" - "@babel/helper-split-export-declaration" "^7.18.6" - globals "^11.1.0" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-computed-properties@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz#2357a8224d402dad623caf6259b611e56aec746e" - integrity sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw== +"@babel/plugin-transform-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz#baaefa4d10a1d4206f9dcdda50d7d5827bb70b24" + integrity sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-destructuring@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz#c23741cfa44ddd35f5e53896e88c75331b8b2792" - integrity sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw== +"@babel/plugin-transform-logical-assignment-operators@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz#53028a3d77e33c50ef30a8fce5ca17065936e605" + integrity sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" - integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== +"@babel/plugin-transform-member-expression-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz#37b88ba594d852418e99536f5612f795f23aeaf9" + integrity sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-duplicate-keys@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" - integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== +"@babel/plugin-transform-modules-amd@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz#a4145f9d87c2291fe2d05f994b65dba4e3e7196f" + integrity sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-exponentiation-operator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" - integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== +"@babel/plugin-transform-modules-commonjs@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz#c0232e0dfe66a734cc4ad0d5e75fc3321b6fdef1" + integrity sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-module-transforms" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-for-of@^7.18.8": - version "7.18.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" - integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== +"@babel/plugin-transform-modules-systemjs@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz#e458a95a17807c415924106a3ff188a3b8dee964" + integrity sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-module-transforms" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-validator-identifier" "^7.28.5" + "@babel/traverse" "^7.29.0" -"@babel/plugin-transform-function-name@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" - integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== +"@babel/plugin-transform-modules-umd@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz#63f2cf4f6dc15debc12f694e44714863d34cd334" + integrity sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w== dependencies: - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-function-name" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-literals@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" - integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== +"@babel/plugin-transform-named-capturing-groups-regex@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz#a26cd51e09c4718588fc4cce1c5d1c0152102d6a" + integrity sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-create-regexp-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-member-expression-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" - integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== +"@babel/plugin-transform-new-target@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz#259c43939728cad1706ac17351b7e6a7bea1abeb" + integrity sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-amd@^7.19.6": - version "7.19.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz#aca391801ae55d19c4d8d2ebfeaa33df5f2a2cbd" - integrity sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg== +"@babel/plugin-transform-nullish-coalescing-operator@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz#9bc62096e90ab7a887f3ca9c469f6adec5679757" + integrity sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg== dependencies: - "@babel/helper-module-transforms" "^7.19.6" - "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-modules-commonjs@^7.19.6": - version "7.19.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz#25b32feef24df8038fc1ec56038917eacb0b730c" - integrity sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ== +"@babel/plugin-transform-numeric-separator@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz#1310b0292762e7a4a335df5f580c3320ee7d9e9f" + integrity sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w== dependencies: - "@babel/helper-module-transforms" "^7.19.6" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-simple-access" "^7.19.4" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-modules-systemjs@^7.19.6": - version "7.19.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz#59e2a84064b5736a4471b1aa7b13d4431d327e0d" - integrity sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ== +"@babel/plugin-transform-object-rest-spread@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz#fdd4bc2d72480db6ca42aed5c051f148d7b067f7" + integrity sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA== dependencies: - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-module-transforms" "^7.19.6" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-validator-identifier" "^7.19.1" + "@babel/helper-compilation-targets" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/plugin-transform-destructuring" "^7.28.5" + "@babel/plugin-transform-parameters" "^7.27.7" + "@babel/traverse" "^7.28.6" -"@babel/plugin-transform-modules-umd@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" - integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== +"@babel/plugin-transform-object-super@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz#1c932cd27bf3874c43a5cac4f43ebf970c9871b5" + integrity sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng== dependencies: - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" -"@babel/plugin-transform-named-capturing-groups-regex@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz#ec7455bab6cd8fb05c525a94876f435a48128888" - integrity sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw== +"@babel/plugin-transform-optional-catch-binding@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz#75107be14c78385978201a49c86414a150a20b4c" + integrity sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.19.0" - "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-new-target@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" - integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== +"@babel/plugin-transform-optional-chaining@^7.27.1", "@babel/plugin-transform-optional-chaining@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz#926cf150bd421fc8362753e911b4a1b1ce4356cd" + integrity sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" -"@babel/plugin-transform-object-super@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" - integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== +"@babel/plugin-transform-parameters@^7.27.7": + version "7.27.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz#1fd2febb7c74e7d21cf3b05f7aebc907940af53a" + integrity sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-replace-supers" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-parameters@^7.20.1": - version "7.20.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz#7b3468d70c3c5b62e46be0a47b6045d8590fb748" - integrity sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA== +"@babel/plugin-transform-private-methods@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz#c76fbfef3b86c775db7f7c106fff544610bdb411" + integrity sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-create-class-features-plugin" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-property-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" - integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== +"@babel/plugin-transform-private-property-in-object@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz#4fafef1e13129d79f1d75ac180c52aafefdb2811" + integrity sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-create-class-features-plugin" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-regenerator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz#585c66cb84d4b4bf72519a34cfce761b8676ca73" - integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ== +"@babel/plugin-transform-property-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz#07eafd618800591e88073a0af1b940d9a42c6424" + integrity sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - regenerator-transform "^0.15.0" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-reserved-words@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" - integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== +"@babel/plugin-transform-regenerator@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz#dec237cec1b93330876d6da9992c4abd42c9d18b" + integrity sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-shorthand-properties@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" - integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== +"@babel/plugin-transform-regexp-modifiers@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz#7ef0163bd8b4a610481b2509c58cf217f065290b" + integrity sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-create-regexp-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-spread@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz#dd60b4620c2fec806d60cfaae364ec2188d593b6" - integrity sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w== +"@babel/plugin-transform-reserved-words@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz#40fba4878ccbd1c56605a4479a3a891ac0274bb4" + integrity sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw== dependencies: - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-sticky-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" - integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== +"@babel/plugin-transform-shorthand-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz#532abdacdec87bfee1e0ef8e2fcdee543fe32b90" + integrity sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-template-literals@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" - integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== +"@babel/plugin-transform-spread@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz#40a2b423f6db7b70f043ad027a58bcb44a9757b6" + integrity sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" -"@babel/plugin-transform-typeof-symbol@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" - integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== +"@babel/plugin-transform-sticky-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz#18984935d9d2296843a491d78a014939f7dcd280" + integrity sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-unicode-escapes@^7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" - integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== +"@babel/plugin-transform-template-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz#1a0eb35d8bb3e6efc06c9fd40eb0bcef548328b8" + integrity sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-unicode-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" - integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== +"@babel/plugin-transform-typeof-symbol@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz#70e966bb492e03509cf37eafa6dcc3051f844369" + integrity sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/preset-env@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.20.2.tgz#9b1642aa47bb9f43a86f9630011780dab7f86506" - integrity sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg== +"@babel/plugin-transform-unicode-escapes@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz#3e3143f8438aef842de28816ece58780190cf806" + integrity sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg== dependencies: - "@babel/compat-data" "^7.20.1" - "@babel/helper-compilation-targets" "^7.20.0" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-validator-option" "^7.18.6" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-async-generator-functions" "^7.20.1" - "@babel/plugin-proposal-class-properties" "^7.18.6" - "@babel/plugin-proposal-class-static-block" "^7.18.6" - "@babel/plugin-proposal-dynamic-import" "^7.18.6" - "@babel/plugin-proposal-export-namespace-from" "^7.18.9" - "@babel/plugin-proposal-json-strings" "^7.18.6" - "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" - "@babel/plugin-proposal-numeric-separator" "^7.18.6" - "@babel/plugin-proposal-object-rest-spread" "^7.20.2" - "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" - "@babel/plugin-proposal-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-private-methods" "^7.18.6" - "@babel/plugin-proposal-private-property-in-object" "^7.18.6" - "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.20.0" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.18.6" - "@babel/plugin-transform-async-to-generator" "^7.18.6" - "@babel/plugin-transform-block-scoped-functions" "^7.18.6" - "@babel/plugin-transform-block-scoping" "^7.20.2" - "@babel/plugin-transform-classes" "^7.20.2" - "@babel/plugin-transform-computed-properties" "^7.18.9" - "@babel/plugin-transform-destructuring" "^7.20.2" - "@babel/plugin-transform-dotall-regex" "^7.18.6" - "@babel/plugin-transform-duplicate-keys" "^7.18.9" - "@babel/plugin-transform-exponentiation-operator" "^7.18.6" - "@babel/plugin-transform-for-of" "^7.18.8" - "@babel/plugin-transform-function-name" "^7.18.9" - "@babel/plugin-transform-literals" "^7.18.9" - "@babel/plugin-transform-member-expression-literals" "^7.18.6" - "@babel/plugin-transform-modules-amd" "^7.19.6" - "@babel/plugin-transform-modules-commonjs" "^7.19.6" - "@babel/plugin-transform-modules-systemjs" "^7.19.6" - "@babel/plugin-transform-modules-umd" "^7.18.6" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.1" - "@babel/plugin-transform-new-target" "^7.18.6" - "@babel/plugin-transform-object-super" "^7.18.6" - "@babel/plugin-transform-parameters" "^7.20.1" - "@babel/plugin-transform-property-literals" "^7.18.6" - "@babel/plugin-transform-regenerator" "^7.18.6" - "@babel/plugin-transform-reserved-words" "^7.18.6" - "@babel/plugin-transform-shorthand-properties" "^7.18.6" - "@babel/plugin-transform-spread" "^7.19.0" - "@babel/plugin-transform-sticky-regex" "^7.18.6" - "@babel/plugin-transform-template-literals" "^7.18.9" - "@babel/plugin-transform-typeof-symbol" "^7.18.9" - "@babel/plugin-transform-unicode-escapes" "^7.18.10" - "@babel/plugin-transform-unicode-regex" "^7.18.6" - "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.20.2" - babel-plugin-polyfill-corejs2 "^0.3.3" - babel-plugin-polyfill-corejs3 "^0.6.0" - babel-plugin-polyfill-regenerator "^0.4.1" - core-js-compat "^3.25.1" - semver "^6.3.0" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/preset-modules@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" - integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== +"@babel/plugin-transform-unicode-property-regex@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz#63a7a6c21a0e75dae9b1861454111ea5caa22821" + integrity sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.28.6" + +"@babel/plugin-transform-unicode-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz#25948f5c395db15f609028e370667ed8bae9af97" + integrity sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-unicode-sets-regex@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz#924912914e5df9fe615ec472f88ff4788ce04d4e" + integrity sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.28.6" + +"@babel/preset-env@^7.29.2": + version "7.29.2" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.29.2.tgz#5a173f22c7d8df362af1c9fe31facd320de4a86c" + integrity sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw== + dependencies: + "@babel/compat-data" "^7.29.0" + "@babel/helper-compilation-targets" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-validator-option" "^7.27.1" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.28.5" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.27.1" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.27.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.27.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.28.6" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-import-assertions" "^7.28.6" + "@babel/plugin-syntax-import-attributes" "^7.28.6" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.27.1" + "@babel/plugin-transform-async-generator-functions" "^7.29.0" + "@babel/plugin-transform-async-to-generator" "^7.28.6" + "@babel/plugin-transform-block-scoped-functions" "^7.27.1" + "@babel/plugin-transform-block-scoping" "^7.28.6" + "@babel/plugin-transform-class-properties" "^7.28.6" + "@babel/plugin-transform-class-static-block" "^7.28.6" + "@babel/plugin-transform-classes" "^7.28.6" + "@babel/plugin-transform-computed-properties" "^7.28.6" + "@babel/plugin-transform-destructuring" "^7.28.5" + "@babel/plugin-transform-dotall-regex" "^7.28.6" + "@babel/plugin-transform-duplicate-keys" "^7.27.1" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.29.0" + "@babel/plugin-transform-dynamic-import" "^7.27.1" + "@babel/plugin-transform-explicit-resource-management" "^7.28.6" + "@babel/plugin-transform-exponentiation-operator" "^7.28.6" + "@babel/plugin-transform-export-namespace-from" "^7.27.1" + "@babel/plugin-transform-for-of" "^7.27.1" + "@babel/plugin-transform-function-name" "^7.27.1" + "@babel/plugin-transform-json-strings" "^7.28.6" + "@babel/plugin-transform-literals" "^7.27.1" + "@babel/plugin-transform-logical-assignment-operators" "^7.28.6" + "@babel/plugin-transform-member-expression-literals" "^7.27.1" + "@babel/plugin-transform-modules-amd" "^7.27.1" + "@babel/plugin-transform-modules-commonjs" "^7.28.6" + "@babel/plugin-transform-modules-systemjs" "^7.29.0" + "@babel/plugin-transform-modules-umd" "^7.27.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.29.0" + "@babel/plugin-transform-new-target" "^7.27.1" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.28.6" + "@babel/plugin-transform-numeric-separator" "^7.28.6" + "@babel/plugin-transform-object-rest-spread" "^7.28.6" + "@babel/plugin-transform-object-super" "^7.27.1" + "@babel/plugin-transform-optional-catch-binding" "^7.28.6" + "@babel/plugin-transform-optional-chaining" "^7.28.6" + "@babel/plugin-transform-parameters" "^7.27.7" + "@babel/plugin-transform-private-methods" "^7.28.6" + "@babel/plugin-transform-private-property-in-object" "^7.28.6" + "@babel/plugin-transform-property-literals" "^7.27.1" + "@babel/plugin-transform-regenerator" "^7.29.0" + "@babel/plugin-transform-regexp-modifiers" "^7.28.6" + "@babel/plugin-transform-reserved-words" "^7.27.1" + "@babel/plugin-transform-shorthand-properties" "^7.27.1" + "@babel/plugin-transform-spread" "^7.28.6" + "@babel/plugin-transform-sticky-regex" "^7.27.1" + "@babel/plugin-transform-template-literals" "^7.27.1" + "@babel/plugin-transform-typeof-symbol" "^7.27.1" + "@babel/plugin-transform-unicode-escapes" "^7.27.1" + "@babel/plugin-transform-unicode-property-regex" "^7.28.6" + "@babel/plugin-transform-unicode-regex" "^7.27.1" + "@babel/plugin-transform-unicode-sets-regex" "^7.28.6" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.15" + babel-plugin-polyfill-corejs3 "^0.14.0" + babel-plugin-polyfill-regenerator "^0.6.6" + core-js-compat "^3.48.0" + semver "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/runtime@^7.8.4": - version "7.20.1" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.1.tgz#1148bb33ab252b165a06698fde7576092a78b4a9" - integrity sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg== +"@babel/template@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.28.6.tgz#0e7e56ecedb78aeef66ce7972b082fce76a23e57" + integrity sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ== dependencies: - regenerator-runtime "^0.13.10" + "@babel/code-frame" "^7.28.6" + "@babel/parser" "^7.28.6" + "@babel/types" "^7.28.6" -"@babel/template@^7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" - integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== +"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.5", "@babel/traverse@^7.28.6", "@babel/traverse@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.29.0.tgz#f323d05001440253eead3c9c858adbe00b90310a" + integrity sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA== dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.18.10" - "@babel/types" "^7.18.10" + "@babel/code-frame" "^7.29.0" + "@babel/generator" "^7.29.0" + "@babel/helper-globals" "^7.28.0" + "@babel/parser" "^7.29.0" + "@babel/template" "^7.28.6" + "@babel/types" "^7.29.0" + debug "^4.3.1" -"@babel/template@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" - -"@babel/traverse@^7.19.0", "@babel/traverse@^7.19.1", "@babel/traverse@^7.20.1": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" - integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.4.4": +"@babel/types@^7.18.6", "@babel/types@^7.4.4": version "7.20.2" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.2.tgz#67ac09266606190f496322dbaff360fdaa5e7842" integrity sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog== @@ -978,19 +815,23 @@ "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" -"@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== +"@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.5", "@babel/types@^7.28.6", "@babel/types@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.0.tgz#9f5b1e838c446e72cf3cd4b918152b8c605e37c7" + integrity sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A== dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" -"@discoveryjs/json-ext@^0.5.0": - version "0.5.3" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz#90420f9f9c6d3987f176a19a7d8e764271a2f55d" - integrity sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g== +"@discoveryjs/json-ext@0.5.7": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + +"@discoveryjs/json-ext@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-1.0.0.tgz#f75c08f88cfd9eb8d9b062284d5bbcc60c41bf2a" + integrity sha512-dDlz3W405VMFO4w5kIP9DOmELBcvFQGmLoKSdIRstBDubKFYwaNHV1NnlzMCQpXQFGWVALmeMORAuiLx18AvZQ== "@gerrit0/mini-shiki@^3.17.0": version "3.19.0" @@ -1003,24 +844,7 @@ "@shikijs/types" "^3.19.0" "@shikijs/vscode-textmate" "^10.0.2" -"@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/gen-mapping@^0.3.5": +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": version "0.3.13" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== @@ -1028,29 +852,19 @@ "@jridgewell/sourcemap-codec" "^1.5.0" "@jridgewell/trace-mapping" "^0.3.24" -"@jridgewell/resolve-uri@3.1.0", "@jridgewell/resolve-uri@^3.0.3": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== +"@jridgewell/remapping@^2.3.5": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1" + integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.1.0": version "3.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== -"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/source-map@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" - integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - "@jridgewell/source-map@^0.3.3": version "0.3.11" resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.11.tgz#b21835cbd36db656b857c2ad02ebd413cc13a9ba" @@ -1059,11 +873,6 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" -"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" @@ -1074,23 +883,7 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== -"@jridgewell/trace-mapping@^0.3.14": - version "0.3.17" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" - integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - -"@jridgewell/trace-mapping@^0.3.17": - version "0.3.20" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" - integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.28": version "0.3.31" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== @@ -1098,39 +891,10 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@jridgewell/trace-mapping@^0.3.9": - version "0.3.14" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" - integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@polka/url@^1.0.0-next.17": - version "1.0.0-next.17" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.17.tgz#25fdbdfd282c2f86ddf3fcefbd98be99cd2627e2" - integrity sha512-0p1rCgM3LLbAdwBnc7gqgnvjHg9KpbhcSphergHShlkWz8EdPawoMJ3/VbezI0mGC5eKCDzMaPgF9Yca6cKvrg== +"@polka/url@^1.0.0-next.24": + version "1.0.0-next.29" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.29.tgz#5a40109a1ab5f84d6fd8fc928b19f367cbe7e7b1" + integrity sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww== "@shikijs/engine-oniguruma@^3.19.0": version "3.19.0" @@ -1167,31 +931,39 @@ resolved "https://registry.yarnpkg.com/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz#a90ab31d0cc1dfb54c66a69e515bf624fa7b2224" integrity sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg== -"@ts-morph/common@~0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.23.0.tgz#bd4ddbd3f484f29476c8bd985491592ae5fc147e" - integrity sha512-m7Lllj9n/S6sOkCkRftpM7L24uvmfXQFedlW/4hENcuJH1HHm9u5EgxZb9uVjQSCGrbBWBkOGgcTxNg36r6ywA== +"@ts-morph/common@~0.28.1": + version "0.28.1" + resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.28.1.tgz#10ec52182d5c310832b669af7784a34fc3da3ca1" + integrity sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g== dependencies: - fast-glob "^3.3.2" - minimatch "^9.0.3" - mkdirp "^3.0.1" + minimatch "^10.0.1" path-browserify "^1.0.1" + tinyglobby "^0.2.14" -"@types/debug@^4.1.5": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82" - integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg== +"@types/debug@^4.1.13": + version "4.1.13" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.13.tgz#22d1cc9d542d3593caea764f974306ab36286ee7" + integrity sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw== dependencies: "@types/ms" "*" -"@types/dompurify@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/dompurify/-/dompurify-2.4.0.tgz#fd9706392a88e0e0e6d367f3588482d817df0ab9" - integrity sha512-IDBwO5IZhrKvHFUl+clZxgf3hn2b/lU6H1KaBShPkQyGJUQ0xwebezIPSuiyGwfz1UzJWQl4M7BDxtHtCCPlTg== +"@types/eslint-scope@^3.7.7": + version "3.7.7" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" + integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== dependencies: - "@types/trusted-types" "*" + "@types/eslint" "*" + "@types/estree" "*" -"@types/estree@^1.0.5": +"@types/eslint@*": + version "9.6.1" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.1.tgz#d5795ad732ce81715f27f75da913004a56751584" + integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^1.0.8": version "1.0.8" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== @@ -1203,20 +975,20 @@ dependencies: "@types/unist" "*" -"@types/json-schema@^7.0.8": - version "7.0.9" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" - integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== +"@types/json-schema@*", "@types/json-schema@^7.0.15": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== -"@types/lodash-es@4.17.6": - version "4.17.6" - resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.6.tgz#c2ed4c8320ffa6f11b43eb89e9eaeec65966a0a0" - integrity sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg== +"@types/lodash-es@4.17.12": + version "4.17.12" + resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.12.tgz#65f6d1e5f80539aa7cfbfc962de5def0cf4f341b" + integrity sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ== dependencies: "@types/lodash" "*" @@ -1235,11 +1007,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.7.1.tgz#c6b9198178da504dfca1fd0be9b2e1002f1586f0" integrity sha512-ncRdc45SoYJ2H4eWU9ReDfp3vtFqDYhjOsKlFFUDEn8V1Bgr2RjYal8YT5byfadWIRluhPFU6JiDOl0H6Sl87A== -"@types/trusted-types@*": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.2.tgz#fc25ad9943bcac11cceb8168db4f275e0e72e756" - integrity sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg== - "@types/trusted-types@^2.0.7": version "2.0.7" resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" @@ -1250,7 +1017,7 @@ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== -"@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.12.1": +"@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": version "1.14.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6" integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ== @@ -1316,7 +1083,7 @@ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz#917a20e93f71ad5602966c2d685ae0c6c21f60f1" integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ== -"@webassemblyjs/wasm-edit@^1.12.1": +"@webassemblyjs/wasm-edit@^1.14.1": version "1.14.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597" integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ== @@ -1351,7 +1118,7 @@ "@webassemblyjs/wasm-gen" "1.14.1" "@webassemblyjs/wasm-parser" "1.14.1" -"@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.12.1": +"@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.14.1": version "1.14.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz#b3e13f1893605ca78b52c68e54cf6a865f90b9fb" integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ== @@ -1371,23 +1138,6 @@ "@webassemblyjs/ast" "1.14.1" "@xtuc/long" "4.2.2" -"@webpack-cli/configtest@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.1.1.tgz#9f53b1b7946a6efc2a749095a4f450e2932e8356" - integrity sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg== - -"@webpack-cli/info@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.4.1.tgz#2360ea1710cbbb97ff156a3f0f24556e0fc1ebea" - integrity sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA== - dependencies: - envinfo "^7.7.3" - -"@webpack-cli/serve@^1.6.1": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.6.1.tgz#0de2875ac31b46b6c5bb1ae0a7d7f0ba5678dffe" - integrity sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw== - "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -1398,26 +1148,31 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -acorn-import-attributes@^1.9.5: - version "1.9.5" - resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" - integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== +acorn-import-phases@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz#16eb850ba99a056cb7cbfe872ffb8972e18c8bd7" + integrity sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ== acorn-walk@^8.0.0: version "8.1.1" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.1.1.tgz#3ddab7f84e4a7e2313f6c414c5b7dac85f4e3ebc" integrity sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w== -acorn@^8.0.4, acorn@^8.5.0: +acorn@^8.0.4: version "8.7.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== -acorn@^8.15.0, acorn@^8.7.1: +acorn@^8.15.0: version "8.15.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== +acorn@^8.16.0: + version "8.16.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.16.0.tgz#4ce79c89be40afe7afe8f3adb902a1f1ce9ac08a" + integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== + ajv-formats@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" @@ -1425,29 +1180,14 @@ ajv-formats@^2.1.1: dependencies: ajv "^8.0.0" -ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv-keywords@^5.0.0, ajv-keywords@^5.1.0: +ajv-keywords@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== dependencies: fast-deep-equal "^3.1.3" -ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.0, ajv@^8.8.0: +ajv@^8.0.0: version "8.11.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== @@ -1467,13 +1207,6 @@ ajv@^8.9.0: json-schema-traverse "^1.0.0" require-from-string "^2.0.2" -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" @@ -1486,43 +1219,47 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -babel-loader@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.1.0.tgz#839e9ae88aea930864ef9ec0f356dfca96ecf238" - integrity sha512-Antt61KJPinUMwHwIIz9T5zfMgevnfZkEVWYDWlG888fgdvRRGD0JTuf/fFozQnfT+uq64sk1bmdHDy/mOEWnA== +babel-loader@^10.1.1: + version "10.1.1" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-10.1.1.tgz#ce9748e85b7071eb88006e3cfa9e6cf14eeb97c5" + integrity sha512-JwKSzk2kjIe7mgPK+/lyZ2QAaJcpahNAdM+hgR2HI8D0OJVkdj8Rl6J3kaLYki9pwF7P2iWnD8qVv80Lq1ABtg== dependencies: - find-cache-dir "^3.3.2" - schema-utils "^4.0.0" + find-up "^5.0.0" -babel-plugin-polyfill-corejs2@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" - integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== +babel-plugin-polyfill-corejs2@^0.4.15: + version "0.4.16" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.16.tgz#a1321145f6cde738b0a412616b6bcf77f143ab36" + integrity sha512-xaVwwSfebXf0ooE11BJovZYKhFjIvQo7TsyVpETuIeH2JHv0k/T6Y5j22pPTvqYqmpkxdlPAJlyJ0tfOJAoMxw== dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-define-polyfill-provider" "^0.3.3" - semver "^6.1.1" + "@babel/compat-data" "^7.28.6" + "@babel/helper-define-polyfill-provider" "^0.6.7" + semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" - integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== +babel-plugin-polyfill-corejs3@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.1.tgz#75fb533a1c23c0a976f189cba1d035199705b8ad" + integrity sha512-ENp89vM9Pw4kv/koBb5N2f9bDZsR0hpf3BdPMOg/pkS3pwO4dzNnQZVXtBbeyAadgm865DmQG2jMMLqmZXvuCw== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" - core-js-compat "^3.25.1" + "@babel/helper-define-polyfill-provider" "^0.6.7" + core-js-compat "^3.48.0" -babel-plugin-polyfill-regenerator@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" - integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== +babel-plugin-polyfill-regenerator@^0.6.6: + version "0.6.7" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.7.tgz#eca723d67ef87b798881ad00546db1b6dd72e1ef" + integrity sha512-OTYbUlSwXhNgr4g6efMZgsO8//jA61P7ZbRX3iTT53VON8l+WQS8IAUEVo4a4cWknrg2W8Cj4gQhRYNCJ8GkAA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" + "@babel/helper-define-polyfill-provider" "^0.6.7" balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +balanced-match@^4.0.2: + version "4.0.4" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-4.0.4.tgz#bfb10662feed8196a2c62e7c68e17720c274179a" + integrity sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA== + baseline-browser-mapping@^2.9.0: version "2.9.5" resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.5.tgz#47f9549e0be1a84cd16651ac4c3b7d87a71408e6" @@ -1535,6 +1272,13 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" +brace-expansion@^5.0.2: + version "5.0.4" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.4.tgz#614daaecd0a688f660bbbc909a8748c3d80d4336" + integrity sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg== + dependencies: + balanced-match "^4.0.2" + braces@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -1542,14 +1286,7 @@ braces@^3.0.1: dependencies: fill-range "^7.0.1" -braces@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -browserslist@^4.21.10: +browserslist@^4.24.0, browserslist@^4.28.1: version "4.28.1" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95" integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA== @@ -1560,40 +1297,16 @@ browserslist@^4.21.10: node-releases "^2.0.27" update-browserslist-db "^1.2.0" -browserslist@^4.21.3, browserslist@^4.21.4: - version "4.21.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" - integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== - dependencies: - caniuse-lite "^1.0.30001400" - electron-to-chromium "^1.4.251" - node-releases "^2.0.6" - update-browserslist-db "^1.0.9" - buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -caniuse-lite@^1.0.30001400: - version "1.0.30001431" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz#e7c59bd1bc518fae03a4656be442ce6c4887a795" - integrity sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ== - caniuse-lite@^1.0.30001759: version "1.0.30001760" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz#bdd1960fafedf8d5f04ff16e81460506ff9b798f" integrity sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw== -chalk@^2.0.0, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -1602,6 +1315,11 @@ chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +change-case@^5.4.4: + version "5.4.4" + resolved "https://registry.yarnpkg.com/change-case/-/change-case-5.4.4.tgz#0d52b507d8fb8f204343432381d1a6d7bff97a02" + integrity sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w== + chrome-trace-event@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" @@ -1616,18 +1334,11 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" -code-block-writer@^13.0.1: +code-block-writer@^13.0.3: version "13.0.3" resolved "https://registry.yarnpkg.com/code-block-writer/-/code-block-writer-13.0.3.tgz#90f8a84763a5012da7af61319dd638655ae90b5b" integrity sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg== -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -1635,63 +1346,65 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^2.0.14: - version "2.0.17" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.17.tgz#5dd4c0d15e2984b7433cb4a9f2ead45063b80c47" - integrity sha512-hJo+3Bkn0NCHybn9Tu35fIeoOKGOk5OCC32y4Hz2It+qlCO2Q3DeQ1hRn/tDDMQKRYUEzqsl7jbF6dYKjlE60g== +commander@^14.0.3: + version "14.0.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.3.tgz#425d79b48f9af82fcd9e4fc1ea8af6c5ec07bbc2" + integrity sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw== commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^7.0.0, commander@^7.2.0: +commander@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -convert-source-map@^1.7.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -core-js-compat@^3.25.1: - version "3.26.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.26.0.tgz#94e2cf8ba3e63800c4956ea298a6473bc9d62b44" - integrity sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A== +core-js-compat@^3.48.0: + version "3.48.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.48.0.tgz#7efbe1fc1cbad44008190462217cc5558adaeaa6" + integrity sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q== dependencies: - browserslist "^4.21.4" + browserslist "^4.28.1" -cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== +cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" which "^2.0.1" -csstype@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" - integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== +csstype@3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.2.3.tgz#ec48c0f3e993e50648c86da559e2610995cf989a" + integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ== -debug@4.3.4, debug@^4.1.0, debug@^4.1.1: +debounce@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" + integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== + +debug@4.4.3, debug@^4.3.1, debug@^4.4.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + +debug@^4.1.0: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -1703,31 +1416,13 @@ deepmerge@4.3.1: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -dompurify@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.3.1.tgz#c7e1ddebfe3301eacd6c0c12a4af284936dbbb86" - integrity sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q== +dompurify@3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.3.3.tgz#680cae8af3e61320ddf3666a3bc843f7b291b2b6" + integrity sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA== optionalDependencies: "@types/trusted-types" "^2.0.7" -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -duplexer@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -electron-to-chromium@^1.4.251: - version "1.4.284" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" - integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== - electron-to-chromium@^1.5.263: version "1.5.267" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz#5d84f2df8cdb6bfe7e873706bb21bd4bfb574dc7" @@ -1741,43 +1436,38 @@ enhanced-resolve@^5.0.0: graceful-fs "^4.2.4" tapable "^2.2.0" -enhanced-resolve@^5.17.1: - version "5.18.3" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz#9b5f4c5c076b8787c78fe540392ce76a88855b44" - integrity sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww== +enhanced-resolve@^5.20.0: + version "5.20.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.20.0.tgz#323c2a70d2aa7fb4bdfd6d3c24dfc705c581295d" + integrity sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ== dependencies: graceful-fs "^4.2.4" - tapable "^2.2.0" + tapable "^2.3.0" entities@^4.4.0: version "4.5.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== -envinfo@^7.7.3: - version "7.8.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" - integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== +envinfo@^7.14.0: + version "7.21.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.21.0.tgz#04a251be79f92548541f37d13c8b6f22940c3bae" + integrity sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow== -es-module-lexer@^1.2.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" - integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +es-module-lexer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.0.0.tgz#f657cd7a9448dcdda9c070a3cb75e5dc1e85f5b1" + integrity sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw== escalade@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== eslint-scope@5.1.1: version "5.1.1" @@ -1809,52 +1499,21 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -eventemitter3@4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +eventemitter3@5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.4.tgz#a86d66170433712dde814707ac52b5271ceb1feb" + integrity sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw== events@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - fast-deep-equal@3.1.3, fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" - integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.8" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - fast-uri@^3.0.1: version "3.1.0" resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.0.tgz#66eecff6c764c0df9b762e62ca7edcfb53b4edfa" @@ -1865,12 +1524,10 @@ fastest-levenshtein@^1.0.12: resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== -fastq@^1.6.0: - version "1.19.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" - integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== - dependencies: - reusify "^1.0.4" +fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== fill-range@^7.0.1: version "7.0.1" @@ -1879,22 +1536,6 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - -find-cache-dir@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - find-up@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -1903,38 +1544,34 @@ find-up@^4.0.0: locate-path "^5.0.0" path-exists "^4.0.0" -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - graceful-fs@^4.1.2, graceful-fs@^4.2.4: version "4.2.8" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" @@ -1945,34 +1582,22 @@ graceful-fs@^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== -gzip-size@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" - integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== - dependencies: - duplexer "^0.1.2" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: - function-bind "^1.1.1" + function-bind "^1.1.2" -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +html-escaper@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== import-local@^3.0.2: version "3.0.2" @@ -1987,36 +1612,17 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -interpret@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" - integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== +interpret@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" + integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== -is-core-module@^2.2.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.6.0.tgz#d7553b2526fe59b92ba3e40c8df757ec8a709e19" - integrity sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ== +is-core-module@^2.16.1: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== dependencies: - has "^1.0.3" - -is-core-module@^2.9.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== - dependencies: - has "^1.0.3" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-glob@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" + hasown "^2.0.2" is-number@^7.0.0: version "7.0.0" @@ -2030,11 +1636,6 @@ is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -2059,10 +1660,10 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsesc@^3.0.2, jsesc@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== jsesc@~0.5.0: version "0.5.0" @@ -2074,20 +1675,15 @@ json-parse-even-better-errors@^2.3.1: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - json-schema-traverse@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json5@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.2.tgz#64471c5bdcc564c18f7c1d4df2e2297f2457c5ab" - integrity sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ== +json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== kind-of@^6.0.2: version "6.0.3" @@ -2101,10 +1697,10 @@ linkify-it@^5.0.0: dependencies: uc.micro "^2.0.0" -loader-runner@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" - integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== +loader-runner@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.1.tgz#6c76ed29b0ccce9af379208299f07f876de737e3" + integrity sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q== locate-path@^5.0.0: version "5.0.0" @@ -2113,27 +1709,29 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -lodash-es@4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" - integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash-es@4.17.23: + version "4.17.23" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.23.tgz#58c4360fd1b5d33afc6c0bbd3d1149349b1138e0" + integrity sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg== lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== -lodash@^4.17.20: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: - tslib "^2.0.3" + yallist "^3.0.2" lru-cache@^6.0.0: version "6.0.0" @@ -2147,13 +1745,6 @@ lunr@^2.3.9: resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== -make-dir@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - markdown-it@^14.1.0: version "14.1.0" resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-14.1.0.tgz#3c3c5992883c633db4714ccb4d7b5935d98b7d45" @@ -2176,11 +1767,6 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - micromatch@^4.0.0: version "4.0.4" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" @@ -2189,14 +1775,6 @@ micromatch@^4.0.0: braces "^3.0.1" picomatch "^2.2.3" -micromatch@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" - integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== - dependencies: - braces "^3.0.3" - picomatch "^2.3.1" - mime-db@1.49.0: version "1.49.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.49.0.tgz#f3dfde60c99e9cf3bc9701d687778f537001cbed" @@ -2209,70 +1787,45 @@ mime-types@^2.1.27: dependencies: mime-db "1.49.0" -mime@^2.3.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" - integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== +minimatch@^10.0.1: + version "10.2.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.4.tgz#465b3accbd0218b8281f5301e27cedc697f96fde" + integrity sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg== + dependencies: + brace-expansion "^5.0.2" -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -minimatch@^9.0.3, minimatch@^9.0.5: +minimatch@^9.0.5: version "9.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" -mkdirp@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" - integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== +mrmime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.1.tgz#bc3e87f7987853a54c9850eeb1f1078cd44adddc" + integrity sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ== ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - node-releases@^2.0.27: version "2.0.27" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e" integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== -node-releases@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" - integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - opener@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" @@ -2285,6 +1838,13 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -2292,6 +1852,13 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -2307,12 +1874,12 @@ path-exists@^4.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== -path-key@^3.0.0, path-key@^3.1.0: +path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6, path-parse@^1.0.7: +path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== @@ -2325,12 +1892,7 @@ path@0.12.7: process "^0.11.1" util "^0.10.3" -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picocolors@^1.1.1: +picocolors@^1.0.0, picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== @@ -2340,27 +1902,27 @@ picomatch@^2.2.3: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== -picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +picomatch@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" + integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== -pkg-dir@^4.1.0, pkg-dir@^4.2.0: +pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" -prettier-config-standard@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/prettier-config-standard/-/prettier-config-standard-5.0.0.tgz#c99dbef099412eda0876f75fdc1732ffef2ab0e0" - integrity sha512-QK252QwCxlsak8Zx+rPKZU31UdbRcu9iUk9X1ONYtLSO221OgvV9TlKoTf6iPDZtvF3vE2mkgzFIEgSUcGELSQ== +prettier-config-standard@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/prettier-config-standard/-/prettier-config-standard-7.0.0.tgz#23fbc6f7240dd007b49d0d4c084ba58fd2ce57c2" + integrity sha512-NgZy4TYupJR6aMMuV/Aqs0ONnVhlFT8PXVkYRskxREq8EUhJHOddVfBxPV6fWpgcASpJSgvvhVLk0CBO5M3Hvw== -prettier@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032" - integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew== +prettier@^3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.8.1.tgz#edf48977cf991558f4fcbd8a3ba6015ba2a3a173" + integrity sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg== process@^0.11.1: version "0.11.10" @@ -2377,24 +1939,12 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== +rechoir@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" + integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== dependencies: - safe-buffer "^5.1.0" - -rechoir@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" - integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== - dependencies: - resolve "^1.9.0" + resolve "^1.20.0" regenerate-unicode-properties@^10.1.0: version "10.1.0" @@ -2403,23 +1953,18 @@ regenerate-unicode-properties@^10.1.0: dependencies: regenerate "^1.4.2" +regenerate-unicode-properties@^10.2.2: + version "10.2.2" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz#aa113812ba899b630658c7623466be71e1f86f66" + integrity sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g== + dependencies: + regenerate "^1.4.2" + regenerate@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.13.10: - version "0.13.10" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz#ed07b19616bcbec5da6274ebc75ae95634bfc2ee" - integrity sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw== - -regenerator-transform@^0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537" - integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== - dependencies: - "@babel/runtime" "^7.8.4" - regexpu-core@^5.1.0: version "5.2.1" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.2.1.tgz#a69c26f324c1e962e9ffd0b88b055caba8089139" @@ -2432,11 +1977,35 @@ regexpu-core@^5.1.0: unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.0.0" +regexpu-core@^6.3.1: + version "6.4.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.4.0.tgz#3580ce0c4faedef599eccb146612436b62a176e5" + integrity sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.2.2" + regjsgen "^0.8.0" + regjsparser "^0.13.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.2.1" + regjsgen@^0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.7.1.tgz#ee5ef30e18d3f09b7c369b76e7c2373ed25546f6" integrity sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA== +regjsgen@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" + integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== + +regjsparser@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.13.0.tgz#01f8351335cf7898d43686bc74d2dd71c847ecc0" + integrity sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q== + dependencies: + jsesc "~3.1.0" + regjsparser@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" @@ -2461,69 +2030,16 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve@^1.14.2: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== +resolve@^1.20.0, resolve@^1.22.11: + version "1.22.11" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" + integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== dependencies: - is-core-module "^2.9.0" + is-core-module "^2.16.1" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^1.9.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -reusify@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" - integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-buffer@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -schema-utils@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" - integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== - dependencies: - "@types/json-schema" "^7.0.9" - ajv "^8.8.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.0.0" - -schema-utils@^4.3.0: +schema-utils@^4.3.0, schema-utils@^4.3.3: version "4.3.3" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.3.tgz#5b1850912fa31df90716963d45d9121fdfc09f46" integrity sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA== @@ -2533,7 +2049,7 @@ schema-utils@^4.3.0: ajv-formats "^2.1.1" ajv-keywords "^5.1.0" -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: +semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== @@ -2545,20 +2061,6 @@ semver@^7.3.4: dependencies: lru-cache "^6.0.0" -serialize-javascript@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - -serialize-javascript@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" - integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== - dependencies: - randombytes "^2.1.0" - shallow-clone@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" @@ -2578,27 +2080,14 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -signal-exit@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - -sirv@^1.0.7: - version "1.0.14" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.14.tgz#b826343f573e12653c5b3c3080a3a2a6a06595cd" - integrity sha512-czTFDFjK9lXj0u9mJ3OmJoXFztoilYS+NdRPcJoT182w44wSEkHSiO7A2517GLJ8wKM4GjCm2OXE66Dhngbzjg== +sirv@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-3.0.2.tgz#f775fccf10e22a40832684848d636346f41cd970" + integrity sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g== dependencies: - "@polka/url" "^1.0.0-next.17" - mime "^2.3.1" - totalist "^1.0.0" - -snake-case@3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" - integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" + "@polka/url" "^1.0.0-next.24" + mrmime "^2.0.0" + totalist "^3.0.0" source-map-support@~0.5.20: version "0.5.21" @@ -2613,17 +2102,10 @@ source-map@^0.6.0: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" +source-map@^0.7.4: + version "0.7.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.6.tgz#a3658ab87e5b6429c8a1f3ba0083d4c61ca3ef02" + integrity sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ== supports-color@^7.1.0: version "7.2.0" @@ -2644,43 +2126,26 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -tapable@^2.1.1, tapable@^2.2.0: +tapable@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== -terser-webpack-plugin@^5.3.10: - version "5.3.15" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.15.tgz#0a26860b765eaffa8e840170aabc5b3a3f6f6bb9" - integrity sha512-PGkOdpRFK+rb1TzVz+msVhw4YMRT9txLF4kRqvJhGhCM324xuR3REBSHALN+l+sAhKUmz0aotnjp5D+P83mLhQ== +tapable@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.0.tgz#7e3ea6d5ca31ba8e078b560f0d83ce9a14aa8be6" + integrity sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg== + +terser-webpack-plugin@^5.3.17, terser-webpack-plugin@^5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz#95fc4cf4437e587be11ecf37d08636089174d76b" + integrity sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g== dependencies: "@jridgewell/trace-mapping" "^0.3.25" jest-worker "^27.4.5" schema-utils "^4.3.0" - serialize-javascript "^6.0.2" terser "^5.31.1" -terser-webpack-plugin@^5.3.6: - version "5.3.6" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c" - integrity sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ== - dependencies: - "@jridgewell/trace-mapping" "^0.3.14" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.0" - terser "^5.14.1" - -terser@^5.14.1: - version "5.15.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.15.1.tgz#8561af6e0fd6d839669c73b92bdd5777d870ed6c" - integrity sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw== - dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" - commander "^2.20.0" - source-map-support "~0.5.20" - terser@^5.31.1: version "5.44.1" resolved "https://registry.yarnpkg.com/terser/-/terser-5.44.1.tgz#e391e92175c299b8c284ad6ded609e37303b0a9c" @@ -2691,6 +2156,14 @@ terser@^5.31.1: commander "^2.20.0" source-map-support "~0.5.20" +tinyglobby@^0.2.14: + version "0.2.15" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" + integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== + dependencies: + fdir "^6.5.0" + picomatch "^4.0.3" + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -2703,38 +2176,34 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -totalist@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" - integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== +totalist@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" + integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== -ts-loader@9.3.0: - version "9.3.0" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.3.0.tgz#980f4dbfb60e517179e15e10ed98e454b132159f" - integrity sha512-2kLLAdAD+FCKijvGKi9sS0OzoqxLCF3CxHpok7rVgCZ5UldRzH0TkbwG9XECKjBzHsAewntC5oDaI/FwKzEUog== +ts-loader@9.5.4: + version "9.5.4" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.5.4.tgz#44b571165c10fb5a90744aa5b7e119233c4f4585" + integrity sha512-nCz0rEwunlTZiy6rXFByQU1kVVpCIgUpc/psFiKVrUwrizdnIbRFu8w7bxhUF0X613DYwT4XzrZHpVyMe758hQ== dependencies: chalk "^4.1.0" enhanced-resolve "^5.0.0" micromatch "^4.0.0" semver "^7.3.4" + source-map "^0.7.4" -ts-morph@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-22.0.0.tgz#5532c592fb6dddae08846f12c9ab0fc590b1d42e" - integrity sha512-M9MqFGZREyeb5fTl6gNHKZLqBQA0TjA1lea+CR48R8EBTDuWrNqW6ccC5QvjNR4s6wDumD3LTCjOFSp9iwlzaw== +ts-morph@^27.0.2: + version "27.0.2" + resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-27.0.2.tgz#7b2fcce6822eeca3942fa6c601f159d5920b1422" + integrity sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w== dependencies: - "@ts-morph/common" "~0.23.0" - code-block-writer "^13.0.1" + "@ts-morph/common" "~0.28.1" + code-block-writer "^13.0.3" -tslib@^2.0.3: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - -typedoc@0.28.15: - version "0.28.15" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.28.15.tgz#667faf77eb934deb935fbfd5108a6de5f953948f" - integrity sha512-mw2/2vTL7MlT+BVo43lOsufkkd2CJO4zeOSuWQQsiXoV2VuEn7f6IZp2jsUDPmBMABpgR0R5jlcJ2OGEFYmkyg== +typedoc@0.28.17: + version "0.28.17" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.28.17.tgz#eab7c6649494d0a796e0b2fd2c9a5aea41b0a781" + integrity sha512-ZkJ2G7mZrbxrKxinTQMjFqsCoYY6a5Luwv2GKbTnBCEgV2ihYm5CflA9JnJAwH0pZWavqfYxmDkFHPt4yx2oDQ== dependencies: "@gerrit0/mini-shiki" "^3.17.0" lunr "^2.3.9" @@ -2770,19 +2239,16 @@ unicode-match-property-value-ecmascript@^2.0.0: resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== +unicode-match-property-value-ecmascript@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz#65a7adfad8574c219890e219285ce4c64ed67eaa" + integrity sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg== + unicode-property-aliases-ecmascript@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== -update-browserslist-db@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - update-browserslist-db@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz#cfb4358afa08b3d5731a2ecd95eebf4ddef8033e" @@ -2805,88 +2271,90 @@ util@^0.10.3: dependencies: inherits "2.0.3" -watchpack@^2.4.1: - version "2.4.4" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.4.tgz#473bda72f0850453da6425081ea46fc0d7602947" - integrity sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA== +watchpack@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.5.1.tgz#dd38b601f669e0cbf567cb802e75cead82cde102" + integrity sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" -webpack-bundle-analyzer@4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz#1b0eea2947e73528754a6f9af3e91b2b6e0f79d5" - integrity sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ== +webpack-bundle-analyzer@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-5.2.0.tgz#9bcf0e7cc8c86632a96bf7092300287dc284c3d7" + integrity sha512-Etrauj1wYO/xjiz/Vfd6bW1lG9fEhrJpNmu10tv0X9kv+gyY3qiE09uYepqg1Xd0PxOvllRXwWYWjtQYoO/glQ== dependencies: + "@discoveryjs/json-ext" "0.5.7" acorn "^8.0.4" acorn-walk "^8.0.0" - chalk "^4.1.0" commander "^7.2.0" - gzip-size "^6.0.0" - lodash "^4.17.20" + debounce "^1.2.1" + escape-string-regexp "^4.0.0" + html-escaper "^2.0.2" opener "^1.5.2" - sirv "^1.0.7" - ws "^7.3.1" + picocolors "^1.0.0" + sirv "^3.0.2" + ws "^8.19.0" -webpack-cli@4.9.2: - version "4.9.2" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.9.2.tgz#77c1adaea020c3f9e2db8aad8ea78d235c83659d" - integrity sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ== +webpack-cli@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-7.0.2.tgz#c916e324acc7c14f895226ed351020924900db12" + integrity sha512-dB0R4T+C/8YuvM+fabdvil6QE44/ChDXikV5lOOkrUeCkW5hTJv2pGLE3keh+D5hjYw8icBaJkZzpFoaHV4T+g== dependencies: - "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^1.1.1" - "@webpack-cli/info" "^1.4.1" - "@webpack-cli/serve" "^1.6.1" - colorette "^2.0.14" - commander "^7.0.0" - execa "^5.0.0" + "@discoveryjs/json-ext" "^1.0.0" + commander "^14.0.3" + cross-spawn "^7.0.6" + envinfo "^7.14.0" fastest-levenshtein "^1.0.12" import-local "^3.0.2" - interpret "^2.2.0" - rechoir "^0.7.0" - webpack-merge "^5.7.3" + interpret "^3.1.1" + rechoir "^0.8.0" + webpack-merge "^6.0.1" -webpack-merge@^5.7.3: - version "5.8.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" - integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== +webpack-merge@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-6.0.1.tgz#50c776868e080574725abc5869bd6e4ef0a16c6a" + integrity sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg== dependencies: clone-deep "^4.0.1" - wildcard "^2.0.0" + flat "^5.0.2" + wildcard "^2.0.1" -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== +webpack-sources@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.4.tgz#a338b95eb484ecc75fbb196cbe8a2890618b4891" + integrity sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q== -webpack@5.94.0: - version "5.94.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.94.0.tgz#77a6089c716e7ab90c1c67574a28da518a20970f" - integrity sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg== +webpack@5.105.4: + version "5.105.4" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.105.4.tgz#1b77fcd55a985ac7ca9de80a746caffa38220169" + integrity sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw== dependencies: - "@types/estree" "^1.0.5" - "@webassemblyjs/ast" "^1.12.1" - "@webassemblyjs/wasm-edit" "^1.12.1" - "@webassemblyjs/wasm-parser" "^1.12.1" - acorn "^8.7.1" - acorn-import-attributes "^1.9.5" - browserslist "^4.21.10" + "@types/eslint-scope" "^3.7.7" + "@types/estree" "^1.0.8" + "@types/json-schema" "^7.0.15" + "@webassemblyjs/ast" "^1.14.1" + "@webassemblyjs/wasm-edit" "^1.14.1" + "@webassemblyjs/wasm-parser" "^1.14.1" + acorn "^8.16.0" + acorn-import-phases "^1.0.3" + browserslist "^4.28.1" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.17.1" - es-module-lexer "^1.2.1" + enhanced-resolve "^5.20.0" + es-module-lexer "^2.0.0" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" graceful-fs "^4.2.11" json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" + loader-runner "^4.3.1" mime-types "^2.1.27" neo-async "^2.6.2" - schema-utils "^3.2.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.10" - watchpack "^2.4.1" - webpack-sources "^3.2.3" + schema-utils "^4.3.3" + tapable "^2.3.0" + terser-webpack-plugin "^5.3.17" + watchpack "^2.5.1" + webpack-sources "^3.3.4" which@^2.0.1: version "2.0.2" @@ -2895,15 +2363,20 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -wildcard@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" - integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== +wildcard@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== -ws@^7.3.1: - version "7.5.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" - integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== +ws@^8.19.0: + version "8.19.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.19.0.tgz#ddc2bdfa5b9ad860204f5a72a4863a8895fd8c8b" + integrity sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" @@ -2914,3 +2387,8 @@ yaml@^2.8.1: version "2.8.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.2.tgz#5694f25eca0ce9c3e7a9d9e00ce0ddabbd9e35c5" integrity sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/package.json b/package.json index 499f7f70e6..ad525eaee9 100644 --- a/package.json +++ b/package.json @@ -14,49 +14,38 @@ "node": ">=22.20.0" }, "devDependencies": { - "@axe-core/playwright": "=4.4.4", "@capacitor/assets": "^3.0.5", - "@capacitor/cli": "7.2.0", - "@jcesarmobile/ssl-skip": "^0.4.0", - "@playwright/test": "=1.51.0", - "@vercel/ncc": "0.38.3", + "@capacitor/cli": "8.2.0", + "@jcesarmobile/ssl-skip": "^0.9.0", + "@playwright/test": "=1.58.2", "@tailwindcss/aspect-ratio": "0.4.2", - "@tailwindcss/forms": "0.5.3", - "@tailwindcss/typography": "0.5.7", - "@types/gulp": "^4.0.7", - "autoprefixer": "^10.4.13", - "better-sqlite3": "^12.6.2", - "cross-env": "^7.0.3", - "cssnano": "^5.1.13", - "del": "^6.0.0", - "glob": "9.0.0", - "gulp": "^4.0.2", + "@tailwindcss/forms": "0.5.11", + "@tailwindcss/typography": "0.5.19", + "autoprefixer": "^10.4.27", + "better-sqlite3": "^12.8.0", + "cross-env": "^10.1.0", + "cssnano": "^7.1.3", + "gulp": "^5.0.1", "gulp-postcss": "^10.0.0", "gulp-replace": "^1.1.4", - "ip": "1.1.9", - "karma": "^6.4.4", - "karma-chrome-launcher": "^3.2.0", - "karma-cljs-test": "^0.1.0", - "npm-run-all": "^4.1.5", - "playwright": "=1.51.0", - "postcss": "^8.4.47", - "postcss-cli": "10.0.0", - "postcss-functions": "^4.0.2", - "postcss-import": "15.0.0", - "postcss-import-ext-glob": "2.0.1", - "postcss-nested": "6.0.0", + "npm-run-all2": "^8.0.4", + "playwright": "=1.58.2", + "postcss": "^8.5.8", + "postcss-cli": "11.0.1", + "postcss-import": "16.1.1", + "postcss-import-ext-glob": "2.1.1", + "postcss-nested": "7.0.2", "process": "^0.11.10", - "purgecss": "4.0.2", - "semver": "7.5.2", + "semver": "7.7.4", "shadow-cljs": "2.28.23", "source-map-loader": "^5.0.0", "stylelint": "^13.8.0", "stylelint-config-standard": "^20.0.0", "tailwindcss": "3.3.5", "tailwindcss-animate": "^1.0.7", - "typescript": "^4.4.3", - "webpack": "^5.98.0", - "webpack-cli": "^6.0.1", + "typescript": "^5.9.3", + "webpack": "^5.105.4", + "webpack-cli": "^7.0.2", "ws": "^8.19.0" }, "scripts": { @@ -89,7 +78,6 @@ "css:build": "postcss tailwind.all.css -o static/css/style.css --verbose --env production", "css:watch": "cross-env TAILWIND_MODE=watch postcss tailwind.all.css -o static/css/style.css --verbose --watch", "cljs:watch": "clojure -M:cljs watch app db-worker db-worker-node inference-worker electron", - "cljs:storybook-watch": "clojure -M:cljs watch stories-dev", "gulp:mobile-watch": "gulp watchMobile", "css:mobile-build": "postcss tailwind.mobile.css -o static/mobile/css/style.css --verbose --env production", "css:mobile-watch": "cross-env TAILWIND_MODE=watch postcss tailwind.mobile.css -o static/mobile/css/style.css --verbose --watch", @@ -105,8 +93,8 @@ "cljs:test": "clojure -M:test compile test", "cljs:run-test": "LOGSEQ_STABLE_IDENTS=1 node static/tests.js -r '^(?!(?:logseq.db-sync.|logseq.cli.integration-test)).*' -e fix-me", "cljs:run-integration-test": "node static/tests.js -r '^(logseq.cli.integration-test).*'", - "cljs:test-no-worker": "clojure -M:test compile test-no-worker", - "cljs:run-test-no-worker": "node static/tests-no-worker.js", + "cljs:test-no-worker": "clojure -M:test compile test-no-worker", + "cljs:run-test-no-worker": "node static/tests-no-worker.js", "db-worker-node:compile": "clojure -M:cljs compile db-worker-node", "db-worker-node:release": "clojure -M:cljs release db-worker-node", "db-worker-node:ncc": "ncc build static/db-worker-node.js --out dist/.db-worker-node-ncc --asset-builds", @@ -123,98 +111,84 @@ "cljs:lint": "clojure -M:clj-kondo --parallel --lint src --cache false", "ios:dev": "cross-env PLATFORM=ios gulp cap", "android:dev": "cross-env PLATFORM=android gulp cap", - "amplify:build": "yarn --cwd packages/amplify install", "ui:build": "yarn --cwd packages/ui install", "postinstall": "yarn ui:build" }, "dependencies": { - "@aparajita/capacitor-secure-storage": "^7.1.6", - "@capacitor-community/safe-area": "7.0.0-alpha.1", - "@capacitor/action-sheet": "7.0.1", - "@capacitor/android": "7.2.0", - "@capacitor/app": "7.0.1", - "@capacitor/camera": "7.0.1", - "@capacitor/clipboard": "^7.0.2", - "@capacitor/core": "7.2.0", - "@capacitor/device": "^7.0.2", - "@capacitor/dialog": "^7.0.2", - "@capacitor/filesystem": "7.0.1", - "@capacitor/haptics": "7.0.1", - "@capacitor/ios": "7.2.0", - "@capacitor/keyboard": "7.0.1", - "@capacitor/network": "^7.0.1", - "@capacitor/share": "7.0.1", - "@capacitor/splash-screen": "7.0.1", - "@capacitor/status-bar": "7.0.1", - "@capgo/capacitor-navigation-bar": "^7.1.32", - "@dnd-kit/core": "^6.0.8", - "@dnd-kit/sortable": "^7.0.2", - "@emoji-mart/data": "^1.1.2", + "@aparajita/capacitor-secure-storage": "^8.0.0", + "@capacitor-community/safe-area": "8.0.1", + "@capacitor/action-sheet": "8.1.0", + "@capacitor/android": "8.2.0", + "@capacitor/app": "8.0.1", + "@capacitor/camera": "8.0.2", + "@capacitor/clipboard": "^8.0.1", + "@capacitor/core": "8.2.0", + "@capacitor/device": "^8.0.1", + "@capacitor/dialog": "^8.0.1", + "@capacitor/filesystem": "8.1.2", + "@capacitor/haptics": "8.0.1", + "@capacitor/ios": "8.2.0", + "@capacitor/keyboard": "8.0.1", + "@capacitor/network": "^8.0.1", + "@capacitor/share": "8.0.1", + "@capacitor/splash-screen": "8.0.1", + "@capacitor/status-bar": "8.0.1", + "@capgo/capacitor-navigation-bar": "^8.0.25", + "@dnd-kit/core": "^6.3.1", + "@dnd-kit/sortable": "^10.0.0", + "@emoji-mart/data": "^1.2.1", "@emoji-mart/react": "^1.1.1", - "@glidejs/glide": "^3.6.0", - "@highlightjs/cdn-assets": "10.4.1", - "@huggingface/transformers": "^3.6.3", - "@isomorphic-git/lightning-fs": "^4.6.0", + "@glidejs/glide": "^3.7.1", + "@highlightjs/cdn-assets": "11.11.1", + "@huggingface/transformers": "^3.8.1", + "@isomorphic-git/lightning-fs": "^4.6.2", "@js-joda/core": "3.2.0", "@js-joda/locale_en-us": "3.1.1", "@js-joda/timezone": "2.5.0", "@logseq/react-tweet-embed": "1.3.1-1", "@logseq/simple-wave-record": "^0.0.3", - "@radix-ui/colors": "^0.1.8", - "@sentry/react": "^6.18.2", - "@sentry/tracing": "^6.18.2", - "@sqlite.org/sqlite-wasm": "^3.50.3-build1", - "@tabler/icons-react": "^2.47.0", - "@tabler/icons-webfont": "^2.47.0", - "@tippyjs/react": "4.2.5", - "bignumber.js": "^9.0.2", - "chokidar": "3.5.1", - "chrono-node": "2.2.4", + "@radix-ui/colors": "^3.0.0", + "@sentry/react": "^10.45.0", + "@sqlite.org/sqlite-wasm": "^3.51.2-build8", + "@tabler/icons-react": "2.47.0", + "bignumber.js": "^9.3.1", + "chrono-node": "2.9.0", "codemirror": "5.65.18", - "comlink": "^4.4.1", + "comlink": "^4.4.2", "d3-force": "3.0.0", - "dompurify": "2.4.0", - "emoji-mart": "^5.5.2", + "dompurify": "^3.3.3", + "emoji-mart": "^5.6.0", "fs": "0.0.1-security", - "fs-extra": "9.1.0", - "fuse.js": "6.4.6", - "grapheme-splitter": "1.0.4", + "fs-extra": "^11.3.4", + "fuse.js": "7.1.0", "graphology": "0.20.0", "hnswlib-wasm": "^0.8.2", "html2canvas": "^1.4.1", - "ignore": "5.1.8", - "inter-ui": "^3.19.3", - "interactjs": "^1.10.17", - "jszip": "3.8.0", - "katex": "^0.16.10", - "marked": "^5.1.2", + "inter-ui": "^4.1.1", + "interactjs": "^1.10.27", + "jszip": "3.10.1", + "katex": "^0.16.40", + "marked": "^17.0.5", "mldoc": "^1.5.9", "path": "0.12.7", "path-complete-extname": "1.0.0", "pdfjs-dist": "4.2.67", - "photoswipe": "^5.3.7", - "picocolors": "^1.1.1", + "photoswipe": "^5.4.4", "pixi-graph-fork": "0.2.0", "pixi.js": "6.2.0", - "posthog-js": "1.10.2", - "prop-types": "^15.7.2", + "posthog-js": "1.10.0", + "prop-types": "^15.8.1", "react": "18.3.1", "react-dom": "18.3.1", - "react-grid-layout": "0.16.6", - "react-intersection-observer": "^9.3.5", - "react-textarea-autosize": "8.3.3", - "react-transition-group": "4.3.0", - "react-virtuoso": "4.12.5", - "remove-accents": "0.4.2", - "sanitize-filename": "1.6.3", + "react-intersection-observer": "^10.0.3", + "react-textarea-autosize": "8.5.9", + "react-transition-group": "4.4.5", + "react-virtuoso": "4.18.3", + "remove-accents": "0.5.0", + "sanitize-filename": "1.6.4", "send-intent": "^7.0.0", - "shepherd.js": "^9.1.0", - "tailwind-capitalize-first-letter": "^1.0.4", - "threads": "1.6.5", - "url": "^0.11.0", - "util": "^0.12.5", - "ws": "^8.19.0", - "yargs-parser": "20.2.4" + "url": "^0.11.4", + "util": "^0.12.5" }, "resolutions": { "pixi-graph-fork/@pixi/app": "6.2.0", diff --git a/packages/amplify/.gitignore b/packages/amplify/.gitignore deleted file mode 100644 index 4ddbee5628..0000000000 --- a/packages/amplify/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.parcel-cache -dist \ No newline at end of file diff --git a/packages/amplify/examples/index.html b/packages/amplify/examples/index.html deleted file mode 100644 index 760c3c79f3..0000000000 --- a/packages/amplify/examples/index.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - Document - - - - -
- - - \ No newline at end of file diff --git a/packages/amplify/examples/index.tsx b/packages/amplify/examples/index.tsx deleted file mode 100644 index f3512e5348..0000000000 --- a/packages/amplify/examples/index.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import * as React from 'react' -import * as ReactDOM from 'react-dom' -import { Amplify } from 'aws-amplify' -import { Authenticator } from '@aws-amplify/ui-react' -import '@aws-amplify/ui-react/styles.css' - -function setupConfigure () { - Amplify.configure({ - Auth: { - // REQUIRED only for Federated Authentication - Amazon Cognito Identity Pool ID - // identityPoolId: 'XX-XXXX-X:XXXXXXXX-XXXX-1234-abcd-1234567890ab', - - // REQUIRED - Amazon Cognito Region - region: 'us-east-1', - - // OPTIONAL - Amazon Cognito Federated Identity Pool Region - // Required only if it's different from Amazon Cognito Region - // identityPoolRegion: 'XX-XXXX-X', - - // OPTIONAL - Amazon Cognito User Pool ID - userPoolId: 'us-east-1_ldvDmC9Fe', - - // OPTIONAL - Amazon Cognito Web Client ID (26-char alphanumeric string) - userPoolWebClientId: '41m82unjghlea984vjpk887qcr', - - // OPTIONAL - Enforce user authentication prior to accessing AWS resources or not - // mandatorySignIn: false, - - // OPTIONAL - This is used when autoSignIn is enabled for Auth.signUp - // 'code' is used for Auth.confirmSignUp, 'link' is used for email link verification - // signUpVerificationMethod: 'code', // 'code' | 'link' - - // OPTIONAL - Configuration for cookie storage - // Note: if the secure flag is set to true, then the cookie transmission requires a secure protocol - cookieStorage: { - domain: 'localhost', - path: '/', - expires: 365, - sameSite: 'strict', - secure: true, - }, - - // OPTIONAL - customized storage object - // storage: MyStorage, - - // OPTIONAL - Manually set the authentication flow type. Default is 'USER_SRP_AUTH' - authenticationFlowType: 'USER_SRP_AUTH', - - // - // // OPTIONAL - Manually set key value pairs that can be passed to Cognito Lambda Triggers - // clientMetadata: {myCustomKey: 'myCustomValue'}, - // - // // OPTIONAL - Hosted UI configuration - // oauth: { - // domain: 'your_cognito_domain', - // scope: ['phone', 'email', 'profile', 'openid', 'aws.cognito.signin.user.admin'], - // redirectSignIn: 'http://localhost:3000/', - // redirectSignOut: 'http://localhost:3000/', - // responseType: 'code' // or 'token', note that REFRESH token will only be generated when the responseType is code - } - }) -} - -export default function App () { - return ( -
- - {({ signOut, user }) => ( -
-

Hello {user.username}

- -
- )} -
-
) -} - -function main () { - setupConfigure() - - // mount - ReactDOM.render(, document.getElementById('app')) -} - -// bootstrap -main() \ No newline at end of file diff --git a/packages/amplify/package.json b/packages/amplify/package.json deleted file mode 100644 index 421ba23d0f..0000000000 --- a/packages/amplify/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "logseq-amplify", - "version": "0.0.1", - "description": "Amplify components for Logseq", - "license": "MIT", - "scripts": { - "dev:amplify": "parcel watch ./src/amplify.ts --dist-dir ../src/main/frontend/ --no-hmr --no-source-maps", - "dev:examples": "parcel serve ./examples/index.html", - "build:amplify": "parcel build ./src/amplify.ts --no-source-maps", - "postinstall": "yarn build:amplify" - }, - "devDependencies": { - "buffer": "^5.5.0", - "parcel": "^2.8.3", - "punycode": "^1.4.1" - }, - "dependencies": { - "@aws-amplify/ui-react": "^4.3.8", - "aws-amplify": "^5.0.15", - "aws-amplify-react": "^5.1.43", - "react": "^17", - "react-dom": "^17" - }, - "alias": { - "react": { - "global": "React" - }, - "react-dom": { - "global": "ReactDOM" - }, - "react/jsx-dev-runtime": "./node_modules/react/jsx-dev-runtime.js", - "react/jsx-runtime": "./node_modules/react/jsx-runtime.js" - }, - "targets": { - "default": { - "outputFormat": "global", - "includeNodeModules": { - "react": false, - "react-dom": false - } - } - } -} diff --git a/packages/amplify/src/LSAuthenticator.tsx b/packages/amplify/src/LSAuthenticator.tsx deleted file mode 100644 index 3a7a80c86a..0000000000 --- a/packages/amplify/src/LSAuthenticator.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import { Authenticator, CheckboxField, useAuthenticator, AccountSettings } from '@aws-amplify/ui-react' - -export function LSAuthenticator({ termsLink, children }: any) { - return (
- - {/* Re-use default `Authenticator.SignUp.FormFields` */} - - - {/* Append & require Terms & Conditions field to sign up */} - I agree with the Terms & Conditions)} - /> - - ) - }, - }, - }} - services={{ - async validateCustomSignUp(formData) { - if (!formData.acknowledgement) { - return { - acknowledgement: '', - } - } - } - }} - > - {children} - -
) -} - -export function LSAuthenticatorChangePassword( - {onSuccess, onError} -) { - return ( - - ) -} \ No newline at end of file diff --git a/packages/amplify/src/amplify.ts b/packages/amplify/src/amplify.ts deleted file mode 100644 index 8390791c25..0000000000 --- a/packages/amplify/src/amplify.ts +++ /dev/null @@ -1,103 +0,0 @@ -import './styles.css' -import { Amplify, Auth, Hub, I18n } from 'aws-amplify' -import { LSAuthenticator, LSAuthenticatorChangePassword } from './LSAuthenticator' -import { dict } from 'aws-amplify-react/lib-esm/AmplifyI18n' - -// fix i18n -dict.zh['Reset Password'] = '重置密码' -dict.zh['Enter your email'] = '请输入邮箱' -dict.zh['Enter your password'] = '请输入密码' -dict.zh['Enter your Username'] = '请输入用户名' -dict.zh['Confirm Password'] = '确认密码' -dict.zh['Please confirm your Password'] = '请确认密码' -dict.zh['Incorrect username or password.'] = '用户名或者密码不正确。如果您的邮箱未验证,请尝试使用用户名(非邮箱)登录,以保证再次邮箱验证流程。' -dict.zh['User already exists'] = '用户名已经存在' -dict.zh['Username or Email'] = '用户名或邮箱' -dict.zh['Enter your Username or Email'] = '请输入用户名或邮箱' - -// @ts-ignore attach defaults -dict.en = { - 'Incorrect username or password.': 'Incorrect username or password! ' + - 'For unconfirmed users, please input your username instead of Email to receive the code.', - 'User already exists': 'Username already exists' -} - -const fixesMapping = { - 'Sign Up': ['Sign up', 'Create Account'], - 'Sign In': ['Sign in'], - 'Sign Out': 'Sign out', - 'Send Code': 'Send code', - 'Forgot Password': ['Forgot your password?'], - 'Enter your email': ['Enter your Email'], - 'Enter your password': ['Enter your Password'], - 'Enter your username': ['Enter your Username or Email'] -} - -Object.keys(dict).forEach((k) => { - const target = dict[k] - Object.entries(fixesMapping).forEach(([k1, v1]) => { - if (target?.hasOwnProperty(k1)) { - const vs = Array.isArray(v1) ? v1 : [v1] - vs.forEach(it => { - target[it] = target[k1] - }) - } - }) -}) - -I18n.putVocabularies(dict) - -function setupAuthConfigure(config) { - - const { - region, - userPoolId, - userPoolWebClientId, - identityPoolId, - oauthDomain, - oauthProviders - } = config - - Amplify.configure({ - 'aws_project_region': region, - 'aws_cognito_identity_pool_id': identityPoolId, - 'aws_cognito_region': region, - 'aws_user_pools_id': userPoolId, - 'aws_user_pools_web_client_id': userPoolWebClientId, - 'authenticationFlowType': 'USER_SRP_AUTH', - 'oauth': { - 'domain': oauthDomain, - 'scope': [ - 'phone', - 'email', - 'openid', - 'profile', - 'aws.cognito.signin.user.admin' - ], - 'redirectSignIn': 'https://logseq.com/public/auth_callback.html', - 'redirectSignOut': 'https://logseq.com/public/auth_callback.html', - 'responseType': 'code' - }, - 'federationTarget': 'COGNITO_USER_POOLS', - 'aws_cognito_social_providers': oauthProviders || [ - 'GOOGLE' - ], - 'aws_cognito_signup_attributes': [ - 'EMAIL' - ], - 'aws_cognito_password_protection_settings': { - 'passwordPolicyMinLength': 8, - 'passwordPolicyCharacters': [] - }, - 'aws_cognito_verification_mechanisms': [ - 'EMAIL' - ] - }) -} - -//@ts-ignore -window.LSAmplify = { - setupAuthConfigure, - LSAuthenticator, LSAuthenticatorChangePassword, - Auth, Amplify, Hub, I18n -} diff --git a/packages/amplify/src/styles.css b/packages/amplify/src/styles.css deleted file mode 100644 index a416154077..0000000000 --- a/packages/amplify/src/styles.css +++ /dev/null @@ -1,4801 +0,0 @@ -/* - * Amplify UI Basic Theme - */ -:root, [data-amplify-theme] { - --amplify-components-alert-align-items: center; - --amplify-components-alert-justify-content: space-between; - --amplify-components-alert-color: var(--amplify-colors-font-primary); - --amplify-components-alert-background-color: var(--amplify-colors-background-tertiary); - --amplify-components-alert-padding-block: var(--amplify-space-small); - --amplify-components-alert-padding-inline: var(--amplify-space-medium); - --amplify-components-alert-icon-size: var(--amplify-font-sizes-xl); - --amplify-components-alert-heading-font-size: var(--amplify-font-sizes-medium); - --amplify-components-alert-heading-font-weight: var(--amplify-font-weights-bold); - --amplify-components-alert-info-color: var(--amplify-colors-font-info); - --amplify-components-alert-info-background-color: var(--amplify-colors-background-info); - --amplify-components-alert-error-color: var(--amplify-colors-font-error); - --amplify-components-alert-error-background-color: var(--amplify-colors-background-error); - --amplify-components-alert-warning-color: var(--amplify-colors-font-warning); - --amplify-components-alert-warning-background-color: var(--amplify-colors-background-warning); - --amplify-components-alert-success-color: var(--amplify-colors-font-success); - --amplify-components-alert-success-background-color: var(--amplify-colors-background-success); - --amplify-components-authenticator-max-width: 60rem; - --amplify-components-authenticator-modal-width: var(--amplify-space-relative-full); - --amplify-components-authenticator-modal-height: var(--amplify-space-relative-full); - --amplify-components-authenticator-modal-background-color: var(--amplify-colors-overlay-50); - --amplify-components-authenticator-modal-top: var(--amplify-space-zero); - --amplify-components-authenticator-modal-left: var(--amplify-space-zero); - --amplify-components-authenticator-container-width-max: 30rem; - --amplify-components-authenticator-router-border-width: var(--amplify-border-widths-small); - --amplify-components-authenticator-router-border-style: solid; - --amplify-components-authenticator-router-border-color: var(--amplify-colors-border-primary); - --amplify-components-authenticator-router-background-color: var(--amplify-colors-background-primary); - --amplify-components-authenticator-router-box-shadow: var(--amplify-shadows-medium); - --amplify-components-authenticator-footer-padding-bottom: var(--amplify-space-medium); - --amplify-components-authenticator-form-padding: var(--amplify-space-xl); - --amplify-components-authenticator-state-inactive-background-color: var(--amplify-colors-background-secondary); - --amplify-components-authenticator-or-container-color: var(--amplify-colors-neutral-80); - --amplify-components-authenticator-or-container-or-line-background-color: var(--amplify-colors-background-primary); - --amplify-components-autocomplete-menu-width: 100%; - --amplify-components-autocomplete-menu-margin-block-start: var(--amplify-space-xxxs); - --amplify-components-autocomplete-menu-background-color: var(--amplify-colors-background-primary); - --amplify-components-autocomplete-menu-border-color: var(--amplify-colors-border-primary); - --amplify-components-autocomplete-menu-border-width: var(--amplify-border-widths-small); - --amplify-components-autocomplete-menu-border-style: solid; - --amplify-components-autocomplete-menu-border-radius: var(--amplify-radii-small); - --amplify-components-autocomplete-menu-options-display: flex; - --amplify-components-autocomplete-menu-options-flex-direction: column; - --amplify-components-autocomplete-menu-options-max-height: 300px; - --amplify-components-autocomplete-menu-option-background-color: var(--amplify-colors-background-primary); - --amplify-components-autocomplete-menu-option-color: currentcolor; - --amplify-components-autocomplete-menu-option-cursor: pointer; - --amplify-components-autocomplete-menu-option-transition-duration: var(--amplify-time-short); - --amplify-components-autocomplete-menu-option-transition-property: background-color, color; - --amplify-components-autocomplete-menu-option-transition-timing-function: ease; - --amplify-components-autocomplete-menu-option-active-background-color: var(--amplify-colors-brand-primary-80); - --amplify-components-autocomplete-menu-option-active-color: var(--amplify-colors-white); - --amplify-components-autocomplete-menu-empty-display: flex; - --amplify-components-autocomplete-menu-loading-align-items: center; - --amplify-components-autocomplete-menu-loading-display: flex; - --amplify-components-autocomplete-menu-loading-gap: var(--amplify-space-xxxs); - --amplify-components-autocomplete-menu-space-shared-padding-block: var(--amplify-space-xs); - --amplify-components-autocomplete-menu-space-shared-padding-inline: var(--amplify-space-small); - --amplify-components-badge-color: var(--amplify-colors-font-primary); - --amplify-components-badge-line-height: 1; - --amplify-components-badge-font-weight: var(--amplify-font-weights-semibold); - --amplify-components-badge-font-size: var(--amplify-font-sizes-small); - --amplify-components-badge-text-align: center; - --amplify-components-badge-padding-vertical: var(--amplify-space-xs); - --amplify-components-badge-padding-horizontal: var(--amplify-space-small); - --amplify-components-badge-background-color: var(--amplify-colors-background-tertiary); - --amplify-components-badge-border-radius: var(--amplify-radii-xl); - --amplify-components-badge-info-color: var(--amplify-colors-font-info); - --amplify-components-badge-info-background-color: var(--amplify-colors-background-info); - --amplify-components-badge-warning-color: var(--amplify-colors-font-warning); - --amplify-components-badge-warning-background-color: var(--amplify-colors-background-warning); - --amplify-components-badge-success-color: var(--amplify-colors-font-success); - --amplify-components-badge-success-background-color: var(--amplify-colors-background-success); - --amplify-components-badge-error-color: var(--amplify-colors-font-error); - --amplify-components-badge-error-background-color: var(--amplify-colors-background-error); - --amplify-components-badge-small-font-size: var(--amplify-font-sizes-xs); - --amplify-components-badge-small-padding-vertical: var(--amplify-space-xxs); - --amplify-components-badge-small-padding-horizontal: var(--amplify-space-xs); - --amplify-components-badge-large-font-size: var(--amplify-font-sizes-medium); - --amplify-components-badge-large-padding-vertical: var(--amplify-space-small); - --amplify-components-badge-large-padding-horizontal: var(--amplify-space-medium); - --amplify-components-button-font-weight: var(--amplify-font-weights-bold); - --amplify-components-button-transition-duration: var(--amplify-components-fieldcontrol-transition-duration); - --amplify-components-button-font-size: var(--amplify-components-fieldcontrol-font-size); - --amplify-components-button-line-height: var(--amplify-components-fieldcontrol-line-height); - --amplify-components-button-padding-block-start: var(--amplify-components-fieldcontrol-padding-block-start); - --amplify-components-button-padding-block-end: var(--amplify-components-fieldcontrol-padding-block-end); - --amplify-components-button-padding-inline-start: var(--amplify-components-fieldcontrol-padding-inline-start); - --amplify-components-button-padding-inline-end: var(--amplify-components-fieldcontrol-padding-inline-end); - --amplify-components-button-border-color: var(--amplify-components-fieldcontrol-border-color); - --amplify-components-button-border-width: var(--amplify-components-fieldcontrol-border-width); - --amplify-components-button-border-style: var(--amplify-components-fieldcontrol-border-style); - --amplify-components-button-border-radius: var(--amplify-components-fieldcontrol-border-radius); - --amplify-components-button-color: var(--amplify-colors-font-primary); - --amplify-components-button-hover-color: var(--amplify-colors-font-focus); - --amplify-components-button-hover-background-color: var(--amplify-colors-brand-primary-10); - --amplify-components-button-hover-border-color: var(--amplify-colors-brand-primary-60); - --amplify-components-button-focus-color: var(--amplify-colors-font-focus); - --amplify-components-button-focus-background-color: var(--amplify-colors-brand-primary-10); - --amplify-components-button-focus-border-color: var(--amplify-colors-border-focus); - --amplify-components-button-focus-box-shadow: var(--amplify-components-fieldcontrol-focus-box-shadow); - --amplify-components-button-active-color: var(--amplify-colors-font-active); - --amplify-components-button-active-background-color: var(--amplify-colors-brand-primary-20); - --amplify-components-button-active-border-color: var(--amplify-colors-brand-primary-100); - --amplify-components-button-loading-color: var(--amplify-colors-font-disabled); - --amplify-components-button-loading-background-color: transparent; - --amplify-components-button-loading-border-color: var(--amplify-colors-border-tertiary); - --amplify-components-button-disabled-color: var(--amplify-colors-font-disabled); - --amplify-components-button-disabled-background-color: transparent; - --amplify-components-button-disabled-border-color: var(--amplify-colors-border-tertiary); - --amplify-components-button-primary-border-color: transparent; - --amplify-components-button-primary-border-width: var(--amplify-border-widths-small); - --amplify-components-button-primary-border-style: solid; - --amplify-components-button-primary-background-color: var(--amplify-colors-brand-primary-80); - --amplify-components-button-primary-color: var(--amplify-colors-font-inverse); - --amplify-components-button-primary-disabled-border-color: transparent; - --amplify-components-button-primary-disabled-background-color: var(--amplify-colors-background-disabled); - --amplify-components-button-primary-disabled-color: var(--amplify-colors-font-disabled); - --amplify-components-button-primary-loading-border-color: transparent; - --amplify-components-button-primary-loading-background-color: var(--amplify-colors-background-disabled); - --amplify-components-button-primary-loading-color: var(--amplify-colors-font-disabled); - --amplify-components-button-primary-hover-border-color: transparent; - --amplify-components-button-primary-hover-background-color: var(--amplify-colors-brand-primary-90); - --amplify-components-button-primary-hover-color: var(--amplify-colors-font-inverse); - --amplify-components-button-primary-focus-border-color: transparent; - --amplify-components-button-primary-focus-background-color: var(--amplify-colors-brand-primary-90); - --amplify-components-button-primary-focus-color: var(--amplify-colors-font-inverse); - --amplify-components-button-primary-focus-box-shadow: var(--amplify-components-fieldcontrol-focus-box-shadow); - --amplify-components-button-primary-active-border-color: transparent; - --amplify-components-button-primary-active-background-color: var(--amplify-colors-brand-primary-100); - --amplify-components-button-primary-active-color: var(--amplify-colors-font-inverse); - --amplify-components-button-menu-border-width: var(--amplify-space-zero); - --amplify-components-button-menu-background-color: transparent; - --amplify-components-button-menu-justify-content: start; - --amplify-components-button-menu-hover-color: var(--amplify-colors-font-inverse); - --amplify-components-button-menu-hover-background-color: var(--amplify-colors-brand-primary-80); - --amplify-components-button-menu-focus-color: var(--amplify-colors-font-inverse); - --amplify-components-button-menu-focus-background-color: var(--amplify-colors-brand-primary-80); - --amplify-components-button-menu-active-color: var(--amplify-colors-font-inverse); - --amplify-components-button-menu-active-background-color: var(--amplify-colors-brand-primary-90); - --amplify-components-button-menu-disabled-color: var(--amplify-colors-font-disabled); - --amplify-components-button-link-background-color: transparent; - --amplify-components-button-link-border-color: transparent; - --amplify-components-button-link-border-width: var(--amplify-space-zero); - --amplify-components-button-link-color: var(--amplify-colors-font-interactive); - --amplify-components-button-link-hover-border-color: transparent; - --amplify-components-button-link-hover-background-color: var(--amplify-colors-brand-primary-10); - --amplify-components-button-link-hover-color: var(--amplify-colors-font-hover); - --amplify-components-button-link-focus-border-color: transparent; - --amplify-components-button-link-focus-background-color: var(--amplify-colors-brand-primary-10); - --amplify-components-button-link-focus-color: var(--amplify-colors-font-focus); - --amplify-components-button-link-focus-box-shadow: var(--amplify-components-fieldcontrol-focus-box-shadow); - --amplify-components-button-link-active-border-color: transparent; - --amplify-components-button-link-active-background-color: var(--amplify-colors-brand-primary-20); - --amplify-components-button-link-active-color: var(--amplify-colors-font-active); - --amplify-components-button-link-disabled-border-color: transparent; - --amplify-components-button-link-disabled-background-color: transparent; - --amplify-components-button-link-disabled-color: var(--amplify-colors-font-disabled); - --amplify-components-button-link-loading-border-color: transparent; - --amplify-components-button-link-loading-background-color: transparent; - --amplify-components-button-link-loading-color: var(--amplify-colors-font-disabled); - --amplify-components-button-warning-background-color: transparent; - --amplify-components-button-warning-border-color: var(--amplify-colors-red-60); - --amplify-components-button-warning-border-width: var(--amplify-border-widths-small); - --amplify-components-button-warning-color: var(--amplify-colors-red-60); - --amplify-components-button-warning-hover-border-color: var(--amplify-colors-red-80); - --amplify-components-button-warning-hover-background-color: var(--amplify-colors-red-10); - --amplify-components-button-warning-hover-color: var(--amplify-colors-font-error); - --amplify-components-button-warning-focus-border-color: var(--amplify-colors-red-80); - --amplify-components-button-warning-focus-background-color: var(--amplify-colors-red-10); - --amplify-components-button-warning-focus-color: var(--amplify-colors-red-80); - --amplify-components-button-warning-focus-box-shadow: var(--amplify-components-fieldcontrol-error-focus-box-shadow); - --amplify-components-button-warning-active-border-color: var(--amplify-colors-red-100); - --amplify-components-button-warning-active-background-color: var(--amplify-colors-red-20); - --amplify-components-button-warning-active-color: var(--amplify-colors-red-100); - --amplify-components-button-warning-disabled-border-color: var(--amplify-colors-border-tertiary); - --amplify-components-button-warning-disabled-background-color: transparent; - --amplify-components-button-warning-disabled-color: var(--amplify-colors-font-disabled); - --amplify-components-button-warning-loading-border-color: var(--amplify-colors-border-tertiary); - --amplify-components-button-warning-loading-background-color: transparent; - --amplify-components-button-warning-loading-color: var(--amplify-colors-font-disabled); - --amplify-components-button-destructive-border-color: transparent; - --amplify-components-button-destructive-border-width: var(--amplify-border-widths-small); - --amplify-components-button-destructive-border-style: solid; - --amplify-components-button-destructive-background-color: var(--amplify-colors-red-60); - --amplify-components-button-destructive-color: var(--amplify-colors-font-inverse); - --amplify-components-button-destructive-disabled-border-color: transparent; - --amplify-components-button-destructive-disabled-background-color: var(--amplify-colors-background-disabled); - --amplify-components-button-destructive-disabled-color: var(--amplify-colors-font-disabled); - --amplify-components-button-destructive-loading-border-color: transparent; - --amplify-components-button-destructive-loading-background-color: var(--amplify-colors-background-disabled); - --amplify-components-button-destructive-loading-color: var(--amplify-colors-font-disabled); - --amplify-components-button-destructive-hover-border-color: transparent; - --amplify-components-button-destructive-hover-background-color: var(--amplify-colors-red-80); - --amplify-components-button-destructive-hover-color: var(--amplify-colors-font-inverse); - --amplify-components-button-destructive-focus-border-color: transparent; - --amplify-components-button-destructive-focus-background-color: var(--amplify-colors-red-80); - --amplify-components-button-destructive-focus-color: var(--amplify-colors-font-inverse); - --amplify-components-button-destructive-focus-box-shadow: var(--amplify-components-fieldcontrol-error-focus-box-shadow); - --amplify-components-button-destructive-active-border-color: transparent; - --amplify-components-button-destructive-active-background-color: var(--amplify-colors-red-100); - --amplify-components-button-destructive-active-color: var(--amplify-colors-font-inverse); - --amplify-components-button-small-font-size: var(--amplify-components-fieldcontrol-small-font-size); - --amplify-components-button-small-padding-block-start: var(--amplify-components-fieldcontrol-small-padding-block-start); - --amplify-components-button-small-padding-block-end: var(--amplify-components-fieldcontrol-small-padding-block-end); - --amplify-components-button-small-padding-inline-start: var(--amplify-components-fieldcontrol-small-padding-inline-start); - --amplify-components-button-small-padding-inline-end: var(--amplify-components-fieldcontrol-small-padding-inline-end); - --amplify-components-button-large-font-size: var(--amplify-components-fieldcontrol-large-font-size); - --amplify-components-button-large-padding-block-start: var(--amplify-components-fieldcontrol-large-padding-block-start); - --amplify-components-button-large-padding-block-end: var(--amplify-components-fieldcontrol-large-padding-block-end); - --amplify-components-button-large-padding-inline-start: var(--amplify-components-fieldcontrol-large-padding-inline-start); - --amplify-components-button-large-padding-inline-end: var(--amplify-components-fieldcontrol-large-padding-inline-end); - --amplify-components-button-loader-wrapper-align-items: center; - --amplify-components-button-loader-wrapper-gap: var(--amplify-space-xs); - --amplify-components-card-background-color: var(--amplify-colors-background-primary); - --amplify-components-card-border-radius: var(--amplify-radii-xs); - --amplify-components-card-border-width: 0; - --amplify-components-card-border-style: solid; - --amplify-components-card-border-color: transparent; - --amplify-components-card-box-shadow: none; - --amplify-components-card-padding: var(--amplify-space-medium); - --amplify-components-card-outlined-background-color: var(--amplify-components-card-background-color); - --amplify-components-card-outlined-border-radius: var(--amplify-radii-xs); - --amplify-components-card-outlined-border-width: var(--amplify-border-widths-small); - --amplify-components-card-outlined-border-style: solid; - --amplify-components-card-outlined-border-color: var(--amplify-colors-border-primary); - --amplify-components-card-outlined-box-shadow: var(--amplify-components-card-box-shadow); - --amplify-components-card-elevated-background-color: var(--amplify-components-card-background-color); - --amplify-components-card-elevated-border-radius: var(--amplify-radii-xs); - --amplify-components-card-elevated-border-width: 0; - --amplify-components-card-elevated-border-style: solid; - --amplify-components-card-elevated-border-color: transparent; - --amplify-components-card-elevated-box-shadow: var(--amplify-shadows-medium); - --amplify-components-checkbox-cursor: pointer; - --amplify-components-checkbox-align-items: center; - --amplify-components-checkbox-disabled-cursor: not-allowed; - --amplify-components-checkbox-button-position: relative; - --amplify-components-checkbox-button-align-items: center; - --amplify-components-checkbox-button-justify-content: center; - --amplify-components-checkbox-button-color: var(--amplify-colors-font-inverse); - --amplify-components-checkbox-button-before-width: 100%; - --amplify-components-checkbox-button-before-height: 100%; - --amplify-components-checkbox-button-before-border-width: var(--amplify-border-widths-medium); - --amplify-components-checkbox-button-before-border-radius: 20%; - --amplify-components-checkbox-button-before-border-style: solid; - --amplify-components-checkbox-button-before-border-color: var(--amplify-colors-border-primary); - --amplify-components-checkbox-button-focus-outline-color: var(--amplify-colors-transparent); - --amplify-components-checkbox-button-focus-outline-style: solid; - --amplify-components-checkbox-button-focus-outline-width: var(--amplify-outline-widths-medium); - --amplify-components-checkbox-button-focus-outline-offset: var(--amplify-outline-offsets-medium); - --amplify-components-checkbox-button-focus-border-color: var(--amplify-colors-transparent); - --amplify-components-checkbox-button-focus-box-shadow: 0px 0px 0px 2px var(--amplify-colors-border-focus); - --amplify-components-checkbox-button-disabled-border-color: var(--amplify-colors-border-disabled); - --amplify-components-checkbox-button-error-border-color: var(--amplify-colors-border-error); - --amplify-components-checkbox-button-error-focus-border-color: var(--amplify-colors-transparent); - --amplify-components-checkbox-button-error-focus-box-shadow: 0px 0px 0px 2px var(--amplify-colors-border-error); - --amplify-components-checkbox-icon-background-color: var(--amplify-colors-brand-primary-80); - --amplify-components-checkbox-icon-border-radius: 20%; - --amplify-components-checkbox-icon-opacity: var(--amplify-opacities-0); - --amplify-components-checkbox-icon-transform: scale(0); - --amplify-components-checkbox-icon-transition-property: all; - --amplify-components-checkbox-icon-transition-duration: var(--amplify-time-short); - --amplify-components-checkbox-icon-transition-timing-function: ease-in-out; - --amplify-components-checkbox-icon-checked-opacity: var(--amplify-opacities-100); - --amplify-components-checkbox-icon-checked-transform: scale(1); - --amplify-components-checkbox-icon-checked-disabled-background-color: var(--amplify-colors-background-disabled); - --amplify-components-checkbox-icon-indeterminate-opacity: var(--amplify-opacities-100); - --amplify-components-checkbox-icon-indeterminate-transform: scale(1); - --amplify-components-checkbox-icon-indeterminate-disabled-background-color: var(--amplify-colors-background-disabled); - --amplify-components-checkbox-label-disabled-color: var(--amplify-colors-font-disabled); - --amplify-components-checkboxfield-align-items: flex-start; - --amplify-components-checkboxfield-align-content: center; - --amplify-components-checkboxfield-flex-direction: column; - --amplify-components-checkboxfield-justify-content: center; - --amplify-components-collection-pagination-current-color: var(--amplify-components-pagination-current-color); - --amplify-components-collection-pagination-current-background-color: var(--amplify-components-pagination-current-background-color); - --amplify-components-collection-pagination-button-color: var(--amplify-components-pagination-button-color); - --amplify-components-collection-pagination-button-hover-background-color: var(--amplify-components-pagination-button-hover-background-color); - --amplify-components-collection-pagination-button-hover-color: var(--amplify-components-pagination-button-hover-color); - --amplify-components-collection-pagination-button-disabled-color: var(--amplify-components-pagination-button-disabled-color); - --amplify-components-collection-search-input-color: var(--amplify-components-searchfield-color); - --amplify-components-collection-search-button-color: var(--amplify-components-searchfield-button-color); - --amplify-components-collection-search-button-active-background-color: var(--amplify-components-searchfield-button-active-background-color); - --amplify-components-collection-search-button-active-border-color: var(--amplify-components-searchfield-button-active-border-color); - --amplify-components-collection-search-button-active-color: var(--amplify-components-searchfield-button-active-color); - --amplify-components-collection-search-button-disabled-background-color: var(--amplify-components-searchfield-button-disabled-background-color); - --amplify-components-collection-search-button-disabled-border-color: var(--amplify-components-searchfield-button-disabled-border-color); - --amplify-components-collection-search-button-disabled-color: var(--amplify-components-searchfield-button-disabled-color); - --amplify-components-collection-search-button-focus-background-color: var(--amplify-components-searchfield-button-focus-background-color); - --amplify-components-collection-search-button-focus-border-color: var(--amplify-components-searchfield-button-focus-border-color); - --amplify-components-collection-search-button-focus-color: var(--amplify-components-searchfield-button-focus-color); - --amplify-components-collection-search-button-hover-background-color: var(--amplify-components-searchfield-button-hover-background-color); - --amplify-components-collection-search-button-hover-border-color: var(--amplify-components-searchfield-button-hover-border-color); - --amplify-components-collection-search-button-hover-color: var(--amplify-components-searchfield-button-hover-color); - --amplify-components-copy-font-size: var(--amplify-font-sizes-xs); - --amplify-components-copy-gap: var(--amplify-space-relative-medium); - --amplify-components-copy-svg-path-fill: var(--amplify-colors-font-primary); - --amplify-components-copy-tool-tip-bottom: var(--amplify-space-large); - --amplify-components-copy-tool-tip-color: var(--amplify-colors-teal-100); - --amplify-components-copy-tool-tip-font-size: var(--amplify-font-sizes-xxs); - --amplify-components-countrycodeselect-height: var(--amplify-space-relative-full); - --amplify-components-divider-border-style: solid; - --amplify-components-divider-border-color: var(--amplify-colors-border-primary); - --amplify-components-divider-border-width: var(--amplify-border-widths-medium); - --amplify-components-divider-label-color: var(--amplify-colors-font-tertiary); - --amplify-components-divider-label-padding-inline: var(--amplify-space-medium); - --amplify-components-divider-label-font-size: var(--amplify-font-sizes-small); - --amplify-components-divider-label-background-color: var(--amplify-colors-background-primary); - --amplify-components-divider-small-border-width: var(--amplify-border-widths-small); - --amplify-components-divider-large-border-width: var(--amplify-border-widths-large); - --amplify-components-divider-opacity: var(--amplify-opacities-60); - --amplify-components-expander-display: block; - --amplify-components-expander-background-color: var(--amplify-colors-background-primary); - --amplify-components-expander-border-radius: var(--amplify-radii-medium); - --amplify-components-expander-box-shadow: var(--amplify-shadows-large); - --amplify-components-expander-width: 100%; - --amplify-components-expander-item-margin-top: 1px; - --amplify-components-expander-item-box-shadow: var(--amplify-shadows-small); - --amplify-components-expander-item-border-bottom-left-radius: var(--amplify-radii-medium); - --amplify-components-expander-item-border-bottom-right-radius: var(--amplify-radii-medium); - --amplify-components-expander-item-border-top-left-radius: var(--amplify-radii-medium); - --amplify-components-expander-item-border-top-right-radius: var(--amplify-radii-medium); - --amplify-components-expander-item-border-start-start-radius: var(--amplify-radii-medium); - --amplify-components-expander-item-border-start-end-radius: var(--amplify-radii-medium); - --amplify-components-expander-item-border-end-start-radius: var(--amplify-radii-medium); - --amplify-components-expander-item-border-end-end-radius: var(--amplify-radii-medium); - --amplify-components-expander-item-focus-box-shadow: 0 0 0 2px var(--amplify-colors-border-focus); - --amplify-components-expander-header-box-shadow: 0 1px 0 var(--amplify-colors-overlay-20); - --amplify-components-expander-trigger-min-height: 3rem; - --amplify-components-expander-trigger-padding-inline-start: var(--amplify-space-large); - --amplify-components-expander-trigger-padding-inline-end: var(--amplify-space-large); - --amplify-components-expander-trigger-align-items: center; - --amplify-components-expander-trigger-justify-content: space-between; - --amplify-components-expander-trigger-hover-background-color: var(--amplify-colors-overlay-10); - --amplify-components-expander-content-padding-inline-start: var(--amplify-space-large); - --amplify-components-expander-content-padding-inline-end: var(--amplify-space-large); - --amplify-components-expander-content-text-color: var(--amplify-colors-font-secondary); - --amplify-components-expander-content-text-padding-block-start: var(--amplify-space-medium); - --amplify-components-expander-content-text-padding-block-end: var(--amplify-space-medium); - --amplify-components-expander-content-open-animation-duration: var(--amplify-time-medium); - --amplify-components-expander-content-open-animation-timing-function: cubic-bezier(0.87, 0, 0.13, 1); - --amplify-components-expander-content-closed-animation-duration: var(--amplify-time-medium); - --amplify-components-expander-content-closed-animation-timing-function: cubic-bezier(0.87, 0, 0.13, 1); - --amplify-components-expander-icon-transition-duration: var(--amplify-time-medium); - --amplify-components-expander-icon-transition-timing-function: cubic-bezier(0.87, 0, 0.13, 1); - --amplify-components-field-gap: var(--amplify-space-xs); - --amplify-components-field-font-size: var(--amplify-font-sizes-medium); - --amplify-components-field-small-gap: var(--amplify-space-xxxs); - --amplify-components-field-small-font-size: var(--amplify-font-sizes-small); - --amplify-components-field-large-gap: var(--amplify-space-small); - --amplify-components-field-large-font-size: var(--amplify-font-sizes-large); - --amplify-components-field-label-color: var(--amplify-colors-font-secondary); - --amplify-components-fieldcontrol-border-style: solid; - --amplify-components-fieldcontrol-border-color: var(--amplify-colors-border-primary); - --amplify-components-fieldcontrol-border-width: var(--amplify-border-widths-small); - --amplify-components-fieldcontrol-border-radius: var(--amplify-radii-small); - --amplify-components-fieldcontrol-color: var(--amplify-colors-font-primary); - --amplify-components-fieldcontrol-padding-block-start: var(--amplify-space-xs); - --amplify-components-fieldcontrol-padding-block-end: var(--amplify-space-xs); - --amplify-components-fieldcontrol-padding-inline-start: var(--amplify-space-medium); - --amplify-components-fieldcontrol-padding-inline-end: var(--amplify-space-medium); - --amplify-components-fieldcontrol-font-size: var(--amplify-components-field-font-size); - --amplify-components-fieldcontrol-line-height: var(--amplify-line-heights-medium); - --amplify-components-fieldcontrol-transition-duration: var(--amplify-time-medium); - --amplify-components-fieldcontrol-outline-color: var(--amplify-colors-transparent); - --amplify-components-fieldcontrol-outline-style: solid; - --amplify-components-fieldcontrol-outline-width: var(--amplify-outline-widths-medium); - --amplify-components-fieldcontrol-outline-offset: var(--amplify-outline-offsets-medium); - --amplify-components-fieldcontrol-small-font-size: var(--amplify-components-field-small-font-size); - --amplify-components-fieldcontrol-small-padding-block-start: var(--amplify-space-xxs); - --amplify-components-fieldcontrol-small-padding-block-end: var(--amplify-space-xxs); - --amplify-components-fieldcontrol-small-padding-inline-start: var(--amplify-space-small); - --amplify-components-fieldcontrol-small-padding-inline-end: var(--amplify-space-small); - --amplify-components-fieldcontrol-large-font-size: var(--amplify-components-field-large-font-size); - --amplify-components-fieldcontrol-large-padding-block-start: var(--amplify-space-xs); - --amplify-components-fieldcontrol-large-padding-block-end: var(--amplify-space-xs); - --amplify-components-fieldcontrol-large-padding-inline-start: var(--amplify-space-medium); - --amplify-components-fieldcontrol-large-padding-inline-end: var(--amplify-space-medium); - --amplify-components-fieldcontrol-quiet-border-style: none; - --amplify-components-fieldcontrol-quiet-border-inline-start: none; - --amplify-components-fieldcontrol-quiet-border-inline-end: none; - --amplify-components-fieldcontrol-quiet-border-block-start: none; - --amplify-components-fieldcontrol-quiet-border-radius: 0; - --amplify-components-fieldcontrol-quiet-focus-border-block-end-color: var(--amplify-colors-border-focus); - --amplify-components-fieldcontrol-quiet-focus-box-shadow: 0px 1px 0px var(--amplify-colors-border-focus); - --amplify-components-fieldcontrol-quiet-error-border-block-end-color: var(--amplify-colors-border-error); - --amplify-components-fieldcontrol-quiet-error-focus-box-shadow: 0px 1px 0px var(--amplify-colors-border-error); - --amplify-components-fieldcontrol-focus-border-color: var(--amplify-colors-border-focus); - --amplify-components-fieldcontrol-focus-box-shadow: 0px 0px 0px 1px var(--amplify-colors-border-focus); - --amplify-components-fieldcontrol-disabled-color: var(--amplify-colors-font-disabled); - --amplify-components-fieldcontrol-disabled-cursor: not-allowed; - --amplify-components-fieldcontrol-disabled-border-color: var(--amplify-colors-transparent); - --amplify-components-fieldcontrol-disabled-background-color: var(--amplify-colors-background-disabled); - --amplify-components-fieldcontrol-error-border-color: var(--amplify-colors-border-error); - --amplify-components-fieldcontrol-error-focus-box-shadow: 0px 0px 0px 1px var(--amplify-colors-border-error); - --amplify-components-fieldgroup-gap: var(--amplify-space-zero); - --amplify-components-fieldgroup-vertical-align-items: center; - --amplify-components-fieldgroup-outer-align-items: center; - --amplify-components-fieldmessages-error-color: var(--amplify-colors-font-error); - --amplify-components-fieldmessages-error-font-size: var(--amplify-font-sizes-small); - --amplify-components-fieldmessages-description-color: var(--amplify-colors-font-secondary); - --amplify-components-fieldmessages-description-font-style: italic; - --amplify-components-fieldmessages-description-font-size: var(--amplify-font-sizes-small); - --amplify-components-fileuploader-dropzone-background-color: var(--amplify-colors-background-primary); - --amplify-components-fileuploader-dropzone-border-radius: var(--amplify-radii-small); - --amplify-components-fileuploader-dropzone-border-color: var(--amplify-colors-border-primary); - --amplify-components-fileuploader-dropzone-border-style: dashed; - --amplify-components-fileuploader-dropzone-border-width: var(--amplify-border-widths-small); - --amplify-components-fileuploader-dropzone-gap: var(--amplify-space-small); - --amplify-components-fileuploader-dropzone-padding-block: var(--amplify-space-xl); - --amplify-components-fileuploader-dropzone-padding-inline: var(--amplify-space-large); - --amplify-components-fileuploader-dropzone-text-align: center; - --amplify-components-fileuploader-dropzone-active-background-color: var(--amplify-colors-brand-primary-10); - --amplify-components-fileuploader-dropzone-active-border-radius: var(--amplify-components-fileuploader-dropzone-border-radius); - --amplify-components-fileuploader-dropzone-active-border-color: var(--amplify-colors-border-pressed); - --amplify-components-fileuploader-dropzone-active-border-style: var(--amplify-components-fileuploader-dropzone-border-style); - --amplify-components-fileuploader-dropzone-active-border-width: var(--amplify-border-widths-medium); - --amplify-components-fileuploader-dropzone-icon-color: var(--amplify-colors-border-primary); - --amplify-components-fileuploader-dropzone-icon-font-size: var(--amplify-font-sizes-xxl); - --amplify-components-fileuploader-dropzone-text-color: var(--amplify-colors-font-tertiary); - --amplify-components-fileuploader-dropzone-text-font-size: var(--amplify-font-sizes-medium); - --amplify-components-fileuploader-dropzone-text-font-weight: var(--amplify-font-weights-bold); - --amplify-components-fileuploader-file-background-color: var(--amplify-colors-background-primary); - --amplify-components-fileuploader-file-border-radius: var(--amplify-radii-small); - --amplify-components-fileuploader-file-border-color: var(--amplify-colors-border-primary); - --amplify-components-fileuploader-file-border-style: solid; - --amplify-components-fileuploader-file-border-width: var(--amplify-border-widths-small); - --amplify-components-fileuploader-file-padding-block: var(--amplify-space-xs); - --amplify-components-fileuploader-file-padding-inline: var(--amplify-space-small); - --amplify-components-fileuploader-file-gap: var(--amplify-space-small); - --amplify-components-fileuploader-file-align-items: baseline; - --amplify-components-fileuploader-file-name-font-size: var(--amplify-font-sizes-medium); - --amplify-components-fileuploader-file-name-font-weight: var(--amplify-font-weights-bold); - --amplify-components-fileuploader-file-name-color: var(--amplify-colors-font-primary); - --amplify-components-fileuploader-file-size-font-size: var(--amplify-font-sizes-small); - --amplify-components-fileuploader-file-size-font-weight: var(--amplify-font-weights-normal); - --amplify-components-fileuploader-file-size-color: var(--amplify-colors-font-tertiary); - --amplify-components-fileuploader-file-image-width: var(--amplify-space-xxl); - --amplify-components-fileuploader-file-image-height: var(--amplify-space-xxl); - --amplify-components-fileuploader-file-image-background-color: var(--amplify-colors-background-secondary); - --amplify-components-fileuploader-file-image-color: var(--amplify-colors-font-tertiary); - --amplify-components-fileuploader-file-image-border-radius: var(--amplify-radii-small); - --amplify-components-fileuploader-loader-stroke-linecap: round; - --amplify-components-fileuploader-loader-stroke-empty: var(--amplify-colors-border-secondary); - --amplify-components-fileuploader-loader-stroke-filled: var(--amplify-components-loader-stroke-filled); - --amplify-components-fileuploader-loader-stroke-width: var(--amplify-border-widths-large); - --amplify-components-fileuploader-previewer-background-color: var(--amplify-colors-background-primary); - --amplify-components-fileuploader-previewer-border-color: var(--amplify-colors-border-primary); - --amplify-components-fileuploader-previewer-border-style: solid; - --amplify-components-fileuploader-previewer-border-width: var(--amplify-border-widths-small); - --amplify-components-fileuploader-previewer-border-radius: var(--amplify-radii-small); - --amplify-components-fileuploader-previewer-padding-block: var(--amplify-space-zero); - --amplify-components-fileuploader-previewer-padding-inline: var(--amplify-space-zero); - --amplify-components-fileuploader-previewer-max-height: 40rem; - --amplify-components-fileuploader-previewer-max-width: auto; - --amplify-components-fileuploader-previewer-text-font-size: var(--amplify-font-sizes-medium); - --amplify-components-fileuploader-previewer-text-font-weight: var(--amplify-font-weights-bold); - --amplify-components-fileuploader-previewer-text-color: var(--amplify-colors-font-primary); - --amplify-components-fileuploader-previewer-body-padding-block: var(--amplify-space-medium); - --amplify-components-fileuploader-previewer-body-padding-inline: var(--amplify-space-medium); - --amplify-components-fileuploader-previewer-body-gap: var(--amplify-space-small); - --amplify-components-fileuploader-previewer-footer-border-color: var(--amplify-colors-border-secondary); - --amplify-components-fileuploader-previewer-footer-border-style: solid; - --amplify-components-fileuploader-previewer-footer-border-width: var(--amplify-border-widths-small); - --amplify-components-fileuploader-previewer-footer-padding-block: var(--amplify-space-medium); - --amplify-components-fileuploader-previewer-footer-padding-inline: var(--amplify-space-medium); - --amplify-components-fileuploader-previewer-footer-justify-content: space-between; - --amplify-components-flex-gap: var(--amplify-space-medium); - --amplify-components-flex-justify-content: normal; - --amplify-components-flex-align-items: stretch; - --amplify-components-flex-align-content: normal; - --amplify-components-flex-flex-wrap: nowrap; - --amplify-components-heading-1-font-size: var(--amplify-font-sizes-xxxxl); - --amplify-components-heading-1-font-weight: var(--amplify-font-weights-light); - --amplify-components-heading-2-font-size: var(--amplify-font-sizes-xxxl); - --amplify-components-heading-2-font-weight: var(--amplify-font-weights-normal); - --amplify-components-heading-3-font-size: var(--amplify-font-sizes-xxl); - --amplify-components-heading-3-font-weight: var(--amplify-font-weights-medium); - --amplify-components-heading-4-font-size: var(--amplify-font-sizes-xl); - --amplify-components-heading-4-font-weight: var(--amplify-font-weights-semibold); - --amplify-components-heading-5-font-size: var(--amplify-font-sizes-large); - --amplify-components-heading-5-font-weight: var(--amplify-font-weights-bold); - --amplify-components-heading-6-font-size: var(--amplify-font-sizes-medium); - --amplify-components-heading-6-font-weight: var(--amplify-font-weights-extrabold); - --amplify-components-heading-color: var(--amplify-colors-font-primary); - --amplify-components-heading-line-height: var(--amplify-line-heights-small); - --amplify-components-icon-line-height: 1; - --amplify-components-icon-height: 1em; - --amplify-components-highlightmatch-highlighted-font-weight: var(--amplify-font-weights-bold); - --amplify-components-image-max-width: 100%; - --amplify-components-image-height: auto; - --amplify-components-image-object-fit: initial; - --amplify-components-image-object-position: initial; - --amplify-components-inappmessaging-banner-height: 150px ; - --amplify-components-inappmessaging-banner-width: 400px ; - --amplify-components-inappmessaging-button-background-color: #e8e8e8; - --amplify-components-inappmessaging-button-border-radius: 5px; - --amplify-components-inappmessaging-button-color: black; - --amplify-components-inappmessaging-dialog-height: 50vh; - --amplify-components-inappmessaging-dialog-min-height: 400px; - --amplify-components-inappmessaging-dialog-min-width: 400px; - --amplify-components-inappmessaging-dialog-width: 30vw; - --amplify-components-inappmessaging-header-font-size: var(--amplify-font-sizes-medium); - --amplify-components-inappmessaging-header-font-weight: var(--amplify-font-weights-extrabold); - --amplify-components-link-active-color: var(--amplify-colors-font-active); - --amplify-components-link-color: var(--amplify-colors-font-interactive); - --amplify-components-link-focus-color: var(--amplify-colors-font-focus); - --amplify-components-link-hover-color: var(--amplify-colors-font-hover); - --amplify-components-link-visited-color: var(--amplify-colors-font-interactive); - --amplify-components-loader-width: var(--amplify-font-sizes-medium); - --amplify-components-loader-height: var(--amplify-font-sizes-medium); - --amplify-components-loader-font-size: var(--amplify-font-sizes-xs); - --amplify-components-loader-stroke-empty: var(--amplify-colors-neutral-20); - --amplify-components-loader-stroke-filled: var(--amplify-colors-brand-primary-80); - --amplify-components-loader-stroke-linecap: round; - --amplify-components-loader-animation-duration: 1s; - --amplify-components-loader-small-width: var(--amplify-font-sizes-small); - --amplify-components-loader-small-height: var(--amplify-font-sizes-small); - --amplify-components-loader-small-font-size: var(--amplify-font-sizes-xxs); - --amplify-components-loader-large-width: var(--amplify-font-sizes-large); - --amplify-components-loader-large-height: var(--amplify-font-sizes-large); - --amplify-components-loader-large-font-size: var(--amplify-font-sizes-small); - --amplify-components-loader-linear-width: 100%; - --amplify-components-loader-linear-min-width: 5rem; - --amplify-components-loader-linear-font-size: var(--amplify-font-sizes-medium); - --amplify-components-loader-linear-stroke-width: var(--amplify-font-sizes-medium); - --amplify-components-loader-linear-stroke-filled: var(--amplify-colors-brand-primary-80); - --amplify-components-loader-linear-stroke-empty: var(--amplify-colors-neutral-20); - --amplify-components-loader-linear-stroke-linecap: round; - --amplify-components-loader-linear-animation-duration: 1s; - --amplify-components-loader-linear-small-stroke-width: var(--amplify-font-sizes-small); - --amplify-components-loader-linear-small-font-size: var(--amplify-font-sizes-small); - --amplify-components-loader-linear-large-stroke-width: var(--amplify-font-sizes-large); - --amplify-components-loader-linear-large-font-size: var(--amplify-font-sizes-large); - --amplify-components-loader-text-fill: var(--amplify-colors-font-primary); - --amplify-components-menu-background-color: var(--amplify-colors-background-primary); - --amplify-components-menu-border-radius: var(--amplify-radii-medium); - --amplify-components-menu-border-width: var(--amplify-border-widths-small); - --amplify-components-menu-border-style: solid; - --amplify-components-menu-border-color: var(--amplify-colors-border-primary); - --amplify-components-menu-box-shadow: var(--amplify-shadows-large); - --amplify-components-menu-flex-direction: column; - --amplify-components-menu-gap: var(--amplify-space-zero); - --amplify-components-menu-max-width: 30rem; - --amplify-components-menu-min-width: 14rem; - --amplify-components-menu-small-width: var(--amplify-font-sizes-medium); - --amplify-components-menu-small-height: var(--amplify-font-sizes-medium); - --amplify-components-menu-large-width: var(--amplify-font-sizes-xxxl); - --amplify-components-menu-large-height: var(--amplify-font-sizes-xxxl); - --amplify-components-menu-item-min-height: 2.5rem; - --amplify-components-menu-item-padding-inline-start: var(--amplify-space-medium); - --amplify-components-menu-item-padding-inline-end: var(--amplify-space-medium); - --amplify-components-pagination-current-align-items: center; - --amplify-components-pagination-current-justify-content: center; - --amplify-components-pagination-current-color: var(--amplify-colors-font-inverse); - --amplify-components-pagination-current-font-size: var(--amplify-font-sizes-small); - --amplify-components-pagination-current-background-color: var(--amplify-colors-overlay-40); - --amplify-components-pagination-button-color: var(--amplify-colors-font-primary); - --amplify-components-pagination-button-padding-inline-start: var(--amplify-space-xxs); - --amplify-components-pagination-button-padding-inline-end: var(--amplify-space-xxs); - --amplify-components-pagination-button-transition-property: background-color; - --amplify-components-pagination-button-transition-duration: var(--amplify-time-medium); - --amplify-components-pagination-button-hover-background-color: var(--amplify-colors-overlay-10); - --amplify-components-pagination-button-hover-color: var(--amplify-colors-font-primary); - --amplify-components-pagination-button-disabled-color: var(--amplify-colors-font-disabled); - --amplify-components-pagination-ellipsis-align-items: baseline; - --amplify-components-pagination-ellipsis-justify-content: center; - --amplify-components-pagination-ellipsis-padding-inline-start: var(--amplify-space-xs); - --amplify-components-pagination-ellipsis-padding-inline-end: var(--amplify-space-xs); - --amplify-components-pagination-item-container-margin-left: var(--amplify-space-xxxs); - --amplify-components-pagination-item-container-margin-right: var(--amplify-space-xxxs); - --amplify-components-pagination-item-shared-height: var(--amplify-font-sizes-xxl); - --amplify-components-pagination-item-shared-min-width: var(--amplify-font-sizes-xxl); - --amplify-components-pagination-item-shared-border-radius: var(--amplify-font-sizes-medium); - --amplify-components-passwordfield-color: var(--amplify-components-fieldcontrol-color); - --amplify-components-passwordfield-button-color: var(--amplify-components-button-color); - --amplify-components-passwordfield-button-active-background-color: var(--amplify-components-button-active-background-color); - --amplify-components-passwordfield-button-active-border-color: var(--amplify-components-button-active-border-color); - --amplify-components-passwordfield-button-active-color: var(--amplify-components-button-active-color); - --amplify-components-passwordfield-button-disabled-background-color: var(--amplify-components-button-disabled-background-color); - --amplify-components-passwordfield-button-disabled-border-color: var(--amplify-components-button-disabled-border-color); - --amplify-components-passwordfield-button-disabled-color: var(--amplify-components-button-disabled-color); - --amplify-components-passwordfield-button-focus-background-color: var(--amplify-components-button-focus-background-color); - --amplify-components-passwordfield-button-focus-border-color: var(--amplify-components-button-focus-border-color); - --amplify-components-passwordfield-button-focus-color: var(--amplify-components-button-focus-color); - --amplify-components-passwordfield-button-hover-background-color: var(--amplify-components-button-hover-background-color); - --amplify-components-passwordfield-button-hover-border-color: var(--amplify-components-button-hover-border-color); - --amplify-components-passwordfield-button-hover-color: var(--amplify-components-button-hover-color); - --amplify-components-phonenumberfield-color: var(--amplify-components-fieldcontrol-color); - --amplify-components-phonenumberfield-border-color: var(--amplify-components-fieldcontrol-border-color); - --amplify-components-phonenumberfield-font-size: var(--amplify-components-fieldcontrol-font-size); - --amplify-components-phonenumberfield-focus-border-color: var(--amplify-components-fieldcontrol-focus-border-color); - --amplify-components-placeholder-border-radius: var(--amplify-radii-small); - --amplify-components-placeholder-transition-duration: var(--amplify-time-long); - --amplify-components-placeholder-start-color: var(--amplify-colors-background-secondary); - --amplify-components-placeholder-end-color: var(--amplify-colors-background-tertiary); - --amplify-components-placeholder-small-height: var(--amplify-space-small); - --amplify-components-placeholder-default-height: var(--amplify-space-medium); - --amplify-components-placeholder-large-height: var(--amplify-space-large); - --amplify-components-radio-align-items: center; - --amplify-components-radio-justify-content: flex-start; - --amplify-components-radio-gap: inherit; - --amplify-components-radio-disabled-cursor: not-allowed; - --amplify-components-radio-button-align-items: center; - --amplify-components-radio-button-justify-content: center; - --amplify-components-radio-button-width: var(--amplify-font-sizes-medium); - --amplify-components-radio-button-height: var(--amplify-font-sizes-medium); - --amplify-components-radio-button-box-sizing: border-box; - --amplify-components-radio-button-border-width: var(--amplify-border-widths-medium); - --amplify-components-radio-button-border-style: solid; - --amplify-components-radio-button-border-radius: 50%; - --amplify-components-radio-button-border-color: var(--amplify-colors-border-primary); - --amplify-components-radio-button-color: var(--amplify-colors-background-primary); - --amplify-components-radio-button-background-color: var(--amplify-colors-background-primary); - --amplify-components-radio-button-transition-property: all; - --amplify-components-radio-button-transition-duration: var(--amplify-time-medium); - --amplify-components-radio-button-outline-color: var(--amplify-colors-transparent); - --amplify-components-radio-button-outline-style: solid; - --amplify-components-radio-button-outline-width: var(--amplify-outline-widths-medium); - --amplify-components-radio-button-outline-offset: var(--amplify-outline-offsets-medium); - --amplify-components-radio-button-padding: var(--amplify-border-widths-medium); - --amplify-components-radio-button-small-width: var(--amplify-font-sizes-small); - --amplify-components-radio-button-small-height: var(--amplify-font-sizes-small); - --amplify-components-radio-button-large-width: var(--amplify-font-sizes-large); - --amplify-components-radio-button-large-height: var(--amplify-font-sizes-large); - --amplify-components-radio-button-checked-color: var(--amplify-colors-brand-primary-80); - --amplify-components-radio-button-checked-disabled-color: var(--amplify-colors-background-disabled); - --amplify-components-radio-button-focus-border-color: var(--amplify-colors-border-focus); - --amplify-components-radio-button-focus-box-shadow: var(--amplify-components-fieldcontrol-focus-box-shadow); - --amplify-components-radio-button-error-border-color: var(--amplify-colors-border-error); - --amplify-components-radio-button-error-focus-box-shadow: var(--amplify-components-fieldcontrol-error-focus-box-shadow); - --amplify-components-radio-button-disabled-border-color: var(--amplify-colors-border-disabled); - --amplify-components-radio-button-disabled-background-color: var(--amplify-colors-background-primary); - --amplify-components-radio-label-color: var(--amplify-components-text-color); - --amplify-components-radio-label-disabled-color: var(--amplify-colors-font-disabled); - --amplify-components-radiogroup-radio-border-width: var(--amplify-components-radio-button-border-width); - --amplify-components-radiogroup-radio-border-color: var(--amplify-components-radio-button-border-color); - --amplify-components-radiogroup-radio-background-color: var(--amplify-components-radio-button-background-color); - --amplify-components-radiogroup-radio-checked-color: var(--amplify-components-radio-button-checked-color); - --amplify-components-radiogroup-radio-label-color: var(--amplify-components-radio-label-color); - --amplify-components-radiogroup-label-color: var(--amplify-components-field-label-color); - --amplify-components-rating-large-size: var(--amplify-font-sizes-xxxl); - --amplify-components-rating-default-size: var(--amplify-font-sizes-xl); - --amplify-components-rating-small-size: var(--amplify-font-sizes-small); - --amplify-components-rating-filled-color: var(--amplify-colors-brand-secondary-80); - --amplify-components-rating-empty-color: var(--amplify-colors-background-tertiary); - --amplify-components-searchfield-color: var(--amplify-components-fieldcontrol-color); - --amplify-components-searchfield-button-color: var(--amplify-components-button-color); - --amplify-components-searchfield-button-background-color: var(--amplify-colors-background-primary); - --amplify-components-searchfield-button-active-background-color: var(--amplify-components-button-active-background-color); - --amplify-components-searchfield-button-active-border-color: var(--amplify-components-button-active-border-color); - --amplify-components-searchfield-button-active-color: var(--amplify-components-button-active-color); - --amplify-components-searchfield-button-disabled-background-color: var(--amplify-components-button-disabled-background-color); - --amplify-components-searchfield-button-disabled-border-color: var(--amplify-components-button-disabled-border-color); - --amplify-components-searchfield-button-disabled-color: var(--amplify-components-button-disabled-color); - --amplify-components-searchfield-button-focus-background-color: var(--amplify-components-button-focus-background-color); - --amplify-components-searchfield-button-focus-border-color: var(--amplify-components-button-focus-border-color); - --amplify-components-searchfield-button-focus-color: var(--amplify-components-button-focus-color); - --amplify-components-searchfield-button-hover-background-color: var(--amplify-components-button-hover-background-color); - --amplify-components-searchfield-button-hover-border-color: var(--amplify-components-button-hover-border-color); - --amplify-components-searchfield-button-hover-color: var(--amplify-components-button-hover-color); - --amplify-components-select-padding-inline-end: var(--amplify-space-xxl); - --amplify-components-select-wrapper-flex: 1; - --amplify-components-select-wrapper-display: block; - --amplify-components-select-wrapper-position: relative; - --amplify-components-select-wrapper-cursor: pointer; - --amplify-components-select-icon-wrapper-align-items: center; - --amplify-components-select-icon-wrapper-position: absolute; - --amplify-components-select-icon-wrapper-top: 50%; - --amplify-components-select-icon-wrapper-right: var(--amplify-space-medium); - --amplify-components-select-icon-wrapper-transform: translateY(-50%); - --amplify-components-select-icon-wrapper-pointer-events: none; - --amplify-components-select-option-background-color: var(--amplify-colors-background-primary); - --amplify-components-select-option-color: var(--amplify-colors-font-primary); - --amplify-components-select-option-disabled-color: var(--amplify-colors-font-disabled); - --amplify-components-select-white-space: nowrap; - --amplify-components-select-min-width: 6.5rem; - --amplify-components-select-small-min-width: 5.5rem; - --amplify-components-select-large-min-width: 7.5rem; - --amplify-components-selectfield-border-color: var(--amplify-components-fieldcontrol-border-color); - --amplify-components-selectfield-color: var(--amplify-components-fieldcontrol-color); - --amplify-components-selectfield-flex-direction: column; - --amplify-components-selectfield-font-size: var(--amplify-components-fieldcontrol-font-size); - --amplify-components-selectfield-focus-border-color: var(--amplify-components-fieldcontrol-focus-border-color); - --amplify-components-selectfield-label-color: var(--amplify-components-field-label-color); - --amplify-components-sliderfield-padding-block: var(--amplify-space-xs); - --amplify-components-sliderfield-track-background-color: var(--amplify-colors-background-quaternary); - --amplify-components-sliderfield-track-border-radius: 9999px; - --amplify-components-sliderfield-track-height: 0.375rem; - --amplify-components-sliderfield-track-min-width: 10rem; - --amplify-components-sliderfield-range-background-color: var(--amplify-colors-brand-primary-80); - --amplify-components-sliderfield-range-border-radius: 9999px; - --amplify-components-sliderfield-range-disabled-background-color: var(--amplify-colors-background-disabled); - --amplify-components-sliderfield-thumb-width: 1.25rem; - --amplify-components-sliderfield-thumb-height: 1.25rem; - --amplify-components-sliderfield-thumb-background-color: var(--amplify-colors-background-primary); - --amplify-components-sliderfield-thumb-box-shadow: var(--amplify-shadows-small); - --amplify-components-sliderfield-thumb-border-radius: 50%; - --amplify-components-sliderfield-thumb-border-width: var(--amplify-border-widths-medium); - --amplify-components-sliderfield-thumb-border-color: var(--amplify-colors-border-primary); - --amplify-components-sliderfield-thumb-border-style: solid; - --amplify-components-sliderfield-thumb-disabled-background-color: var(--amplify-colors-background-disabled); - --amplify-components-sliderfield-thumb-disabled-border-color: transparent; - --amplify-components-sliderfield-thumb-disabled-box-shadow: none; - --amplify-components-sliderfield-thumb-hover-background-color: var(--amplify-colors-background-primary); - --amplify-components-sliderfield-thumb-hover-border-color: var(--amplify-colors-border-focus); - --amplify-components-sliderfield-thumb-focus-border-color: var(--amplify-colors-border-focus); - --amplify-components-sliderfield-thumb-focus-box-shadow: 0 0 0 2px var(--amplify-colors-border-focus); - --amplify-components-sliderfield-small-track-height: 0.25rem; - --amplify-components-sliderfield-small-thumb-width: 1rem; - --amplify-components-sliderfield-small-thumb-height: 1rem; - --amplify-components-sliderfield-large-track-height: 0.625rem; - --amplify-components-sliderfield-large-thumb-width: 1.5rem; - --amplify-components-sliderfield-large-thumb-height: 1.5rem; - --amplify-components-stepperfield-border-color: var(--amplify-components-fieldcontrol-border-color); - --amplify-components-stepperfield-flex-direction: column; - --amplify-components-stepperfield-input-color: var(--amplify-components-fieldcontrol-color); - --amplify-components-stepperfield-input-font-size: var(--amplify-components-fieldcontrol-font-size); - --amplify-components-stepperfield-input-text-align: center; - --amplify-components-stepperfield-button-color: var(--amplify-components-button-color); - --amplify-components-stepperfield-button-background-color: var(--amplify-colors-transparent); - --amplify-components-stepperfield-button-active-color: var(--amplify-components-button-active-color); - --amplify-components-stepperfield-button-active-background-color: var(--amplify-components-button-active-background-color); - --amplify-components-stepperfield-button-focus-color: var(--amplify-components-button-focus-color); - --amplify-components-stepperfield-button-focus-background-color: var(--amplify-components-button-focus-background-color); - --amplify-components-stepperfield-button-disabled-color: var(--amplify-components-button-disabled-color); - --amplify-components-stepperfield-button-disabled-background-color: var(--amplify-components-fieldcontrol-disabled-background-color); - --amplify-components-stepperfield-button-hover-color: var(--amplify-components-button-hover-color); - --amplify-components-stepperfield-button-hover-background-color: var(--amplify-components-button-hover-background-color); - --amplify-components-switchfield-disabled-opacity: var(--amplify-opacities-60); - --amplify-components-switchfield-focused-shadow: 0px 0px 0px 2px var(--amplify-colors-border-focus); - --amplify-components-switchfield-font-size: var(--amplify-font-sizes-medium); - --amplify-components-switchfield-large-font-size: var(--amplify-font-sizes-large); - --amplify-components-switchfield-small-font-size: var(--amplify-font-sizes-small); - --amplify-components-switchfield-label-padding: var(--amplify-space-xs); - --amplify-components-switchfield-thumb-background-color: var(--amplify-colors-background-primary); - --amplify-components-switchfield-thumb-border-color: var(--amplify-colors-border-tertiary); - --amplify-components-switchfield-thumb-border-radius: var(--amplify-radii-xxxl); - --amplify-components-switchfield-thumb-checked-transform: var(--amplify-transforms-slide-x-medium); - --amplify-components-switchfield-thumb-transition-duration: var(--amplify-time-medium); - --amplify-components-switchfield-thumb-width: var(--amplify-space-relative-medium); - --amplify-components-switchfield-track-background-color: var(--amplify-colors-background-quaternary); - --amplify-components-switchfield-track-border-radius: var(--amplify-radii-xxxl); - --amplify-components-switchfield-track-checked-background-color: var(--amplify-colors-brand-primary-80); - --amplify-components-switchfield-track-height: var(--amplify-space-relative-medium); - --amplify-components-switchfield-track-padding: var(--amplify-outline-widths-medium); - --amplify-components-switchfield-track-transition-duration: var(--amplify-time-short); - --amplify-components-switchfield-track-width: var(--amplify-space-relative-xl); - --amplify-components-switchfield-track-error-background-color: var(--amplify-colors-background-error); - --amplify-components-table-border-collapse: collapse; - --amplify-components-table-display: table; - --amplify-components-table-width: 100%; - --amplify-components-table-head-display: table-header-group; - --amplify-components-table-head-vertical-align: middle; - --amplify-components-table-body-display: table-row-group; - --amplify-components-table-body-vertical-align: middle; - --amplify-components-table-foot-display: table-footer-group; - --amplify-components-table-foot-vertical-align: middle; - --amplify-components-table-row-display: table-row; - --amplify-components-table-row-vertical-align: middle; - --amplify-components-table-row-hover-background-color: var(--amplify-colors-background-tertiary); - --amplify-components-table-row-striped-background-color: var(--amplify-colors-background-secondary); - --amplify-components-table-header-border-color: var(--amplify-colors-border-tertiary); - --amplify-components-table-header-border-style: solid; - --amplify-components-table-header-border-width: var(--amplify-border-widths-small); - --amplify-components-table-header-color: var(--amplify-colors-font-primary); - --amplify-components-table-header-display: table-cell; - --amplify-components-table-header-font-size: var(--amplify-font-sizes-medium); - --amplify-components-table-header-font-weight: var(--amplify-font-weights-bold); - --amplify-components-table-header-padding: var(--amplify-space-medium); - --amplify-components-table-header-vertical-align: middle; - --amplify-components-table-header-large-font-size: var(--amplify-font-sizes-large); - --amplify-components-table-header-large-padding: var(--amplify-space-large); - --amplify-components-table-header-small-font-size: var(--amplify-font-sizes-small); - --amplify-components-table-header-small-padding: var(--amplify-space-xs); - --amplify-components-table-data-border-color: var(--amplify-colors-border-tertiary); - --amplify-components-table-data-border-style: solid; - --amplify-components-table-data-border-width: var(--amplify-border-widths-small); - --amplify-components-table-data-color: var(--amplify-colors-font-primary); - --amplify-components-table-data-display: table-cell; - --amplify-components-table-data-font-size: var(--amplify-font-sizes-medium); - --amplify-components-table-data-font-weight: var(--amplify-font-weights-normal); - --amplify-components-table-data-padding: var(--amplify-space-medium); - --amplify-components-table-data-vertical-align: middle; - --amplify-components-table-data-large-font-size: var(--amplify-font-sizes-large); - --amplify-components-table-data-large-padding: var(--amplify-space-large); - --amplify-components-table-data-small-font-size: var(--amplify-font-sizes-small); - --amplify-components-table-data-small-padding: var(--amplify-space-xs); - --amplify-components-table-caption-caption-side: bottom; - --amplify-components-table-caption-color: var(--amplify-colors-font-primary); - --amplify-components-table-caption-display: table-caption; - --amplify-components-table-caption-font-size: var(--amplify-font-sizes-medium); - --amplify-components-table-caption-text-align: center; - --amplify-components-table-caption-word-break: break-all; - --amplify-components-table-caption-large-font-size: var(--amplify-font-sizes-large); - --amplify-components-table-caption-small-font-size: var(--amplify-font-sizes-small); - --amplify-components-tabs-background-color: transparent; - --amplify-components-tabs-border-color: var(--amplify-colors-border-secondary); - --amplify-components-tabs-border-style: solid; - --amplify-components-tabs-border-width: var(--amplify-border-widths-medium); - --amplify-components-tabs-gap: 0; - --amplify-components-tabs-item-background-color: transparent; - --amplify-components-tabs-item-border-color: var(--amplify-colors-border-secondary); - --amplify-components-tabs-item-border-style: solid; - --amplify-components-tabs-item-border-width: var(--amplify-border-widths-medium); - --amplify-components-tabs-item-color: var(--amplify-colors-font-secondary); - --amplify-components-tabs-item-font-size: var(--amplify-font-sizes-medium); - --amplify-components-tabs-item-font-weight: var(--amplify-font-weights-bold); - --amplify-components-tabs-item-padding-vertical: var(--amplify-space-small); - --amplify-components-tabs-item-padding-horizontal: var(--amplify-space-medium); - --amplify-components-tabs-item-text-align: center; - --amplify-components-tabs-item-transition-duration: var(--amplify-time-medium); - --amplify-components-tabs-item-hover-color: var(--amplify-colors-font-hover); - --amplify-components-tabs-item-focus-color: var(--amplify-colors-font-focus); - --amplify-components-tabs-item-active-color: var(--amplify-colors-font-interactive); - --amplify-components-tabs-item-active-border-color: var(--amplify-colors-font-interactive); - --amplify-components-tabs-item-active-background-color: transparent; - --amplify-components-tabs-item-disabled-color: var(--amplify-colors-font-disabled); - --amplify-components-tabs-item-disabled-background-color: transparent; - --amplify-components-tabs-item-disabled-border-color: var(--amplify-colors-border-tertiary); - --amplify-components-text-color: var(--amplify-colors-font-primary); - --amplify-components-text-primary-color: var(--amplify-colors-font-primary); - --amplify-components-text-secondary-color: var(--amplify-colors-font-secondary); - --amplify-components-text-tertiary-color: var(--amplify-colors-font-tertiary); - --amplify-components-text-error-color: var(--amplify-colors-font-error); - --amplify-components-text-warning-color: var(--amplify-colors-font-warning); - --amplify-components-text-success-color: var(--amplify-colors-font-success); - --amplify-components-text-info-color: var(--amplify-colors-font-info); - --amplify-components-textareafield-color: var(--amplify-components-fieldcontrol-color); - --amplify-components-textareafield-border-color: var(--amplify-components-fieldcontrol-border-color); - --amplify-components-textareafield-focus-border-color: var(--amplify-components-fieldcontrol-focus-border-color); - --amplify-components-textfield-color: var(--amplify-components-fieldcontrol-color); - --amplify-components-textfield-border-color: var(--amplify-components-fieldcontrol-border-color); - --amplify-components-textfield-font-size: var(--amplify-components-fieldcontrol-font-size); - --amplify-components-textfield-focus-border-color: var(--amplify-components-fieldcontrol-focus-border-color); - --amplify-components-togglebutton-border-color: var(--amplify-colors-border-primary); - --amplify-components-togglebutton-color: var(--amplify-colors-font-primary); - --amplify-components-togglebutton-hover-background-color: var(--amplify-colors-overlay-10); - --amplify-components-togglebutton-focus-border-color: var(--amplify-colors-border-focus); - --amplify-components-togglebutton-focus-color: var(--amplify-colors-font-primary); - --amplify-components-togglebutton-active-background-color: var(--amplify-colors-transparent); - --amplify-components-togglebutton-disabled-background-color: var(--amplify-colors-transparent); - --amplify-components-togglebutton-disabled-border-color: var(--amplify-colors-border-disabled); - --amplify-components-togglebutton-disabled-color: var(--amplify-colors-font-disabled); - --amplify-components-togglebutton-pressed-border-color: var(--amplify-colors-border-pressed); - --amplify-components-togglebutton-pressed-color: var(--amplify-colors-font-primary); - --amplify-components-togglebutton-pressed-background-color: var(--amplify-colors-overlay-20); - --amplify-components-togglebutton-pressed-hover-background-color: var(--amplify-colors-overlay-30); - --amplify-components-togglebutton-primary-background-color: var(--amplify-colors-transparent); - --amplify-components-togglebutton-primary-border-width: var(--amplify-border-widths-small); - --amplify-components-togglebutton-primary-focus-border-color: var(--amplify-colors-border-focus); - --amplify-components-togglebutton-primary-focus-background-color: var(--amplify-colors-transparent); - --amplify-components-togglebutton-primary-focus-box-shadow: var(--amplify-components-fieldcontrol-focus-box-shadow); - --amplify-components-togglebutton-primary-focus-color: var(--amplify-colors-font-primary); - --amplify-components-togglebutton-primary-hover-background-color: var(--amplify-colors-overlay-10); - --amplify-components-togglebutton-primary-hover-color: var(--amplify-colors-font-primary); - --amplify-components-togglebutton-primary-disabled-border-color: var(--amplify-colors-border-disabled); - --amplify-components-togglebutton-primary-disabled-background-color: var(--amplify-colors-background-disabled); - --amplify-components-togglebutton-primary-disabled-color: var(--amplify-colors-font-disabled); - --amplify-components-togglebutton-primary-pressed-background-color: var(--amplify-colors-brand-primary-80); - --amplify-components-togglebutton-primary-pressed-border-color: var(--amplify-colors-brand-primary-80); - --amplify-components-togglebutton-primary-pressed-color: var(--amplify-colors-background-primary); - --amplify-components-togglebutton-primary-pressed-focus-background-color: var(--amplify-colors-border-focus); - --amplify-components-togglebutton-primary-pressed-focus-border-color: var(--amplify-colors-border-focus); - --amplify-components-togglebutton-primary-pressed-focus-color: var(--amplify-colors-background-primary); - --amplify-components-togglebutton-primary-pressed-hover-border-color: var(--amplify-colors-brand-primary-60); - --amplify-components-togglebutton-primary-pressed-hover-background-color: var(--amplify-colors-brand-primary-60); - --amplify-components-togglebutton-primary-pressed-hover-box-shadow: var(--amplify-colors-brand-primary-60); - --amplify-components-togglebutton-primary-pressed-hover-color: var(--amplify-colors-background-primary); - --amplify-components-togglebutton-link-background-color: var(--amplify-colors-transparent); - --amplify-components-togglebutton-link-color: var(--amplify-colors-overlay-50); - --amplify-components-togglebutton-link-hover-background-color: var(--amplify-colors-transparent); - --amplify-components-togglebutton-link-hover-color: var(--amplify-colors-overlay-50); - --amplify-components-togglebutton-link-focus-background-color: var(--amplify-colors-transparent); - --amplify-components-togglebutton-link-focus-color: var(--amplify-colors-overlay-50); - --amplify-components-togglebutton-link-disabled-background-color: var(--amplify-colors-transparent); - --amplify-components-togglebutton-link-disabled-color: var(--amplify-colors-font-disabled); - --amplify-components-togglebutton-link-pressed-background-color: var(--amplify-colors-transparent); - --amplify-components-togglebutton-link-pressed-color: var(--amplify-colors-overlay-90); - --amplify-components-togglebutton-link-pressed-focus-background-color: var(--amplify-colors-transparent); - --amplify-components-togglebutton-link-pressed-focus-color: var(--amplify-colors-overlay-90); - --amplify-components-togglebutton-link-pressed-hover-color: var(--amplify-colors-overlay-90); - --amplify-components-togglebutton-link-pressed-hover-background-color: var(--amplify-colors-transparent); - --amplify-components-togglebuttongroup-align-items: center; - --amplify-components-togglebuttongroup-align-content: center; - --amplify-components-togglebuttongroup-justify-content: flex-start; - --amplify-border-widths-small: 1px; - --amplify-border-widths-medium: 2px; - --amplify-border-widths-large: 3px; - --amplify-colors-red-10: hsl(0, 75%, 95%); - --amplify-colors-red-20: hsl(0, 75%, 85%); - --amplify-colors-red-40: hsl(0, 75%, 75%); - --amplify-colors-red-60: hsl(0, 50%, 50%); - --amplify-colors-red-80: hsl(0, 95%, 30%); - --amplify-colors-red-90: hsl(0, 100%, 20%); - --amplify-colors-red-100: hsl(0, 100%, 15%); - --amplify-colors-orange-10: hsl(30, 75%, 95%); - --amplify-colors-orange-20: hsl(30, 75%, 85%); - --amplify-colors-orange-40: hsl(30, 75%, 75%); - --amplify-colors-orange-60: hsl(30, 50%, 50%); - --amplify-colors-orange-80: hsl(30, 95%, 30%); - --amplify-colors-orange-90: hsl(30, 100%, 20%); - --amplify-colors-orange-100: hsl(30, 100%, 15%); - --amplify-colors-yellow-10: hsl(60, 75%, 95%); - --amplify-colors-yellow-20: hsl(60, 75%, 85%); - --amplify-colors-yellow-40: hsl(60, 75%, 75%); - --amplify-colors-yellow-60: hsl(60, 50%, 50%); - --amplify-colors-yellow-80: hsl(60, 95%, 30%); - --amplify-colors-yellow-90: hsl(60, 100%, 20%); - --amplify-colors-yellow-100: hsl(60, 100%, 15%); - --amplify-colors-green-10: hsl(130, 60%, 95%); - --amplify-colors-green-20: hsl(130, 60%, 90%); - --amplify-colors-green-40: hsl(130, 44%, 63%); - --amplify-colors-green-60: hsl(130, 43%, 46%); - --amplify-colors-green-80: hsl(130, 33%, 37%); - --amplify-colors-green-90: hsl(130, 27%, 29%); - --amplify-colors-green-100: hsl(130, 22%, 23%); - --amplify-colors-teal-10: hsl(190, 75%, 95%); - --amplify-colors-teal-20: hsl(190, 75%, 85%); - --amplify-colors-teal-40: hsl(190, 70%, 70%); - --amplify-colors-teal-60: hsl(190, 50%, 50%); - --amplify-colors-teal-80: hsl(190, 95%, 30%); - --amplify-colors-teal-90: hsl(190, 100%, 20%); - --amplify-colors-teal-100: hsl(190, 100%, 15%); - --amplify-colors-blue-10: hsl(220, 95%, 95%); - --amplify-colors-blue-20: hsl(220, 85%, 85%); - --amplify-colors-blue-40: hsl(220, 70%, 70%); - --amplify-colors-blue-60: hsl(220, 50%, 50%); - --amplify-colors-blue-80: hsl(220, 95%, 30%); - --amplify-colors-blue-90: hsl(220, 100%, 20%); - --amplify-colors-blue-100: hsl(220, 100%, 15%); - --amplify-colors-purple-10: hsl(300, 95%, 95%); - --amplify-colors-purple-20: hsl(300, 85%, 85%); - --amplify-colors-purple-40: hsl(300, 70%, 70%); - --amplify-colors-purple-60: hsl(300, 50%, 50%); - --amplify-colors-purple-80: hsl(300, 95%, 30%); - --amplify-colors-purple-90: hsl(300, 100%, 20%); - --amplify-colors-purple-100: hsl(300, 100%, 15%); - --amplify-colors-pink-10: hsl(340, 95%, 95%); - --amplify-colors-pink-20: hsl(340, 90%, 85%); - --amplify-colors-pink-40: hsl(340, 70%, 70%); - --amplify-colors-pink-60: hsl(340, 50%, 50%); - --amplify-colors-pink-80: hsl(340, 95%, 30%); - --amplify-colors-pink-90: hsl(340, 100%, 20%); - --amplify-colors-pink-100: hsl(340, 100%, 15%); - --amplify-colors-neutral-10: hsl(210, 5%, 98%); - --amplify-colors-neutral-20: hsl(210, 5%, 94%); - --amplify-colors-neutral-40: hsl(210, 5%, 87%); - --amplify-colors-neutral-60: hsl(210, 10%, 58%); - --amplify-colors-neutral-80: hsl(210, 10%, 40%); - --amplify-colors-neutral-90: hsl(210, 25%, 25%); - --amplify-colors-neutral-100: hsl(210, 50%, 10%); - --amplify-colors-brand-primary-10: var(--amplify-colors-teal-10); - --amplify-colors-brand-primary-20: var(--amplify-colors-teal-20); - --amplify-colors-brand-primary-40: var(--amplify-colors-teal-40); - --amplify-colors-brand-primary-60: var(--amplify-colors-teal-60); - --amplify-colors-brand-primary-80: var(--amplify-colors-teal-80); - --amplify-colors-brand-primary-90: var(--amplify-colors-teal-90); - --amplify-colors-brand-primary-100: var(--amplify-colors-teal-100); - --amplify-colors-brand-secondary-10: var(--amplify-colors-purple-10); - --amplify-colors-brand-secondary-20: var(--amplify-colors-purple-20); - --amplify-colors-brand-secondary-40: var(--amplify-colors-purple-40); - --amplify-colors-brand-secondary-60: var(--amplify-colors-purple-60); - --amplify-colors-brand-secondary-80: var(--amplify-colors-purple-80); - --amplify-colors-brand-secondary-90: var(--amplify-colors-purple-90); - --amplify-colors-brand-secondary-100: var(--amplify-colors-purple-100); - --amplify-colors-font-primary: var(--amplify-colors-neutral-100); - --amplify-colors-font-secondary: var(--amplify-colors-neutral-90); - --amplify-colors-font-tertiary: var(--amplify-colors-neutral-80); - --amplify-colors-font-disabled: var(--amplify-colors-neutral-60); - --amplify-colors-font-inverse: var(--amplify-colors-white); - --amplify-colors-font-interactive: var(--amplify-colors-brand-primary-80); - --amplify-colors-font-hover: var(--amplify-colors-brand-primary-90); - --amplify-colors-font-focus: var(--amplify-colors-brand-primary-100); - --amplify-colors-font-active: var(--amplify-colors-brand-primary-100); - --amplify-colors-font-info: var(--amplify-colors-blue-90); - --amplify-colors-font-warning: var(--amplify-colors-orange-90); - --amplify-colors-font-error: var(--amplify-colors-red-90); - --amplify-colors-font-success: var(--amplify-colors-green-90); - --amplify-colors-background-primary: var(--amplify-colors-white); - --amplify-colors-background-secondary: var(--amplify-colors-neutral-10); - --amplify-colors-background-tertiary: var(--amplify-colors-neutral-20); - --amplify-colors-background-quaternary: var(--amplify-colors-neutral-60); - --amplify-colors-background-disabled: var(--amplify-colors-background-tertiary); - --amplify-colors-background-info: var(--amplify-colors-blue-20); - --amplify-colors-background-warning: var(--amplify-colors-orange-20); - --amplify-colors-background-error: var(--amplify-colors-red-20); - --amplify-colors-background-success: var(--amplify-colors-green-20); - --amplify-colors-border-primary: var(--amplify-colors-neutral-60); - --amplify-colors-border-secondary: var(--amplify-colors-neutral-40); - --amplify-colors-border-tertiary: var(--amplify-colors-neutral-20); - --amplify-colors-border-disabled: var(--amplify-colors-border-tertiary); - --amplify-colors-border-pressed: var(--amplify-colors-brand-primary-100); - --amplify-colors-border-focus: var(--amplify-colors-brand-primary-100); - --amplify-colors-border-error: var(--amplify-colors-red-80); - --amplify-colors-shadow-primary: hsla(210, 50%, 10%, 0.25); - --amplify-colors-shadow-secondary: hsla(210, 50%, 10%, 0.15); - --amplify-colors-shadow-tertiary: hsla(210, 50%, 10%, 0.05); - --amplify-colors-overlay-10: hsla(0, 0%, 0%, 0.1); - --amplify-colors-overlay-20: hsla(0, 0%, 0%, 0.2); - --amplify-colors-overlay-30: hsla(0, 0%, 0%, 0.3); - --amplify-colors-overlay-40: hsla(0, 0%, 0%, 0.4); - --amplify-colors-overlay-50: hsla(0, 0%, 0%, 0.5); - --amplify-colors-overlay-60: hsla(0, 0%, 0%, 0.6); - --amplify-colors-overlay-70: hsla(0, 0%, 0%, 0.7); - --amplify-colors-overlay-80: hsla(0, 0%, 0%, 0.8); - --amplify-colors-overlay-90: hsla(0, 0%, 0%, 0.9); - --amplify-colors-black: hsl(0, 0%, 0%); - --amplify-colors-white: hsl(0, 0%, 100%); - --amplify-colors-transparent: transparent; - --amplify-fonts-default-variable: "InterVariable", "Inter var", "Inter", -apple-system, BlinkMacSystemFont, - "Helvetica Neue", "Segoe UI", Oxygen, Ubuntu, Cantarell, "Open Sans", - sans-serif; - --amplify-fonts-default-static: "Inter", -apple-system, BlinkMacSystemFont, "Helvetica Neue", - "Segoe UI", Oxygen, Ubuntu, Cantarell, "Open Sans", sans-serif; - --amplify-font-sizes-xxxs: 0.375rem; - --amplify-font-sizes-xxs: 0.5rem; - --amplify-font-sizes-xs: 0.75rem; - --amplify-font-sizes-small: 0.875rem; - --amplify-font-sizes-medium: 1rem; - --amplify-font-sizes-large: 1.25rem; - --amplify-font-sizes-xl: 1.5rem; - --amplify-font-sizes-xxl: 2rem; - --amplify-font-sizes-xxxl: 2.5rem; - --amplify-font-sizes-xxxxl: 3rem; - --amplify-font-weights-hairline: 100; - --amplify-font-weights-thin: 200; - --amplify-font-weights-light: 300; - --amplify-font-weights-normal: 400; - --amplify-font-weights-medium: 500; - --amplify-font-weights-semibold: 600; - --amplify-font-weights-bold: 700; - --amplify-font-weights-extrabold: 800; - --amplify-font-weights-black: 900; - --amplify-line-heights-small: 1.25; - --amplify-line-heights-medium: 1.5; - --amplify-line-heights-large: 2; - --amplify-opacities-0: 0; - --amplify-opacities-10: 0.1; - --amplify-opacities-20: 0.2; - --amplify-opacities-30: 0.3; - --amplify-opacities-40: 0.4; - --amplify-opacities-50: 0.5; - --amplify-opacities-60: 0.6; - --amplify-opacities-70: 0.7; - --amplify-opacities-80: 0.8; - --amplify-opacities-90: 0.9; - --amplify-opacities-100: 1; - --amplify-outline-offsets-small: 1px; - --amplify-outline-offsets-medium: 2px; - --amplify-outline-offsets-large: 3px; - --amplify-outline-widths-small: 1px; - --amplify-outline-widths-medium: 2px; - --amplify-outline-widths-large: 3px; - --amplify-radii-xs: 0.125rem; - --amplify-radii-small: 0.25rem; - --amplify-radii-medium: 0.5rem; - --amplify-radii-large: 1rem; - --amplify-radii-xl: 2rem; - --amplify-radii-xxl: 4rem; - --amplify-radii-xxxl: 8rem; - --amplify-shadows-small: 0px 2px 4px var(--amplify-colors-shadow-tertiary); - --amplify-shadows-medium: 0px 2px 6px var(--amplify-colors-shadow-secondary); - --amplify-shadows-large: 0px 4px 12px var(--amplify-colors-shadow-primary); - --amplify-space-zero: 0; - --amplify-space-xxxs: 0.25rem; - --amplify-space-xxs: 0.375rem; - --amplify-space-xs: 0.5rem; - --amplify-space-small: 0.75rem; - --amplify-space-medium: 1rem; - --amplify-space-large: 1.5rem; - --amplify-space-xl: 2.0rem; - --amplify-space-xxl: 3.0rem; - --amplify-space-xxxl: 4.5rem; - --amplify-space-relative-xxxs: 0.25em; - --amplify-space-relative-xxs: 0.375em; - --amplify-space-relative-xs: 0.5em; - --amplify-space-relative-small: 0.75em; - --amplify-space-relative-medium: 1em; - --amplify-space-relative-large: 1.5em; - --amplify-space-relative-xl: 2.0em; - --amplify-space-relative-xxl: 3.0em; - --amplify-space-relative-xxxl: 4.5em; - --amplify-space-relative-full: 100%; - --amplify-time-short: 100ms; - --amplify-time-medium: 250ms; - --amplify-time-long: 500ms; - --amplify-transforms-slide-x-small: translateX(0.5em); - --amplify-transforms-slide-x-medium: translateX(1em); - --amplify-transforms-slide-x-large: translateX(2em); -} - -html, -[data-amplify-theme] { - font-family: var(--amplify-fonts-default-static); -} - -@supports (font-variation-settings: normal) { - html, - [data-amplify-theme] { - font-family: var(--amplify-fonts-default-variable); - } -} -html:focus-within { - scroll-behavior: smooth; -} - -* { - box-sizing: border-box; -} - -input, -button, -textarea, -select { - font: inherit; -} - -@media (prefers-reduced-motion: reduce) { - html:focus-within { - scroll-behavior: auto; - } -} -[class*=amplify] { - all: unset; /* protect against external styles */ - box-sizing: border-box; /* set box-sizing after unset above */ -} - -.amplify-flex { - align-content: var(--amplify-components-flex-align-content); - align-items: var(--amplify-components-flex-align-items); - display: flex; - flex-wrap: var(--amplify-components-flex-flex-wrap); - gap: var(--amplify-components-flex-gap); - justify-content: var(--amplify-components-flex-justify-content); -} - -.amplify-grid { - display: grid; -} - -.amplify-scrollview { - display: block; - overflow: auto; -} -.amplify-scrollview--horizontal { - overflow-x: scroll; - overflow-y: initial; -} -.amplify-scrollview--vertical { - overflow-x: initial; - overflow-y: scroll; -} - -.amplify-text { - display: block; - color: var(--amplify-components-text-color); -} -b.amplify-text, -em.amplify-text, -i.amplify-text, -span.amplify-text, -strong.amplify-text { - display: inline; -} - -.amplify-text--truncated { - display: inline-block; - max-width: 100%; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.amplify-text--primary { - color: var(--amplify-components-text-primary-color); -} -.amplify-text--secondary { - color: var(--amplify-components-text-secondary-color); -} -.amplify-text--tertiary { - color: var(--amplify-components-text-tertiary-color); -} -.amplify-text--error { - color: var(--amplify-components-text-error-color); -} -.amplify-text--info { - color: var(--amplify-components-text-info-color); -} -.amplify-text--success { - color: var(--amplify-components-text-success-color); -} -.amplify-text--warning { - color: var(--amplify-components-text-warning-color); -} - -.amplify-badge { - background-color: var(--amplify-components-badge-background-color); - border-radius: var(--amplify-components-badge-border-radius); - color: var(--amplify-components-badge-color); - display: inline-flex; - font-size: var(--amplify-components-badge-font-size); - font-weight: var(--amplify-components-badge-font-weight); - line-height: var(--amplify-components-badge-line-height); - padding: var(--amplify-components-badge-padding-vertical) var(--amplify-components-badge-padding-horizontal); - text-align: var(--amplify-components-badge-text-align); -} -.amplify-badge--info { - color: var(--amplify-components-badge-info-color); - background-color: var(--amplify-components-badge-info-background-color); -} -.amplify-badge--error { - color: var(--amplify-components-badge-error-color); - background-color: var(--amplify-components-badge-error-background-color); -} -.amplify-badge--warning { - color: var(--amplify-components-badge-warning-color); - background-color: var(--amplify-components-badge-warning-background-color); -} -.amplify-badge--success { - color: var(--amplify-components-badge-success-color); - background-color: var(--amplify-components-badge-success-background-color); -} -.amplify-badge--small { - font-size: var(--amplify-components-badge-small-font-size); - padding: var(--amplify-components-badge-small-padding-vertical) var(--amplify-components-badge-small-padding-horizontal); -} -.amplify-badge--large { - font-size: var(--amplify-components-badge-large-font-size); - padding: var(--amplify-components-badge-large-padding-vertical) var(--amplify-components-badge-large-padding-horizontal); -} - -/* - * Button base styles - */ -.amplify-button { - align-items: center; - border-color: var(--amplify-components-button-border-color); - border-radius: var(--amplify-components-button-border-radius); - border-style: var(--amplify-components-button-border-style); - border-width: var(--amplify-components-button-border-width); - box-sizing: border-box; - color: var(--amplify-components-button-color); - cursor: pointer; - display: inline-flex; - font-size: var(--amplify-components-button-font-size); - font-weight: var(--amplify-components-button-font-weight); - justify-content: center; - line-height: var(--amplify-components-button-line-height); - -webkit-padding-before: var(--amplify-components-button-padding-block-start); - padding-block-start: var(--amplify-components-button-padding-block-start); - -webkit-padding-after: var(--amplify-components-button-padding-block-end); - padding-block-end: var(--amplify-components-button-padding-block-end); - -webkit-padding-start: var(--amplify-components-button-padding-inline-start); - padding-inline-start: var(--amplify-components-button-padding-inline-start); - -webkit-padding-end: var(--amplify-components-button-padding-inline-end); - padding-inline-end: var(--amplify-components-button-padding-inline-end); - transition: all var(--amplify-components-button-transition-duration); - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - --amplify-internal-button-disabled-color: var( - --amplify-components-button-disabled-color - ); - --amplify-internal-button-disabled-background-color: var( - --amplify-components-button-disabled-background-color - ); - --amplify-internal-button-disabled-border-color: var( - --amplify-components-button-disabled-border-color - ); - --amplify-internal-button-disabled-text-decoration: initial; - --amplify-internal-button-loading-background-color: var( - --amplify-components-button-loading-background-color - ); - --amplify-internal-button-loading-border-color: var( - --amplify-components-button-loading-border-color - ); - --amplify-internal-button-loading-color: var( - --amplify-components-button-loading-color - ); - --amplify-internal-button-loading-text-decoration: initial; -} -.amplify-button:hover { - background-color: var(--amplify-components-button-hover-background-color); - border-color: var(--amplify-components-button-hover-border-color); - color: var(--amplify-components-button-hover-color); -} -.amplify-button:focus { - background-color: var(--amplify-components-button-hover-background-color); - border-color: var(--amplify-components-button-focus-border-color); - color: var(--amplify-components-button-focus-color); - box-shadow: var(--amplify-components-button-focus-box-shadow); -} -.amplify-button:active { - background-color: var(--amplify-components-button-active-background-color); - border-color: var(--amplify-components-button-active-border-color); - color: var(--amplify-components-button-active-color); -} -.amplify-button--fullwidth { - width: 100%; -} -.amplify-button--menu { - border-width: var(--amplify-components-button-menu-border-width); - background-color: var(--amplify-components-button-menu-background-color); - justify-content: var(--amplify-components-button-menu-justify-content); - --amplify-internal-button-disabled-color: var( - --amplify-components-button-menu-disabled-color - ); -} -.amplify-button--menu:hover { - color: var(--amplify-components-button-menu-hover-color); - background-color: var(--amplify-components-button-menu-hover-background-color); -} -.amplify-button--menu:focus { - box-shadow: none; - color: var(--amplify-components-button-menu-focus-color); - background-color: var(--amplify-components-button-menu-focus-background-color); -} -.amplify-button--menu:active { - color: var(--amplify-components-button-menu-active-color); - background-color: var(--amplify-components-button-menu-active-background-color); -} -.amplify-button--primary { - border-width: var(--amplify-components-button-primary-border-width); - background-color: var(--amplify-components-button-primary-background-color); - border-color: var(--amplify-components-button-primary-border-color); - color: var(--amplify-components-button-primary-color); - --amplify-internal-button-disabled-border-color: var( - --amplify-components-button-primary-disabled-border-color - ); - --amplify-internal-button-disabled-background-color: var( - --amplify-components-button-primary-disabled-background-color - ); - --amplify-internal-button-disabled-color: var( - --amplify-components-button-primary-disabled-color - ); - --amplify-internal-button-loading-background-color: var( - --amplify-components-button-primary-loading-background-color - ); - --amplify-internal-button-loading-border-color: var( - --amplify-components-button-primary-loading-border-color - ); - --amplify-internal-button-loading-color: var( - --amplify-components-button-primary-loading-color - ); -} -.amplify-button--primary:hover { - background-color: var(--amplify-components-button-primary-hover-background-color); - border-color: var(--amplify-components-button-primary-hover-border-color); - color: var(--amplify-components-button-primary-hover-color); -} -.amplify-button--primary:focus { - background-color: var(--amplify-components-button-primary-focus-background-color); - border-color: var(--amplify-components-button-primary-focus-border-color); - color: var(--amplify-components-button-primary-focus-color); - box-shadow: var(--amplify-components-button-primary-focus-box-shadow); -} -.amplify-button--primary:active { - background-color: var(--amplify-components-button-primary-active-background-color); - border-color: var(--amplify-components-button-primary-active-border-color); - color: var(--amplify-components-button-primary-active-color); -} -.amplify-button--link { - border-width: var(--amplify-components-button-link-border-width); - background-color: var(--amplify-components-button-link-background-color); - color: var(--amplify-components-button-link-color); - --amplify-internal-button-disabled-text-decoration: none; - --amplify-internal-button-disabled-border-color: var( - --amplify-components-button-link-disabled-border-color - ); - --amplify-internal-button-disabled-background-color: var( - --amplify-components-button-link-disabled-background-color - ); - --amplify-internal-button-disabled-color: var( - --amplify-components-button-link-disabled-color - ); - --amplify-internal-button-loading-background-color: var( - --amplify-components-button-link-loading-background-color - ); - --amplify-internal-button-loading-border-color: var( - --amplify-components-button-link-loading-border-color - ); - --amplify-internal-button-loading-color: var( - --amplify-components-button-link-loading-color - ); - --amplify-internal-button-loading-text-decoration: none; -} -.amplify-button--link:hover { - background-color: var(--amplify-components-button-link-hover-background-color); - border-color: var(--amplify-components-button-link-hover-border-color); - color: var(--amplify-components-button-link-hover-color); -} -.amplify-button--link:focus { - background-color: var(--amplify-components-button-link-focus-background-color); - border-color: var(--amplify-components-button-link-focus-border-color); - color: var(--amplify-components-button-link-focus-color); - box-shadow: var(--amplify-components-button-link-focus-box-shadow); -} -.amplify-button--link:active { - background-color: var(--amplify-components-button-link-active-background-color); - border-color: var(--amplify-components-button-link-active-border-color); - color: var(--amplify-components-button-link-active-color); -} -.amplify-button--destructive { - border-width: var(--amplify-components-button-destructive-border-width); - background-color: var(--amplify-components-button-destructive-background-color); - border-color: var(--amplify-components-button-destructive-border-color); - color: var(--amplify-components-button-destructive-color); - --amplify-internal-button-disabled-border-color: var( - --amplify-components-button-destructive-disabled-border-color - ); - --amplify-internal-button-disabled-background-color: var( - --amplify-components-button-destructive-disabled-background-color - ); - --amplify-internal-button-disabled-color: var( - --amplify-components-button-destructive-disabled-color - ); - --amplify-internal-button-loading-background-color: var( - --amplify-components-button-destructive-loading-background-color - ); - --amplify-internal-button-loading-border-color: var( - --amplify-components-button-destructive-loading-border-color - ); - --amplify-internal-button-loading-color: var( - --amplify-components-button-destructive-loading-color - ); -} -.amplify-button--destructive:hover { - background-color: var(--amplify-components-button-destructive-hover-background-color); - border-color: var(--amplify-components-button-destructive-hover-border-color); - color: var(--amplify-components-button-destructive-hover-color); -} -.amplify-button--destructive:focus { - background-color: var(--amplify-components-button-destructive-focus-background-color); - border-color: var(--amplify-components-button-destructive-focus-border-color); - color: var(--amplify-components-button-destructive-focus-color); - box-shadow: var(--amplify-components-button-destructive-focus-box-shadow); -} -.amplify-button--destructive:active { - background-color: var(--amplify-components-button-destructive-active-background-color); - border-color: var(--amplify-components-button-destructive-active-border-color); - color: var(--amplify-components-button-destructive-active-color); -} -.amplify-button--warning { - background-color: var(--amplify-components-button-warning-background-color); - border-color: var(--amplify-components-button-warning-border-color); - border-width: var(--amplify-components-button-warning-border-width); - color: var(--amplify-components-button-warning-color); - --amplify-internal-button-disabled-text-decoration: none; - --amplify-internal-button-disabled-border-color: var( - --amplify-components-button-warning-disabled-border-color - ); - --amplify-internal-button-disabled-background-color: var( - --amplify-components-button-warning-disabled-background-color - ); - --amplify-internal-button-disabled-color: var( - --amplify-components-button-warning-disabled-color - ); - --amplify-internal-button-loading-background-color: var( - --amplify-components-button-warning-loading-background-color - ); - --amplify-internal-button-loading-border-color: var( - --amplify-components-button-warning-loading-border-color - ); - --amplify-internal-button-loading-color: var( - --amplify-components-button-warning-loading-color - ); - --amplify-internal-button-loading-text-decoration: none; -} -.amplify-button--warning:hover { - background-color: var(--amplify-components-button-warning-hover-background-color); - border-color: var(--amplify-components-button-warning-hover-border-color); - color: var(--amplify-components-button-warning-hover-color); -} -.amplify-button--warning:focus { - background-color: var(--amplify-components-button-warning-focus-background-color); - border-color: var(--amplify-components-button-warning-focus-border-color); - color: var(--amplify-components-button-warning-focus-color); - box-shadow: var(--amplify-components-button-warning-focus-box-shadow); -} -.amplify-button--warning:active { - background-color: var(--amplify-components-button-warning-active-background-color); - border-color: var(--amplify-components-button-warning-active-border-color); - color: var(--amplify-components-button-warning-active-color); -} -.amplify-button--small { - font-size: var(--amplify-components-button-small-font-size); - -webkit-padding-before: var(--amplify-components-button-small-padding-block-start); - padding-block-start: var(--amplify-components-button-small-padding-block-start); - -webkit-padding-after: var(--amplify-components-button-small-padding-block-end); - padding-block-end: var(--amplify-components-button-small-padding-block-end); - -webkit-padding-start: var(--amplify-components-button-small-padding-inline-start); - padding-inline-start: var(--amplify-components-button-small-padding-inline-start); - -webkit-padding-end: var(--amplify-components-button-small-padding-inline-end); - padding-inline-end: var(--amplify-components-button-small-padding-inline-end); -} -.amplify-button--large { - font-size: var(--amplify-components-button-large-font-size); - -webkit-padding-before: var(--amplify-components-button-large-padding-block-start); - padding-block-start: var(--amplify-components-button-large-padding-block-start); - -webkit-padding-after: var(--amplify-components-button-large-padding-block-end); - padding-block-end: var(--amplify-components-button-large-padding-block-end); - -webkit-padding-start: var(--amplify-components-button-large-padding-inline-start); - padding-inline-start: var(--amplify-components-button-large-padding-inline-start); - -webkit-padding-end: var(--amplify-components-button-large-padding-inline-end); - padding-inline-end: var(--amplify-components-button-large-padding-inline-end); -} -.amplify-button--disabled { - background-color: var(--amplify-internal-button-disabled-background-color); - border-color: var(--amplify-internal-button-disabled-border-color); - color: var(--amplify-internal-button-disabled-color); - -webkit-text-decoration: var(--amplify-internal-button-disabled-text-decoration); - text-decoration: var(--amplify-internal-button-disabled-text-decoration); - cursor: not-allowed; -} -.amplify-button--disabled:hover { - background-color: var(--amplify-internal-button-disabled-background-color); - border-color: var(--amplify-internal-button-disabled-border-color); - color: var(--amplify-internal-button-disabled-color); - -webkit-text-decoration: var(--amplify-internal-button-disabled-text-decoration); - text-decoration: var(--amplify-internal-button-disabled-text-decoration); -} -.amplify-button--disabled :focus { - background-color: var(--amplify-internal-button-disabled-background-color); - border-color: var(--amplify-internal-button-disabled-border-color); - color: var(--amplify-internal-button-disabled-color); - -webkit-text-decoration: var(--amplify-internal-button-disabled-text-decoration); - text-decoration: var(--amplify-internal-button-disabled-text-decoration); -} -.amplify-button--disabled:active { - background-color: var(--amplify-internal-button-disabled-background-color); - border-color: var(--amplify-internal-button-disabled-border-color); - color: var(--amplify-internal-button-disabled-color); - -webkit-text-decoration: var(--amplify-internal-button-disabled-text-decoration); - text-decoration: var(--amplify-internal-button-disabled-text-decoration); -} -.amplify-button--loading { - background-color: var(--amplify-internal-button-loading-background-color); - border-color: var(--amplify-internal-button-loading-border-color); - color: var(--amplify-components-button-loading-color); - -webkit-text-decoration: var(--amplify-internal-button-loading-text-decoration); - text-decoration: var(--amplify-internal-button-loading-text-decoration); -} -.amplify-button--loading:hover { - background-color: var(--amplify-internal-button-loading-background-color); - border-color: var(--amplify-internal-button-loading-border-color); - color: var(--amplify-components-button-loading-color); - -webkit-text-decoration: var(--amplify-internal-button-loading-text-decoration); - text-decoration: var(--amplify-internal-button-loading-text-decoration); -} -.amplify-button--loading:focus { - background-color: var(--amplify-internal-button-loading-background-color); - border-color: var(--amplify-internal-button-loading-border-color); - color: var(--amplify-components-button-loading-color); - -webkit-text-decoration: var(--amplify-internal-button-loading-text-decoration); - text-decoration: var(--amplify-internal-button-loading-text-decoration); -} -.amplify-button--loading:active { - background-color: var(--amplify-internal-button-loading-background-color); - border-color: var(--amplify-internal-button-loading-border-color); - color: var(--amplify-components-button-loading-color); - -webkit-text-decoration: var(--amplify-internal-button-loading-text-decoration); - text-decoration: var(--amplify-internal-button-loading-text-decoration); -} -.amplify-button__loader-wrapper { - align-items: var(--amplify-components-button-loader-wrapper-align-items); - gap: var(--amplify-components-button-loader-wrapper-gap); -} - -@media (prefers-reduced-motion: reduce) { - .amplify-button { - transition: none; - } -} -.amplify-field__description { - color: var(--amplify-components-fieldmessages-description-color); - font-style: var(--amplify-components-fieldmessages-description-font-style); - font-size: var(--amplify-components-fieldmessages-description-font-size); -} - -.amplify-field__error-message { - color: var(--amplify-components-fieldmessages-error-color); - font-size: var(--amplify-components-fieldmessages-error-font-size); -} - -.amplify-heading { - color: var(--amplify-components-heading-color); - line-height: var(--amplify-components-heading-line-height); - display: block; -} -.amplify-heading--truncated { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.amplify-heading--1 { - font-size: var(--amplify-components-heading-1-font-size); - font-weight: var(--amplify-components-heading-1-font-weight); -} - -.amplify-heading--2 { - font-size: var(--amplify-components-heading-2-font-size); - font-weight: var(--amplify-components-heading-2-font-weight); -} - -.amplify-heading--3 { - font-size: var(--amplify-components-heading-3-font-size); - font-weight: var(--amplify-components-heading-3-font-weight); -} - -.amplify-heading--4 { - font-size: var(--amplify-components-heading-4-font-size); - font-weight: var(--amplify-components-heading-4-font-weight); -} - -.amplify-heading--5 { - font-size: var(--amplify-components-heading-5-font-size); - font-weight: var(--amplify-components-heading-5-font-weight); -} - -.amplify-heading--6 { - font-size: var(--amplify-components-heading-6-font-size); - font-weight: var(--amplify-components-heading-6-font-weight); -} - -/* - * Icon base styles - */ -.amplify-icon { - display: inline-block; - vertical-align: middle; - fill: currentColor; - height: var(--amplify-components-icon-height); - line-height: var(--amplify-components-icon-line-height); -} -.amplify-icon > svg { - height: var(--amplify-components-icon-height); - width: var(--amplify-components-icon-height); -} - -.amplify-highlightmatch__highlighted { - font-weight: var(--amplify-components-highlightmatch-highlighted-font-weight); -} - -.amplify-input { - box-sizing: border-box; - color: var(--amplify-components-fieldcontrol-color); - font-size: var(--amplify-components-fieldcontrol-font-size); - line-height: var(--amplify-components-fieldcontrol-line-height); - -webkit-padding-before: var(--amplify-components-fieldcontrol-padding-block-start); - padding-block-start: var(--amplify-components-fieldcontrol-padding-block-start); - -webkit-padding-after: var(--amplify-components-fieldcontrol-padding-block-end); - padding-block-end: var(--amplify-components-fieldcontrol-padding-block-end); - -webkit-padding-start: var(--amplify-components-fieldcontrol-padding-inline-start); - padding-inline-start: var(--amplify-components-fieldcontrol-padding-inline-start); - -webkit-padding-end: var(--amplify-components-fieldcontrol-padding-inline-end); - padding-inline-end: var(--amplify-components-fieldcontrol-padding-inline-end); - transition: all var(--amplify-components-fieldcontrol-transition-duration); - width: 100%; - border-color: var(--amplify-components-fieldcontrol-border-color); - border-radius: var(--amplify-components-fieldcontrol-border-radius); - border-style: var(--amplify-components-fieldcontrol-border-style); - border-width: var(--amplify-components-fieldcontrol-border-width); - outline-color: var(--amplify-components-fieldcontrol-outline-color); - outline-style: var(--amplify-components-fieldcontrol-outline-style); - outline-width: var(--amplify-components-fieldcontrol-outline-width); - outline-offset: var(--amplify-components-fieldcontrol-outline-offset); - -webkit-user-select: text; - -moz-user-select: text; - user-select: text; - display: inline-flex; -} -.amplify-input:focus { - border-color: var(--amplify-components-fieldcontrol-focus-border-color); - box-shadow: var(--amplify-components-fieldcontrol-focus-box-shadow); -} -.amplify-input--small { - font-size: var(--amplify-components-fieldcontrol-small-font-size); - -webkit-padding-before: var(--amplify-components-fieldcontrol-small-padding-block-start); - padding-block-start: var(--amplify-components-fieldcontrol-small-padding-block-start); - -webkit-padding-after: var(--amplify-components-fieldcontrol-small-padding-block-end); - padding-block-end: var(--amplify-components-fieldcontrol-small-padding-block-end); - -webkit-padding-start: var(--amplify-components-fieldcontrol-small-padding-inline-start); - padding-inline-start: var(--amplify-components-fieldcontrol-small-padding-inline-start); - -webkit-padding-end: var(--amplify-components-fieldcontrol-small-padding-inline-end); - padding-inline-end: var(--amplify-components-fieldcontrol-small-padding-inline-end); -} -.amplify-input--large { - font-size: var(--amplify-components-fieldcontrol-large-font-size); - -webkit-padding-before: var(--amplify-components-fieldcontrol-large-padding-block-start); - padding-block-start: var(--amplify-components-fieldcontrol-large-padding-block-start); - -webkit-padding-after: var(--amplify-components-fieldcontrol-large-padding-block-end); - padding-block-end: var(--amplify-components-fieldcontrol-large-padding-block-end); - -webkit-padding-start: var(--amplify-components-fieldcontrol-large-padding-inline-start); - padding-inline-start: var(--amplify-components-fieldcontrol-large-padding-inline-start); - -webkit-padding-end: var(--amplify-components-fieldcontrol-large-padding-inline-end); - padding-inline-end: var(--amplify-components-fieldcontrol-large-padding-inline-end); -} -.amplify-input--error { - border-color: var(--amplify-components-fieldcontrol-error-border-color); -} -.amplify-input--error:focus { - border-color: var(--amplify-components-fieldcontrol-error-border-color); - box-shadow: var(--amplify-components-fieldcontrol-error-focus-box-shadow); -} -.amplify-input[disabled] { - color: var(--amplify-components-fieldcontrol-disabled-color); - cursor: var(--amplify-components-fieldcontrol-disabled-cursor); - border-color: var(--amplify-components-fieldcontrol-disabled-border-color); - background-color: var(--amplify-components-fieldcontrol-disabled-background-color); -} -.amplify-input--quiet { - -webkit-border-before: var(--amplify-components-fieldcontrol-quiet-border-block-start); - border-block-start: var(--amplify-components-fieldcontrol-quiet-border-block-start); - -webkit-border-start: var(--amplify-components-fieldcontrol-quiet-border-inline-start); - border-inline-start: var(--amplify-components-fieldcontrol-quiet-border-inline-start); - -webkit-border-end: var(--amplify-components-fieldcontrol-quiet-border-inline-end); - border-inline-end: var(--amplify-components-fieldcontrol-quiet-border-inline-end); - border-radius: var(--amplify-components-fieldcontrol-quiet-border-radius); -} -.amplify-input--quiet:focus { - border-block-end-color: var(--amplify-components-fieldcontrol-quiet-focus-border-block-end-color); - box-shadow: var(--amplify-components-fieldcontrol-quiet-focus-box-shadow); -} -.amplify-input--quiet[aria-invalid=true] { - border-block-end-color: var(--amplify-components-fieldcontrol-quiet-error-border-block-end-color); -} -.amplify-input--quiet[aria-invalid=true]:focus { - box-shadow: var(--amplify-components-fieldcontrol-quiet-error-focus-box-shadow); -} - -.amplify-textarea { - box-sizing: border-box; - color: var(--amplify-components-fieldcontrol-color); - font-size: var(--amplify-components-fieldcontrol-font-size); - line-height: var(--amplify-components-fieldcontrol-line-height); - -webkit-padding-before: var(--amplify-components-fieldcontrol-padding-block-start); - padding-block-start: var(--amplify-components-fieldcontrol-padding-block-start); - -webkit-padding-after: var(--amplify-components-fieldcontrol-padding-block-end); - padding-block-end: var(--amplify-components-fieldcontrol-padding-block-end); - -webkit-padding-start: var(--amplify-components-fieldcontrol-padding-inline-start); - padding-inline-start: var(--amplify-components-fieldcontrol-padding-inline-start); - -webkit-padding-end: var(--amplify-components-fieldcontrol-padding-inline-end); - padding-inline-end: var(--amplify-components-fieldcontrol-padding-inline-end); - transition: all var(--amplify-components-fieldcontrol-transition-duration); - width: 100%; - border-color: var(--amplify-components-fieldcontrol-border-color); - border-radius: var(--amplify-components-fieldcontrol-border-radius); - border-style: var(--amplify-components-fieldcontrol-border-style); - border-width: var(--amplify-components-fieldcontrol-border-width); - outline-color: var(--amplify-components-fieldcontrol-outline-color); - outline-style: var(--amplify-components-fieldcontrol-outline-style); - outline-width: var(--amplify-components-fieldcontrol-outline-width); - outline-offset: var(--amplify-components-fieldcontrol-outline-offset); - -webkit-user-select: text; - -moz-user-select: text; - user-select: text; - white-space: pre-wrap; -} -.amplify-textarea:focus { - border-color: var(--amplify-components-fieldcontrol-focus-border-color); - box-shadow: var(--amplify-components-fieldcontrol-focus-box-shadow); -} -.amplify-textarea--small { - font-size: var(--amplify-components-fieldcontrol-small-font-size); - -webkit-padding-before: var(--amplify-components-fieldcontrol-small-padding-block-start); - padding-block-start: var(--amplify-components-fieldcontrol-small-padding-block-start); - -webkit-padding-after: var(--amplify-components-fieldcontrol-small-padding-block-end); - padding-block-end: var(--amplify-components-fieldcontrol-small-padding-block-end); - -webkit-padding-start: var(--amplify-components-fieldcontrol-small-padding-inline-start); - padding-inline-start: var(--amplify-components-fieldcontrol-small-padding-inline-start); - -webkit-padding-end: var(--amplify-components-fieldcontrol-small-padding-inline-end); - padding-inline-end: var(--amplify-components-fieldcontrol-small-padding-inline-end); -} -.amplify-textarea--large { - font-size: var(--amplify-components-fieldcontrol-large-font-size); - -webkit-padding-before: var(--amplify-components-fieldcontrol-large-padding-block-start); - padding-block-start: var(--amplify-components-fieldcontrol-large-padding-block-start); - -webkit-padding-after: var(--amplify-components-fieldcontrol-large-padding-block-end); - padding-block-end: var(--amplify-components-fieldcontrol-large-padding-block-end); - -webkit-padding-start: var(--amplify-components-fieldcontrol-large-padding-inline-start); - padding-inline-start: var(--amplify-components-fieldcontrol-large-padding-inline-start); - -webkit-padding-end: var(--amplify-components-fieldcontrol-large-padding-inline-end); - padding-inline-end: var(--amplify-components-fieldcontrol-large-padding-inline-end); -} -.amplify-textarea--error { - border-color: var(--amplify-components-fieldcontrol-error-border-color); -} -.amplify-textarea--error:focus { - border-color: var(--amplify-components-fieldcontrol-error-border-color); - box-shadow: var(--amplify-components-fieldcontrol-error-focus-box-shadow); -} -.amplify-textarea[disabled] { - color: var(--amplify-components-fieldcontrol-disabled-color); - cursor: var(--amplify-components-fieldcontrol-disabled-cursor); - border-color: var(--amplify-components-fieldcontrol-disabled-border-color); - background-color: var(--amplify-components-fieldcontrol-disabled-background-color); -} -.amplify-textarea--quiet { - -webkit-border-before: var(--amplify-components-fieldcontrol-quiet-border-block-start); - border-block-start: var(--amplify-components-fieldcontrol-quiet-border-block-start); - -webkit-border-start: var(--amplify-components-fieldcontrol-quiet-border-inline-start); - border-inline-start: var(--amplify-components-fieldcontrol-quiet-border-inline-start); - -webkit-border-end: var(--amplify-components-fieldcontrol-quiet-border-inline-end); - border-inline-end: var(--amplify-components-fieldcontrol-quiet-border-inline-end); - border-radius: var(--amplify-components-fieldcontrol-quiet-border-radius); -} -.amplify-textarea--quiet:focus { - border-block-end-color: var(--amplify-components-fieldcontrol-quiet-focus-border-block-end-color); - box-shadow: var(--amplify-components-fieldcontrol-quiet-focus-box-shadow); -} -.amplify-textarea--quiet[aria-invalid=true] { - border-block-end-color: var(--amplify-components-fieldcontrol-quiet-error-border-block-end-color); -} -.amplify-textarea--quiet[aria-invalid=true]:focus { - box-shadow: var(--amplify-components-fieldcontrol-quiet-error-focus-box-shadow); -} - -.amplify-image { - height: var(--amplify-components-image-height); - max-width: var(--amplify-components-image-max-width); - -o-object-fit: var(--amplify-components-image-object-fit); - object-fit: var(--amplify-components-image-object-fit); - -o-object-position: var(--amplify-components-image-object-position); - object-position: var(--amplify-components-image-object-position); - overflow: clip; -} - -.amplify-link { - color: var(--amplify-components-link-color); - -webkit-text-decoration: var(--amplify-components-link-text-decoration); - text-decoration: var(--amplify-components-link-text-decoration); - cursor: pointer; -} -.amplify-link:visited { - color: var(--amplify-components-link-visited-color); - -webkit-text-decoration: var(--amplify-components-link-visited-text-decoration); - text-decoration: var(--amplify-components-link-visited-text-decoration); -} -.amplify-link:active { - color: var(--amplify-components-link-active-color); - -webkit-text-decoration: var(--amplify-components-link-active-text-decoration); - text-decoration: var(--amplify-components-link-active-text-decoration); -} -.amplify-link:focus { - color: var(--amplify-components-link-focus-color); - -webkit-text-decoration: var(--amplify-components-link-focus-text-decoration); - text-decoration: var(--amplify-components-link-focus-text-decoration); -} -.amplify-link:hover { - color: var(--amplify-components-link-hover-color); - -webkit-text-decoration: var(--amplify-components-link-hover-text-decoration); - text-decoration: var(--amplify-components-link-hover-text-decoration); -} - -.amplify-loader { - width: var(--amplify-components-loader-width); - height: var(--amplify-components-loader-height); - font-size: var(--amplify-components-loader-font-size); - fill: none; - stroke: var(--amplify-components-loader-stroke-empty); - --amplify-internal-loader-linear-font-size: var( - --amplify-components-loader-linear-font-size - ); - --amplify-internal-loader-linear-stroke-width: var( - --amplify-components-loader-linear-stroke-width - ); -} -.amplify-loader circle:last-of-type { - transform-origin: center center; - animation-name: amplify-loader-circular; - animation-timing-function: linear; - animation-iteration-count: infinite; - animation-duration: var(--amplify-components-loader-animation-duration); - stroke: var(--amplify-components-loader-stroke-filled); - stroke-linecap: var(--amplify-components-loader-stroke-linecap); -} -@media (prefers-reduced-motion) { - .amplify-loader circle:last-of-type { - animation: none; - stroke-dasharray: 100% 200%; - stroke-dashoffset: 50%; - } -} -.amplify-loader line:last-of-type { - stroke: var(--amplify-components-loader-linear-stroke-filled); - stroke-dasharray: 50% 200%; - animation-name: amplify-loader-linear; - animation-duration: var(--amplify-components-loader-linear-animation-duration); - animation-timing-function: linear; - animation-iteration-count: infinite; -} -@media (prefers-reduced-motion) { - .amplify-loader line:last-of-type { - animation: none; - stroke-dashoffset: -50%; - } -} -.amplify-loader--small { - width: var(--amplify-components-loader-small-width); - height: var(--amplify-components-loader-small-height); - font-size: var(--amplify-components-loader-small-font-size); - --amplify-internal-loader-linear-stroke-width: var( - --amplify-components-loader-linear-small-stroke-width - ); - --amplify-internal-loader-linear-font-size: var( - --amplify-components-loader-linear-small-font-size - ); -} -.amplify-loader--large { - width: var(--amplify-components-loader-large-width); - height: var(--amplify-components-loader-large-height); - font-size: var(--amplify-components-loader-large-font-size); - --amplify-internal-loader-linear-stroke-width: var( - --amplify-components-loader-linear-large-stroke-width - ); - --amplify-internal-loader-linear-font-size: var( - --amplify-components-loader-linear-large-font-size - ); -} -.amplify-loader--linear { - width: var(--amplify-components-loader-linear-width); - min-width: var(--amplify-components-loader-linear-min-width); - stroke: var(--amplify-components-loader-linear-stroke-empty); - stroke-linecap: var(--amplify-components-loader-linear-stroke-linecap); - stroke-width: var(--amplify-internal-loader-linear-stroke-width); - font-size: var(--amplify-internal-loader-linear-font-size); -} -.amplify-loader--determinate circle:last-of-type { - animation: none; - transform: rotate(-90deg); -} -.amplify-loader--determinate line:last-of-type { - animation: none; - stroke-dashoffset: 0%; - stroke-dasharray: none; -} -.amplify-loader__percentage-text { - fill: var(--amplify-components-loader-text-fill); - stroke: none; -} - -@keyframes amplify-loader-circular { - 0% { - stroke-dasharray: 100% 200%; - transform: rotate(120deg); - } - 50% { - stroke-dasharray: 20% 400%; - } - 100% { - stroke-dasharray: 100% 200%; - transform: rotate(480deg); - } -} -@keyframes amplify-loader-linear { - 0% { - stroke-dashoffset: 200%; - } - 100% { - stroke-dashoffset: -50%; - } -} -.amplify-placeholder { - animation-direction: alternate; - animation-duration: var(--amplify-components-placeholder-transition-duration); - animation-iteration-count: infinite; - animation-name: amplify-placeholder-loading; - border-radius: var(--amplify-components-placeholder-border-radius); - height: var(--amplify-components-placeholder-default-height); - width: 100%; - display: block; -} -.amplify-placeholder--small { - height: var(--amplify-components-placeholder-small-height); -} -.amplify-placeholder--large { - height: var(--amplify-components-placeholder-large-height); -} - -@keyframes amplify-placeholder-loading { - 0% { - background-color: var(--amplify-components-placeholder-start-color); - } - 100% { - background-color: var(--amplify-components-placeholder-end-color); - } -} -@media (prefers-reduced-motion: reduce) { - .amplify-placeholder { - animation: none; - background-color: var(--amplify-components-placeholder-end-color); - } -} -[data-amplify-copy] { - display: flex; - font-size: var(--amplify-components-copy-font-size); - gap: var(--amplify-components-copy-gap); - justify-content: center; - align-items: center; - word-break: break-all; -} - -[data-amplify-copy-svg] { - cursor: pointer; - position: relative; -} -[data-amplify-copy-svg] path { - fill: var(--amplify-components-copy-svg-path-fill); -} -[data-amplify-copy-svg]:hover [data-amplify-copy-tooltip] { - visibility: visible; - font-size: var(--amplify-components-copy-tool-tip-font-size); -} - -[data-amplify-copy-tooltip] { - visibility: hidden; - position: absolute; - bottom: var(--amplify-components-copy-tool-tip-bottom); - color: var(--amplify-components-copy-tool-tip-color); -} - -.amplify-alert { - align-items: var(--amplify-components-alert-align-items); - background-color: var(--amplify-components-alert-background-color); - color: var(--amplify-components-alert-color); - justify-content: var(--amplify-components-alert-justify-content); - padding-block: var(--amplify-components-alert-padding-block); - padding-inline: var(--amplify-components-alert-padding-inline); -} -.amplify-alert--info { - color: var(--amplify-components-alert-info-color); - background-color: var(--amplify-components-alert-info-background-color); -} -.amplify-alert--error { - color: var(--amplify-components-alert-error-color); - background-color: var(--amplify-components-alert-error-background-color); -} -.amplify-alert--warning { - color: var(--amplify-components-alert-warning-color); - background-color: var(--amplify-components-alert-warning-background-color); -} -.amplify-alert--success { - color: var(--amplify-components-alert-success-color); - background-color: var(--amplify-components-alert-success-background-color); -} - -.amplify-alert__icon { - font-size: var(--amplify-components-alert-icon-size); -} - -.amplify-alert__heading { - display: block; - font-weight: var(--amplify-components-alert-heading-font-weight); - font-size: var(--amplify-components-alert-heading-font-size); -} - -.amplify-alert__body { - color: inherit; - display: block; -} - -.amplify-alert__dismiss { - color: inherit; -} - -.amplify-autocomplete__menu__option, .amplify-autocomplete__menu--loading, .amplify-autocomplete__menu--empty { - padding-block: var(--amplify-components-autocomplete-menu-space-shared-padding-block); - padding-inline: var(--amplify-components-autocomplete-menu-space-shared-padding-inline); -} - -.amplify-autocomplete { - position: relative; - display: block; -} - -.amplify-autocomplete__menu { - position: absolute; - z-index: 999999; - width: var(--amplify-components-autocomplete-menu-width); - -webkit-margin-before: var(--amplify-components-autocomplete-menu-margin-block-start); - margin-block-start: var(--amplify-components-autocomplete-menu-margin-block-start); - background-color: var(--amplify-components-autocomplete-menu-background-color); - border-color: var(--amplify-components-autocomplete-menu-border-color); - border-width: var(--amplify-components-autocomplete-menu-border-width); - border-style: var(--amplify-components-autocomplete-menu-border-style); - border-radius: var(--amplify-components-autocomplete-menu-border-radius); -} -.amplify-autocomplete__menu--empty { - display: var(--amplify-components-autocomplete-menu-empty-display); -} -.amplify-autocomplete__menu--loading { - display: var(--amplify-components-autocomplete-menu-loading-display); - align-items: var(--amplify-components-autocomplete-menu-loading-align-items); - gap: var(--amplify-components-autocomplete-menu-loading-gap); -} -.amplify-autocomplete__menu__options { - position: relative; - overscroll-behavior: contain; - display: var(--amplify-components-autocomplete-menu-options-display); - flex-direction: var(--amplify-components-autocomplete-menu-options-flex-direction); - max-height: var(--amplify-components-autocomplete-menu-options-max-height); -} -.amplify-autocomplete__menu__option { - background-color: var(--amplify-components-autocomplete-menu-option-background-color); - color: var(--amplify-components-autocomplete-menu-option-color); - cursor: var(--amplify-components-autocomplete-menu-option-cursor); - transition-duration: var(--amplify-components-autocomplete-menu-option-transition-duration); - transition-property: var(--amplify-components-autocomplete-menu-option-transition-property); - transition-timing-function: var(--amplify-components-autocomplete-menu-option-transition-timing-function); -} -.amplify-autocomplete__menu__option--active { - background-color: var(--amplify-components-autocomplete-menu-option-active-background-color); - color: var(--amplify-components-autocomplete-menu-option-active-color); -} - -/* Center by default */ -[data-amplify-authenticator] { - display: grid; -} -[data-amplify-authenticator][data-variation=modal] { - overflow-y: auto; - width: var(--amplify-components-authenticator-modal-width); - height: var(--amplify-components-authenticator-modal-height); - background-color: var(--amplify-components-authenticator-modal-background-color); - position: fixed; - top: var(--amplify-components-authenticator-modal-top); - left: var(--amplify-components-authenticator-modal-left); - /* Having a z-index at least "wins" by default */ - z-index: 1; -} -[data-amplify-authenticator] [data-amplify-container] { - place-self: center; -} -@media (min-width: 30rem) { - [data-amplify-authenticator] [data-amplify-container] { - width: var(--amplify-components-authenticator-container-width-max); - } -} -[data-amplify-authenticator] [data-amplify-router] { - background-color: var(--amplify-components-authenticator-router-background-color); - box-shadow: var(--amplify-components-authenticator-router-box-shadow); - border-color: var(--amplify-components-authenticator-router-border-color); - border-width: var(--amplify-components-authenticator-router-border-width); - border-style: var(--amplify-components-authenticator-router-border-style); -} -[data-amplify-authenticator] [data-amplify-footer] { - padding-bottom: var(--amplify-components-authenticator-footer-padding-bottom); - text-align: center; -} -[data-amplify-authenticator] [data-amplify-form] { - padding: var(--amplify-components-authenticator-form-padding); -} -[data-amplify-authenticator] [data-state=inactive] { - background-color: var(--amplify-components-authenticator-state-inactive-background-color); -} -@media (max-width: 26rem) { - [data-amplify-authenticator] [data-amplify-sign-up-errors] { - font-size: 0.688rem; - } -} - -.amplify-authenticator__column { - display: flex; - flex-direction: column; -} - -.amplify-authenticator__subtitle { - margin-bottom: var(--amplify-space-medium); -} - -.amplify-authenticator__heading { - font-size: var(--amplify-font-sizes-xl); -} - -.amplify-authenticator__federated-text { - align-self: center; -} - -.amplify-card { - background-color: var(--amplify-components-card-background-color); - border-radius: var(--amplify-components-card-border-radius); - border-width: var(--amplify-components-card-border-width); - border-style: var(--amplify-components-card-border-style); - border-color: var(--amplify-components-card-border-color); - box-shadow: var(--amplify-components-card-box-shadow); - display: block; - padding: var(--amplify-components-card-padding); -} -.amplify-card--outlined { - background-color: var(--amplify-components-card-outlined-background-color); - border-radius: var(--amplify-components-card-outlined-border-radius); - border-width: var(--amplify-components-card-outlined-border-width); - border-style: var(--amplify-components-card-outlined-border-style); - border-color: var(--amplify-components-card-outlined-border-color); - box-shadow: var(--amplify-components-card-outlined-box-shadow); -} -.amplify-card--elevated { - background-color: var(--amplify-components-card-elevated-background-color); - border-radius: var(--amplify-components-card-elevated-border-radius); - border-width: var(--amplify-components-card-elevated-border-width); - border-style: var(--amplify-components-card-elevated-border-style); - border-color: var(--amplify-components-card-elevated-border-color); - box-shadow: var(--amplify-components-card-elevated-box-shadow); -} - -.amplify-collection { - flex-direction: column; -} -.amplify-collection-pagination { - justify-content: center; - --amplify-components-pagination-current-color: var( - --amplify-components-collection-pagination-current-color - ); - --amplify-components-pagination-current-background-color: var( - --amplify-components-collection-pagination-current-background-color - ); - --amplify-components-pagination-button-color: var( - --amplify-components-collection-pagination-button-color - ); - --amplify-components-pagination-button-hover-color: var( - --amplify-components-collection-pagination-button-hover-color - ); - --amplify-components-pagination-button-hover-background-color: var( - --amplify-components-collection-pagination-button-hover-background-color - ); - --amplify-components-pagination-button-disabled-color: var( - --amplify-components-collection-pagination-button-disabled-color - ); -} -.amplify-collection-search { - flex-direction: row; - justify-content: center; - --amplify-components-searchfield-input-color: var( - --amplify-components-collection-search-input-color - ); - --amplify-components-searchfield-button-color: var( - --amplify-components-collection-search-button-color - ); - --amplify-components-searchfield-button-active-background-color: var( - --amplify-components-collection-search-button-active-background-color - ); - --amplify-components-searchfield-button-active-border-color: var( - --amplify-components-collection-search-button-active-border-color - ); - --amplify-components-searchfield-button-active-color: var( - --amplify-components-collection-search-button-active-color - ); - --amplify-components-searchfield-button-disabled-background-color: var( - --amplify-components-collection-search-button-disabled-background-color - ); - --amplify-components-searchfield-button-disabled-border-color: var( - --amplify-components-collection-search-button-disabled-border-color - ); - --amplify-components-searchfield-button-disabled-color: var( - --amplify-components-collection-search-button-disabled-color - ); - --amplify-components-searchfield-button-focus-background-color: var( - --amplify-components-collection-search-button-focus-background-color - ); - --amplify-components-searchfield-button-focus-border-color: var( - --amplify-components-collection-search-button-focus-border-color - ); - --amplify-components-searchfield-button-focus-color: var( - --amplify-components-collection-search-button-focus-color - ); - --amplify-components-searchfield-button-hover-background-color: var( - --amplify-components-collection-search-button-hover-background-color - ); - --amplify-components-searchfield-button-hover-border-color: var( - --amplify-components-collection-search-button-hover-border-color - ); - --amplify-components-searchfield-button-hover-color: var( - --amplify-components-collection-search-button-hover-color - ); -} - -.amplify-checkbox { - cursor: var(--amplify-components-checkbox-cursor); - align-items: var(--amplify-components-checkbox-align-items); - flex-direction: row-reverse; - gap: inherit; -} -.amplify-checkbox--disabled { - cursor: var(--amplify-components-checkbox-disabled-cursor); -} - -.amplify-checkbox__button { - position: var(--amplify-components-checkbox-button-position); - align-items: var(--amplify-components-checkbox-button-align-items); - justify-content: var(--amplify-components-checkbox-button-justify-content); - color: var(--amplify-components-checkbox-button-color); - --amplify-internal-checkbox_button-focused-before-border-color: var( - --amplify-components-checkbox-button-focus-border-color - ); - --amplify-internal-checkbox_button-focused-before-box-shadow: var( - --amplify-components-checkbox-button-focus-box-shadow - ); -} -.amplify-checkbox__button::before { - content: ""; - display: inline-block; - position: absolute; - box-sizing: border-box; - width: var(--amplify-components-checkbox-button-before-width); - height: var(--amplify-components-checkbox-button-before-height); - border-width: var(--amplify-components-checkbox-button-before-border-width); - border-radius: var(--amplify-components-checkbox-button-before-border-radius); - border-style: var(--amplify-components-checkbox-button-before-border-style); - border-color: var(--amplify-components-checkbox-button-before-border-color); -} -.amplify-checkbox__button--focused::before { - outline-color: var(--amplify-components-checkbox-button-focus-outline-color); - outline-style: var(--amplify-components-checkbox-button-focus-outline-style); - outline-width: var(--amplify-components-checkbox-button-focus-outline-width); - outline-offset: var(--amplify-components-checkbox-button-focus-outline-offset); - border-color: var(--amplify-internal-checkbox_button-focused-before-border-color); - box-shadow: var(--amplify-internal-checkbox_button-focused-before-box-shadow); -} -.amplify-checkbox__button--error { - --amplify-internal-checkbox_button-focused-before-border-color: var( - --amplify-components-checkbox-button-error-focus-border-color - ); - --amplify-internal-checkbox_button-focused-before-box-shadow: var( - --amplify-components-checkbox-button-error-focus-box-shadow - ); -} -.amplify-checkbox__button--error::before { - border-color: var(--amplify-components-checkbox-button-error-border-color); -} -.amplify-checkbox__button--disabled::before { - border-color: var(--amplify-components-checkbox-button-disabled-border-color); -} - -.amplify-checkbox__icon { - background-color: var(--amplify-components-checkbox-icon-background-color); - opacity: var(--amplify-components-checkbox-icon-opacity); - transform: var(--amplify-components-checkbox-icon-transform); - border-radius: var(--amplify-components-checkbox-icon-border-radius); - transition-property: var(--amplify-components-checkbox-icon-transition-property); - transition-duration: var(--amplify-components-checkbox-icon-transition-duration); - transition-timing-function: var(--amplify-components-checkbox-icon-transition-timing-function); - --amplify-internal-checkbox-icon-disabled-background-color: var( - --amplify-components-checkbox-icon-background-color - ); -} -.amplify-checkbox__icon--checked { - opacity: var(--amplify-components-checkbox-icon-checked-opacity); - transform: var(--amplify-components-checkbox-icon-checked-transform); - --amplify-internal-checkbox-icon-disabled-background-color: var( - --amplify-components-checkbox-icon-checked-disabled-background-color - ); -} -.amplify-checkbox__icon--indeterminate { - opacity: var(--amplify-components-checkbox-icon-indeterminate-opacity); - transform: var(--amplify-components-checkbox-icon-indeterminate-transform); - --amplify-internal-checkbox-icon-disabled-background-color: var( - --amplify-components-checkbox-icon-indeterminate-disabled-background-color - ); -} -.amplify-checkbox__icon--disabled { - background-color: var(--amplify-internal-checkbox-icon-disabled-background-color); -} - -.amplify-checkbox__label[data-disabled=true] { - color: var(--amplify-components-checkbox-label-disabled-color); -} - -.amplify-checkboxfield { - align-content: var(--amplify-components-checkboxfield-align-content); - align-items: var(--amplify-components-checkboxfield-align-items); - flex-direction: var(--amplify-components-checkboxfield-flex-direction); - justify-content: var(--amplify-components-checkboxfield-justify-content); -} - -.amplify-dialcodeselect { - height: var(--amplify-components-countrycodeselect-height); -} - -.amplify-divider { - border-color: var(--amplify-components-divider-border-color); - border-style: var(--amplify-components-divider-border-style); - border-width: 0; - opacity: var(--amplify-components-divider-opacity); - padding: 0; - display: block; - --amplify-internal-divider-size: var( - --amplify-components-divider-border-width - ); - position: relative; - text-align: center; -} -.amplify-divider--small { - --amplify-internal-divider-size: var( - --amplify-components-divider-small-border-width - ); -} -.amplify-divider--large { - --amplify-internal-divider-size: var( - --amplify-components-divider-large-border-width - ); -} -.amplify-divider--horizontal { - width: 100%; - border-bottom-width: var(--amplify-internal-divider-size); -} -.amplify-divider--vertical { - border-left-width: var(--amplify-internal-divider-size); -} -.amplify-divider--label { - display: flex; - justify-content: center; -} -.amplify-divider--label::after { - content: attr(data-label); - position: absolute; - transform: translateY(-50%); - font-size: var(--amplify-components-divider-label-font-size); - padding-inline: var(--amplify-components-divider-label-padding-inline); - background-color: var(--amplify-components-divider-label-background-color); - color: var(--amplify-components-divider-label-color); -} -.amplify-divider--label[aria-orientation=vertical] { - flex-direction: column; -} -.amplify-divider--label[aria-orientation=vertical]::after { - top: auto; - transform: translateX(-50%); - padding-block: 0; - padding-inline: 0; -} - -.amplify-expander { - display: block; - background-color: var(--amplify-components-expander-background-color); - border-radius: var(--amplify-components-expander-border-radius); - box-shadow: var(--amplify-components-expander-box-shadow); - width: var(--amplify-components-expander-width); -} - -.amplify-expander__item { - display: block; - overflow: hidden; - box-shadow: var(--amplify-components-expander-item-box-shadow); -} -.amplify-expander__item:first-of-type { - border-start-start-radius: var(--amplify-components-expander-item-border-start-start-radius); - border-start-end-radius: var(--amplify-components-expander-item-border-start-end-radius); -} -@supports not (border-start-start-radius: var(--amplify-components-expander-item-border-start-start-radius)) { - .amplify-expander__item:first-of-type { - border-top-left-radius: var(--amplify-components-expander-item-border-top-left-radius); - border-top-right-radius: var(--amplify-components-expander-item-border-top-right-radius); - } -} -.amplify-expander__item:last-of-type { - box-shadow: none; - border-end-start-radius: var(--amplify-components-expander-item-border-end-start-radius); - border-end-end-radius: var(--amplify-components-expander-item-border-end-end-radius); -} -@supports not (border-end-start-radius: var(--amplify-components-expander-item-border-end-start-radius)) { - .amplify-expander__item:last-of-type { - border-bottom-left-radius: var(--amplify-components-expander-item-border-bottom-left-radius); - border-bottom-right-radius: var(--amplify-components-expander-item-border-bottom-right-radius); - } -} -.amplify-expander__item:focus-within { - box-shadow: var(--amplify-components-expander-item-focus-box-shadow); -} - -.amplify-expander__header { - display: flex; - box-shadow: var(--amplify-components-expander-header-box-shadow); -} - -.amplify-expander__trigger { - flex: 1; - display: flex; - min-height: var(--amplify-components-expander-trigger-min-height); - -webkit-padding-start: var(--amplify-components-expander-trigger-padding-inline-start); - padding-inline-start: var(--amplify-components-expander-trigger-padding-inline-start); - -webkit-padding-end: var(--amplify-components-expander-trigger-padding-inline-end); - padding-inline-end: var(--amplify-components-expander-trigger-padding-inline-end); - align-items: var(--amplify-components-expander-trigger-align-items); - justify-content: var(--amplify-components-expander-trigger-justify-content); -} -.amplify-expander__trigger:hover { - background-color: var(--amplify-components-expander-trigger-hover-background-color); -} - -.amplify-expander__content { - display: block; - -webkit-padding-start: var(--amplify-components-expander-content-padding-inline-start); - padding-inline-start: var(--amplify-components-expander-content-padding-inline-start); - -webkit-padding-end: var(--amplify-components-expander-content-padding-inline-end); - padding-inline-end: var(--amplify-components-expander-content-padding-inline-end); -} -.amplify-expander__content[data-state=open] { - animation-name: amplify-expander-slide-down; - animation-duration: var(--amplify-components-expander-content-open-animation-duration); - animation-timing-function: var(--amplify-components-expander-content-open-animation-timing-function); -} -.amplify-expander__content[data-state=closed] { - animation-name: amplify-expander-slide-up; - animation-duration: var(--amplify-components-expander-content-closed-animation-duration); - animation-timing-function: var(--amplify-components-expander-content-closed-animation-timing-function); -} - -.amplify-expander__content__text { - display: block; - color: var(--amplify-components-expander-content-text-color); - -webkit-padding-before: var(--amplify-components-expander-content-text-padding-block-start); - padding-block-start: var(--amplify-components-expander-content-text-padding-block-start); - -webkit-padding-after: var(--amplify-components-expander-content-text-padding-block-end); - padding-block-end: var(--amplify-components-expander-content-text-padding-block-end); -} - -.amplify-expander__icon { - transition-property: transform; - transition-duration: var(--amplify-components-expander-icon-transition-duration); - transition-timing-function: var(--amplify-components-expander-icon-transition-timing-function); -} -[data-state=open] .amplify-expander__icon { - transform: rotate(180deg); -} - -@keyframes amplify-expander-slide-down { - from { - height: 0; - } - to { - height: auto; - } -} -@keyframes amplify-expander-slide-up { - from { - height: auto; - } - to { - height: 0; - } -} -.amplify-field { - font-size: var(--amplify-components-field-font-size); - gap: var(--amplify-components-field-gap); -} -.amplify-field--small { - font-size: var(--amplify-components-field-small-font-size); - gap: var(--amplify-components-field-small-gap); -} -.amplify-field--large { - font-size: var(--amplify-components-field-large-font-size); - gap: var(--amplify-components-field-large-gap); -} - -.amplify-label { - color: var(--amplify-components-field-label-color); -} - -.amplify-field-group__outer-end .amplify-select__wrapper .amplify-select, .amplify-field-group__outer-end .amplify-field-group__control, .amplify-field-group__outer-start .amplify-select__wrapper:not(:first-child) .amplify-select:not(:first-child), .amplify-field-group__outer-start--quiet .amplify-field-group__control, .amplify-field-group__outer-start .amplify-field-group__control:not(:first-child), .amplify-field-group :not(:first-child) .amplify-input { - border-start-start-radius: 0; - border-end-start-radius: 0; -} -@supports not (border-start-start-radius: 0) { - .amplify-field-group__outer-end .amplify-select__wrapper .amplify-select, .amplify-field-group__outer-end .amplify-field-group__control, .amplify-field-group__outer-start .amplify-select__wrapper:not(:first-child) .amplify-select:not(:first-child), .amplify-field-group__outer-start--quiet .amplify-field-group__control, .amplify-field-group__outer-start .amplify-field-group__control:not(:first-child), .amplify-field-group :not(:first-child) .amplify-input { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } -} - -.amplify-field-group__outer-end .amplify-select__wrapper:not(:last-child) .amplify-select, .amplify-field-group__outer-end--quiet .amplify-field-group__control, .amplify-field-group__outer-end .amplify-field-group__control:not(:last-child), .amplify-field-group__outer-start .amplify-select__wrapper .amplify-select, .amplify-field-group__outer-start .amplify-field-group__control, .amplify-field-group :not(:last-child) .amplify-input { - border-end-end-radius: 0; - border-start-end-radius: 0; -} -@supports not (border-end-end-radius: 0) { - .amplify-field-group__outer-end .amplify-select__wrapper:not(:last-child) .amplify-select, .amplify-field-group__outer-end--quiet .amplify-field-group__control, .amplify-field-group__outer-end .amplify-field-group__control:not(:last-child), .amplify-field-group__outer-start .amplify-select__wrapper .amplify-select, .amplify-field-group__outer-start .amplify-field-group__control, .amplify-field-group :not(:last-child) .amplify-input { - border-bottom-right-radius: 0; - border-top-right-radius: 0; - } -} - -.amplify-field-group { - gap: var(--amplify-components-fieldgroup-gap); - align-self: stretch; -} -.amplify-field-group--horizontal { - flex-direction: row; -} -.amplify-field-group--vertical { - flex-direction: column; - align-items: var(--amplify-components-fieldgroup-vertical-align-items); -} -.amplify-field-group__outer-start, -.amplify-field-group__outer-end { - display: flex; - align-items: var(--amplify-components-fieldgroup-outer-align-items); -} -.amplify-field-group__outer-start .amplify-field-group__control, -.amplify-field-group__outer-end .amplify-field-group__control { - height: 100%; -} - -/** - * Outer field group components - */ -.amplify-field-group__outer-start .amplify-field-group__control:not(:focus) { - border-inline-end-color: transparent; -} -.amplify-field-group__outer-start .amplify-field-group__control:focus { - z-index: 1; -} -.amplify-field-group__outer-start--quiet .amplify-field-group__control:not(:focus) { - border-block-start-color: transparent; - border-inline-start-color: transparent; -} -.amplify-field-group__outer-end .amplify-field-group__control:not(:focus) { - border-inline-start-color: transparent; -} -.amplify-field-group__outer-end .amplify-field-group__control:focus { - z-index: 1; -} -.amplify-field-group__outer-end--quiet .amplify-field-group__control:not(:focus) { - border-block-start-color: transparent; - border-inline-end-color: transparent; -} -/** - * Inner field group components - */ -.amplify-field-group__field-wrapper { - position: relative; - width: 100%; -} -.amplify-field-group__field-wrapper--vertical { - width: -moz-fit-content; - width: fit-content; -} - -.amplify-field-group__inner-end, -.amplify-field-group__inner-start { - position: absolute; - top: 0; - height: 100%; - pointer-events: none; -} -.amplify-field-group__inner-end .amplify-button, -.amplify-field-group__inner-start .amplify-button { - pointer-events: all; - height: 100%; -} - -.amplify-field-group__inner-end { - right: 0; - left: auto; -} - -.amplify-field-group__inner-start { - right: auto; - left: 0; -} - -html[dir=rtl] .amplify-field-group__inner-end { - right: auto; - left: 0; -} -html[dir=rtl] .amplify-field-group__inner-start { - left: auto; - right: 0; -} - -.amplify-field-group--has-inner-end .amplify-input { - -webkit-padding-end: calc(var(--amplify-components-fieldcontrol-padding-inline-end) * 3); - padding-inline-end: calc(var(--amplify-components-fieldcontrol-padding-inline-end) * 3); -} - -.amplify-field-group--has-inner-start .amplify-input { - -webkit-padding-start: calc(var(--amplify-components-fieldcontrol-padding-inline-start) * 3); - padding-inline-start: calc(var(--amplify-components-fieldcontrol-padding-inline-start) * 3); -} - -/** - * Inner icon (non-button) component styling requires additional styling - */ -.amplify-field-group__icon:not(.amplify-field-group__icon-button) { - display: flex; - -webkit-padding-start: var(--amplify-components-fieldcontrol-padding-inline-start); - padding-inline-start: var(--amplify-components-fieldcontrol-padding-inline-start); - -webkit-padding-end: var(--amplify-components-fieldcontrol-padding-inline-start); - padding-inline-end: var(--amplify-components-fieldcontrol-padding-inline-start); - flex-direction: column; - justify-content: center; - height: 100%; -} - -.amplify-fileuploader__dropzone { - background-color: var(--amplify-components-fileuploader-dropzone-background-color); - border-color: var(--amplify-components-fileuploader-dropzone-border-color); - border-radius: var(--amplify-components-fileuploader-dropzone-border-radius); - border-style: var(--amplify-components-fileuploader-dropzone-border-style); - border-width: var(--amplify-components-fileuploader-dropzone-border-width); - text-align: var(--amplify-components-fileuploader-dropzone-text-align); - padding-block: var(--amplify-components-fileuploader-dropzone-padding-block); - padding-inline: var(--amplify-components-fileuploader-dropzone-padding-inline); - display: flex; - flex-direction: column; - align-items: center; - gap: var(--amplify-components-fileuploader-dropzone-gap); -} -.amplify-fileuploader__dropzone--small { - flex-direction: row; - justify-content: center; -} -.amplify-fileuploader__dropzone--active { - border-color: var(--amplify-components-fileuploader-dropzone-active-border-color); - border-width: var(--amplify-components-fileuploader-dropzone-active-border-width); - background-color: var(--amplify-components-fileuploader-dropzone-active-background-color); -} -.amplify-fileuploader__dropzone__icon { - font-size: var(--amplify-components-fileuploader-dropzone-icon-font-size); - color: var(--amplify-components-fileuploader-dropzone-icon-color); -} -.amplify-fileuploader__dropzone__text { - color: var(--amplify-components-fileuploader-dropzone-text-color); - font-size: var(--amplify-components-fileuploader-dropzone-text-font-size); - font-weight: var(--amplify-components-fileuploader-dropzone-text-font-weight); -} -.amplify-fileuploader__file { - position: relative; - border-width: var(--amplify-components-fileuploader-file-border-width); - border-style: var(--amplify-components-fileuploader-file-border-style); - border-color: var(--amplify-components-fileuploader-file-border-color); - border-radius: var(--amplify-components-fileuploader-file-border-radius); - display: flex; - flex-direction: column; - padding-inline: var(--amplify-components-fileuploader-file-padding-inline); - padding-block: var(--amplify-components-fileuploader-file-padding-block); - align-items: var(--amplify-components-fileuploader-file-align-items); -} -.amplify-fileuploader__file__wrapper { - width: 100%; - display: flex; - flex-direction: row; - align-items: center; - gap: var(--amplify-components-fileuploader-file-gap); -} -.amplify-fileuploader__file__name { - text-overflow: ellipsis; - overflow: hidden; - font-weight: var(--amplify-components-fileuploader-file-name-font-weight); - font-size: var(--amplify-components-fileuploader-file-name-font-size); - color: var(--amplify-components-fileuploader-file-name-color); -} -.amplify-fileuploader__file__size { - font-weight: var(--amplify-components-fileuploader-file-size-font-weight); - font-size: var(--amplify-components-fileuploader-file-size-font-size); - color: var(--amplify-components-fileuploader-file-size-color); -} -.amplify-fileuploader__file__main { - flex: 1; - white-space: nowrap; - overflow: hidden; -} -.amplify-fileuploader__file__image { - position: relative; - display: flex; - align-items: center; - justify-content: center; - width: var(--amplify-components-fileuploader-file-image-width); - height: var(--amplify-components-fileuploader-file-image-height); - background-color: var(--amplify-components-fileuploader-file-image-background-color); - border-radius: var(--amplify-components-fileuploader-file-image-border-radius); - color: var(--amplify-components-fileuploader-file-image-color); -} -.amplify-fileuploader__file__image img { - max-height: 100%; -} -.amplify-fileuploader__file__status--error { - color: var(--amplify-colors-font-error); - font-size: var(--amplify-components-fileuploader-file-size-font-size); -} -.amplify-fileuploader__file__status--success { - color: var(--amplify-colors-font-success); -} -.amplify-fileuploader__loader { - stroke-linecap: var(--amplify-components-fileuploader-loader-stroke-linecap); - stroke: var(--amplify-components-fileuploader-loader-stroke-empty); - stroke-width: var(--amplify-components-fileuploader-loader-stroke-width); - height: var(--amplify-components-fileuploader-loader-stroke-width); - --amplify-components-loader-linear-stroke-filled: var( - --amplify-components-fileuploader-loader-stroke-filled - ); - overflow: hidden; - position: absolute; - bottom: 0; - left: 0; - width: 100%; -} -.amplify-fileuploader__previewer { - display: block; - max-width: var(--amplify-components-fileuploader-previewer-max-width); - background-color: var(--amplify-components-fileuploader-previewer-background-color); - border-width: var(--amplify-components-fileuploader-previewer-border-width); - border-style: var(--amplify-components-fileuploader-previewer-border-style); - border-color: var(--amplify-components-fileuploader-previewer-border-color); - border-radius: var(--amplify-components-fileuploader-previewer-border-radius); - padding-inline: var(--amplify-components-fileuploader-previewer-padding-inline); - padding-block: var(--amplify-components-fileuploader-previewer-padding-block); -} -.amplify-fileuploader__previewer__text { - font-weight: var(--amplify-components-fileuploader-previewer-text-font-weight); - font-size: var(--amplify-components-fileuploader-previewer-text-font-size); - color: var(--amplify-components-fileuploader-previewer-text-color); -} -.amplify-fileuploader__previewer__body { - display: flex; - flex-direction: column; - max-height: var(--amplify-components-fileuploader-previewer-max-height); - max-width: var(--amplify-components-fileuploader-previewer-max-width); - overflow: auto; - gap: var(--amplify-components-fileuploader-previewer-body-gap); - padding-inline: var(--amplify-components-fileuploader-previewer-body-padding-inline); - padding-block: var(--amplify-components-fileuploader-previewer-body-padding-block); -} -.amplify-fileuploader__previewer__footer { - max-width: var(--amplify-components-fileuploader-previewer-max-width); - border-top-width: var(--amplify-components-fileuploader-previewer-footer-border-width); - border-top-style: var(--amplify-components-fileuploader-previewer-footer-border-style); - border-top-color: var(--amplify-components-fileuploader-previewer-footer-border-color); - padding-inline: var(--amplify-components-fileuploader-previewer-footer-padding-inline); - padding-block: var(--amplify-components-fileuploader-previewer-footer-padding-block); - position: relative; - display: flex; - flex-direction: row; - justify-content: var(--amplify-components-fileuploader-previewer-footer-justify-content); -} -.amplify-fileuploader__previewer__footer__actions { - display: flex; - flex-direction: row; - gap: var(--amplify-space-small); -} - -.amplify-menu-content-wrapper { - z-index: 999999; -} - -.amplify-menu-trigger { - display: flex; - justify-content: center; - align-items: center; -} - -.amplify-menu-content { - background-color: var(--amplify-components-menu-background-color); - border-radius: var(--amplify-components-menu-border-radius); - box-shadow: var(--amplify-components-menu-box-shadow); - flex-direction: var(--amplify-components-menu-flex-direction); - gap: var(--amplify-components-menu-gap); - min-width: var(--amplify-components-menu-min-width); - max-width: var(--amplify-components-menu-max-width); - border-color: var(--amplify-components-menu-border-color); - border-width: var(--amplify-components-menu-border-width); - border-style: var(--amplify-components-menu-border-style); -} - -.amplify-menu-content__item { - min-height: var(--amplify-components-menu-item-min-height); - -webkit-padding-start: var(--amplify-components-menu-item-padding-inline-start); - padding-inline-start: var(--amplify-components-menu-item-padding-inline-start); - -webkit-padding-end: var(--amplify-components-menu-item-padding-inline-end); - padding-inline-end: var(--amplify-components-menu-item-padding-inline-end); -} - -.amplify-menu-content__item:not(:first-child):not(:last-child) { - border-radius: 0; -} - -.amplify-menu-content__item:first-child { - border-end-end-radius: 0; - border-end-start-radius: 0; -} -@supports not (border-end-end-radius: 0) { - .amplify-menu-content__item:first-child { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; - } -} - -.amplify-menu-content__item:last-child { - border-start-end-radius: 0; - border-start-start-radius: 0; -} -@supports not (border-end-end-radius: 0) { - .amplify-menu-content__item:last-child { - border-top-right-radius: 0; - border-top-left-radius: 0; - } -} - -.amplify-pagination__item-current, .amplify-pagination__item-button { - height: var(--amplify-components-pagination-item-shared-height); - min-width: var(--amplify-components-pagination-item-shared-min-width); - border-radius: var(--amplify-components-pagination-item-shared-border-radius); -} - -.amplify-pagination { - list-style-type: none; -} -.amplify-pagination li { - margin-left: var(--amplify-components-pagination-item-container-margin-left); - margin-right: var(--amplify-components-pagination-item-container-margin-right); -} -.amplify-pagination__item-button { - display: flex; - align-items: center; - justify-content: center; - font-weight: initial; - color: var(--amplify-components-pagination-button-color); - -webkit-padding-start: var(--amplify-components-pagination-button-padding-inline-start); - padding-inline-start: var(--amplify-components-pagination-button-padding-inline-start); - -webkit-padding-end: var(--amplify-components-pagination-button-padding-inline-end); - padding-inline-end: var(--amplify-components-pagination-button-padding-inline-end); - transition-property: var(--amplify-components-pagination-button-transition-property); - transition-duration: var(--amplify-components-pagination-button-transition-duration); -} -.amplify-pagination__item-button:hover { - text-decoration: none; - color: var(--amplify-components-pagination-button-hover-color); - background-color: var(--amplify-components-pagination-button-hover-background-color); -} -.amplify-pagination__item-button--disabled { - color: var(--amplify-components-pagination-button-disabled-color); - pointer-events: none; -} -.amplify-pagination__item-current { - align-items: var(--amplify-components-pagination-current-align-items); - justify-content: var(--amplify-components-pagination-current-justify-content); - color: var(--amplify-components-pagination-current-color); - font-size: var(--amplify-components-pagination-current-font-size); - background-color: var(--amplify-components-pagination-current-background-color); -} -.amplify-pagination__item-ellipsis { - align-items: var(--amplify-components-pagination-ellipsis-align-items); - justify-content: var(--amplify-components-pagination-ellipsis-justify-content); - -webkit-padding-start: var(--amplify-components-pagination-ellipsis-padding-inline-start); - padding-inline-start: var(--amplify-components-pagination-ellipsis-padding-inline-start); - -webkit-padding-end: var(--amplify-components-pagination-ellipsis-padding-inline-end); - padding-inline-end: var(--amplify-components-pagination-ellipsis-padding-inline-end); -} - -.amplify-passwordfield { - --amplify-components-fieldcontrol-color: var( - --amplify-components-passwordfield-color - ); - --amplify-components-button-color: var( - --amplify-components-passwordfield-button-color - ); - --amplify-components-button-active-background-color: var( - --amplify-components-passwordfield-button-active-background-color - ); - --amplify-components-button-active-border-color: var( - --amplify-components-passwordfield-button-active-border-color - ); - --amplify-components-button-active-color: var( - --amplify-components-passwordfield-button-active-color - ); - --amplify-components-button-disabled-background-color: var( - --amplify-components-passwordfield-button-disabled-background-color - ); - --amplify-components-button-disabled-border-color: var( - --amplify-components-passwordfield-button-disabled-border-color - ); - --amplify-components-button-disabled-color: var( - --amplify-components-passwordfield-button-disabled-color - ); - --amplify-components-button-focus-background-color: var( - --amplify-components-passwordfield-button-focus-background-color - ); - --amplify-components-button-focus-border-color: var( - --amplify-components-passwordfield-button-focus-border-color - ); - --amplify-components-button-focus-color: var( - --amplify-components-passwordfield-button-focus-color - ); - --amplify-components-button-hover-background-color: var( - --amplify-components-passwordfield-button-hover-background-color - ); - --amplify-components-button-hover-border-color: var( - --amplify-components-passwordfield-button-hover-border-color - ); - --amplify-components-button-hover-color: var( - --amplify-components-passwordfield-button-hover-color - ); -} - -.amplify-phonenumberfield select:not(:focus) { - border-right: none; -} - -.amplify-phonenumberfield { - --amplify-components-selectfield-color: var( - --amplify-components-phonenumberfield-color - ); - --amplify-components-selectfield-border-color: var( - --amplify-components-phonenumberfield-border-color - ); - --amplify-components-selectfield-font-size: var( - --amplify-components-phonenumberfield-font-size - ); - --amplify-components-selectfield-focus-border-color: var( - --amplify-components-phonenumberfield-focus-border-color - ); - --amplify-components-textfield-color: var( - --amplify-components-phonenumberfield-color - ); - --amplify-components-textfield-border-color: var( - --amplify-components-phonenumberfield-border-color - ); - --amplify-components-textfield-font-size: var( - --amplify-components-phonenumberfield-font-size - ); - --amplify-components-textfield-focus-border-color: var( - --amplify-components-phonenumberfield-focus-border-color - ); -} - -.amplify-rating { - display: inline-flex; - position: relative; - text-align: left; - font-size: var(--amplify-components-rating-default-size); - line-height: var(--amplify-components-rating-default-size); -} -.amplify-rating .amplify-icon { - font-size: unset; - line-height: unset; - height: 1em; -} -.amplify-rating--small { - font-size: var(--amplify-components-rating-small-size); - line-height: var(--amplify-components-rating-small-size); -} -.amplify-rating--large { - font-size: var(--amplify-components-rating-large-size); - line-height: var(--amplify-components-rating-large-size); -} - -.amplify-rating-filled { - fill: currentColor; - display: inline-block; - flex-shrink: 0; - width: 1em; - height: 1em; -} - -.amplify-rating-icon-container { - position: relative; - height: 1em; - width: 1em; -} - -.amplify-rating-label { - position: absolute; - overflow: hidden; - height: 1em; - width: 1em; -} - -.amplify-rating-icon { - width: 1em; - height: 1em; -} - -.amplify-rating-icon-filled { - color: var(--amplify-components-rating-filled-color); -} - -.amplify-rating-icon-empty { - color: var(--amplify-components-rating-empty-color); -} - -.amplify-radio { - align-items: var(--amplify-components-radio-align-items); - justify-content: var(--amplify-components-radio-justify-content); - gap: inherit; - flex-direction: row-reverse; - --amplify-components-text-color: var(--amplify-components-radio-label-color); -} -.amplify-radio--disabled { - cursor: var(--amplify-components-radio-disabled-cursor); -} - -.amplify-radio__button { - flex-shrink: 0; - align-items: var(--amplify-components-radio-button-align-items); - justify-content: var(--amplify-components-radio-button-justify-content); - padding: var(--amplify-components-radio-button-padding); - box-sizing: var(--amplify-components-radio-button-box-sizing); - border-width: var(--amplify-components-radio-button-border-width); - border-style: var(--amplify-components-radio-button-border-style); - border-radius: var(--amplify-components-radio-button-border-radius); - border-color: var(--amplify-components-radio-button-border-color); - color: var(--amplify-components-radio-button-color); - background-color: var(--amplify-components-radio-button-background-color); - transition-property: var(--amplify-components-radio-button-transition-property); - transition-duration: var(--amplify-components-radio-button-transition-duration); - width: var(--amplify-components-radio-button-width); - height: var(--amplify-components-radio-button-height); - outline-color: var(--amplify-components-radio-button-outline-color); - outline-style: var(--amplify-components-radio-button-outline-style); - outline-width: var(--amplify-components-radio-button-outline-width); - outline-offset: var(--amplify-components-radio-button-outline-offset); -} -.amplify-radio__button::before { - content: ""; - display: inline-block; - width: 100%; - height: 100%; - border-radius: var(--amplify-components-radio-button-before-border-radius); - background-color: currentColor; - border-radius: 50%; -} -.amplify-radio__button--small { - width: var(--amplify-components-radio-button-small-width); - height: var(--amplify-components-radio-button-small-height); -} -.amplify-radio__button--large { - width: var(--amplify-components-radio-button-large-width); - height: var(--amplify-components-radio-button-large-height); -} - -.amplify-radio__input:checked + .amplify-radio__button { - color: var(--amplify-components-radio-button-checked-color); -} - -.amplify-radio__input:checked:disabled + .amplify-radio__button { - color: var(--amplify-components-radio-button-checked-disabled-color); -} - -.amplify-radio__input:focus + .amplify-radio__button { - border-color: var(--amplify-components-radio-button-focus-border-color); - box-shadow: var(--amplify-components-radio-button-focus-box-shadow); -} - -.amplify-radio__input[aria-invalid=true] + .amplify-radio__button { - border-color: var(--amplify-components-radio-button-error-border-color); -} - -.amplify-radio__input[aria-invalid=true]:focus + .amplify-radio__button { - box-shadow: var(--amplify-components-radio-button-error-focus-box-shadow); -} - -.amplify-radio__input:disabled + .amplify-radio__button { - border-color: var(--amplify-components-radio-button-disabled-border-color); - background-color: var(--amplify-components-radio-button-disabled-background-color); -} - -.amplify-radio__label[data-disabled=true] { - color: var(--amplify-components-radio-label-disabled-color); -} - -.amplify-radiogroup { - gap: inherit; - flex-direction: inherit; - align-items: inherit; -} - -.amplify-radiogroupfield { - flex-direction: column; - align-items: flex-start; - --amplify-components-field-label-color: var( - --amplify-components-radiogroup-label-color - ); - --amplify-components-radio-button-border-width: var( - --amplify-components-radiogroup-radio-border-width - ); - --amplify-components-radio-button-border-color: var( - --amplify-components-radiogroup-radio-border-color - ); - --amplify-components-radio-button-background-color: var( - --amplify-components-radiogroup-radio-background-color - ); - --amplify-components-radio-label-color: var( - --amplify-components-radiogroup-radio-label-color - ); - --amplify-components-radio-button-checked-color: var( - --amplify-components-radiogroup-radio-checked-color - ); -} - -.amplify-searchfield { - --amplify-components-fieldcontrol-color: var( - --amplify-components-searchfield-input-color - ); -} -.amplify-searchfield__search { - color: var(--amplify-components-searchfield-button-color); - background-color: var(--amplify-components-searchfield-button-background-color); -} -.amplify-searchfield__search:active { - background-color: var(--amplify-components-button-active-background-color); - border-color: var(--amplify-components-button-active-border-color); - color: var(--amplify-components-button-active-color); -} -.amplify-searchfield__search:disabled { - background-color: var(--amplify-components-searchfield-button-disabled-background-color); - border-color: var(--amplify-components-searchfield-button-disabled-border-color); - color: var(--amplify-components-searchfield-button-disabled-color); -} -.amplify-searchfield__search:focus { - background-color: var(--amplify-components-searchfield-button-focus-background-color); - border-color: var(--amplify-components-searchfield-button-focus-border-color); - color: var(--amplify-components-searchfield-button-focus-color); -} -.amplify-searchfield__search:hover { - background-color: var(--amplify-components-searchfield-button-hover-background-color); - border-color: var(--amplify-components-searchfield-button-hover-border-color); - color: var(--amplify-components-searchfield-button-hover-color); -} - -.amplify-select__wrapper { - flex: var(--amplify-components-select-wrapper-flex); - display: var(--amplify-components-select-wrapper-display); - position: var(--amplify-components-select-wrapper-position); - cursor: var(--amplify-components-select-wrapper-cursor); - align-self: stretch; -} - -.amplify-select__icon-wrapper { - align-items: var(--amplify-components-select-icon-wrapper-align-items); - position: var(--amplify-components-select-icon-wrapper-position); - top: var(--amplify-components-select-icon-wrapper-top); - right: var(--amplify-components-select-icon-wrapper-right); - transform: var(--amplify-components-select-icon-wrapper-transform); - pointer-events: var(--amplify-components-select-icon-wrapper-pointer-events); -} - -.amplify-select { - box-sizing: border-box; - color: var(--amplify-components-fieldcontrol-color); - font-size: var(--amplify-components-fieldcontrol-font-size); - line-height: var(--amplify-components-fieldcontrol-line-height); - -webkit-padding-before: var(--amplify-components-fieldcontrol-padding-block-start); - padding-block-start: var(--amplify-components-fieldcontrol-padding-block-start); - -webkit-padding-after: var(--amplify-components-fieldcontrol-padding-block-end); - padding-block-end: var(--amplify-components-fieldcontrol-padding-block-end); - -webkit-padding-start: var(--amplify-components-fieldcontrol-padding-inline-start); - padding-inline-start: var(--amplify-components-fieldcontrol-padding-inline-start); - -webkit-padding-end: var(--amplify-components-fieldcontrol-padding-inline-end); - padding-inline-end: var(--amplify-components-fieldcontrol-padding-inline-end); - transition: all var(--amplify-components-fieldcontrol-transition-duration); - width: 100%; - border-color: var(--amplify-components-fieldcontrol-border-color); - border-radius: var(--amplify-components-fieldcontrol-border-radius); - border-style: var(--amplify-components-fieldcontrol-border-style); - border-width: var(--amplify-components-fieldcontrol-border-width); - outline-color: var(--amplify-components-fieldcontrol-outline-color); - outline-style: var(--amplify-components-fieldcontrol-outline-style); - outline-width: var(--amplify-components-fieldcontrol-outline-width); - outline-offset: var(--amplify-components-fieldcontrol-outline-offset); - min-width: var(--amplify-components-select-min-width); - -webkit-padding-end: var(--amplify-components-select-padding-inline-end); - padding-inline-end: var(--amplify-components-select-padding-inline-end); - white-space: var(--amplify-components-select-white-space); -} -.amplify-select:focus { - border-color: var(--amplify-components-fieldcontrol-focus-border-color); - box-shadow: var(--amplify-components-fieldcontrol-focus-box-shadow); -} -.amplify-select--small { - font-size: var(--amplify-components-fieldcontrol-small-font-size); - -webkit-padding-before: var(--amplify-components-fieldcontrol-small-padding-block-start); - padding-block-start: var(--amplify-components-fieldcontrol-small-padding-block-start); - -webkit-padding-after: var(--amplify-components-fieldcontrol-small-padding-block-end); - padding-block-end: var(--amplify-components-fieldcontrol-small-padding-block-end); - -webkit-padding-start: var(--amplify-components-fieldcontrol-small-padding-inline-start); - padding-inline-start: var(--amplify-components-fieldcontrol-small-padding-inline-start); - -webkit-padding-end: var(--amplify-components-fieldcontrol-small-padding-inline-end); - padding-inline-end: var(--amplify-components-fieldcontrol-small-padding-inline-end); -} -.amplify-select--large { - font-size: var(--amplify-components-fieldcontrol-large-font-size); - -webkit-padding-before: var(--amplify-components-fieldcontrol-large-padding-block-start); - padding-block-start: var(--amplify-components-fieldcontrol-large-padding-block-start); - -webkit-padding-after: var(--amplify-components-fieldcontrol-large-padding-block-end); - padding-block-end: var(--amplify-components-fieldcontrol-large-padding-block-end); - -webkit-padding-start: var(--amplify-components-fieldcontrol-large-padding-inline-start); - padding-inline-start: var(--amplify-components-fieldcontrol-large-padding-inline-start); - -webkit-padding-end: var(--amplify-components-fieldcontrol-large-padding-inline-end); - padding-inline-end: var(--amplify-components-fieldcontrol-large-padding-inline-end); -} -.amplify-select--error { - border-color: var(--amplify-components-fieldcontrol-error-border-color); -} -.amplify-select--error:focus { - border-color: var(--amplify-components-fieldcontrol-error-border-color); - box-shadow: var(--amplify-components-fieldcontrol-error-focus-box-shadow); -} -.amplify-select[disabled] { - color: var(--amplify-components-fieldcontrol-disabled-color); - cursor: var(--amplify-components-fieldcontrol-disabled-cursor); - border-color: var(--amplify-components-fieldcontrol-disabled-border-color); - background-color: var(--amplify-components-fieldcontrol-disabled-background-color); -} -.amplify-select--quiet { - -webkit-border-before: var(--amplify-components-fieldcontrol-quiet-border-block-start); - border-block-start: var(--amplify-components-fieldcontrol-quiet-border-block-start); - -webkit-border-start: var(--amplify-components-fieldcontrol-quiet-border-inline-start); - border-inline-start: var(--amplify-components-fieldcontrol-quiet-border-inline-start); - -webkit-border-end: var(--amplify-components-fieldcontrol-quiet-border-inline-end); - border-inline-end: var(--amplify-components-fieldcontrol-quiet-border-inline-end); - border-radius: var(--amplify-components-fieldcontrol-quiet-border-radius); -} -.amplify-select--quiet:focus { - border-block-end-color: var(--amplify-components-fieldcontrol-quiet-focus-border-block-end-color); - box-shadow: var(--amplify-components-fieldcontrol-quiet-focus-box-shadow); -} -.amplify-select--quiet[aria-invalid=true] { - border-block-end-color: var(--amplify-components-fieldcontrol-quiet-error-border-block-end-color); -} -.amplify-select--quiet[aria-invalid=true]:focus { - box-shadow: var(--amplify-components-fieldcontrol-quiet-error-focus-box-shadow); -} -.amplify-select option { - color: initial; -} -.amplify-select option[disabled=""] { - color: var(--amplify-components-select-option-disabled-color); -} -@-moz-document url-prefix() { - .amplify-select option { - background-color: var(--amplify-components-select-option-background-color); - color: var(--amplify-components-select-option-color); - } -} -.amplify-select--small { - min-width: var(--amplify-components-select-small-min-width); -} -.amplify-select--large { - min-width: var(--amplify-components-select-large-min-width); -} - -.amplify-selectfield { - flex-direction: var(--amplify-components-selectfield-flex-direction); - --amplify-components-fieldcontrol-border-color: var( - --amplify-components-selectfield-border-color - ); - --amplify-components-fieldcontrol-color: var( - --amplify-components-selectfield-color - ); - --amplify-components-fieldcontrol-font-size: var( - --amplify-components-selectfield-font-size - ); - --amplify-components-fieldcontrol-focus-border-color: var( - --amplify-components-selectfield-focus-border-color - ); - --amplify-components-field-label-color: var( - --amplify-components-selectfield-label-color - ); -} - -.amplify-sliderfield { - flex-direction: column; -} - -.amplify-sliderfield__label { - display: flex; - justify-content: space-between; -} - -.amplify-sliderfield__root { - align-items: center; - box-sizing: content-box; - display: flex; - padding-block: var(--amplify-components-sliderfield-padding-block); - position: relative; - touch-action: none; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - --amplify-internal-sliderfield-root-height: var( - --amplify-components-sliderfield-thumb-height - ); - --amplify-internal-sliderfield-root-width: var( - --amplify-components-sliderfield-thumb-height - ); -} -.amplify-sliderfield__root[data-disabled] { - cursor: not-allowed; -} -.amplify-sliderfield__root--horizontal { - height: var(--amplify-internal-sliderfield-root-height); -} -.amplify-sliderfield__root--vertical { - flex-direction: column; - width: var(--amplify-internal-sliderfield-root-width); -} -.amplify-sliderfield__root--large { - --amplify-internal-sliderfield-root-height: var( - --amplify-components-sliderfield-large-thumb-height - ); - --amplify-internal-sliderfield-root-width: var( - --amplify-components-sliderfield-large-thumb-height - ); -} -.amplify-sliderfield__root--small { - --amplify-internal-sliderfield-root-height: var( - --amplify-components-sliderfield-small-thumb-height - ); - --amplify-internal-sliderfield-root-width: var( - --amplify-components-sliderfield-small-thumb-height - ); -} - -.amplify-sliderfield__track { - position: relative; - flex-grow: 1; - border-radius: var(--amplify-components-sliderfield-track-border-radius); - background-color: var(--amplify-components-sliderfield-track-background-color); - --amplify-internal-sliderfield-track-height: var( - --amplify-components-sliderfield-track-height - ); - --amplify-internal-sliderfield-track-min-width: var( - --amplify-components-sliderfield-track-min-width - ); - --amplify-internal-sliderfield-track-width: var( - --amplify-components-sliderfield-track-height - ); - --amplify-internal-sliderfield-track-min-height: var( - --amplify-components-sliderfield-track-min-width - ); -} -.amplify-sliderfield__track--horizontal { - height: var(--amplify-internal-sliderfield-track-height); - min-width: var(--amplify-internal-sliderfield-track-min-width); -} -.amplify-sliderfield__track--vertical { - width: var(--amplify-internal-sliderfield-track-width); - min-height: var(--amplify-internal-sliderfield-track-min-height); -} -.amplify-sliderfield__track--large { - --amplify-internal-sliderfield-track-height: var( - --amplify-components-sliderfield-large-track-height - ); - --amplify-internal-sliderfield-track-width: var( - --amplify-components-sliderfield-large-track-height - ); -} -.amplify-sliderfield__track--small { - --amplify-internal-sliderfield-track-height: var( - --amplify-components-sliderfield-small-track-height - ); - --amplify-internal-sliderfield-track-width: var( - --amplify-components-sliderfield-small-track-height - ); -} - -.amplify-sliderfield__range { - position: absolute; - border-radius: var(--amplify-components-sliderfield-range-border-radius); - background-color: var(--amplify-components-sliderfield-range-background-color); -} -.amplify-sliderfield__range[data-disabled] { - background-color: var(--amplify-components-sliderfield-range-disabled-background-color); -} -.amplify-sliderfield__range--horizontal { - height: 100%; -} -.amplify-sliderfield__range--vertical { - width: 100%; -} - -.amplify-sliderfield__thumb { - display: block; - width: var(--amplify-components-sliderfield-thumb-width); - height: var(--amplify-components-sliderfield-thumb-height); - background-color: var(--amplify-components-sliderfield-thumb-background-color); - box-shadow: var(--amplify-components-sliderfield-thumb-box-shadow); - border-radius: var(--amplify-components-sliderfield-thumb-border-radius); - border-width: var(--amplify-components-sliderfield-thumb-border-width); - border-color: var(--amplify-components-sliderfield-thumb-border-color); - border-style: var(--amplify-components-sliderfield-thumb-border-style); -} -.amplify-sliderfield__thumb:hover { - background-color: var(--amplify-components-sliderfield-thumb-hover-background-color); - border-color: var(--amplify-components-sliderfield-thumb-hover-border-color); -} -.amplify-sliderfield__thumb:focus { - border-color: var(--amplify-components-sliderfield-thumb-focus-border-color); - box-shadow: var(--amplify-components-sliderfield-thumb-focus-box-shadow); -} -.amplify-sliderfield__thumb[data-disabled] { - background-color: var(--amplify-components-sliderfield-thumb-disabled-background-color); - border-color: var(--amplify-components-sliderfield-thumb-disabled-border-color); - box-shadow: var(--amplify-components-sliderfield-thumb-disabled-box-shadow); -} -.amplify-sliderfield__thumb--large { - width: var(--amplify-components-sliderfield-large-thumb-width); - height: var(--amplify-components-sliderfield-large-thumb-height); -} -.amplify-sliderfield__thumb--small { - width: var(--amplify-components-sliderfield-small-thumb-width); - height: var(--amplify-components-sliderfield-small-thumb-height); -} - -.amplify-stepperfield { - flex-direction: var(--amplify-components-stepperfield-flex-direction); - --amplify-components-fieldcontrol-border-color: var( - --amplify-components-stepperfield-border-color - ); - --amplify-components-button-border-color: var( - --amplify-components-stepperfield-border-color - ); - --amplify-components-fieldcontrol-color: var( - --amplify-components-stepperfield-input-color - ); - --amplify-components-fieldcontrol-font-size: var( - --amplify-components-stepperfield-input-font-size - ); - --amplify-components-button-color: var( - --amplify-components-stepperfield-button-color - ); - --amplify-components-button-active-color: var( - --amplify-components-stepperfield-button-active-color - ); - --amplify-components-button-active-background-color: var( - --amplify-components-stepperfield-button-active-background-color - ); - --amplify-components-button-focus-color: var( - --amplify-components-stepperfield-button-focus-color - ); - --amplify-components-button-focus-background-color: var( - --amplify-components-stepperfield-button-focus-background-color - ); - --amplify-components-button-disabled-color: var( - --amplify-components-stepperfield-button-disabled-color - ); - --amplify-components-button-disabled-background-color: var( - --amplify-components-stepperfield-button-disabled-background-color - ); - --amplify-components-button-hover-color: var( - --amplify-components-stepperfield-button-hover-color - ); - --amplify-components-button-hover-background-color: var( - --amplify-components-stepperfield-button-hover-background-color - ); -} - -.amplify-stepperfield__button--decrease, -.amplify-stepperfield__button--increase { - background-color: var(--amplify-components-stepperfield-button-background-color); -} -.amplify-stepperfield__button--decrease--disabled, -.amplify-stepperfield__button--increase--disabled { - background-color: var(--amplify-components-stepperfield-button-disabled-background-color); -} -.amplify-stepperfield__button--decrease--quiet, -.amplify-stepperfield__button--increase--quiet { - border-width: 0 0 var(--amplify-components-button-border-width) 0; - border-radius: 0; -} - -.amplify-stepperfield__button--decrease[data-invalid=true] { - -webkit-border-end: none; - border-inline-end: none; -} - -.amplify-stepperfield__button--increase[data-invalid=true] { - -webkit-border-start: none; - border-inline-start: none; -} - -.amplify-stepperfield__input { - -moz-appearance: textfield; - text-align: var(--amplify-components-stepperfield-input-text-align); -} -.amplify-stepperfield__input::-webkit-outer-spin-button, .amplify-stepperfield__input::-webkit-inner-spin-button { - -webkit-appearance: none; - margin: 0; -} -.amplify-stepperfield__input:not(:focus, [aria-invalid=true]) { - -webkit-border-start: none; - border-inline-start: none; - -webkit-border-end: none; - border-inline-end: none; -} - -.amplify-switchfield { - display: inline-block; - font-size: var(--amplify-components-switchfield-font-size); -} -.amplify-switchfield--small { - font-size: var(--amplify-components-switchfield-small-font-size); -} -.amplify-switchfield--large { - font-size: var(--amplify-components-switchfield-large-font-size); -} - -.amplify-switch__wrapper { - display: inline-flex; - align-items: center; -} -.amplify-switch__wrapper--start { - flex-direction: row; -} -.amplify-switch__wrapper--end { - flex-direction: row-reverse; -} -.amplify-switch__wrapper--top { - flex-direction: column; -} -.amplify-switch__wrapper--bottom { - flex-direction: column-reverse; -} - -.amplify-switch-track { - display: inline-flex; - justify-content: flex-start; - box-sizing: content-box; - border-radius: var(--amplify-components-switchfield-track-border-radius); - padding: var(--amplify-components-switchfield-track-padding); - width: var(--amplify-components-switchfield-track-width); - height: var(--amplify-components-switchfield-track-height); - transition-duration: var(--amplify-components-switchfield-track-transition-duration); - background-color: var(--amplify-components-switchfield-track-background-color); -} -.amplify-switch-track--checked { - background-color: var(--amplify-components-switchfield-track-checked-background-color); -} -.amplify-switch-track--disabled { - opacity: var(--amplify-components-switchfield-disabled-opacity); - cursor: not-allowed; -} -.amplify-switch-track--focused { - box-shadow: var(--amplify-components-switchfield-focused-shadow); -} -.amplify-switch-track--error { - background-color: var(--amplify-components-switchfield-track-error-background-color); -} - -.amplify-switch-thumb { - background-color: var(--amplify-components-switchfield-thumb-background-color); - transition-duration: var(--amplify-components-switchfield-thumb-transition-duration); - border-radius: var(--amplify-components-switchfield-thumb-border-radius); - width: var(--amplify-components-switchfield-thumb-width); - height: var(--amplify-components-switchfield-thumb-width); - border-color: var(--amplify-components-switchfield-thumb-border-color); - overflow-wrap: break-word; -} -.amplify-switch-thumb--checked { - transform: var(--amplify-components-switchfield-thumb-checked-transform); -} -.amplify-switch-thumb--disabled { - cursor: not-allowed; -} - -.amplify-switch-label { - padding: var(--amplify-components-switchfield-label-padding); - cursor: pointer; -} - -.amplify-table { - /** - * Default Table primitive stylings - */ - border-collapse: var(--amplify-components-table-border-collapse); - display: var(--amplify-components-table-display); - width: var(--amplify-components-table-width); - --amplify-internal-table-caption-font-size: var( - --amplify-components-table-caption-font-size - ); - --amplify-internal-table-th-font-size: var( - --amplify-components-table-header-font-size - ); - --amplify-internal-table-th-padding: var( - --amplify-components-table-header-padding - ); - --amplify-internal-table-td-font-size: var( - --amplify-components-table-data-font-size - ); - --amplify-internal-table-td-padding: var( - --amplify-components-table-data-padding - ); - --amplify-internal-table-td-border-width: var( - --amplify-components-table-data-border-width - ) - 0px var(--amplify-components-table-data-border-width) 0px; - --amplify-internal-table-th-border-width: var( - --amplify-components-table-header-border-width - ) - 0px var(--amplify-components-table-header-border-width) 0px; - /** - * Data attribute stylings - */ -} -.amplify-table--small { - --amplify-internal-table-caption-font-size: var( - --amplify-components-table-caption-small-font-size - ); - --amplify-internal-table-th-font-size: var( - --amplify-components-table-header-small-font-size - ); - --amplify-internal-table-th-padding: var( - --amplify-components-table-header-small-padding - ); - --amplify-internal-table-td-font-size: var( - --amplify-components-table-data-small-font-size - ); - --amplify-internal-table-td-padding: var( - --amplify-components-table-data-small-padding - ); -} -.amplify-table--large { - --amplify-internal-table-caption-font-size: var( - --amplify-components-table-caption-large-font-size - ); - --amplify-internal-table-th-font-size: var( - --amplify-components-table-header-large-font-size - ); - --amplify-internal-table-th-padding: var( - --amplify-components-table-header-large-padding - ); - --amplify-internal-table-td-font-size: var( - --amplify-components-table-data-large-font-size - ); - --amplify-internal-table-td-padding: var( - --amplify-components-table-data-large-padding - ); -} -.amplify-table--bordered { - --amplify-internal-table-td-border-width: var( - --amplify-components-table-data-border-width - ) - var(--amplify-components-table-data-border-width) - var(--amplify-components-table-data-border-width) - var(--amplify-components-table-data-border-width); - --amplify-internal-table-th-border-width: var( - --amplify-components-table-header-border-width - ) - var(--amplify-components-table-header-border-width) - var(--amplify-components-table-header-border-width) - var(--amplify-components-table-header-border-width); -} -.amplify-table__caption { - caption-side: var(--amplify-components-table-caption-caption-side); - color: var(--amplify-components-table-caption-color); - display: var(--amplify-components-table-caption-display); - font-size: var(--amplify-internal-table-caption-font-size); - text-align: var(--amplify-components-table-caption-text-align); - word-break: var(--amplify-components-table-caption-word-break); -} -.amplify-table__head { - display: var(--amplify-components-table-head-display); - vertical-align: var(--amplify-components-table-head-vertical-align); -} -.amplify-table__body { - display: var(--amplify-components-table-body-display); - vertical-align: var(--amplify-components-table-body-vertical-align); -} -.amplify-table__foot { - display: var(--amplify-components-table-foot-display); - vertical-align: var(--amplify-components-table-foot-vertical-align); -} -.amplify-table__row { - display: var(--amplify-components-table-row-display); - vertical-align: var(--amplify-components-table-row-vertical-align); -} -.amplify-table__th { - border-color: var(--amplify-components-table-header-border-color); - border-style: var(--amplify-components-table-header-border-style); - border-width: var(--amplify-internal-table-th-border-width); - color: var(--amplify-components-table-header-color); - display: var(--amplify-components-table-header-display); - font-size: var(--amplify-internal-table-th-font-size); - font-weight: var(--amplify-components-table-header-font-weight); - padding: var(--amplify-internal-table-th-padding); - vertical-align: var(--amplify-components-table-header-vertical-align); -} -.amplify-table__th:first-child { - border-left-width: var(--amplify-components-table-header-border-width); -} -.amplify-table__th:last-child { - border-right-width: var(--amplify-components-table-header-border-width); -} -.amplify-table__td { - border-color: var(--amplify-components-table-data-border-color); - border-style: var(--amplify-components-table-data-border-style); - border-width: var(--amplify-internal-table-td-border-width); - color: var(--amplify-components-table-data-color); - display: var(--amplify-components-table-data-display); - font-size: var(--amplify-internal-table-td-font-size); - font-weight: var(--amplify-components-table-data-font-weight); - padding: var(--amplify-internal-table-td-padding); - vertical-align: var(--amplify-components-table-data-vertical-align); -} -.amplify-table__td:first-child { - border-left-width: var(--amplify-components-table-data-border-width); -} -.amplify-table__td:last-child { - border-right-width: var(--amplify-components-table-data-border-width); -} -.amplify-table[data-variation=striped] .amplify-table__row:not(.amplify-table__head *):nth-child(odd) { - background-color: var(--amplify-components-table-row-striped-background-color); -} -.amplify-table[data-highlightonhover=true] .amplify-table__row:not(.amplify-table__head *):hover { - background-color: var(--amplify-components-table-row-hover-background-color); -} - -.amplify-tabs { - background-color: var(--amplify-components-tabs-background-color); - box-shadow: var(--amplify-components-tabs-box-shadow); - border-width: 0 0 var(--amplify-components-tabs-border-width) 0; - border-style: var(--amplify-components-tabs-border-style); - border-color: var(--amplify-components-tabs-border-color); - gap: var(--amplify-components-tabs-gap); -} -.amplify-tabs[data-indicator-position=top] { - border-width: var(--amplify-components-tabs-border-width) 0 0 0; -} - -.amplify-tabs-item { - background-color: var(--amplify-components-tabs-item-background-color); - box-sizing: border-box; - color: var(--amplify-components-tabs-item-color); - font-size: var(--amplify-components-tabs-item-font-size); - font-weight: var(--amplify-components-tabs-item-font-weight); - padding: var(--amplify-components-tabs-item-padding-vertical) var(--amplify-components-tabs-item-padding-horizontal); - text-align: var(--amplify-components-tabs-item-text-align); - transition: all var(--amplify-components-tabs-item-transition-duration); - border-width: 0 0 var(--amplify-components-tabs-item-border-width) 0; - border-style: var(--amplify-components-tabs-item-border-style); - border-color: var(--amplify-components-tabs-item-border-color); - margin-bottom: calc(-1 * var(--amplify-components-tabs-item-border-width)); -} -[data-indicator-position=top] > .amplify-tabs-item { - border-width: var(--amplify-components-tabs-border-width) 0 0 0; - margin-top: calc(-1 * var(--amplify-components-tabs-item-border-width)); - margin-bottom: 0; -} -.amplify-tabs-item[data-state=active] { - color: var(--amplify-components-tabs-item-active-color); - border-color: var(--amplify-components-tabs-item-active-border-color); - background-color: var(--amplify-components-tabs-item-active-background-color); - transition-property: none; -} -.amplify-tabs-item:hover { - color: var(--amplify-components-tabs-item-hover-color); - cursor: pointer; -} -.amplify-tabs-item:focus { - color: var(--amplify-components-tabs-item-focus-color); -} -.amplify-tabs-item:focus-visible { - outline: var(--amplify-components-tabs-item-border-width) var(--amplify-components-tabs-item-border-style) var(--amplify-components-tabs-item-border-color); -} -.amplify-tabs-item:active { - color: var(--amplify-components-tabs-item-active-color); -} -.amplify-tabs-item[data-disabled] { - background-color: var(--amplify-components-tabs-item-disabled-background-color); - color: var(--amplify-components-tabs-item-disabled-color); - cursor: not-allowed; -} -.amplify-tabs-item[data-spacing=equal] { - flex: 1 1 0; -} -.amplify-tabs-item[data-spacing=relative] { - flex-grow: 1; -} - -.amplify-textareafield { - flex-direction: column; - --amplify-components-fieldcontrol-color: var( - --amplify-components-textareafield-color - ); - --amplify-components-fieldcontrol-border-color: var( - --amplify-components-textareafield-border-color - ); - --amplify-components-fieldcontrol-focus-border-color: var( - --amplify-components-textareafield-focus-border-color - ); -} - -.amplify-textfield { - flex-direction: column; - --amplify-components-fieldcontrol-color: var( - --amplify-components-textfield-color - ); - --amplify-components-fieldcontrol-border-color: var( - --amplify-components-textfield-border-color - ); - --amplify-components-fieldcontrol-font-size: var( - --amplify-components-textfield-font-size - ); - --amplify-components-fieldcontrol-focus-border-color: var( - --amplify-components-textfield-focus-border-color - ); -} - -.amplify-togglebutton { - --amplify-internal-togglebutton-background-color: initial; - --amplify-internal-togglebutton-border-color: var( - --amplify-components-togglebutton-border-color - ); - --amplify-internal-togglebutton-color: var( - --amplify-components-togglebutton-color - ); - background-color: var(--amplify-internal-togglebutton-background-color); - border-color: var(--amplify-internal-togglebutton-border-color); - color: var(--amplify-internal-togglebutton-color); - --amplify-internal-togglebutton-focus-background-color: var( - --amplify-internal-togglebutton-background-color - ); - --amplify-internal-togglebutton-focus-border-color: var( - --amplify-components-togglebutton-focus-border-color - ); - --amplify-internal-togglebutton-focus-color: var( - --amplify-components-togglebutton-focus-color - ); - --amplify-internal-togglebutton-hover-background-color: var( - --amplify-components-togglebutton-hover-background-color - ); - --amplify-internal-togglebutton-hover-border-color: var( - --amplify-internal-togglebutton-border-color - ); - --amplify-internal-togglebutton-hover-color: var( - --amplify-internal-togglebutton-color - ); - --amplify-internal-togglebutton-active-background-color: var( - --amplify-components-togglebutton-active-background-color - ); - --amplify-internal-togglebutton-disabled-background-color: var( - --amplify-components-togglebutton-disabled-background-color - ); - --amplify-internal-togglebutton-disabled-border-color: var( - --amplify-components-togglebutton-disabled-border-color - ); - --amplify-internal-togglebutton-disabled-color: var( - --amplify-components-togglebutton-disabled-color - ); -} -.amplify-togglebutton:focus { - background-color: var(--amplify-internal-togglebutton-focus-background-color); - border-color: var(--amplify-internal-togglebutton-focus-border-color); - color: var(--amplify-internal-togglebutton-focus-color); -} -.amplify-togglebutton:hover { - background-color: var(--amplify-internal-togglebutton-hover-background-color); - border-color: var(--amplify-internal-togglebutton-hover-border-color); - color: var(--amplify-internal-togglebutton-hover-color); -} -.amplify-togglebutton:active { - background-color: var(--amplify-internal-togglebutton-active-background-color); -} -.amplify-togglebutton:disabled { - background-color: var(--amplify-internal-togglebutton-disabled-background-color); - border-color: var(--amplify-internal-togglebutton-disabled-border-color); - color: var(--amplify-internal-togglebutton-disabled-color); -} -.amplify-togglebutton--pressed { - --amplify-internal-togglebutton-border-color: var( - --amplify-components-togglebutton-pressed-border-color - ); - --amplify-internal-togglebutton-background-color: var( - --amplify-components-togglebutton-pressed-background-color - ); - --amplify-internal-togglebutton-color: var( - --amplify-components-togglebutton-pressed-color - ); - --amplify-internal-togglebutton-hover-background-color: var( - --amplify-components-togglebutton-pressed-hover-background-color - ); - --amplify-internal-togglebutton-disabled-background-color: var( - --amplify-components-togglebutton-pressed-background-color - ); - --amplify-internal-togglebutton-disabled-border-color: var( - --amplify-components-togglebutton-pressed-border-color - ); - --amplify-internal-togglebutton-disabled-color: var( - --amplify-components-togglebutton-pressed-color - ); -} -.amplify-togglebutton--primary { - --amplify-internal-togglebutton-primary-background-color: var( - --amplify-components-togglebutton-primary-background-color - ); - --amplify-internal-togglebutton-background-color: var( - --amplify-internal-togglebutton-primary-background-color - ); - --amplify-internal-togglebutton-primary-border-color: var( - --amplify-components-togglebutton-border-color - ); - --amplify-internal-togglebutton-border-color: var( - --amplify-internal-togglebutton-primary-border-color - ); - --amplify-internal-togglebutton-primary-color: var( - --amplify-components-togglebutton-color - ); - --amplify-internal-togglebutton-color: var( - --amplify-internal-togglebutton-primary-color - ); - border-width: var(--amplify-components-togglebutton-primary-border-width); - --amplify-internal-togglebutton-primary-focus-background-color: var( - --amplify-components-togglebutton-primary-focus-background-color - ); - --amplify-internal-togglebutton-primary-focus-border-color: var( - --amplify-components-togglebutton-primary-focus-border-color - ); - --amplify-internal-togglebutton-primary-focus-color: var( - --amplify-components-togglebutton-primary-focus-color - ); - --amplify-internal-togglebutton-primary-focus-box-shadow: var( - --amplify-components-togglebutton-primary-focus-box-shadow - ); - --amplify-internal-togglebutton-focus-background-color: var( - --amplify-internal-togglebutton-primary-focus-background-color - ); - --amplify-internal-togglebutton-focus-border-color: var( - --amplify-internal-togglebutton-primary-focus-border-color - ); - --amplify-internal-togglebutton-focus-color: var( - --amplify-internal-togglebutton-primary-focus-color - ); - --amplify-internal-togglebutton-primary-hover-background-color: var( - --amplify-components-togglebutton-primary-hover-background-color - ); - --amplify-internal-togglebutton-primary-hover-border-color: var( - --amplify-internal-togglebutton-primary-border-color - ); - --amplify-internal-togglebutton-primary-hover-color: var( - --amplify-components-togglebutton-primary-hover-color - ); - --amplify-internal-togglebutton-hover-background-color: var( - --amplify-internal-togglebutton-primary-hover-background-color - ); - --amplify-internal-togglebutton-hover-border-color: var( - --amplify-internal-togglebutton-primary-hover-border-color - ); - --amplify-internal-togglebutton-hover-color: var( - --amplify-internal-togglebutton-primary-hover-color - ); - --amplify-internal-togglebutton-primary-disabled-background-color: var( - --amplify-components-togglebutton-primary-disabled-background-color - ); - --amplify-internal-togglebutton-primary-disabled-border-color: var( - --amplify-components-togglebutton-primary-disabled-border-color - ); - --amplify-internal-togglebutton-primary-disabled-color: var( - --amplify-components-togglebutton-primary-disabled-color - ); - --amplify-internal-togglebutton-disabled-background-color: var( - --amplify-internal-togglebutton-primary-disabled-background-color - ); - --amplify-internal-togglebutton-disabled-border-color: var( - --amplify-internal-togglebutton-primary-disabled-border-color - ); - --amplify-internal-togglebutton-disabled-color: var( - --amplify-internal-togglebutton-primary-disabled-color - ); -} -.amplify-togglebutton--primary:focus { - box-shadow: var(--amplify-internal-togglebutton-primary-focus-box-shadow); -} -.amplify-togglebutton--pressed { - --amplify-internal-togglebutton-primary-background-color: var( - --amplify-components-togglebutton-primary-pressed-background-color - ); - --amplify-internal-togglebutton-primary-border-color: var( - --amplify-components-togglebutton-primary-pressed-border-color - ); - --amplify-internal-togglebutton-primary-color: var( - --amplify-components-togglebutton-primary-pressed-color - ); - --amplify-internal-togglebutton-primary-focus-background-color: var( - --amplify-components-togglebutton-primary-pressed-focus-background-color - ); - --amplify-internal-togglebutton-primary-focus-border-color: var( - --amplify-components-togglebutton-primary-pressed-focus-border-color - ); - --amplify-internal-togglebutton-primary-focus-color: var( - --amplify-components-togglebutton-primary-pressed-focus-color - ); - --amplify-internal-togglebutton-primary-hover-background-color: var( - --amplify-components-togglebutton-primary-pressed-hover-background-color - ); - --amplify-internal-togglebutton-primary-hover-border-color: var( - --amplify-components-togglebutton-primary-pressed-hover-border-color - ); - --amplify-internal-togglebutton-primary-hover-color: var( - --amplify-components-togglebutton-primary-pressed-hover-color - ); - --amplify-internal-togglebutton-primary-disabled-background-color: var( - --amplify-components-togglebutton-primary-pressed-background-color - ); - --amplify-internal-togglebutton-primary-disabled-border-color: var( - --amplify-components-togglebutton-primary-pressed-border-color - ); - --amplify-internal-togglebutton-primary-disabled-color: var( - --amplify-components-togglebutton-primary-pressed-color - ); -} -.amplify-togglebutton--pressed:hover { - --amplify-internal-togglebutton-primary-focus-box-shadow: var( - --amplify-components-togglebutton-primary-pressed-hover-box-shadow - ); -} -.amplify-togglebutton--link { - --amplify-internal-togglebutton-link-background-color: var( - --amplify-components-togglebutton-link-background-color - ); - --amplify-internal-togglebutton-link-color: var( - --amplify-components-togglebutton-link-color - ); - --amplify-internal-togglebutton-background-color: var( - --amplify-internal-togglebutton-link-background-color - ); - --amplify-internal-togglebutton-color: var( - --amplify-internal-togglebutton-link-color - ); - --amplify-internal-togglebutton-link-focus-background-color: var( - --amplify-components-togglebutton-link-focus-background-color - ); - --amplify-internal-togglebutton-link-focus-color: var( - --amplify-components-togglebutton-link-focus-color - ); - --amplify-internal-togglebutton-focus-background-color: var( - --amplify-internal-togglebutton-link-focus-background-color - ); - --amplify-internal-togglebutton-focus-color: var( - --amplify-internal-togglebutton-link-focus-color - ); - --amplify-internal-togglebutton-link-hover-background-color: var( - --amplify-components-togglebutton-link-hover-background-color - ); - --amplify-internal-togglebutton-link-hover-color: var( - --amplify-components-togglebutton-link-hover-color - ); - --amplify-internal-togglebutton-hover-background-color: var( - --amplify-internal-togglebutton-link-hover-background-color - ); - --amplify-internal-togglebutton-hover-color: var( - --amplify-internal-togglebutton-link-hover-color - ); - --amplify-internal-togglebutton-link-disabled-color: var( - --amplify-components-togglebutton-link-disabled-color - ); - --amplify-internal-togglebutton-link-disabled-background-color: var( - --amplify-components-togglebutton-link-disabled-background-color - ); - --amplify-internal-togglebutton-disabled-color: var( - --amplify-internal-togglebutton-link-disabled-color - ); - --amplify-internal-togglebutton-disabled-background-color: var( - --amplify-internal-togglebutton-link-disabled-background-color - ); -} -.amplify-togglebutton--pressed { - --amplify-internal-togglebutton-link-color: var( - --amplify-components-togglebutton-link-pressed-color - ); - --amplify-internal-togglebutton-link-background-color: var( - --amplify-components-togglebutton-link-pressed-background-color - ); - --amplify-internal-togglebutton-link-focus-background-color: var( - --amplify-components-togglebutton-link-pressed-focus-background-color - ); - --amplify-internal-togglebutton-link-focus-color: var( - --amplify-components-togglebutton-link-pressed-focus-color - ); - --amplify-internal-togglebutton-link-hover-background-color: var( - --amplify-components-togglebutton-link-pressed-hover-background-color - ); - --amplify-internal-togglebutton-link-hover-color: var( - --amplify-components-togglebutton-link-pressed-hover-color - ); - --amplify-internal-togglebutton-link-disabled-color: var( - --amplify-components-togglebutton-link-pressed-color - ); -} - -.amplify-togglebuttongroup { - align-items: var(--amplify-components-togglebuttongroup-align-items); - align-content: var(--amplify-components-togglebuttongroup-align-content); - justify-content: var(--amplify-components-togglebuttongroup-justify-content); - gap: 0; -} - -.amplify-togglebuttongroup .amplify-togglebutton:focus, .amplify-togglebuttongroup .amplify-togglebutton.amplify-togglebutton--pressed { - z-index: 2; -} -.amplify-togglebuttongroup .amplify-togglebutton:not(:first-of-type) { - -webkit-margin-start: calc(-1 * var(--amplify-components-button-border-width)); - margin-inline-start: calc(-1 * var(--amplify-components-button-border-width)); - border-start-start-radius: 0; - border-end-start-radius: 0; -} -@supports not (border-start-start-radius: 0) { - .amplify-togglebuttongroup .amplify-togglebutton:not(:first-of-type) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } -} -.amplify-togglebuttongroup .amplify-togglebutton:not(:last-of-type) { - border-start-end-radius: 0; - border-end-end-radius: 0; -} -@supports not (border-end-end-radius: 0) { - .amplify-togglebuttongroup .amplify-togglebutton:not(:last-of-type) { - border-bottom-right-radius: 0; - border-top-right-radius: 0; - } -} - -.amplify-inappmessaging-backdrop { - background-color: var(--amplify-colors-overlay-50); - inset: 0; - position: fixed; - z-index: 1000; -} - -.amplify-inappmessaging-backdrop-content-container { - align-items: center; - inset: 0; - justify-content: center; - pointer-events: none; - position: fixed; - z-index: 1001; -} - -.amplify-inappmessaging-backdrop-content { - pointer-events: auto; -} - -.amplify-inappmessaging-bannermessage { - box-shadow: var(--amplify-shadows-medium); - height: var(--amplify-components-inappmessaging-banner-height); - margin: var(--amplify-space-small); - max-width: 50%; - position: fixed; - width: var(--amplify-components-inappmessaging-banner-width); -} -.amplify-inappmessaging-bannermessage--top { - top: 0; -} -.amplify-inappmessaging-bannermessage--middle { - bottom: 0; - margin: auto var(--amplify-space-small); - top: 0; -} -.amplify-inappmessaging-bannermessage--bottom { - bottom: 0; -} -.amplify-inappmessaging-bannermessage--left { - left: 0; -} -.amplify-inappmessaging-bannermessage--center { - left: 0; - margin: var(--amplify-space-small) auto; - right: 0; -} -.amplify-inappmessaging-bannermessage--right { - right: 0; -} -.amplify-inappmessaging-bannermessage--center-middle { - inset: 0; - margin: auto; -} -.amplify-inappmessaging-bannermessage--full-width { - max-width: initial; - width: calc(100% - 2 * var(--amplify-space-small)); -} - -.amplify-inappmessaging-fullscreenmessage { - height: var(--amplify-components-inappmessaging-dialog-height); - min-height: var(--amplify-components-inappmessaging-dialog-min-height); - min-width: var(--amplify-components-inappmessaging-dialog-min-width); - width: var(--amplify-components-inappmessaging-dialog-width); -} -.amplify-inappmessaging-fullscreenmessage--fullscreen { - height: auto; - inset: 0; - position: fixed; - width: auto; - z-index: 1000; -} - -.amplify-inappmessaging-messagelayout { - background-color: var(--amplify-colors-background-primary); - flex-direction: column; - flex-grow: 1; - gap: var(--amplify-space-xxxs); - max-width: 100%; - padding: var(--amplify-space-medium); -} -.amplify-inappmessaging-messagelayout__button { - border-width: 0; - width: 100%; -} -.amplify-inappmessaging-messagelayout__button, .amplify-inappmessaging-messagelayout__button:active, .amplify-inappmessaging-messagelayout__button:visited, .amplify-inappmessaging-messagelayout__button:hover, .amplify-inappmessaging-messagelayout__button:focus { - background-color: var(--amplify-components-inappmessaging-button-background-color); - border-radius: var(--amplify-components-inappmessaging-button-border-radius); - color: var(--amplify-components-inappmessaging-button-color); -} -.amplify-inappmessaging-messagelayout__button--dark:active, .amplify-inappmessaging-messagelayout__button--dark:visited, .amplify-inappmessaging-messagelayout__button--light:active, .amplify-inappmessaging-messagelayout__button--light:visited { - filter: brightness(100%); -} -.amplify-inappmessaging-messagelayout__button--dark:hover, .amplify-inappmessaging-messagelayout__button--dark:focus { - filter: brightness(120%); -} -.amplify-inappmessaging-messagelayout__button--light:hover, .amplify-inappmessaging-messagelayout__button--light:focus { - filter: brightness(80%); -} -.amplify-inappmessaging-messagelayout__close-button { - color: var(--amplify-colors-neutral-80); -} -.amplify-inappmessaging-messagelayout__close-button:active, .amplify-inappmessaging-messagelayout__close-button:visited { - color: var(--amplify-colors-neutral-80); -} -.amplify-inappmessaging-messagelayout__close-button:hover, .amplify-inappmessaging-messagelayout__close-button:focus { - color: var(--amplify-colors-neutral-100); -} -.amplify-inappmessaging-messagelayout__content { - flex-grow: 1; - overflow: hidden; -} -.amplify-inappmessaging-messagelayout__content--horizontal { - flex-direction: row; -} -.amplify-inappmessaging-messagelayout__content--vertical { - flex-direction: column; - justify-content: center; -} -.amplify-inappmessaging-messagelayout__header { - flex-shrink: 0; - font-size: var(--amplify-components-inappmessaging-header-font-size); - font-weight: var(--amplify-components-inappmessaging-header-font-weight); -} -.amplify-inappmessaging-messagelayout__image-container { - align-items: center; - display: flex; - justify-content: center; - position: relative; -} -.amplify-inappmessaging-messagelayout__image-container img { - max-height: 100%; - max-width: 100%; - -o-object-fit: contain; - object-fit: contain; - position: absolute; -} -.amplify-inappmessaging-messagelayout__image-container--horizontal { - max-width: 15%; - min-width: 15%; -} -.amplify-inappmessaging-messagelayout__image-container--vertical { - max-height: 40%; - min-height: 40%; -} -.amplify-inappmessaging-messagelayout__text-container { - flex-direction: column; - overflow-y: auto; - gap: var(--amplify-space-xxxs); -} -.amplify-inappmessaging-messagelayout__text-container--horizontal { - flex-grow: 1; -} -.amplify-inappmessaging-messagelayout__text-container--vertical { - flex-grow: 0; -} - -.amplify-inappmessaging-modalmessage { - align-items: center; - height: initial; - inset: 0; - justify-content: center; - pointer-events: none; - position: fixed; - width: initial; - z-index: 1000; -} -.amplify-inappmessaging-modalmessage__dialog { - box-shadow: var(--amplify-shadows-medium); - height: var(--amplify-components-inappmessaging-dialog-height); - min-height: var(--amplify-components-inappmessaging-dialog-min-height); - min-width: var(--amplify-components-inappmessaging-dialog-min-width); - pointer-events: auto; - width: var(--amplify-components-inappmessaging-dialog-width); -} -.amplify-inappmessaging-modalmessage__dialog--full-width { - width: 100%; - margin: var(--amplify-space-small); -} - -[data-label-position=start] { - flex-direction: row; -} - -[data-label-position=end] { - flex-direction: row-reverse; -} - -[data-label-position=top] { - flex-direction: column; -} - -[data-label-position=bottom] { - flex-direction: column-reverse; -} - -.amplify-visually-hidden { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - fill: transparent; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border-width: 0; -} -/* Basics */ -.maplibregl-ctrl-geocoder, -.maplibregl-ctrl-geocoder *, -.maplibregl-ctrl-geocoder *:after, -.maplibregl-ctrl-geocoder *:before { - box-sizing: border-box; -} -.maplibregl-ctrl-geocoder { - font-size: 18px; - line-height: 24px; - font-family: "Open Sans", "Helvetica Neue", Arial, Helvetica, sans-serif; - position: relative; - background-color: #fff; - width: 100%; - min-width: 240px; - z-index: 1; - border-radius: 4px; - transition: width 0.25s, min-width 0.25s; -} -.maplibregl-ctrl-geocoder--input { - font: inherit; - width: 100%; - border: 0; - background-color: transparent; - margin: 0; - height: 50px; - color: #404040; /* fallback */ - color: rgba(0, 0, 0, 0.75); - padding: 6px 45px; - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; -} -.maplibregl-ctrl-geocoder--input::-ms-clear { - display: none; /* hide input clear button in IE */ -} -.maplibregl-ctrl-geocoder--input:focus { - color: #404040; /* fallback */ - color: rgba(0, 0, 0, 0.75); - outline: 0; - box-shadow: none; - outline: thin dotted; -} -.maplibregl-ctrl-geocoder .maplibregl-ctrl-geocoder--pin-right > * { - z-index: 2; - position: absolute; - right: 8px; - top: 7px; - display: none; -} -.maplibregl-ctrl-geocoder, -.maplibregl-ctrl-geocoder .suggestions { - box-shadow: 0 0 10px 2px rgba(0, 0, 0, 0.1); -} -/* Collapsed */ -.maplibregl-ctrl-geocoder.maplibregl-ctrl-geocoder--collapsed { - width: 50px; - min-width: 50px; - transition: width 0.25s, min-width 0.25s; -} -/* Suggestions */ -.maplibregl-ctrl-geocoder .suggestions { - background-color: #fff; - border-radius: 4px; - left: 0; - list-style: none; - margin: 0; - padding: 0; - position: absolute; - width: 100%; - top: 110%; /* fallback */ - top: calc(100% + 6px); - z-index: 1000; - overflow: hidden; - font-size: 15px; -} -.maplibregl-ctrl-bottom-left .suggestions, -.maplibregl-ctrl-bottom-right .suggestions { - top: auto; - bottom: 100%; -} -.maplibregl-ctrl-geocoder .suggestions > li > a { - cursor: default; - display: block; - padding: 6px 12px; - color: #404040; -} -.maplibregl-ctrl-geocoder .suggestions > .active > a, -.maplibregl-ctrl-geocoder .suggestions > li > a:hover { - color: #404040; - background-color: #f3f3f3; - text-decoration: none; - cursor: pointer; -} -.maplibregl-ctrl-geocoder--suggestion { - display: flex; - flex-direction: row; - align-items: center; -} -.maplibre-ctrl-geocoder--suggestion-icon { - min-width: 30px; - min-height: 24px; - max-width: 30px; - max-height: 24px; - padding-right: 12px; -} -.maplibregl-ctrl-geocoder--suggestion-info { - display: flex; - flex-direction: column; -} -.maplibregl-ctrl-geocoder--suggestion-match { - font-weight: bold; -} -.maplibregl-ctrl-geocoder--suggestion-title, -.maplibregl-ctrl-geocoder--suggestion-address { - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; -} -.maplibregl-ctrl-geocoder--result { - display: flex; - flex-direction: row; - align-items: center; -} -.maplibre-ctrl-geocoder--result-icon { - min-width: 30px; - min-height: 24px; - max-width: 30px; - max-height: 24px; - padding-right: 12px; -} -.maplibregl-ctrl-geocoder--result-title { - font-weight: bold; -} -.maplibregl-ctrl-geocoder--result-title, -.maplibregl-ctrl-geocoder--result-address { - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; -} -/* Icons */ -.maplibregl-ctrl-geocoder--icon { - display: inline-block; - vertical-align: middle; - speak: none; - fill: #757575; - top: 15px; -} -.maplibregl-ctrl-geocoder--icon-search { - position: absolute; - top: 13px; - left: 12px; - width: 23px; - height: 23px; -} -.maplibregl-ctrl-geocoder--button { - padding: 0; - margin: 0; - border: none; - cursor: pointer; - background: #fff; - line-height: 1; -} -.maplibregl-ctrl-geocoder--icon-close { - width: 20px; - height: 20px; - margin-top: 8px; - margin-right: 3px; -} -.maplibregl-ctrl-geocoder--button:hover .maplibregl-ctrl-geocoder--icon-close { - fill: #909090; -} -.maplibregl-ctrl-geocoder--icon-loading { - width: 26px; - height: 26px; - margin-top: 5px; - margin-right: 0px; - -moz-animation: rotate 0.8s infinite cubic-bezier(0.45, 0.05, 0.55, 0.95); - -webkit-animation: rotate 0.8s infinite cubic-bezier(0.45, 0.05, 0.55, 0.95); - animation: rotate 0.8s infinite cubic-bezier(0.45, 0.05, 0.55, 0.95); -} -/* Animation */ -@-webkit-keyframes rotate { - from { - -webkit-transform: rotate(0); - transform: rotate(0); - } - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} -@keyframes rotate { - from { - -webkit-transform: rotate(0); - transform: rotate(0); - } - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} -/* Media queries*/ -@media screen and (min-width: 640px) { - .maplibregl-ctrl-geocoder.maplibregl-ctrl-geocoder--collapsed { - width: 36px; - min-width: 36px; - } - - .maplibregl-ctrl-geocoder { - width: 33.3333%; - font-size: 15px; - line-height: 20px; - max-width: 360px; - } - .maplibregl-ctrl-geocoder .suggestions { - font-size: 13px; - } - - .maplibregl-ctrl-geocoder--icon { - top: 8px; - } - - .maplibregl-ctrl-geocoder--icon-close { - width: 16px; - height: 16px; - margin-top: 3px; - margin-right: 0; - } - - .maplibregl-ctrl-geocoder--icon-search { - left: 7px; - width: 20px; - height: 20px; - } - - .maplibregl-ctrl-geocoder--input { - height: 36px; - padding: 6px 35px; - } - - .maplibregl-ctrl-geocoder--icon-loading { - width: 26px; - height: 26px; - margin-top: -2px; - margin-right: -5px; - } - - .maplibre-gl-geocoder--error { - color: #909090; - padding: 6px 12px; - font-size: 16px; - text-align: center; - } -} -.maplibregl-ctrl-geocoder { - text-align: initial; -} -.mapboxgl-popup-tip { - display: none; -} -.maplibre-ctrl-geocoder--suggestion { - background: #fff; - border: 2px solid #0000001f; - color: #000; - border-radius: 4px; - padding: 20px; - word-wrap: break-word; - margin: -10px -10px -15px; - text-align: initial; -} -.maplibre-ctrl-geocoder--suggestion-title { - font-weight: bold; -} -.mapboxgl-map,.maplibregl-map{-webkit-tap-highlight-color:rgb(0 0 0/0);font:12px/20px Helvetica Neue,Arial,Helvetica,sans-serif;overflow:hidden;position:relative} -.mapboxgl-canvas,.maplibregl-canvas{left:0;position:absolute;top:0} -.mapboxgl-map:fullscreen,.maplibregl-map:fullscreen{height:100%;width:100%} -.mapboxgl-canvas-container.mapboxgl-interactive,.mapboxgl-ctrl-group button.mapboxgl-ctrl-compass,.maplibregl-canvas-container.maplibregl-interactive,.maplibregl-ctrl-group button.maplibregl-ctrl-compass{cursor:grab;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none} -.mapboxgl-canvas-container.mapboxgl-interactive.mapboxgl-track-pointer,.maplibregl-canvas-container.maplibregl-interactive.maplibregl-track-pointer{cursor:pointer} -.mapboxgl-canvas-container.mapboxgl-interactive:active,.mapboxgl-ctrl-group button.mapboxgl-ctrl-compass:active,.maplibregl-canvas-container.maplibregl-interactive:active,.maplibregl-ctrl-group button.maplibregl-ctrl-compass:active{cursor:grabbing} -.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate,.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate .mapboxgl-canvas,.maplibregl-canvas-container.maplibregl-touch-zoom-rotate,.maplibregl-canvas-container.maplibregl-touch-zoom-rotate .maplibregl-canvas{touch-action:pan-x pan-y} -.mapboxgl-canvas-container.mapboxgl-touch-drag-pan,.mapboxgl-canvas-container.mapboxgl-touch-drag-pan .mapboxgl-canvas,.maplibregl-canvas-container.maplibregl-touch-drag-pan,.maplibregl-canvas-container.maplibregl-touch-drag-pan .maplibregl-canvas{touch-action:pinch-zoom} -.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan,.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan .mapboxgl-canvas,.maplibregl-canvas-container.maplibregl-touch-zoom-rotate.maplibregl-touch-drag-pan,.maplibregl-canvas-container.maplibregl-touch-zoom-rotate.maplibregl-touch-drag-pan .maplibregl-canvas{touch-action:none} -.mapboxgl-ctrl-bottom-left,.mapboxgl-ctrl-bottom-right,.mapboxgl-ctrl-top-left,.mapboxgl-ctrl-top-right,.maplibregl-ctrl-bottom-left,.maplibregl-ctrl-bottom-right,.maplibregl-ctrl-top-left,.maplibregl-ctrl-top-right{pointer-events:none;position:absolute;z-index:2} -.mapboxgl-ctrl-top-left,.maplibregl-ctrl-top-left{left:0;top:0} -.mapboxgl-ctrl-top-right,.maplibregl-ctrl-top-right{right:0;top:0} -.mapboxgl-ctrl-bottom-left,.maplibregl-ctrl-bottom-left{bottom:0;left:0} -.mapboxgl-ctrl-bottom-right,.maplibregl-ctrl-bottom-right{bottom:0;right:0} -.mapboxgl-ctrl,.maplibregl-ctrl{clear:both;pointer-events:auto;transform:translate(0)} -.mapboxgl-ctrl-top-left .mapboxgl-ctrl,.maplibregl-ctrl-top-left .maplibregl-ctrl{float:left;margin:10px 0 0 10px} -.mapboxgl-ctrl-top-right .mapboxgl-ctrl,.maplibregl-ctrl-top-right .maplibregl-ctrl{float:right;margin:10px 10px 0 0} -.mapboxgl-ctrl-bottom-left .mapboxgl-ctrl,.maplibregl-ctrl-bottom-left .maplibregl-ctrl{float:left;margin:0 0 10px 10px} -.mapboxgl-ctrl-bottom-right .mapboxgl-ctrl,.maplibregl-ctrl-bottom-right .maplibregl-ctrl{float:right;margin:0 10px 10px 0} -.mapboxgl-ctrl-group,.maplibregl-ctrl-group{background:#fff;border-radius:4px} -.mapboxgl-ctrl-group:not(:empty),.maplibregl-ctrl-group:not(:empty){box-shadow:0 0 0 2px rgba(0,0,0,.1)} -@media (-ms-high-contrast:active){.mapboxgl-ctrl-group:not(:empty),.maplibregl-ctrl-group:not(:empty){box-shadow:0 0 0 2px ButtonText}} -.mapboxgl-ctrl-group button,.maplibregl-ctrl-group button{background-color:transparent;border:0;box-sizing:border-box;cursor:pointer;display:block;height:29px;outline:none;padding:0;width:29px} -.mapboxgl-ctrl-group button+button,.maplibregl-ctrl-group button+button{border-top:1px solid #ddd} -.mapboxgl-ctrl button .mapboxgl-ctrl-icon,.maplibregl-ctrl button .maplibregl-ctrl-icon{background-position:50%;background-repeat:no-repeat;display:block;height:100%;width:100%} -@media (-ms-high-contrast:active){.mapboxgl-ctrl-icon,.maplibregl-ctrl-icon{background-color:transparent}.mapboxgl-ctrl-group button+button,.maplibregl-ctrl-group button+button{border-top:1px solid ButtonText}} -.mapboxgl-ctrl button::-moz-focus-inner,.maplibregl-ctrl button::-moz-focus-inner{border:0;padding:0} -.mapboxgl-ctrl-attrib-button:focus,.mapboxgl-ctrl-group button:focus,.maplibregl-ctrl-attrib-button:focus,.maplibregl-ctrl-group button:focus{box-shadow:0 0 2px 2px #0096ff} -.mapboxgl-ctrl button:disabled,.maplibregl-ctrl button:disabled{cursor:not-allowed} -.mapboxgl-ctrl button:disabled .mapboxgl-ctrl-icon,.maplibregl-ctrl button:disabled .maplibregl-ctrl-icon{opacity:.25} -.mapboxgl-ctrl button:not(:disabled):hover,.maplibregl-ctrl button:not(:disabled):hover{background-color:rgb(0 0 0/5%)} -.mapboxgl-ctrl-group button:focus:focus-visible,.maplibregl-ctrl-group button:focus:focus-visible{box-shadow:0 0 2px 2px #0096ff} -.mapboxgl-ctrl-group button:focus:not(:focus-visible),.maplibregl-ctrl-group button:focus:not(:focus-visible){box-shadow:none} -.mapboxgl-ctrl-group button:focus:first-child,.maplibregl-ctrl-group button:focus:first-child{border-radius:4px 4px 0 0} -.mapboxgl-ctrl-group button:focus:last-child,.maplibregl-ctrl-group button:focus:last-child{border-radius:0 0 4px 4px} -.mapboxgl-ctrl-group button:focus:only-child,.maplibregl-ctrl-group button:focus:only-child{border-radius:inherit} -.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E")} -.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E")} -@media (-ms-high-contrast:active){.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23fff'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23fff'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E")}} -@media (-ms-high-contrast:black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E")}} -.mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-fullscreen .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E")} -.mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-shrink .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E")} -@media (-ms-high-contrast:active){.mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-fullscreen .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23fff'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-shrink .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23fff'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E")}} -@media (-ms-high-contrast:black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-fullscreen .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-shrink .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E")}} -.mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-compass .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='m10.5 14 4-8 4 8h-8z'/%3E%3Cpath d='m10.5 16 4 8 4-8h-8z' fill='%23ccc'/%3E%3C/svg%3E")} -@media (-ms-high-contrast:active){.mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-compass .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg' fill='%23fff'%3E%3Cpath d='m10.5 14 4-8 4 8h-8z'/%3E%3Cpath d='m10.5 16 4 8 4-8h-8z' fill='%23999'/%3E%3C/svg%3E")}} -@media (-ms-high-contrast:black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-compass .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 29 29' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='m10.5 14 4-8 4 8h-8z'/%3E%3Cpath d='m10.5 16 4 8 4-8h-8z' fill='%23ccc'/%3E%3C/svg%3E")}} -.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-geolocate .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")} -.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-geolocate:disabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23aaa'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3Cpath d='m14 5 1 1-9 9-1-1 9-9z' fill='red'/%3E%3C/svg%3E")} -.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")} -.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e58978'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")} -.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3C/svg%3E")} -.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e54e33'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3C/svg%3E")} -.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-waiting .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-waiting .maplibregl-ctrl-icon{animation:maplibregl-spin 2s linear infinite} -@media (-ms-high-contrast:active){.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-geolocate .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23fff'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-geolocate:disabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23999'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3Cpath d='m14 5 1 1-9 9-1-1 9-9z' fill='red'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e58978'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e54e33'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3C/svg%3E")}} -@media (-ms-high-contrast:black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-geolocate .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon,.maplibregl-ctrl button.maplibregl-ctrl-geolocate:disabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='29' height='29' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23666'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3Cpath d='m14 5 1 1-9 9-1-1 9-9z' fill='red'/%3E%3C/svg%3E")}} -@keyframes maplibregl-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}} -a.mapboxgl-ctrl-logo,a.maplibregl-ctrl-logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='88' height='23' fill='none'%3E%3Cpath d='M17.408 16.796h-1.827l2.501-12.095h.198l3.324 6.533.988 2.19.988-2.19 3.258-6.533h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.929 5.644h-.098l-2.914-5.644-.757-1.71-.345 1.71zm1.958-3.42-.726 3.663a1.255 1.255 0 0 1-1.232 1.011h-1.827a1.255 1.255 0 0 1-1.229-1.509l2.501-12.095a1.255 1.255 0 0 1 1.23-1.001h.197a1.255 1.255 0 0 1 1.12.685l3.19 6.273 3.125-6.263a1.255 1.255 0 0 1 1.123-.695h.181a1.255 1.255 0 0 1 1.227.991l1.443 6.71a5.11 5.11 0 0 1 .314-.787l.009-.016a4.623 4.623 0 0 1 1.777-1.887c.782-.46 1.668-.667 2.611-.667a4.548 4.548 0 0 1 1.7.32l.306.134c.21-.16.474-.256.759-.256h1.694a1.255 1.255 0 0 1 1.212.925 1.255 1.255 0 0 1 1.212-.925h1.711c.284 0 .545.094.755.252.613-.3 1.312-.45 2.075-.45 1.356 0 2.557.445 3.482 1.4.314.319.566.676.763 1.064V4.701a1.255 1.255 0 0 1 1.255-1.255h1.86A1.255 1.255 0 0 1 54.44 4.7v9.194h2.217c.19 0 .37.043.532.118v-4.77c0-.356.147-.678.385-.906a2.416 2.416 0 0 1-.682-1.71c0-.665.267-1.253.735-1.7a2.448 2.448 0 0 1 1.722-.674 2.43 2.43 0 0 1 1.705.675c.211.2.381.43.504.683V4.7a1.255 1.255 0 0 1 1.255-1.255h1.744A1.255 1.255 0 0 1 65.812 4.7v3.335a4.76 4.76 0 0 1 1.526-.246c.938 0 1.817.214 2.59.69a4.47 4.47 0 0 1 1.67 1.743v-.98a1.255 1.255 0 0 1 1.256-1.256h1.777c.233 0 .451.064.639.174a3.407 3.407 0 0 1 1.567-.372c.346 0 .861.02 1.285.232a1.255 1.255 0 0 1 .689 1.004 4.73 4.73 0 0 1 .853-.588c.795-.44 1.675-.647 2.61-.647 1.385 0 2.65.39 3.525 1.396.836.938 1.168 2.173 1.168 3.528 0 .343-.02.694-.056 1.051a1.255 1.255 0 0 1-.947 1.09l.408.952a1.255 1.255 0 0 1-.477 1.552c-.418.268-.92.463-1.458.612-.613.171-1.304.244-2.049.244-1.06 0-2.043-.207-2.886-.698l-.015-.008c-.798-.48-1.419-1.135-1.818-1.963l-.004-.008a5.815 5.815 0 0 1-.548-2.512c0-.286.017-.567.053-.843a1.255 1.255 0 0 1-.333-.086l-.166-.004c-.223 0-.426.062-.643.228-.03.024-.142.139-.142.59v3.883a1.255 1.255 0 0 1-1.256 1.256h-1.777a1.255 1.255 0 0 1-1.256-1.256V15.69l-.032.057a4.778 4.778 0 0 1-1.86 1.833 5.04 5.04 0 0 1-2.484.634 4.47 4.47 0 0 1-1.935-.424 1.252 1.252 0 0 1-.764.258h-1.71a1.255 1.255 0 0 1-1.256-1.255V7.687a2.402 2.402 0 0 1-.428.625c.253.23.412.561.412.93v7.553a1.255 1.255 0 0 1-1.256 1.255h-1.843a1.25 1.25 0 0 1-.894-.373c-.228.23-.544.373-.894.373H51.32a1.255 1.255 0 0 1-1.256-1.255v-1.251l-.061.117a4.703 4.703 0 0 1-1.782 1.884 4.767 4.767 0 0 1-2.485.67 5.6 5.6 0 0 1-1.485-.188l.009 2.764a1.255 1.255 0 0 1-1.255 1.259h-1.729a1.255 1.255 0 0 1-1.255-1.255v-3.537a1.255 1.255 0 0 1-1.167.793h-1.679a1.25 1.25 0 0 1-.77-.263 4.47 4.47 0 0 1-1.945.429c-.885 0-1.724-.21-2.495-.632l-.017-.01a4.983 4.983 0 0 1-1.081-.836 1.255 1.255 0 0 1-1.254 1.312h-1.81a1.255 1.255 0 0 1-1.228-.99l-.782-3.625-2.044 3.939a1.255 1.255 0 0 1-1.115.676h-.098a1.255 1.255 0 0 1-1.116-.68l-2.061-3.994zM35.92 16.63l.207-.114.223-.15c.329-.237.574-.499.735-.785l.061-.118.033 1.332h1.678V9.242h-1.694l-.033 1.267c-.088-.22-.264-.438-.526-.658l-.032-.028a3.16 3.16 0 0 0-.668-.428l-.27-.12a3.293 3.293 0 0 0-1.235-.23c-.757 0-1.415.163-1.974.493a3.36 3.36 0 0 0-1.3 1.382c-.297.593-.444 1.284-.444 2.074 0 .8.17 1.503.51 2.107a3.795 3.795 0 0 0 1.382 1.381 3.883 3.883 0 0 0 1.893.477c.53 0 1.015-.11 1.455-.33zm-2.789-5.38c-.384.45-.575 1.038-.575 1.762 0 .735.186 1.332.559 1.794.384.45.933.675 1.645.675a2.25 2.25 0 0 0 .934-.19 2.17 2.17 0 0 0 .468-.29l.178-.161a2.163 2.163 0 0 0 .397-.561c.163-.333.244-.717.244-1.15v-.115c0-.472-.098-.894-.296-1.267l-.043-.077a2.211 2.211 0 0 0-.633-.709l-.13-.086-.047-.028a2.099 2.099 0 0 0-1.073-.285c-.702 0-1.244.231-1.629.692zm2.316 2.706c.163-.17.28-.407.28-.83v-.114c0-.292-.06-.508-.15-.68a.958.958 0 0 0-.353-.389.851.851 0 0 0-.464-.127c-.4 0-.56.114-.664.239l-.01.012c-.148.174-.275.45-.275.945 0 .506.122.801.27.99.097.11.266.224.68.224.303 0 .504-.09.687-.269zm7.545 1.705a2.626 2.626 0 0 0 .331.423c.213.22.464.402.755.548l.173.074c.433.17.93.255 1.49.255.68 0 1.295-.165 1.844-.493a3.447 3.447 0 0 0 1.316-1.4c.329-.603.493-1.299.493-2.089 0-1.273-.33-2.243-.988-2.913-.658-.68-1.52-1.02-2.584-1.02-.598 0-1.124.115-1.575.347a2.807 2.807 0 0 0-.415.262l-.199.166a3.35 3.35 0 0 0-.64.82V9.242h-1.712v11.553h1.729l-.017-5.134zm.53-1.138c.137.193.297.36.48.5l.155.11.053.034c.34.197.713.297 1.119.297.714 0 1.262-.225 1.645-.675.385-.46.576-1.048.576-1.762 0-.746-.192-1.338-.576-1.777-.372-.45-.92-.675-1.645-.675-.29 0-.569.053-.835.16a2.366 2.366 0 0 0-.284.136 1.99 1.99 0 0 0-.363.254 2.237 2.237 0 0 0-.46.569l-.082.162a2.56 2.56 0 0 0-.213 1.072v.115c0 .471.098.894.296 1.267l.135.211zm.964-.818a1.11 1.11 0 0 0 .367.385.937.937 0 0 0 .476.118c.423 0 .59-.117.687-.23.159-.194.28-.478.28-.95 0-.53-.133-.8-.266-.952l-.021-.025c-.078-.094-.231-.221-.68-.221a.995.995 0 0 0-.503.135l-.012.007a.859.859 0 0 0-.335.343c-.073.133-.132.324-.132.614v.115a1.43 1.43 0 0 0 .14.66zm15.7-6.222c.232-.23.346-.516.346-.856a1.053 1.053 0 0 0-.345-.79 1.175 1.175 0 0 0-.84-.329c-.34 0-.625.11-.855.33a1.053 1.053 0 0 0-.346.79c0 .34.115.625.346.855.23.23.516.346.856.346.34 0 .62-.115.839-.346zm4.337 9.314.033-1.332c.128.269.324.518.59.747l.098.081a3.727 3.727 0 0 0 .316.224l.223.122a3.21 3.21 0 0 0 1.44.322 3.785 3.785 0 0 0 1.875-.477 3.52 3.52 0 0 0 1.382-1.366c.352-.593.526-1.29.526-2.09 0-.79-.147-1.48-.444-2.073a3.235 3.235 0 0 0-1.283-1.399c-.549-.34-1.195-.51-1.942-.51a3.476 3.476 0 0 0-1.527.344l-.086.043-.165.09a3.412 3.412 0 0 0-.33.214c-.288.21-.507.446-.656.707a1.893 1.893 0 0 0-.099.198l.082-1.283V4.701h-1.744v12.095zm.473-2.509a2.482 2.482 0 0 0 .566.7c.078.065.159.125.245.18l.144.08a2.105 2.105 0 0 0 .975.232c.713 0 1.262-.225 1.645-.675.384-.46.576-1.053.576-1.778 0-.734-.192-1.327-.576-1.777-.373-.46-.921-.692-1.645-.692a2.18 2.18 0 0 0-1.015.235c-.147.075-.285.17-.415.282l-.15.142a2.086 2.086 0 0 0-.42.594c-.149.32-.223.685-.223 1.1v.115c0 .47.097.89.293 1.26zm2.616-.293c.157-.191.28-.479.28-.967 0-.51-.13-.79-.276-.961l-.021-.026c-.082-.1-.232-.225-.67-.225a.868.868 0 0 0-.681.279l-.012.011c-.154.155-.274.38-.274.807v.115c0 .285.057.499.144.669a1.13 1.13 0 0 0 .367.405c.137.082.28.123.455.123.423 0 .59-.118.686-.23zm8.266-3.013c.23-.087.472-.134.724-.14l.069-.002c.329 0 .542.033.642.099l.247-1.794c-.13-.066-.37-.099-.717-.099a2.3 2.3 0 0 0-.545.063 2.086 2.086 0 0 0-.411.148 2.18 2.18 0 0 0-.4.249 2.482 2.482 0 0 0-.485.499 2.659 2.659 0 0 0-.32.581l-.05.137v-1.48h-1.778v7.553h1.777v-3.884c0-.364.053-.678.159-.943a1.49 1.49 0 0 1 .466-.636 2.52 2.52 0 0 1 .399-.253 2.19 2.19 0 0 1 .224-.099zm9.784 2.656.05-.922c0-1.162-.285-2.062-.856-2.698-.559-.647-1.42-.97-2.584-.97-.746 0-1.415.163-2.007.493a3.462 3.462 0 0 0-1.4 1.382c-.329.604-.493 1.306-.493 2.106 0 .714.143 1.371.428 1.975.285.593.73 1.07 1.332 1.432.604.351 1.355.526 2.255.526.649 0 1.204-.062 1.668-.185l.044-.012.135-.04c.409-.122.736-.263.984-.421l-.542-1.267c-.2.108-.415.199-.642.274l-.297.087c-.34.088-.773.131-1.3.131-.636 0-1.135-.147-1.497-.444a1.573 1.573 0 0 1-.192-.193c-.244-.294-.415-.705-.512-1.234l-.004-.021h5.43zm-5.427-1.256-.003.022h3.752v-.138c-.007-.485-.104-.857-.288-1.118a1.056 1.056 0 0 0-.156-.176c-.307-.285-.746-.428-1.316-.428-.657 0-1.155.202-1.494.604-.253.3-.417.712-.494 1.234zm-27.053 2.77V4.7h-1.86v12.095h5.333V15.15zm7.103-5.908v7.553h-1.843V9.242h1.843z' fill='%23000' fill-opacity='.4' fill-rule='evenodd'/%3E%3Cpath d='m19.63 11.151-.757-1.71-.345 1.71-1.12 5.644h-1.827L18.083 4.7h.197l3.325 6.533.988 2.19.988-2.19L26.839 4.7h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.93 5.644h-.098l-2.913-5.644zm14.836 5.81c-.68 0-1.311-.16-1.893-.478a3.795 3.795 0 0 1-1.381-1.382c-.34-.604-.51-1.306-.51-2.106 0-.79.147-1.482.444-2.074a3.364 3.364 0 0 1 1.3-1.382c.559-.33 1.217-.494 1.974-.494a3.293 3.293 0 0 1 1.234.231 3.341 3.341 0 0 1 .97.575c.264.22.44.439.527.659l.033-1.267h1.694v7.553H37.18l-.033-1.332c-.186.395-.526.746-1.02 1.053a3.167 3.167 0 0 1-1.662.444zm.296-1.482c.626 0 1.152-.214 1.58-.642.428-.44.642-1.01.642-1.711v-.115c0-.472-.098-.894-.296-1.267a2.211 2.211 0 0 0-.807-.872 2.098 2.098 0 0 0-1.119-.313c-.702 0-1.245.231-1.629.692-.384.45-.575 1.037-.575 1.76 0 .736.186 1.333.559 1.795.384.45.933.675 1.645.675zm6.521-6.237h1.711v1.4c.604-1.065 1.547-1.597 2.83-1.597 1.064 0 1.926.34 2.584 1.02.659.67.988 1.641.988 2.914 0 .79-.164 1.487-.493 2.09a3.456 3.456 0 0 1-1.316 1.399 3.51 3.51 0 0 1-1.844.493c-.636 0-1.19-.11-1.662-.329a2.665 2.665 0 0 1-1.086-.97l.017 5.134h-1.728V9.242zm4.048 6.22c.714 0 1.262-.224 1.645-.674.385-.46.576-1.048.576-1.762 0-.746-.192-1.338-.576-1.777-.372-.45-.92-.675-1.645-.675-.395 0-.768.098-1.12.296-.34.187-.613.46-.822.823-.197.351-.296.763-.296 1.234v.115c0 .472.098.894.296 1.267.209.362.483.647.823.855.34.197.713.297 1.119.297z' fill='%23fff'/%3E%3Cpath d='M51.325 4.7h1.86v10.45h3.473v1.646h-5.333zm7.12 4.542h1.843v7.553h-1.843zm.905-1.415a1.159 1.159 0 0 1-.856-.346 1.165 1.165 0 0 1-.346-.856 1.053 1.053 0 0 1 .346-.79c.23-.219.516-.329.856-.329.329 0 .609.11.839.33a1.053 1.053 0 0 1 .345.79 1.159 1.159 0 0 1-.345.855c-.22.23-.5.346-.84.346zm7.875 9.133a3.167 3.167 0 0 1-1.662-.444c-.482-.307-.817-.658-1.004-1.053l-.033 1.332h-1.71V4.701h1.743v4.657l-.082 1.283c.186-.438.548-.812 1.086-1.119a3.486 3.486 0 0 1 1.778-.477c.746 0 1.393.17 1.942.51a3.235 3.235 0 0 1 1.283 1.4c.297.592.444 1.282.444 2.072 0 .8-.175 1.498-.526 2.09a3.52 3.52 0 0 1-1.382 1.366 3.785 3.785 0 0 1-1.876.477zm-.296-1.481c.713 0 1.26-.225 1.645-.675.384-.46.577-1.053.577-1.778 0-.734-.193-1.327-.577-1.776-.373-.46-.921-.692-1.645-.692a2.115 2.115 0 0 0-1.58.659c-.428.428-.642.992-.642 1.694v.115c0 .473.098.895.296 1.267a2.385 2.385 0 0 0 .807.872 2.1 2.1 0 0 0 1.119.313zm5.927-6.237h1.777v1.481c.176-.505.46-.91.856-1.217a2.14 2.14 0 0 1 1.349-.46c.351 0 .593.032.724.098l-.247 1.794c-.099-.066-.313-.099-.642-.099-.516 0-.988.164-1.416.494-.417.329-.626.855-.626 1.58v3.883h-1.777V9.242zm9.534 7.718c-.9 0-1.651-.175-2.255-.526-.603-.362-1.047-.84-1.332-1.432a4.567 4.567 0 0 1-.428-1.975c0-.8.164-1.502.493-2.106a3.462 3.462 0 0 1 1.4-1.382c.592-.33 1.262-.494 2.007-.494 1.163 0 2.024.324 2.584.97.57.637.856 1.537.856 2.7 0 .296-.017.603-.05.92h-5.43c.12.67.356 1.153.708 1.45.362.296.86.443 1.497.443.526 0 .96-.044 1.3-.131a4.123 4.123 0 0 0 .938-.362l.542 1.267c-.274.175-.647.329-1.119.46-.472.132-1.042.197-1.711.197zm1.596-4.558c.01-.68-.137-1.158-.444-1.432-.307-.285-.746-.428-1.316-.428-1.152 0-1.815.62-1.991 1.86h3.752z' fill='%23e1e3e9'/%3E%3Cg fill-rule='evenodd' stroke-width='1.036'%3E%3Cpath d='m8.166 16.146-.002.002a1.54 1.54 0 0 1-2.009 0l-.002-.002-.043-.034-.002-.002-.199-.162H4.377a.657.657 0 0 0-.659.659v1.84a.657.657 0 0 0 .659.659h5.565a.657.657 0 0 0 .659-.659v-1.84a.657.657 0 0 0-.659-.659H8.411l-.202.164zm-1.121-.905a.29.29 0 0 0 .113.023.286.286 0 0 0 .189-.07l.077-.063c.634-.508 4.672-3.743 4.672-7.575 0-2.55-2.215-4.625-4.938-4.625S2.221 5.006 2.221 7.556c0 3.225 2.86 6.027 4.144 7.137h.004l.04.038.484.4.077.063a.628.628 0 0 0 .074.047zm-2.52-.548a16.898 16.898 0 0 1-1.183-1.315C2.187 11.942.967 9.897.967 7.555c0-3.319 2.855-5.88 6.192-5.88 3.338 0 6.193 2.561 6.193 5.881 0 2.34-1.22 4.387-2.376 5.822a16.898 16.898 0 0 1-1.182 1.315h.15a1.912 1.912 0 0 1 1.914 1.914v1.84a1.912 1.912 0 0 1-1.914 1.914H4.377a1.912 1.912 0 0 1-1.914-1.914v-1.84a1.912 1.912 0 0 1 1.914-1.914zm3.82-6.935c0 .692-.55 1.222-1.187 1.222s-1.185-.529-1.185-1.222.548-1.222 1.185-1.222c.638 0 1.186.529 1.186 1.222zm-1.186 2.477c1.348 0 2.442-1.11 2.442-2.478S8.507 5.28 7.159 5.28 4.72 6.39 4.72 7.758s1.092 2.477 2.44 2.477zm2.048 7.71H5.114v-.838h4.093z' fill='%23000' fill-opacity='.4'/%3E%3Cpath d='M2.222 7.555c0-2.55 2.214-4.625 4.937-4.625 2.723 0 4.938 2.075 4.938 4.625 0 3.832-4.038 7.068-4.672 7.575l-.077.063a.286.286 0 0 1-.189.07.286.286 0 0 1-.188-.07l-.077-.063c-.634-.507-4.672-3.743-4.672-7.575zm4.937 2.68c1.348 0 2.442-1.11 2.442-2.478S8.507 5.28 7.159 5.28 4.72 6.39 4.72 7.758s1.092 2.477 2.44 2.477z' fill='%23e1e3e9'/%3E%3Cpath d='M4.377 15.948a.657.657 0 0 0-.659.659v1.84a.657.657 0 0 0 .659.659h5.565a.657.657 0 0 0 .659-.659v-1.84a.657.657 0 0 0-.659-.659zm4.83 1.16H5.114v.838h4.093z' fill='%23fff'/%3E%3C/g%3E%3C/svg%3E");background-repeat:no-repeat;cursor:pointer;display:block;height:23px;margin:0 0 -4px -4px;overflow:hidden;width:88px} -a.mapboxgl-ctrl-logo.mapboxgl-compact,a.maplibregl-ctrl-logo.maplibregl-compact{width:14px} -@media (-ms-high-contrast:active){a.mapboxgl-ctrl-logo,a.maplibregl-ctrl-logo{background-color:transparent;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='88' height='23' fill='none'%3E%3Cpath d='M17.408 16.796h-1.827l2.501-12.095h.198l3.324 6.533.988 2.19.988-2.19 3.258-6.533h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.929 5.644h-.098l-2.914-5.644-.757-1.71-.345 1.71zm1.958-3.42-.726 3.663a1.255 1.255 0 0 1-1.232 1.011h-1.827a1.255 1.255 0 0 1-1.229-1.509l2.501-12.095a1.255 1.255 0 0 1 1.23-1.001h.197a1.255 1.255 0 0 1 1.12.685l3.19 6.273 3.125-6.263a1.255 1.255 0 0 1 1.123-.695h.181a1.255 1.255 0 0 1 1.227.991l1.443 6.71a5.11 5.11 0 0 1 .314-.787l.009-.016a4.623 4.623 0 0 1 1.777-1.887c.782-.46 1.668-.667 2.611-.667a4.548 4.548 0 0 1 1.7.32l.306.134c.21-.16.474-.256.759-.256h1.694a1.255 1.255 0 0 1 1.212.925 1.255 1.255 0 0 1 1.212-.925h1.711c.284 0 .545.094.755.252.613-.3 1.312-.45 2.075-.45 1.356 0 2.557.445 3.482 1.4.314.319.566.676.763 1.064V4.701a1.255 1.255 0 0 1 1.255-1.255h1.86A1.255 1.255 0 0 1 54.44 4.7v9.194h2.217c.19 0 .37.043.532.118v-4.77c0-.356.147-.678.385-.906a2.416 2.416 0 0 1-.682-1.71c0-.665.267-1.253.735-1.7a2.448 2.448 0 0 1 1.722-.674 2.43 2.43 0 0 1 1.705.675c.211.2.381.43.504.683V4.7a1.255 1.255 0 0 1 1.255-1.255h1.744A1.255 1.255 0 0 1 65.812 4.7v3.335a4.76 4.76 0 0 1 1.526-.246c.938 0 1.817.214 2.59.69a4.47 4.47 0 0 1 1.67 1.743v-.98a1.255 1.255 0 0 1 1.256-1.256h1.777c.233 0 .451.064.639.174a3.407 3.407 0 0 1 1.567-.372c.346 0 .861.02 1.285.232a1.255 1.255 0 0 1 .689 1.004 4.73 4.73 0 0 1 .853-.588c.795-.44 1.675-.647 2.61-.647 1.385 0 2.65.39 3.525 1.396.836.938 1.168 2.173 1.168 3.528 0 .343-.02.694-.056 1.051a1.255 1.255 0 0 1-.947 1.09l.408.952a1.255 1.255 0 0 1-.477 1.552c-.418.268-.92.463-1.458.612-.613.171-1.304.244-2.049.244-1.06 0-2.043-.207-2.886-.698l-.015-.008c-.798-.48-1.419-1.135-1.818-1.963l-.004-.008a5.815 5.815 0 0 1-.548-2.512c0-.286.017-.567.053-.843a1.255 1.255 0 0 1-.333-.086l-.166-.004c-.223 0-.426.062-.643.228-.03.024-.142.139-.142.59v3.883a1.255 1.255 0 0 1-1.256 1.256h-1.777a1.255 1.255 0 0 1-1.256-1.256V15.69l-.032.057a4.778 4.778 0 0 1-1.86 1.833 5.04 5.04 0 0 1-2.484.634 4.47 4.47 0 0 1-1.935-.424 1.252 1.252 0 0 1-.764.258h-1.71a1.255 1.255 0 0 1-1.256-1.255V7.687a2.402 2.402 0 0 1-.428.625c.253.23.412.561.412.93v7.553a1.255 1.255 0 0 1-1.256 1.255h-1.843a1.25 1.25 0 0 1-.894-.373c-.228.23-.544.373-.894.373H51.32a1.255 1.255 0 0 1-1.256-1.255v-1.251l-.061.117a4.703 4.703 0 0 1-1.782 1.884 4.767 4.767 0 0 1-2.485.67 5.6 5.6 0 0 1-1.485-.188l.009 2.764a1.255 1.255 0 0 1-1.255 1.259h-1.729a1.255 1.255 0 0 1-1.255-1.255v-3.537a1.255 1.255 0 0 1-1.167.793h-1.679a1.25 1.25 0 0 1-.77-.263 4.47 4.47 0 0 1-1.945.429c-.885 0-1.724-.21-2.495-.632l-.017-.01a4.983 4.983 0 0 1-1.081-.836 1.255 1.255 0 0 1-1.254 1.312h-1.81a1.255 1.255 0 0 1-1.228-.99l-.782-3.625-2.044 3.939a1.255 1.255 0 0 1-1.115.676h-.098a1.255 1.255 0 0 1-1.116-.68l-2.061-3.994zM35.92 16.63l.207-.114.223-.15c.329-.237.574-.499.735-.785l.061-.118.033 1.332h1.678V9.242h-1.694l-.033 1.267c-.088-.22-.264-.438-.526-.658l-.032-.028a3.16 3.16 0 0 0-.668-.428l-.27-.12a3.293 3.293 0 0 0-1.235-.23c-.757 0-1.415.163-1.974.493a3.36 3.36 0 0 0-1.3 1.382c-.297.593-.444 1.284-.444 2.074 0 .8.17 1.503.51 2.107a3.795 3.795 0 0 0 1.382 1.381 3.883 3.883 0 0 0 1.893.477c.53 0 1.015-.11 1.455-.33zm-2.789-5.38c-.384.45-.575 1.038-.575 1.762 0 .735.186 1.332.559 1.794.384.45.933.675 1.645.675a2.25 2.25 0 0 0 .934-.19 2.17 2.17 0 0 0 .468-.29l.178-.161a2.163 2.163 0 0 0 .397-.561c.163-.333.244-.717.244-1.15v-.115c0-.472-.098-.894-.296-1.267l-.043-.077a2.211 2.211 0 0 0-.633-.709l-.13-.086-.047-.028a2.099 2.099 0 0 0-1.073-.285c-.702 0-1.244.231-1.629.692zm2.316 2.706c.163-.17.28-.407.28-.83v-.114c0-.292-.06-.508-.15-.68a.958.958 0 0 0-.353-.389.851.851 0 0 0-.464-.127c-.4 0-.56.114-.664.239l-.01.012c-.148.174-.275.45-.275.945 0 .506.122.801.27.99.097.11.266.224.68.224.303 0 .504-.09.687-.269zm7.545 1.705a2.626 2.626 0 0 0 .331.423c.213.22.464.402.755.548l.173.074c.433.17.93.255 1.49.255.68 0 1.295-.165 1.844-.493a3.447 3.447 0 0 0 1.316-1.4c.329-.603.493-1.299.493-2.089 0-1.273-.33-2.243-.988-2.913-.658-.68-1.52-1.02-2.584-1.02-.598 0-1.124.115-1.575.347a2.807 2.807 0 0 0-.415.262l-.199.166a3.35 3.35 0 0 0-.64.82V9.242h-1.712v11.553h1.729l-.017-5.134zm.53-1.138c.137.193.297.36.48.5l.155.11.053.034c.34.197.713.297 1.119.297.714 0 1.262-.225 1.645-.675.385-.46.576-1.048.576-1.762 0-.746-.192-1.338-.576-1.777-.372-.45-.92-.675-1.645-.675-.29 0-.569.053-.835.16a2.366 2.366 0 0 0-.284.136 1.99 1.99 0 0 0-.363.254 2.237 2.237 0 0 0-.46.569l-.082.162a2.56 2.56 0 0 0-.213 1.072v.115c0 .471.098.894.296 1.267l.135.211zm.964-.818a1.11 1.11 0 0 0 .367.385.937.937 0 0 0 .476.118c.423 0 .59-.117.687-.23.159-.194.28-.478.28-.95 0-.53-.133-.8-.266-.952l-.021-.025c-.078-.094-.231-.221-.68-.221a.995.995 0 0 0-.503.135l-.012.007a.859.859 0 0 0-.335.343c-.073.133-.132.324-.132.614v.115a1.43 1.43 0 0 0 .14.66zm15.7-6.222c.232-.23.346-.516.346-.856a1.053 1.053 0 0 0-.345-.79 1.175 1.175 0 0 0-.84-.329c-.34 0-.625.11-.855.33a1.053 1.053 0 0 0-.346.79c0 .34.115.625.346.855.23.23.516.346.856.346.34 0 .62-.115.839-.346zm4.337 9.314.033-1.332c.128.269.324.518.59.747l.098.081a3.727 3.727 0 0 0 .316.224l.223.122a3.21 3.21 0 0 0 1.44.322 3.785 3.785 0 0 0 1.875-.477 3.52 3.52 0 0 0 1.382-1.366c.352-.593.526-1.29.526-2.09 0-.79-.147-1.48-.444-2.073a3.235 3.235 0 0 0-1.283-1.399c-.549-.34-1.195-.51-1.942-.51a3.476 3.476 0 0 0-1.527.344l-.086.043-.165.09a3.412 3.412 0 0 0-.33.214c-.288.21-.507.446-.656.707a1.893 1.893 0 0 0-.099.198l.082-1.283V4.701h-1.744v12.095zm.473-2.509a2.482 2.482 0 0 0 .566.7c.078.065.159.125.245.18l.144.08a2.105 2.105 0 0 0 .975.232c.713 0 1.262-.225 1.645-.675.384-.46.576-1.053.576-1.778 0-.734-.192-1.327-.576-1.777-.373-.46-.921-.692-1.645-.692a2.18 2.18 0 0 0-1.015.235c-.147.075-.285.17-.415.282l-.15.142a2.086 2.086 0 0 0-.42.594c-.149.32-.223.685-.223 1.1v.115c0 .47.097.89.293 1.26zm2.616-.293c.157-.191.28-.479.28-.967 0-.51-.13-.79-.276-.961l-.021-.026c-.082-.1-.232-.225-.67-.225a.868.868 0 0 0-.681.279l-.012.011c-.154.155-.274.38-.274.807v.115c0 .285.057.499.144.669a1.13 1.13 0 0 0 .367.405c.137.082.28.123.455.123.423 0 .59-.118.686-.23zm8.266-3.013c.23-.087.472-.134.724-.14l.069-.002c.329 0 .542.033.642.099l.247-1.794c-.13-.066-.37-.099-.717-.099a2.3 2.3 0 0 0-.545.063 2.086 2.086 0 0 0-.411.148 2.18 2.18 0 0 0-.4.249 2.482 2.482 0 0 0-.485.499 2.659 2.659 0 0 0-.32.581l-.05.137v-1.48h-1.778v7.553h1.777v-3.884c0-.364.053-.678.159-.943a1.49 1.49 0 0 1 .466-.636 2.52 2.52 0 0 1 .399-.253 2.19 2.19 0 0 1 .224-.099zm9.784 2.656.05-.922c0-1.162-.285-2.062-.856-2.698-.559-.647-1.42-.97-2.584-.97-.746 0-1.415.163-2.007.493a3.462 3.462 0 0 0-1.4 1.382c-.329.604-.493 1.306-.493 2.106 0 .714.143 1.371.428 1.975.285.593.73 1.07 1.332 1.432.604.351 1.355.526 2.255.526.649 0 1.204-.062 1.668-.185l.044-.012.135-.04c.409-.122.736-.263.984-.421l-.542-1.267c-.2.108-.415.199-.642.274l-.297.087c-.34.088-.773.131-1.3.131-.636 0-1.135-.147-1.497-.444a1.573 1.573 0 0 1-.192-.193c-.244-.294-.415-.705-.512-1.234l-.004-.021h5.43zm-5.427-1.256-.003.022h3.752v-.138c-.007-.485-.104-.857-.288-1.118a1.056 1.056 0 0 0-.156-.176c-.307-.285-.746-.428-1.316-.428-.657 0-1.155.202-1.494.604-.253.3-.417.712-.494 1.234zm-27.053 2.77V4.7h-1.86v12.095h5.333V15.15zm7.103-5.908v7.553h-1.843V9.242h1.843z' fill='%23000' fill-opacity='.4' fill-rule='evenodd'/%3E%3Cpath d='m19.63 11.151-.757-1.71-.345 1.71-1.12 5.644h-1.827L18.083 4.7h.197l3.325 6.533.988 2.19.988-2.19L26.839 4.7h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.93 5.644h-.098l-2.913-5.644zm14.836 5.81c-.68 0-1.311-.16-1.893-.478a3.795 3.795 0 0 1-1.381-1.382c-.34-.604-.51-1.306-.51-2.106 0-.79.147-1.482.444-2.074a3.364 3.364 0 0 1 1.3-1.382c.559-.33 1.217-.494 1.974-.494a3.293 3.293 0 0 1 1.234.231 3.341 3.341 0 0 1 .97.575c.264.22.44.439.527.659l.033-1.267h1.694v7.553H37.18l-.033-1.332c-.186.395-.526.746-1.02 1.053a3.167 3.167 0 0 1-1.662.444zm.296-1.482c.626 0 1.152-.214 1.58-.642.428-.44.642-1.01.642-1.711v-.115c0-.472-.098-.894-.296-1.267a2.211 2.211 0 0 0-.807-.872 2.098 2.098 0 0 0-1.119-.313c-.702 0-1.245.231-1.629.692-.384.45-.575 1.037-.575 1.76 0 .736.186 1.333.559 1.795.384.45.933.675 1.645.675zm6.521-6.237h1.711v1.4c.604-1.065 1.547-1.597 2.83-1.597 1.064 0 1.926.34 2.584 1.02.659.67.988 1.641.988 2.914 0 .79-.164 1.487-.493 2.09a3.456 3.456 0 0 1-1.316 1.399 3.51 3.51 0 0 1-1.844.493c-.636 0-1.19-.11-1.662-.329a2.665 2.665 0 0 1-1.086-.97l.017 5.134h-1.728V9.242zm4.048 6.22c.714 0 1.262-.224 1.645-.674.385-.46.576-1.048.576-1.762 0-.746-.192-1.338-.576-1.777-.372-.45-.92-.675-1.645-.675-.395 0-.768.098-1.12.296-.34.187-.613.46-.822.823-.197.351-.296.763-.296 1.234v.115c0 .472.098.894.296 1.267.209.362.483.647.823.855.34.197.713.297 1.119.297z' fill='%23fff'/%3E%3Cpath d='M51.325 4.7h1.86v10.45h3.473v1.646h-5.333zm7.12 4.542h1.843v7.553h-1.843zm.905-1.415a1.159 1.159 0 0 1-.856-.346 1.165 1.165 0 0 1-.346-.856 1.053 1.053 0 0 1 .346-.79c.23-.219.516-.329.856-.329.329 0 .609.11.839.33a1.053 1.053 0 0 1 .345.79 1.159 1.159 0 0 1-.345.855c-.22.23-.5.346-.84.346zm7.875 9.133a3.167 3.167 0 0 1-1.662-.444c-.482-.307-.817-.658-1.004-1.053l-.033 1.332h-1.71V4.701h1.743v4.657l-.082 1.283c.186-.438.548-.812 1.086-1.119a3.486 3.486 0 0 1 1.778-.477c.746 0 1.393.17 1.942.51a3.235 3.235 0 0 1 1.283 1.4c.297.592.444 1.282.444 2.072 0 .8-.175 1.498-.526 2.09a3.52 3.52 0 0 1-1.382 1.366 3.785 3.785 0 0 1-1.876.477zm-.296-1.481c.713 0 1.26-.225 1.645-.675.384-.46.577-1.053.577-1.778 0-.734-.193-1.327-.577-1.776-.373-.46-.921-.692-1.645-.692a2.115 2.115 0 0 0-1.58.659c-.428.428-.642.992-.642 1.694v.115c0 .473.098.895.296 1.267a2.385 2.385 0 0 0 .807.872 2.1 2.1 0 0 0 1.119.313zm5.927-6.237h1.777v1.481c.176-.505.46-.91.856-1.217a2.14 2.14 0 0 1 1.349-.46c.351 0 .593.032.724.098l-.247 1.794c-.099-.066-.313-.099-.642-.099-.516 0-.988.164-1.416.494-.417.329-.626.855-.626 1.58v3.883h-1.777V9.242zm9.534 7.718c-.9 0-1.651-.175-2.255-.526-.603-.362-1.047-.84-1.332-1.432a4.567 4.567 0 0 1-.428-1.975c0-.8.164-1.502.493-2.106a3.462 3.462 0 0 1 1.4-1.382c.592-.33 1.262-.494 2.007-.494 1.163 0 2.024.324 2.584.97.57.637.856 1.537.856 2.7 0 .296-.017.603-.05.92h-5.43c.12.67.356 1.153.708 1.45.362.296.86.443 1.497.443.526 0 .96-.044 1.3-.131a4.123 4.123 0 0 0 .938-.362l.542 1.267c-.274.175-.647.329-1.119.46-.472.132-1.042.197-1.711.197zm1.596-4.558c.01-.68-.137-1.158-.444-1.432-.307-.285-.746-.428-1.316-.428-1.152 0-1.815.62-1.991 1.86h3.752z' fill='%23e1e3e9'/%3E%3Cg fill-rule='evenodd' stroke-width='1.036'%3E%3Cpath d='m8.166 16.146-.002.002a1.54 1.54 0 0 1-2.009 0l-.002-.002-.043-.034-.002-.002-.199-.162H4.377a.657.657 0 0 0-.659.659v1.84a.657.657 0 0 0 .659.659h5.565a.657.657 0 0 0 .659-.659v-1.84a.657.657 0 0 0-.659-.659H8.411l-.202.164zm-1.121-.905a.29.29 0 0 0 .113.023.286.286 0 0 0 .189-.07l.077-.063c.634-.508 4.672-3.743 4.672-7.575 0-2.55-2.215-4.625-4.938-4.625S2.221 5.006 2.221 7.556c0 3.225 2.86 6.027 4.144 7.137h.004l.04.038.484.4.077.063a.628.628 0 0 0 .074.047zm-2.52-.548a16.898 16.898 0 0 1-1.183-1.315C2.187 11.942.967 9.897.967 7.555c0-3.319 2.855-5.88 6.192-5.88 3.338 0 6.193 2.561 6.193 5.881 0 2.34-1.22 4.387-2.376 5.822a16.898 16.898 0 0 1-1.182 1.315h.15a1.912 1.912 0 0 1 1.914 1.914v1.84a1.912 1.912 0 0 1-1.914 1.914H4.377a1.912 1.912 0 0 1-1.914-1.914v-1.84a1.912 1.912 0 0 1 1.914-1.914zm3.82-6.935c0 .692-.55 1.222-1.187 1.222s-1.185-.529-1.185-1.222.548-1.222 1.185-1.222c.638 0 1.186.529 1.186 1.222zm-1.186 2.477c1.348 0 2.442-1.11 2.442-2.478S8.507 5.28 7.159 5.28 4.72 6.39 4.72 7.758s1.092 2.477 2.44 2.477zm2.048 7.71H5.114v-.838h4.093z' fill='%23000' fill-opacity='.4'/%3E%3Cpath d='M2.222 7.555c0-2.55 2.214-4.625 4.937-4.625 2.723 0 4.938 2.075 4.938 4.625 0 3.832-4.038 7.068-4.672 7.575l-.077.063a.286.286 0 0 1-.189.07.286.286 0 0 1-.188-.07l-.077-.063c-.634-.507-4.672-3.743-4.672-7.575zm4.937 2.68c1.348 0 2.442-1.11 2.442-2.478S8.507 5.28 7.159 5.28 4.72 6.39 4.72 7.758s1.092 2.477 2.44 2.477z' fill='%23e1e3e9'/%3E%3Cpath d='M4.377 15.948a.657.657 0 0 0-.659.659v1.84a.657.657 0 0 0 .659.659h5.565a.657.657 0 0 0 .659-.659v-1.84a.657.657 0 0 0-.659-.659zm4.83 1.16H5.114v.838h4.093z' fill='%23fff'/%3E%3C/g%3E%3C/svg%3E")}} -@media (-ms-high-contrast:black-on-white){a.mapboxgl-ctrl-logo,a.maplibregl-ctrl-logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='88' height='23' fill='none'%3E%3Cpath d='M17.408 16.796h-1.827l2.501-12.095h.198l3.324 6.533.988 2.19.988-2.19 3.258-6.533h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.929 5.644h-.098l-2.914-5.644-.757-1.71-.345 1.71zm1.958-3.42-.726 3.663a1.255 1.255 0 0 1-1.232 1.011h-1.827a1.255 1.255 0 0 1-1.229-1.509l2.501-12.095a1.255 1.255 0 0 1 1.23-1.001h.197a1.255 1.255 0 0 1 1.12.685l3.19 6.273 3.125-6.263a1.255 1.255 0 0 1 1.123-.695h.181a1.255 1.255 0 0 1 1.227.991l1.443 6.71a5.11 5.11 0 0 1 .314-.787l.009-.016a4.623 4.623 0 0 1 1.777-1.887c.782-.46 1.668-.667 2.611-.667a4.548 4.548 0 0 1 1.7.32l.306.134c.21-.16.474-.256.759-.256h1.694a1.255 1.255 0 0 1 1.212.925 1.255 1.255 0 0 1 1.212-.925h1.711c.284 0 .545.094.755.252.613-.3 1.312-.45 2.075-.45 1.356 0 2.557.445 3.482 1.4.314.319.566.676.763 1.064V4.701a1.255 1.255 0 0 1 1.255-1.255h1.86A1.255 1.255 0 0 1 54.44 4.7v9.194h2.217c.19 0 .37.043.532.118v-4.77c0-.356.147-.678.385-.906a2.416 2.416 0 0 1-.682-1.71c0-.665.267-1.253.735-1.7a2.448 2.448 0 0 1 1.722-.674 2.43 2.43 0 0 1 1.705.675c.211.2.381.43.504.683V4.7a1.255 1.255 0 0 1 1.255-1.255h1.744A1.255 1.255 0 0 1 65.812 4.7v3.335a4.76 4.76 0 0 1 1.526-.246c.938 0 1.817.214 2.59.69a4.47 4.47 0 0 1 1.67 1.743v-.98a1.255 1.255 0 0 1 1.256-1.256h1.777c.233 0 .451.064.639.174a3.407 3.407 0 0 1 1.567-.372c.346 0 .861.02 1.285.232a1.255 1.255 0 0 1 .689 1.004 4.73 4.73 0 0 1 .853-.588c.795-.44 1.675-.647 2.61-.647 1.385 0 2.65.39 3.525 1.396.836.938 1.168 2.173 1.168 3.528 0 .343-.02.694-.056 1.051a1.255 1.255 0 0 1-.947 1.09l.408.952a1.255 1.255 0 0 1-.477 1.552c-.418.268-.92.463-1.458.612-.613.171-1.304.244-2.049.244-1.06 0-2.043-.207-2.886-.698l-.015-.008c-.798-.48-1.419-1.135-1.818-1.963l-.004-.008a5.815 5.815 0 0 1-.548-2.512c0-.286.017-.567.053-.843a1.255 1.255 0 0 1-.333-.086l-.166-.004c-.223 0-.426.062-.643.228-.03.024-.142.139-.142.59v3.883a1.255 1.255 0 0 1-1.256 1.256h-1.777a1.255 1.255 0 0 1-1.256-1.256V15.69l-.032.057a4.778 4.778 0 0 1-1.86 1.833 5.04 5.04 0 0 1-2.484.634 4.47 4.47 0 0 1-1.935-.424 1.252 1.252 0 0 1-.764.258h-1.71a1.255 1.255 0 0 1-1.256-1.255V7.687a2.402 2.402 0 0 1-.428.625c.253.23.412.561.412.93v7.553a1.255 1.255 0 0 1-1.256 1.255h-1.843a1.25 1.25 0 0 1-.894-.373c-.228.23-.544.373-.894.373H51.32a1.255 1.255 0 0 1-1.256-1.255v-1.251l-.061.117a4.703 4.703 0 0 1-1.782 1.884 4.767 4.767 0 0 1-2.485.67 5.6 5.6 0 0 1-1.485-.188l.009 2.764a1.255 1.255 0 0 1-1.255 1.259h-1.729a1.255 1.255 0 0 1-1.255-1.255v-3.537a1.255 1.255 0 0 1-1.167.793h-1.679a1.25 1.25 0 0 1-.77-.263 4.47 4.47 0 0 1-1.945.429c-.885 0-1.724-.21-2.495-.632l-.017-.01a4.983 4.983 0 0 1-1.081-.836 1.255 1.255 0 0 1-1.254 1.312h-1.81a1.255 1.255 0 0 1-1.228-.99l-.782-3.625-2.044 3.939a1.255 1.255 0 0 1-1.115.676h-.098a1.255 1.255 0 0 1-1.116-.68l-2.061-3.994zM35.92 16.63l.207-.114.223-.15c.329-.237.574-.499.735-.785l.061-.118.033 1.332h1.678V9.242h-1.694l-.033 1.267c-.088-.22-.264-.438-.526-.658l-.032-.028a3.16 3.16 0 0 0-.668-.428l-.27-.12a3.293 3.293 0 0 0-1.235-.23c-.757 0-1.415.163-1.974.493a3.36 3.36 0 0 0-1.3 1.382c-.297.593-.444 1.284-.444 2.074 0 .8.17 1.503.51 2.107a3.795 3.795 0 0 0 1.382 1.381 3.883 3.883 0 0 0 1.893.477c.53 0 1.015-.11 1.455-.33zm-2.789-5.38c-.384.45-.575 1.038-.575 1.762 0 .735.186 1.332.559 1.794.384.45.933.675 1.645.675a2.25 2.25 0 0 0 .934-.19 2.17 2.17 0 0 0 .468-.29l.178-.161a2.163 2.163 0 0 0 .397-.561c.163-.333.244-.717.244-1.15v-.115c0-.472-.098-.894-.296-1.267l-.043-.077a2.211 2.211 0 0 0-.633-.709l-.13-.086-.047-.028a2.099 2.099 0 0 0-1.073-.285c-.702 0-1.244.231-1.629.692zm2.316 2.706c.163-.17.28-.407.28-.83v-.114c0-.292-.06-.508-.15-.68a.958.958 0 0 0-.353-.389.851.851 0 0 0-.464-.127c-.4 0-.56.114-.664.239l-.01.012c-.148.174-.275.45-.275.945 0 .506.122.801.27.99.097.11.266.224.68.224.303 0 .504-.09.687-.269zm7.545 1.705a2.626 2.626 0 0 0 .331.423c.213.22.464.402.755.548l.173.074c.433.17.93.255 1.49.255.68 0 1.295-.165 1.844-.493a3.447 3.447 0 0 0 1.316-1.4c.329-.603.493-1.299.493-2.089 0-1.273-.33-2.243-.988-2.913-.658-.68-1.52-1.02-2.584-1.02-.598 0-1.124.115-1.575.347a2.807 2.807 0 0 0-.415.262l-.199.166a3.35 3.35 0 0 0-.64.82V9.242h-1.712v11.553h1.729l-.017-5.134zm.53-1.138c.137.193.297.36.48.5l.155.11.053.034c.34.197.713.297 1.119.297.714 0 1.262-.225 1.645-.675.385-.46.576-1.048.576-1.762 0-.746-.192-1.338-.576-1.777-.372-.45-.92-.675-1.645-.675-.29 0-.569.053-.835.16a2.366 2.366 0 0 0-.284.136 1.99 1.99 0 0 0-.363.254 2.237 2.237 0 0 0-.46.569l-.082.162a2.56 2.56 0 0 0-.213 1.072v.115c0 .471.098.894.296 1.267l.135.211zm.964-.818a1.11 1.11 0 0 0 .367.385.937.937 0 0 0 .476.118c.423 0 .59-.117.687-.23.159-.194.28-.478.28-.95 0-.53-.133-.8-.266-.952l-.021-.025c-.078-.094-.231-.221-.68-.221a.995.995 0 0 0-.503.135l-.012.007a.859.859 0 0 0-.335.343c-.073.133-.132.324-.132.614v.115a1.43 1.43 0 0 0 .14.66zm15.7-6.222c.232-.23.346-.516.346-.856a1.053 1.053 0 0 0-.345-.79 1.175 1.175 0 0 0-.84-.329c-.34 0-.625.11-.855.33a1.053 1.053 0 0 0-.346.79c0 .34.115.625.346.855.23.23.516.346.856.346.34 0 .62-.115.839-.346zm4.337 9.314.033-1.332c.128.269.324.518.59.747l.098.081a3.727 3.727 0 0 0 .316.224l.223.122a3.21 3.21 0 0 0 1.44.322 3.785 3.785 0 0 0 1.875-.477 3.52 3.52 0 0 0 1.382-1.366c.352-.593.526-1.29.526-2.09 0-.79-.147-1.48-.444-2.073a3.235 3.235 0 0 0-1.283-1.399c-.549-.34-1.195-.51-1.942-.51a3.476 3.476 0 0 0-1.527.344l-.086.043-.165.09a3.412 3.412 0 0 0-.33.214c-.288.21-.507.446-.656.707a1.893 1.893 0 0 0-.099.198l.082-1.283V4.701h-1.744v12.095zm.473-2.509a2.482 2.482 0 0 0 .566.7c.078.065.159.125.245.18l.144.08a2.105 2.105 0 0 0 .975.232c.713 0 1.262-.225 1.645-.675.384-.46.576-1.053.576-1.778 0-.734-.192-1.327-.576-1.777-.373-.46-.921-.692-1.645-.692a2.18 2.18 0 0 0-1.015.235c-.147.075-.285.17-.415.282l-.15.142a2.086 2.086 0 0 0-.42.594c-.149.32-.223.685-.223 1.1v.115c0 .47.097.89.293 1.26zm2.616-.293c.157-.191.28-.479.28-.967 0-.51-.13-.79-.276-.961l-.021-.026c-.082-.1-.232-.225-.67-.225a.868.868 0 0 0-.681.279l-.012.011c-.154.155-.274.38-.274.807v.115c0 .285.057.499.144.669a1.13 1.13 0 0 0 .367.405c.137.082.28.123.455.123.423 0 .59-.118.686-.23zm8.266-3.013c.23-.087.472-.134.724-.14l.069-.002c.329 0 .542.033.642.099l.247-1.794c-.13-.066-.37-.099-.717-.099a2.3 2.3 0 0 0-.545.063 2.086 2.086 0 0 0-.411.148 2.18 2.18 0 0 0-.4.249 2.482 2.482 0 0 0-.485.499 2.659 2.659 0 0 0-.32.581l-.05.137v-1.48h-1.778v7.553h1.777v-3.884c0-.364.053-.678.159-.943a1.49 1.49 0 0 1 .466-.636 2.52 2.52 0 0 1 .399-.253 2.19 2.19 0 0 1 .224-.099zm9.784 2.656.05-.922c0-1.162-.285-2.062-.856-2.698-.559-.647-1.42-.97-2.584-.97-.746 0-1.415.163-2.007.493a3.462 3.462 0 0 0-1.4 1.382c-.329.604-.493 1.306-.493 2.106 0 .714.143 1.371.428 1.975.285.593.73 1.07 1.332 1.432.604.351 1.355.526 2.255.526.649 0 1.204-.062 1.668-.185l.044-.012.135-.04c.409-.122.736-.263.984-.421l-.542-1.267c-.2.108-.415.199-.642.274l-.297.087c-.34.088-.773.131-1.3.131-.636 0-1.135-.147-1.497-.444a1.573 1.573 0 0 1-.192-.193c-.244-.294-.415-.705-.512-1.234l-.004-.021h5.43zm-5.427-1.256-.003.022h3.752v-.138c-.007-.485-.104-.857-.288-1.118a1.056 1.056 0 0 0-.156-.176c-.307-.285-.746-.428-1.316-.428-.657 0-1.155.202-1.494.604-.253.3-.417.712-.494 1.234zm-27.053 2.77V4.7h-1.86v12.095h5.333V15.15zm7.103-5.908v7.553h-1.843V9.242h1.843z' fill='%23000' fill-opacity='.4' fill-rule='evenodd'/%3E%3Cpath d='m19.63 11.151-.757-1.71-.345 1.71-1.12 5.644h-1.827L18.083 4.7h.197l3.325 6.533.988 2.19.988-2.19L26.839 4.7h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.93 5.644h-.098l-2.913-5.644zm14.836 5.81c-.68 0-1.311-.16-1.893-.478a3.795 3.795 0 0 1-1.381-1.382c-.34-.604-.51-1.306-.51-2.106 0-.79.147-1.482.444-2.074a3.364 3.364 0 0 1 1.3-1.382c.559-.33 1.217-.494 1.974-.494a3.293 3.293 0 0 1 1.234.231 3.341 3.341 0 0 1 .97.575c.264.22.44.439.527.659l.033-1.267h1.694v7.553H37.18l-.033-1.332c-.186.395-.526.746-1.02 1.053a3.167 3.167 0 0 1-1.662.444zm.296-1.482c.626 0 1.152-.214 1.58-.642.428-.44.642-1.01.642-1.711v-.115c0-.472-.098-.894-.296-1.267a2.211 2.211 0 0 0-.807-.872 2.098 2.098 0 0 0-1.119-.313c-.702 0-1.245.231-1.629.692-.384.45-.575 1.037-.575 1.76 0 .736.186 1.333.559 1.795.384.45.933.675 1.645.675zm6.521-6.237h1.711v1.4c.604-1.065 1.547-1.597 2.83-1.597 1.064 0 1.926.34 2.584 1.02.659.67.988 1.641.988 2.914 0 .79-.164 1.487-.493 2.09a3.456 3.456 0 0 1-1.316 1.399 3.51 3.51 0 0 1-1.844.493c-.636 0-1.19-.11-1.662-.329a2.665 2.665 0 0 1-1.086-.97l.017 5.134h-1.728V9.242zm4.048 6.22c.714 0 1.262-.224 1.645-.674.385-.46.576-1.048.576-1.762 0-.746-.192-1.338-.576-1.777-.372-.45-.92-.675-1.645-.675-.395 0-.768.098-1.12.296-.34.187-.613.46-.822.823-.197.351-.296.763-.296 1.234v.115c0 .472.098.894.296 1.267.209.362.483.647.823.855.34.197.713.297 1.119.297z' fill='%23fff'/%3E%3Cpath d='M51.325 4.7h1.86v10.45h3.473v1.646h-5.333zm7.12 4.542h1.843v7.553h-1.843zm.905-1.415a1.159 1.159 0 0 1-.856-.346 1.165 1.165 0 0 1-.346-.856 1.053 1.053 0 0 1 .346-.79c.23-.219.516-.329.856-.329.329 0 .609.11.839.33a1.053 1.053 0 0 1 .345.79 1.159 1.159 0 0 1-.345.855c-.22.23-.5.346-.84.346zm7.875 9.133a3.167 3.167 0 0 1-1.662-.444c-.482-.307-.817-.658-1.004-1.053l-.033 1.332h-1.71V4.701h1.743v4.657l-.082 1.283c.186-.438.548-.812 1.086-1.119a3.486 3.486 0 0 1 1.778-.477c.746 0 1.393.17 1.942.51a3.235 3.235 0 0 1 1.283 1.4c.297.592.444 1.282.444 2.072 0 .8-.175 1.498-.526 2.09a3.52 3.52 0 0 1-1.382 1.366 3.785 3.785 0 0 1-1.876.477zm-.296-1.481c.713 0 1.26-.225 1.645-.675.384-.46.577-1.053.577-1.778 0-.734-.193-1.327-.577-1.776-.373-.46-.921-.692-1.645-.692a2.115 2.115 0 0 0-1.58.659c-.428.428-.642.992-.642 1.694v.115c0 .473.098.895.296 1.267a2.385 2.385 0 0 0 .807.872 2.1 2.1 0 0 0 1.119.313zm5.927-6.237h1.777v1.481c.176-.505.46-.91.856-1.217a2.14 2.14 0 0 1 1.349-.46c.351 0 .593.032.724.098l-.247 1.794c-.099-.066-.313-.099-.642-.099-.516 0-.988.164-1.416.494-.417.329-.626.855-.626 1.58v3.883h-1.777V9.242zm9.534 7.718c-.9 0-1.651-.175-2.255-.526-.603-.362-1.047-.84-1.332-1.432a4.567 4.567 0 0 1-.428-1.975c0-.8.164-1.502.493-2.106a3.462 3.462 0 0 1 1.4-1.382c.592-.33 1.262-.494 2.007-.494 1.163 0 2.024.324 2.584.97.57.637.856 1.537.856 2.7 0 .296-.017.603-.05.92h-5.43c.12.67.356 1.153.708 1.45.362.296.86.443 1.497.443.526 0 .96-.044 1.3-.131a4.123 4.123 0 0 0 .938-.362l.542 1.267c-.274.175-.647.329-1.119.46-.472.132-1.042.197-1.711.197zm1.596-4.558c.01-.68-.137-1.158-.444-1.432-.307-.285-.746-.428-1.316-.428-1.152 0-1.815.62-1.991 1.86h3.752z' fill='%23e1e3e9'/%3E%3Cg fill-rule='evenodd' stroke-width='1.036'%3E%3Cpath d='m8.166 16.146-.002.002a1.54 1.54 0 0 1-2.009 0l-.002-.002-.043-.034-.002-.002-.199-.162H4.377a.657.657 0 0 0-.659.659v1.84a.657.657 0 0 0 .659.659h5.565a.657.657 0 0 0 .659-.659v-1.84a.657.657 0 0 0-.659-.659H8.411l-.202.164zm-1.121-.905a.29.29 0 0 0 .113.023.286.286 0 0 0 .189-.07l.077-.063c.634-.508 4.672-3.743 4.672-7.575 0-2.55-2.215-4.625-4.938-4.625S2.221 5.006 2.221 7.556c0 3.225 2.86 6.027 4.144 7.137h.004l.04.038.484.4.077.063a.628.628 0 0 0 .074.047zm-2.52-.548a16.898 16.898 0 0 1-1.183-1.315C2.187 11.942.967 9.897.967 7.555c0-3.319 2.855-5.88 6.192-5.88 3.338 0 6.193 2.561 6.193 5.881 0 2.34-1.22 4.387-2.376 5.822a16.898 16.898 0 0 1-1.182 1.315h.15a1.912 1.912 0 0 1 1.914 1.914v1.84a1.912 1.912 0 0 1-1.914 1.914H4.377a1.912 1.912 0 0 1-1.914-1.914v-1.84a1.912 1.912 0 0 1 1.914-1.914zm3.82-6.935c0 .692-.55 1.222-1.187 1.222s-1.185-.529-1.185-1.222.548-1.222 1.185-1.222c.638 0 1.186.529 1.186 1.222zm-1.186 2.477c1.348 0 2.442-1.11 2.442-2.478S8.507 5.28 7.159 5.28 4.72 6.39 4.72 7.758s1.092 2.477 2.44 2.477zm2.048 7.71H5.114v-.838h4.093z' fill='%23000' fill-opacity='.4'/%3E%3Cpath d='M2.222 7.555c0-2.55 2.214-4.625 4.937-4.625 2.723 0 4.938 2.075 4.938 4.625 0 3.832-4.038 7.068-4.672 7.575l-.077.063a.286.286 0 0 1-.189.07.286.286 0 0 1-.188-.07l-.077-.063c-.634-.507-4.672-3.743-4.672-7.575zm4.937 2.68c1.348 0 2.442-1.11 2.442-2.478S8.507 5.28 7.159 5.28 4.72 6.39 4.72 7.758s1.092 2.477 2.44 2.477z' fill='%23e1e3e9'/%3E%3Cpath d='M4.377 15.948a.657.657 0 0 0-.659.659v1.84a.657.657 0 0 0 .659.659h5.565a.657.657 0 0 0 .659-.659v-1.84a.657.657 0 0 0-.659-.659zm4.83 1.16H5.114v.838h4.093z' fill='%23fff'/%3E%3C/g%3E%3C/svg%3E")}} -.mapboxgl-ctrl.mapboxgl-ctrl-attrib,.maplibregl-ctrl.maplibregl-ctrl-attrib{background-color:hsla(0,0%,100%,.5);margin:0;padding:0 5px} -@media screen{.mapboxgl-ctrl-attrib.mapboxgl-compact,.maplibregl-ctrl-attrib.maplibregl-compact{background-color:#fff;border-radius:12px;margin:10px;min-height:20px;padding:2px 24px 2px 0;position:relative}.mapboxgl-ctrl-attrib.mapboxgl-compact-show,.maplibregl-ctrl-attrib.maplibregl-compact-show{padding:2px 28px 2px 8px;visibility:visible}.mapboxgl-ctrl-bottom-left>.mapboxgl-ctrl-attrib.mapboxgl-compact-show,.mapboxgl-ctrl-top-left>.mapboxgl-ctrl-attrib.mapboxgl-compact-show,.maplibregl-ctrl-bottom-left>.maplibregl-ctrl-attrib.maplibregl-compact-show,.maplibregl-ctrl-top-left>.maplibregl-ctrl-attrib.maplibregl-compact-show{border-radius:12px;padding:2px 8px 2px 28px}.mapboxgl-ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-inner,.maplibregl-ctrl-attrib.maplibregl-compact .maplibregl-ctrl-attrib-inner{display:none}.mapboxgl-ctrl-attrib-button,.maplibregl-ctrl-attrib-button{background-color:hsla(0,0%,100%,.5);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='24' height='24' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E");border:0;border-radius:12px;box-sizing:border-box;cursor:pointer;display:none;height:24px;outline:none;position:absolute;right:0;top:0;width:24px}.mapboxgl-ctrl-bottom-left .mapboxgl-ctrl-attrib-button,.mapboxgl-ctrl-top-left .mapboxgl-ctrl-attrib-button,.maplibregl-ctrl-bottom-left .maplibregl-ctrl-attrib-button,.maplibregl-ctrl-top-left .maplibregl-ctrl-attrib-button{left:0}.mapboxgl-ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-button,.mapboxgl-ctrl-attrib.mapboxgl-compact-show .mapboxgl-ctrl-attrib-inner,.maplibregl-ctrl-attrib.maplibregl-compact .maplibregl-ctrl-attrib-button,.maplibregl-ctrl-attrib.maplibregl-compact-show .maplibregl-ctrl-attrib-inner{display:block}.mapboxgl-ctrl-attrib.mapboxgl-compact-show .mapboxgl-ctrl-attrib-button,.maplibregl-ctrl-attrib.maplibregl-compact-show .maplibregl-ctrl-attrib-button{background-color:rgb(0 0 0/5%)}.mapboxgl-ctrl-bottom-right>.mapboxgl-ctrl-attrib.mapboxgl-compact:after,.maplibregl-ctrl-bottom-right>.maplibregl-ctrl-attrib.maplibregl-compact:after{bottom:0;right:0}.mapboxgl-ctrl-top-right>.mapboxgl-ctrl-attrib.mapboxgl-compact:after,.maplibregl-ctrl-top-right>.maplibregl-ctrl-attrib.maplibregl-compact:after{right:0;top:0}.mapboxgl-ctrl-top-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:after,.maplibregl-ctrl-top-left>.maplibregl-ctrl-attrib.maplibregl-compact:after{left:0;top:0}.mapboxgl-ctrl-bottom-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:after,.maplibregl-ctrl-bottom-left>.maplibregl-ctrl-attrib.maplibregl-compact:after{bottom:0;left:0}} -@media screen and (-ms-high-contrast:active){.mapboxgl-ctrl-attrib.mapboxgl-compact:after,.maplibregl-ctrl-attrib.maplibregl-compact:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='24' height='24' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd' fill='%23fff'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E")}} -@media screen and (-ms-high-contrast:black-on-white){.mapboxgl-ctrl-attrib.mapboxgl-compact:after,.maplibregl-ctrl-attrib.maplibregl-compact:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='24' height='24' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E")}} -.mapboxgl-ctrl-attrib a,.maplibregl-ctrl-attrib a{color:rgba(0,0,0,.75);text-decoration:none} -.mapboxgl-ctrl-attrib a:hover,.maplibregl-ctrl-attrib a:hover{color:inherit;text-decoration:underline} -.mapboxgl-attrib-empty,.maplibregl-attrib-empty{display:none} -.mapboxgl-ctrl-scale,.maplibregl-ctrl-scale{background-color:hsla(0,0%,100%,.75);border:2px solid #333;border-top:#333;box-sizing:border-box;color:#333;font-size:10px;padding:0 5px} -.mapboxgl-popup,.maplibregl-popup{display:flex;left:0;pointer-events:none;position:absolute;top:0;will-change:transform} -.mapboxgl-popup-anchor-top,.mapboxgl-popup-anchor-top-left,.mapboxgl-popup-anchor-top-right,.maplibregl-popup-anchor-top,.maplibregl-popup-anchor-top-left,.maplibregl-popup-anchor-top-right{flex-direction:column} -.mapboxgl-popup-anchor-bottom,.mapboxgl-popup-anchor-bottom-left,.mapboxgl-popup-anchor-bottom-right,.maplibregl-popup-anchor-bottom,.maplibregl-popup-anchor-bottom-left,.maplibregl-popup-anchor-bottom-right{flex-direction:column-reverse} -.mapboxgl-popup-anchor-left,.maplibregl-popup-anchor-left{flex-direction:row} -.mapboxgl-popup-anchor-right,.maplibregl-popup-anchor-right{flex-direction:row-reverse} -.mapboxgl-popup-tip,.maplibregl-popup-tip{border:10px solid transparent;height:0;width:0;z-index:1} -.mapboxgl-popup-anchor-top .mapboxgl-popup-tip,.maplibregl-popup-anchor-top .maplibregl-popup-tip{align-self:center;border-bottom-color:#fff;border-top:none} -.mapboxgl-popup-anchor-top-left .mapboxgl-popup-tip,.maplibregl-popup-anchor-top-left .maplibregl-popup-tip{align-self:flex-start;border-bottom-color:#fff;border-left:none;border-top:none} -.mapboxgl-popup-anchor-top-right .mapboxgl-popup-tip,.maplibregl-popup-anchor-top-right .maplibregl-popup-tip{align-self:flex-end;border-bottom-color:#fff;border-right:none;border-top:none} -.mapboxgl-popup-anchor-bottom .mapboxgl-popup-tip,.maplibregl-popup-anchor-bottom .maplibregl-popup-tip{align-self:center;border-bottom:none;border-top-color:#fff} -.mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-tip,.maplibregl-popup-anchor-bottom-left .maplibregl-popup-tip{align-self:flex-start;border-bottom:none;border-left:none;border-top-color:#fff} -.mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-tip,.maplibregl-popup-anchor-bottom-right .maplibregl-popup-tip{align-self:flex-end;border-bottom:none;border-right:none;border-top-color:#fff} -.mapboxgl-popup-anchor-left .mapboxgl-popup-tip,.maplibregl-popup-anchor-left .maplibregl-popup-tip{align-self:center;border-left:none;border-right-color:#fff} -.mapboxgl-popup-anchor-right .mapboxgl-popup-tip,.maplibregl-popup-anchor-right .maplibregl-popup-tip{align-self:center;border-left-color:#fff;border-right:none} -.mapboxgl-popup-close-button,.maplibregl-popup-close-button{background-color:transparent;border:0;border-radius:0 3px 0 0;cursor:pointer;position:absolute;right:0;top:0} -.mapboxgl-popup-close-button:hover,.maplibregl-popup-close-button:hover{background-color:rgb(0 0 0/5%)} -.mapboxgl-popup-content,.maplibregl-popup-content{background:#fff;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.1);padding:15px 10px;pointer-events:auto;position:relative} -.mapboxgl-popup-anchor-top-left .mapboxgl-popup-content,.maplibregl-popup-anchor-top-left .maplibregl-popup-content{border-top-left-radius:0} -.mapboxgl-popup-anchor-top-right .mapboxgl-popup-content,.maplibregl-popup-anchor-top-right .maplibregl-popup-content{border-top-right-radius:0} -.mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-content,.maplibregl-popup-anchor-bottom-left .maplibregl-popup-content{border-bottom-left-radius:0} -.mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-content,.maplibregl-popup-anchor-bottom-right .maplibregl-popup-content{border-bottom-right-radius:0} -.mapboxgl-popup-track-pointer,.maplibregl-popup-track-pointer{display:none} -.mapboxgl-popup-track-pointer *,.maplibregl-popup-track-pointer *{pointer-events:none;user-select:none} -.mapboxgl-map:hover .mapboxgl-popup-track-pointer,.maplibregl-map:hover .maplibregl-popup-track-pointer{display:flex} -.mapboxgl-map:active .mapboxgl-popup-track-pointer,.maplibregl-map:active .maplibregl-popup-track-pointer{display:none} -.mapboxgl-marker,.maplibregl-marker{left:0;position:absolute;top:0;will-change:transform} -.mapboxgl-user-location-dot,.maplibregl-user-location-dot{background-color:#1da1f2;border-radius:50%;height:15px;width:15px} -.mapboxgl-user-location-dot:before,.maplibregl-user-location-dot:before{animation:maplibregl-user-location-dot-pulse 2s infinite;background-color:#1da1f2;border-radius:50%;content:"";height:15px;position:absolute;width:15px} -.mapboxgl-user-location-dot:after,.maplibregl-user-location-dot:after{border:2px solid #fff;border-radius:50%;box-shadow:0 0 3px rgba(0,0,0,.35);box-sizing:border-box;content:"";height:19px;left:-2px;position:absolute;top:-2px;width:19px} -@keyframes maplibregl-user-location-dot-pulse{0%{opacity:1;transform:scale(1)}70%{opacity:0;transform:scale(3)}to{opacity:0;transform:scale(1)}} -.mapboxgl-user-location-dot-stale,.maplibregl-user-location-dot-stale{background-color:#aaa} -.mapboxgl-user-location-dot-stale:after,.maplibregl-user-location-dot-stale:after{display:none} -.mapboxgl-user-location-accuracy-circle,.maplibregl-user-location-accuracy-circle{background-color:#1da1f233;border-radius:100%;height:1px;width:1px} -.mapboxgl-crosshair,.mapboxgl-crosshair .mapboxgl-interactive,.mapboxgl-crosshair .mapboxgl-interactive:active,.maplibregl-crosshair,.maplibregl-crosshair .maplibregl-interactive,.maplibregl-crosshair .maplibregl-interactive:active{cursor:crosshair} -.mapboxgl-boxzoom,.maplibregl-boxzoom{background:#fff;border:2px dotted #202020;height:0;left:0;opacity:.5;position:absolute;top:0;width:0} diff --git a/packages/amplify/yarn.lock b/packages/amplify/yarn.lock deleted file mode 100644 index af925549ce..0000000000 --- a/packages/amplify/yarn.lock +++ /dev/null @@ -1,5516 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aws-amplify/analytics@6.0.15": - version "6.0.15" - resolved "https://registry.yarnpkg.com/@aws-amplify/analytics/-/analytics-6.0.15.tgz#524047e8ce16a4049c1019f407f3d3fa5474555a" - integrity sha512-jn+ykLgaLlGdA83K6rNyZsUA2uiNB/D5w6kxTJtpFvk50/1S+Axl/hdl5ben5lsRyumtrnUrOJgc4XV8vrG9Qg== - dependencies: - "@aws-amplify/cache" "5.0.15" - "@aws-amplify/core" "5.0.15" - "@aws-sdk/client-firehose" "3.6.1" - "@aws-sdk/client-kinesis" "3.6.1" - "@aws-sdk/client-personalize-events" "3.6.1" - "@aws-sdk/client-pinpoint" "3.6.1" - "@aws-sdk/util-utf8-browser" "3.6.1" - lodash "^4.17.20" - tslib "^1.8.0" - uuid "^3.2.1" - -"@aws-amplify/api-graphql@3.1.3": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@aws-amplify/api-graphql/-/api-graphql-3.1.3.tgz#4c780c90bbe748ca309ed3ade59348018de2b395" - integrity sha512-OHEU2XtvypSzeOPjvNZMlvD4p3lKM9pzBdLgsmxWgB3Qi6RLbYEuvTJGRTZRW1V3OHkGX4uMUUElLs8lTIbYgQ== - dependencies: - "@aws-amplify/api-rest" "3.0.15" - "@aws-amplify/auth" "5.1.9" - "@aws-amplify/cache" "5.0.15" - "@aws-amplify/core" "5.0.15" - "@aws-amplify/pubsub" "5.0.15" - graphql "15.8.0" - tslib "^1.8.0" - uuid "^3.2.1" - zen-observable-ts "0.8.19" - -"@aws-amplify/api-rest@3.0.15": - version "3.0.15" - resolved "https://registry.yarnpkg.com/@aws-amplify/api-rest/-/api-rest-3.0.15.tgz#f01ae4f0970f8696eec6f26360acbc73d4b887e0" - integrity sha512-khn9PDLKhq+esxBLq5vM6K2Y3X2hSRrJuNQvA6MSsI2IQXT1eW9irSWYITDF323BrZAjF/QeaBB16xQ5XNKrNw== - dependencies: - "@aws-amplify/core" "5.0.15" - axios "0.26.0" - tslib "^1.8.0" - -"@aws-amplify/api@5.0.15": - version "5.0.15" - resolved "https://registry.yarnpkg.com/@aws-amplify/api/-/api-5.0.15.tgz#06a9b1690fe7b445e87a22d61f5c3c7d8608f241" - integrity sha512-z4R45Rr03c6CTk2hMaSXU3Ka/C/EDWQR+G4miJSe54FGmvywAXAvJ4aewfKlCCLuNHlzsGNdHhjKf8ld9SY/fA== - dependencies: - "@aws-amplify/api-graphql" "3.1.3" - "@aws-amplify/api-rest" "3.0.15" - tslib "^1.8.0" - -"@aws-amplify/auth@5.1.9": - version "5.1.9" - resolved "https://registry.yarnpkg.com/@aws-amplify/auth/-/auth-5.1.9.tgz#c9b68dfbb4892e45506d2c16d67006a780911a08" - integrity sha512-PmPG3xA1HTU0OfVs+HokXie631xO8NgTokXLdBISVegg5ogDZBDRXKibf1h3MAPmqV5xTfywr+u3INKuwgawVQ== - dependencies: - "@aws-amplify/core" "5.0.15" - amazon-cognito-identity-js "6.1.2" - tslib "^1.8.0" - -"@aws-amplify/cache@5.0.15": - version "5.0.15" - resolved "https://registry.yarnpkg.com/@aws-amplify/cache/-/cache-5.0.15.tgz#f5eb6258cd8d28c8750f5d23d2005b76eaf0c3d1" - integrity sha512-dP7pUIqATyVyKOIHxdDBNlwAnPU9TeU3Bujjy3OR7dAcSjCyCxnWiZGDG45a5BhYIwMd3iz/AoVh1cwkHphdKQ== - dependencies: - "@aws-amplify/core" "5.0.15" - tslib "^1.8.0" - -"@aws-amplify/core@5.0.15": - version "5.0.15" - resolved "https://registry.yarnpkg.com/@aws-amplify/core/-/core-5.0.15.tgz#4ec307ebba46877cffcae188794ad8453a39c508" - integrity sha512-BgskrlR/0oZSw8I1C8nuqiflzdbHcYr07+aSR0C7//mldtF594QzJaVE41R+s8lLsU4X7bLFTG1/oWUmswrkDg== - dependencies: - "@aws-crypto/sha256-js" "1.2.2" - "@aws-sdk/client-cloudwatch-logs" "3.6.1" - "@aws-sdk/client-cognito-identity" "3.6.1" - "@aws-sdk/credential-provider-cognito-identity" "3.6.1" - "@aws-sdk/types" "3.6.1" - "@aws-sdk/util-hex-encoding" "3.6.1" - tslib "^1.8.0" - universal-cookie "^4.0.4" - zen-observable-ts "0.8.19" - -"@aws-amplify/datastore@4.0.15": - version "4.0.15" - resolved "https://registry.yarnpkg.com/@aws-amplify/datastore/-/datastore-4.0.15.tgz#eb674320b3caabe0bf8dc683ea51b738909d624d" - integrity sha512-MjLq5nrUKl61WDdh0dvQWe8IhktAC7u4kBGN7iznCT0VkQi1LD1M/nMsSXNkJulhO2uQpZeHZ6fJROXB5Df70Q== - dependencies: - "@aws-amplify/api" "5.0.15" - "@aws-amplify/auth" "5.1.9" - "@aws-amplify/core" "5.0.15" - "@aws-amplify/pubsub" "5.0.15" - amazon-cognito-identity-js "6.1.2" - idb "5.0.6" - immer "9.0.6" - ulid "2.3.0" - uuid "3.4.0" - zen-observable-ts "0.8.19" - zen-push "0.2.1" - -"@aws-amplify/geo@2.0.15": - version "2.0.15" - resolved "https://registry.yarnpkg.com/@aws-amplify/geo/-/geo-2.0.15.tgz#256504a6ac3fa2d55cf6964727c244fbe0c19961" - integrity sha512-SUkBgIs49BPk8Go/ZqqhW9pBrwOxHm+YI/jHSvzv4glsMAEMfat8CK2MtPpgQcg8QZkbVgzkxKWf4dBj2ko8dA== - dependencies: - "@aws-amplify/core" "5.0.15" - "@aws-sdk/client-location" "3.186.0" - "@turf/boolean-clockwise" "6.5.0" - camelcase-keys "6.2.2" - tslib "^1.8.0" - -"@aws-amplify/interactions@5.0.15": - version "5.0.15" - resolved "https://registry.yarnpkg.com/@aws-amplify/interactions/-/interactions-5.0.15.tgz#81504331717e7914cc99a6d8fe6277e60db6ebf6" - integrity sha512-lJzVszVMnTFi/MePhEUWGnx+Sgo8smlip7pZZCQ21G7PnEh5Yy84Jqg4f6zpGV+bRi9gMaKPLQlBMM31BTQXJw== - dependencies: - "@aws-amplify/core" "5.0.15" - "@aws-sdk/client-lex-runtime-service" "3.186.0" - "@aws-sdk/client-lex-runtime-v2" "3.186.0" - base-64 "1.0.0" - fflate "0.7.3" - pako "2.0.4" - tslib "^1.8.0" - -"@aws-amplify/notifications@1.0.15": - version "1.0.15" - resolved "https://registry.yarnpkg.com/@aws-amplify/notifications/-/notifications-1.0.15.tgz#10fa345a1b9f8b840bb1e57352aae09faa847bdb" - integrity sha512-MO5d2sHGlA68nhWkIw05ciopfZWDbR4hPC7ZkN/yRavoIBYSXSe+/DA5CDfmyjxM+8Rcg120IWqQb6SFFoq24w== - dependencies: - "@aws-amplify/cache" "5.0.15" - "@aws-amplify/core" "5.0.15" - "@aws-sdk/client-pinpoint" "3.186.0" - lodash "^4.17.21" - uuid "^3.2.1" - -"@aws-amplify/predictions@5.0.15": - version "5.0.15" - resolved "https://registry.yarnpkg.com/@aws-amplify/predictions/-/predictions-5.0.15.tgz#fea03a1e2fae6081b2cac135a1ceffff3f0f5f8d" - integrity sha512-MTdFRquHDSdmNwbTby6LGr3Dg4MOydwEft2mRAMlGj7OPuTSBbWeDB/bLxK3Gxl0Ql+fRMfKpf63EfkHjjv4xQ== - dependencies: - "@aws-amplify/core" "5.0.15" - "@aws-amplify/storage" "5.1.5" - "@aws-sdk/client-comprehend" "3.6.1" - "@aws-sdk/client-polly" "3.6.1" - "@aws-sdk/client-rekognition" "3.6.1" - "@aws-sdk/client-textract" "3.6.1" - "@aws-sdk/client-translate" "3.6.1" - "@aws-sdk/eventstream-marshaller" "3.6.1" - "@aws-sdk/util-utf8-node" "3.6.1" - tslib "^1.8.0" - uuid "^3.2.1" - -"@aws-amplify/pubsub@5.0.15": - version "5.0.15" - resolved "https://registry.yarnpkg.com/@aws-amplify/pubsub/-/pubsub-5.0.15.tgz#8769c9efd7d5a67efd43ccf55feb5cae355d99e0" - integrity sha512-MMd6bHhLZTYJ7DwXeia43zyWIJkKWkuqgKZxeo9quStNQjt+KP/a2Z8EXAc18J7BUSGhTWxHvvv2lbYVI5X2Xw== - dependencies: - "@aws-amplify/auth" "5.1.9" - "@aws-amplify/cache" "5.0.15" - "@aws-amplify/core" "5.0.15" - graphql "15.8.0" - paho-mqtt "^1.1.0" - tslib "^1.8.0" - uuid "^3.2.1" - zen-observable-ts "0.8.19" - -"@aws-amplify/storage@5.1.5": - version "5.1.5" - resolved "https://registry.yarnpkg.com/@aws-amplify/storage/-/storage-5.1.5.tgz#04cf1da252f3295626058ae18430ff150ce89ea5" - integrity sha512-ppFxwZD+pjkVFba70BsLEsQg70hl/8/m1iKLQJQFsToYlvLkeayk4QChCW1sL+8IPWdAV1v/c3ayOUmVA/utVg== - dependencies: - "@aws-amplify/core" "5.0.15" - "@aws-sdk/client-s3" "3.6.1" - "@aws-sdk/s3-request-presigner" "3.6.1" - "@aws-sdk/util-create-request" "3.6.1" - "@aws-sdk/util-format-url" "3.6.1" - axios "0.26.0" - events "^3.1.0" - tslib "^1.8.0" - -"@aws-amplify/ui-react-core@2.1.13": - version "2.1.13" - resolved "https://registry.yarnpkg.com/@aws-amplify/ui-react-core/-/ui-react-core-2.1.13.tgz#c98beefbd3d1d58bde8947763863d9287d429111" - integrity sha512-jUzzULKM/0wQWuCoZKS6qc4zrqcGR7tgVcwTysBGJMjY5F8JJG0cTKR/1La+gUGPRT2W+/YiS62FwsD80ngysw== - dependencies: - "@aws-amplify/ui" "5.5.5" - "@xstate/react" "3.0.1" - lodash "4.17.21" - xstate "^4.33.6" - -"@aws-amplify/ui-react@^4.3.8": - version "4.3.8" - resolved "https://registry.yarnpkg.com/@aws-amplify/ui-react/-/ui-react-4.3.8.tgz#8efe9c923cd020537388dc1d5bc88a889e6c5c7f" - integrity sha512-5aOX5/1aVVE7uuNQhTsgPtvdN7nti9Ytcq7G75tX9BoGXu7yxWfXIdUKQhk3B6mcL+P4iXahsSy9b3oQ006YSQ== - dependencies: - "@aws-amplify/ui" "5.5.5" - "@aws-amplify/ui-react-core" "2.1.13" - "@radix-ui/react-accordion" "1.0.0" - "@radix-ui/react-direction" "1.0.0" - "@radix-ui/react-dropdown-menu" "1.0.0" - "@radix-ui/react-slider" "1.0.0" - "@radix-ui/react-tabs" "1.0.0" - "@xstate/react" "3.0.0" - classnames "2.3.1" - deepmerge "4.2.2" - lodash "4.17.21" - mapbox-gl "1.13.1" - maplibre-gl "2.1.9" - maplibre-gl-js-amplify "3.0.2" - qrcode "1.5.0" - react-generate-context "1.0.1" - react-map-gl "7.0.15" - tinycolor2 "1.4.2" - tslib "2.4.1" - -"@aws-amplify/ui@5.5.5": - version "5.5.5" - resolved "https://registry.yarnpkg.com/@aws-amplify/ui/-/ui-5.5.5.tgz#c57906eec90c2aac8192de6a99faf18a00afc624" - integrity sha512-l4YECWJ72ZtottroyZ5ZZnxYT4QuoTKzZofg6ic/XAMH6pjUCtqNiqp0+K0tEqN7UlKQd1ggPkdMSpgsbaaEUQ== - dependencies: - csstype "^3.1.1" - lodash "4.17.21" - style-dictionary "3.7.1" - tslib "2.4.1" - -"@aws-amplify/xr@4.0.15": - version "4.0.15" - resolved "https://registry.yarnpkg.com/@aws-amplify/xr/-/xr-4.0.15.tgz#34d94a80f8e4c8c21bd349e74651723f8f480aa7" - integrity sha512-+yT5rzE49hGLXyylThWB1zZc6Kvxdwz7l2YykEFqsFbb70pfZayr4pYnhg+wcVYBN5jDLlF5Gc+oquzhc9oP8w== - dependencies: - "@aws-amplify/core" "5.0.15" - tslib "^1.8.0" - -"@aws-crypto/crc32@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-2.0.0.tgz#4ad432a3c03ec3087c5540ff6e41e6565d2dc153" - integrity sha512-TvE1r2CUueyXOuHdEigYjIZVesInd9KN+K/TFFNfkkxRThiNxO6i4ZqqAVMoEjAamZZ1AA8WXJkjCz7YShHPQA== - dependencies: - "@aws-crypto/util" "^2.0.0" - "@aws-sdk/types" "^3.1.0" - tslib "^1.11.1" - -"@aws-crypto/crc32@^1.0.0": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-1.2.2.tgz#4a758a596fa8cb3ab463f037a78c2ca4992fe81f" - integrity sha512-8K0b1672qbv05chSoKpwGZ3fhvVp28Fg3AVHVkEHFl2lTLChO7wD/hTyyo8ING7uc31uZRt7bNra/hA74Td7Tw== - dependencies: - "@aws-crypto/util" "^1.2.2" - "@aws-sdk/types" "^3.1.0" - tslib "^1.11.1" - -"@aws-crypto/ie11-detection@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-1.0.0.tgz#d3a6af29ba7f15458f79c41d1cd8cac3925e726a" - integrity sha512-kCKVhCF1oDxFYgQrxXmIrS5oaWulkvRcPz+QBDMsUr2crbF4VGgGT6+uQhSwJFdUAQ2A//Vq+uT83eJrkzFgXA== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/ie11-detection@^2.0.0": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz#9c39f4a5558196636031a933ec1b4792de959d6a" - integrity sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/sha256-browser@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz#741c9024df55ec59b51e5b1f5d806a4852699fb5" - integrity sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A== - dependencies: - "@aws-crypto/ie11-detection" "^2.0.0" - "@aws-crypto/sha256-js" "^2.0.0" - "@aws-crypto/supports-web-crypto" "^2.0.0" - "@aws-crypto/util" "^2.0.0" - "@aws-sdk/types" "^3.1.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-browser@^1.0.0": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-1.2.2.tgz#004d806e3bbae130046c259ec3279a02d4a0b576" - integrity sha512-0tNR4kBtJp+9S0kis4+JLab3eg6QWuIeuPhzaYoYwNUXGBgsWIkktA2mnilet+EGWzf3n1zknJXC4X4DVyyXbg== - dependencies: - "@aws-crypto/ie11-detection" "^1.0.0" - "@aws-crypto/sha256-js" "^1.2.2" - "@aws-crypto/supports-web-crypto" "^1.0.0" - "@aws-crypto/util" "^1.2.2" - "@aws-sdk/types" "^3.1.0" - "@aws-sdk/util-locate-window" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-js@1.2.2", "@aws-crypto/sha256-js@^1.0.0", "@aws-crypto/sha256-js@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz#02acd1a1fda92896fc5a28ec7c6e164644ea32fc" - integrity sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g== - dependencies: - "@aws-crypto/util" "^1.2.2" - "@aws-sdk/types" "^3.1.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-js@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz#f1f936039bdebd0b9e2dd834d65afdc2aac4efcb" - integrity sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig== - dependencies: - "@aws-crypto/util" "^2.0.0" - "@aws-sdk/types" "^3.1.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-js@^2.0.0": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-2.0.2.tgz#c81e5d378b8a74ff1671b58632779986e50f4c99" - integrity sha512-iXLdKH19qPmIC73fVCrHWCSYjN/sxaAvZ3jNNyw6FclmHyjLKg0f69WlC9KTnyElxCR5MO9SKaG00VwlJwyAkQ== - dependencies: - "@aws-crypto/util" "^2.0.2" - "@aws-sdk/types" "^3.110.0" - tslib "^1.11.1" - -"@aws-crypto/supports-web-crypto@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-1.0.0.tgz#c40901bc17ac1e875e248df16a2b47ad8bfd9a93" - integrity sha512-IHLfv+WmVH89EW4n6a5eE8/hUlz6qkWGMn/v4r5ZgzcXdTC5nolii2z3k46y01hWRiC2PPhOdeSLzMUCUMco7g== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/supports-web-crypto@^2.0.0": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.2.tgz#9f02aafad8789cac9c0ab5faaebb1ab8aa841338" - integrity sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/util@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-1.2.2.tgz#b28f7897730eb6538b21c18bd4de22d0ea09003c" - integrity sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg== - dependencies: - "@aws-sdk/types" "^3.1.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/util@^2.0.0", "@aws-crypto/util@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-2.0.2.tgz#adf5ff5dfbc7713082f897f1d01e551ce0edb9c0" - integrity sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA== - dependencies: - "@aws-sdk/types" "^3.110.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-sdk/abort-controller@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/abort-controller/-/abort-controller-3.186.0.tgz#dfaccd296d57136930582e1a19203d6cb60debc7" - integrity sha512-JFvvvtEcbYOvVRRXasi64Dd1VcOz5kJmPvtzsJ+HzMHvPbGGs/aopOJAZQJMJttzJmJwVTay0QL6yag9Kk8nYA== - dependencies: - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/abort-controller@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/abort-controller/-/abort-controller-3.6.1.tgz#75812875bbef6ad17e0e3a6d96aab9df636376f9" - integrity sha512-X81XkxX/2Tvv9YNcEto/rcQzPIdKJHFSnl9hBl/qkSdCFV/GaQ2XNWfKm5qFXMLlZNFS0Fn5CnBJ83qnBm47vg== - dependencies: - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/chunked-blob-reader-native@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/chunked-blob-reader-native/-/chunked-blob-reader-native-3.6.1.tgz#21c2c8773c3cd8403c2a953fd0e9e4f69c120214" - integrity sha512-vP6bc2v9h442Srmo7t2QcIbPjk5IqLSf4jGnKDAes8z+7eyjCtKugRP3lOM1fJCfGlPIsJGYnexxYdEGw008vA== - dependencies: - "@aws-sdk/util-base64-browser" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/chunked-blob-reader@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/chunked-blob-reader/-/chunked-blob-reader-3.6.1.tgz#63363025dcecc2f9dd47ae5c282d79c01b327d82" - integrity sha512-QBGUBoD8D5nsM/EKoc0rjpApa5NE5pQVzw1caE8sG00QMMPkCXWSB/gTVKVY0GOAhJFoA/VpVPQchIlZcOrBFg== - dependencies: - tslib "^1.8.0" - -"@aws-sdk/client-cloudwatch-logs@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-cloudwatch-logs/-/client-cloudwatch-logs-3.6.1.tgz#5e8dba495a2ba9a901b0a1a2d53edef8bd452398" - integrity sha512-QOxIDnlVTpnwJ26Gap6RGz61cDLH6TKrIp30VqwdMeT1pCGy8mn9rWln6XA+ymkofHy/08RfpGp+VN4axwd4Lw== - dependencies: - "@aws-crypto/sha256-browser" "^1.0.0" - "@aws-crypto/sha256-js" "^1.0.0" - "@aws-sdk/config-resolver" "3.6.1" - "@aws-sdk/credential-provider-node" "3.6.1" - "@aws-sdk/fetch-http-handler" "3.6.1" - "@aws-sdk/hash-node" "3.6.1" - "@aws-sdk/invalid-dependency" "3.6.1" - "@aws-sdk/middleware-content-length" "3.6.1" - "@aws-sdk/middleware-host-header" "3.6.1" - "@aws-sdk/middleware-logger" "3.6.1" - "@aws-sdk/middleware-retry" "3.6.1" - "@aws-sdk/middleware-serde" "3.6.1" - "@aws-sdk/middleware-signing" "3.6.1" - "@aws-sdk/middleware-stack" "3.6.1" - "@aws-sdk/middleware-user-agent" "3.6.1" - "@aws-sdk/node-config-provider" "3.6.1" - "@aws-sdk/node-http-handler" "3.6.1" - "@aws-sdk/protocol-http" "3.6.1" - "@aws-sdk/smithy-client" "3.6.1" - "@aws-sdk/types" "3.6.1" - "@aws-sdk/url-parser" "3.6.1" - "@aws-sdk/url-parser-native" "3.6.1" - "@aws-sdk/util-base64-browser" "3.6.1" - "@aws-sdk/util-base64-node" "3.6.1" - "@aws-sdk/util-body-length-browser" "3.6.1" - "@aws-sdk/util-body-length-node" "3.6.1" - "@aws-sdk/util-user-agent-browser" "3.6.1" - "@aws-sdk/util-user-agent-node" "3.6.1" - "@aws-sdk/util-utf8-browser" "3.6.1" - "@aws-sdk/util-utf8-node" "3.6.1" - tslib "^2.0.0" - -"@aws-sdk/client-cognito-identity@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.6.1.tgz#36992a4fef7eff1f2b1dbee30850e30ebdfc15bb" - integrity sha512-FMj2GR9R5oCKb3/NI16GIvWeHcE4uX42fBAaQKPbjg2gALFDx9CcJYsdOtDP37V89GtPyZilLv6GJxrwJKzYGg== - dependencies: - "@aws-crypto/sha256-browser" "^1.0.0" - "@aws-crypto/sha256-js" "^1.0.0" - "@aws-sdk/config-resolver" "3.6.1" - "@aws-sdk/credential-provider-node" "3.6.1" - "@aws-sdk/fetch-http-handler" "3.6.1" - "@aws-sdk/hash-node" "3.6.1" - "@aws-sdk/invalid-dependency" "3.6.1" - "@aws-sdk/middleware-content-length" "3.6.1" - "@aws-sdk/middleware-host-header" "3.6.1" - "@aws-sdk/middleware-logger" "3.6.1" - "@aws-sdk/middleware-retry" "3.6.1" - "@aws-sdk/middleware-serde" "3.6.1" - "@aws-sdk/middleware-signing" "3.6.1" - "@aws-sdk/middleware-stack" "3.6.1" - "@aws-sdk/middleware-user-agent" "3.6.1" - "@aws-sdk/node-config-provider" "3.6.1" - "@aws-sdk/node-http-handler" "3.6.1" - "@aws-sdk/protocol-http" "3.6.1" - "@aws-sdk/smithy-client" "3.6.1" - "@aws-sdk/types" "3.6.1" - "@aws-sdk/url-parser" "3.6.1" - "@aws-sdk/url-parser-native" "3.6.1" - "@aws-sdk/util-base64-browser" "3.6.1" - "@aws-sdk/util-base64-node" "3.6.1" - "@aws-sdk/util-body-length-browser" "3.6.1" - "@aws-sdk/util-body-length-node" "3.6.1" - "@aws-sdk/util-user-agent-browser" "3.6.1" - "@aws-sdk/util-user-agent-node" "3.6.1" - "@aws-sdk/util-utf8-browser" "3.6.1" - "@aws-sdk/util-utf8-node" "3.6.1" - tslib "^2.0.0" - -"@aws-sdk/client-comprehend@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-comprehend/-/client-comprehend-3.6.1.tgz#d640d510b49feafa94ac252cdd7942cbe5537249" - integrity sha512-Y2ixlSTjjAp2HJhkUArtYqC/X+zG5Qqu3Bl+Ez22u4u4YnG8HsNFD6FE1axuWSdSa5AFtWTEt+Cz2Ghj/tDySA== - dependencies: - "@aws-crypto/sha256-browser" "^1.0.0" - "@aws-crypto/sha256-js" "^1.0.0" - "@aws-sdk/config-resolver" "3.6.1" - "@aws-sdk/credential-provider-node" "3.6.1" - "@aws-sdk/fetch-http-handler" "3.6.1" - "@aws-sdk/hash-node" "3.6.1" - "@aws-sdk/invalid-dependency" "3.6.1" - "@aws-sdk/middleware-content-length" "3.6.1" - "@aws-sdk/middleware-host-header" "3.6.1" - "@aws-sdk/middleware-logger" "3.6.1" - "@aws-sdk/middleware-retry" "3.6.1" - "@aws-sdk/middleware-serde" "3.6.1" - "@aws-sdk/middleware-signing" "3.6.1" - "@aws-sdk/middleware-stack" "3.6.1" - "@aws-sdk/middleware-user-agent" "3.6.1" - "@aws-sdk/node-config-provider" "3.6.1" - "@aws-sdk/node-http-handler" "3.6.1" - "@aws-sdk/protocol-http" "3.6.1" - "@aws-sdk/smithy-client" "3.6.1" - "@aws-sdk/types" "3.6.1" - "@aws-sdk/url-parser" "3.6.1" - "@aws-sdk/url-parser-native" "3.6.1" - "@aws-sdk/util-base64-browser" "3.6.1" - "@aws-sdk/util-base64-node" "3.6.1" - "@aws-sdk/util-body-length-browser" "3.6.1" - "@aws-sdk/util-body-length-node" "3.6.1" - "@aws-sdk/util-user-agent-browser" "3.6.1" - "@aws-sdk/util-user-agent-node" "3.6.1" - "@aws-sdk/util-utf8-browser" "3.6.1" - "@aws-sdk/util-utf8-node" "3.6.1" - tslib "^2.0.0" - uuid "^3.0.0" - -"@aws-sdk/client-firehose@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-firehose/-/client-firehose-3.6.1.tgz#87a8ef0c18267907b3ce712e6d3de8f36b0a7c7b" - integrity sha512-KhiKCm+cJmnRFuAEyO3DBpFVDNix1XcVikdxk2lvYbFWkM1oUZoBpudxaJ+fPf2W3stF3CXIAOP+TnGqSZCy9g== - dependencies: - "@aws-crypto/sha256-browser" "^1.0.0" - "@aws-crypto/sha256-js" "^1.0.0" - "@aws-sdk/config-resolver" "3.6.1" - "@aws-sdk/credential-provider-node" "3.6.1" - "@aws-sdk/fetch-http-handler" "3.6.1" - "@aws-sdk/hash-node" "3.6.1" - "@aws-sdk/invalid-dependency" "3.6.1" - "@aws-sdk/middleware-content-length" "3.6.1" - "@aws-sdk/middleware-host-header" "3.6.1" - "@aws-sdk/middleware-logger" "3.6.1" - "@aws-sdk/middleware-retry" "3.6.1" - "@aws-sdk/middleware-serde" "3.6.1" - "@aws-sdk/middleware-signing" "3.6.1" - "@aws-sdk/middleware-stack" "3.6.1" - "@aws-sdk/middleware-user-agent" "3.6.1" - "@aws-sdk/node-config-provider" "3.6.1" - "@aws-sdk/node-http-handler" "3.6.1" - "@aws-sdk/protocol-http" "3.6.1" - "@aws-sdk/smithy-client" "3.6.1" - "@aws-sdk/types" "3.6.1" - "@aws-sdk/url-parser" "3.6.1" - "@aws-sdk/url-parser-native" "3.6.1" - "@aws-sdk/util-base64-browser" "3.6.1" - "@aws-sdk/util-base64-node" "3.6.1" - "@aws-sdk/util-body-length-browser" "3.6.1" - "@aws-sdk/util-body-length-node" "3.6.1" - "@aws-sdk/util-user-agent-browser" "3.6.1" - "@aws-sdk/util-user-agent-node" "3.6.1" - "@aws-sdk/util-utf8-browser" "3.6.1" - "@aws-sdk/util-utf8-node" "3.6.1" - tslib "^2.0.0" - -"@aws-sdk/client-kinesis@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-kinesis/-/client-kinesis-3.6.1.tgz#48583cc854f9108bc8ff6168005d9a05b24bae31" - integrity sha512-Ygo+92LxHeUZmiyhiHT+k7hIOhJd6S7ckCEVUsQs2rfwe9bAygUY/3cCoZSqgWy7exFRRKsjhzStcyV6i6jrVQ== - dependencies: - "@aws-crypto/sha256-browser" "^1.0.0" - "@aws-crypto/sha256-js" "^1.0.0" - "@aws-sdk/config-resolver" "3.6.1" - "@aws-sdk/credential-provider-node" "3.6.1" - "@aws-sdk/eventstream-serde-browser" "3.6.1" - "@aws-sdk/eventstream-serde-config-resolver" "3.6.1" - "@aws-sdk/eventstream-serde-node" "3.6.1" - "@aws-sdk/fetch-http-handler" "3.6.1" - "@aws-sdk/hash-node" "3.6.1" - "@aws-sdk/invalid-dependency" "3.6.1" - "@aws-sdk/middleware-content-length" "3.6.1" - "@aws-sdk/middleware-host-header" "3.6.1" - "@aws-sdk/middleware-logger" "3.6.1" - "@aws-sdk/middleware-retry" "3.6.1" - "@aws-sdk/middleware-serde" "3.6.1" - "@aws-sdk/middleware-signing" "3.6.1" - "@aws-sdk/middleware-stack" "3.6.1" - "@aws-sdk/middleware-user-agent" "3.6.1" - "@aws-sdk/node-config-provider" "3.6.1" - "@aws-sdk/node-http-handler" "3.6.1" - "@aws-sdk/protocol-http" "3.6.1" - "@aws-sdk/smithy-client" "3.6.1" - "@aws-sdk/types" "3.6.1" - "@aws-sdk/url-parser" "3.6.1" - "@aws-sdk/url-parser-native" "3.6.1" - "@aws-sdk/util-base64-browser" "3.6.1" - "@aws-sdk/util-base64-node" "3.6.1" - "@aws-sdk/util-body-length-browser" "3.6.1" - "@aws-sdk/util-body-length-node" "3.6.1" - "@aws-sdk/util-user-agent-browser" "3.6.1" - "@aws-sdk/util-user-agent-node" "3.6.1" - "@aws-sdk/util-utf8-browser" "3.6.1" - "@aws-sdk/util-utf8-node" "3.6.1" - "@aws-sdk/util-waiter" "3.6.1" - tslib "^2.0.0" - -"@aws-sdk/client-lex-runtime-service@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-lex-runtime-service/-/client-lex-runtime-service-3.186.0.tgz#81deea7402cb76e7f2dce56bc5778e51909e1374" - integrity sha512-EgjQvFxa/o1urxpnWV2A/D0k4m763NqrPLuL074LR+cOkNxVl9W27aYL/tddDBmmDzzx4KcuRL6/n+UBZIheTg== - dependencies: - "@aws-crypto/sha256-browser" "2.0.0" - "@aws-crypto/sha256-js" "2.0.0" - "@aws-sdk/client-sts" "3.186.0" - "@aws-sdk/config-resolver" "3.186.0" - "@aws-sdk/credential-provider-node" "3.186.0" - "@aws-sdk/fetch-http-handler" "3.186.0" - "@aws-sdk/hash-node" "3.186.0" - "@aws-sdk/invalid-dependency" "3.186.0" - "@aws-sdk/middleware-content-length" "3.186.0" - "@aws-sdk/middleware-host-header" "3.186.0" - "@aws-sdk/middleware-logger" "3.186.0" - "@aws-sdk/middleware-recursion-detection" "3.186.0" - "@aws-sdk/middleware-retry" "3.186.0" - "@aws-sdk/middleware-serde" "3.186.0" - "@aws-sdk/middleware-signing" "3.186.0" - "@aws-sdk/middleware-stack" "3.186.0" - "@aws-sdk/middleware-user-agent" "3.186.0" - "@aws-sdk/node-config-provider" "3.186.0" - "@aws-sdk/node-http-handler" "3.186.0" - "@aws-sdk/protocol-http" "3.186.0" - "@aws-sdk/smithy-client" "3.186.0" - "@aws-sdk/types" "3.186.0" - "@aws-sdk/url-parser" "3.186.0" - "@aws-sdk/util-base64-browser" "3.186.0" - "@aws-sdk/util-base64-node" "3.186.0" - "@aws-sdk/util-body-length-browser" "3.186.0" - "@aws-sdk/util-body-length-node" "3.186.0" - "@aws-sdk/util-defaults-mode-browser" "3.186.0" - "@aws-sdk/util-defaults-mode-node" "3.186.0" - "@aws-sdk/util-user-agent-browser" "3.186.0" - "@aws-sdk/util-user-agent-node" "3.186.0" - "@aws-sdk/util-utf8-browser" "3.186.0" - "@aws-sdk/util-utf8-node" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/client-lex-runtime-v2@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-lex-runtime-v2/-/client-lex-runtime-v2-3.186.0.tgz#36d153f80e1dbc466c541fd70002d5f9846c9afa" - integrity sha512-oDN07yCWc9gsEYL44KSjPj8wdHHcf5Kti+w31fE7JHZqvRXxLsLx7G+kEcPmSTRk3Y4wDPXJozL6sDUAOAEb7A== - dependencies: - "@aws-crypto/sha256-browser" "2.0.0" - "@aws-crypto/sha256-js" "2.0.0" - "@aws-sdk/client-sts" "3.186.0" - "@aws-sdk/config-resolver" "3.186.0" - "@aws-sdk/credential-provider-node" "3.186.0" - "@aws-sdk/eventstream-handler-node" "3.186.0" - "@aws-sdk/eventstream-serde-browser" "3.186.0" - "@aws-sdk/eventstream-serde-config-resolver" "3.186.0" - "@aws-sdk/eventstream-serde-node" "3.186.0" - "@aws-sdk/fetch-http-handler" "3.186.0" - "@aws-sdk/hash-node" "3.186.0" - "@aws-sdk/invalid-dependency" "3.186.0" - "@aws-sdk/middleware-content-length" "3.186.0" - "@aws-sdk/middleware-eventstream" "3.186.0" - "@aws-sdk/middleware-host-header" "3.186.0" - "@aws-sdk/middleware-logger" "3.186.0" - "@aws-sdk/middleware-recursion-detection" "3.186.0" - "@aws-sdk/middleware-retry" "3.186.0" - "@aws-sdk/middleware-serde" "3.186.0" - "@aws-sdk/middleware-signing" "3.186.0" - "@aws-sdk/middleware-stack" "3.186.0" - "@aws-sdk/middleware-user-agent" "3.186.0" - "@aws-sdk/node-config-provider" "3.186.0" - "@aws-sdk/node-http-handler" "3.186.0" - "@aws-sdk/protocol-http" "3.186.0" - "@aws-sdk/smithy-client" "3.186.0" - "@aws-sdk/types" "3.186.0" - "@aws-sdk/url-parser" "3.186.0" - "@aws-sdk/util-base64-browser" "3.186.0" - "@aws-sdk/util-base64-node" "3.186.0" - "@aws-sdk/util-body-length-browser" "3.186.0" - "@aws-sdk/util-body-length-node" "3.186.0" - "@aws-sdk/util-defaults-mode-browser" "3.186.0" - "@aws-sdk/util-defaults-mode-node" "3.186.0" - "@aws-sdk/util-user-agent-browser" "3.186.0" - "@aws-sdk/util-user-agent-node" "3.186.0" - "@aws-sdk/util-utf8-browser" "3.186.0" - "@aws-sdk/util-utf8-node" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/client-location@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-location/-/client-location-3.186.0.tgz#0801433a1c3fb1fe534771daf67b5d57ffd474f4" - integrity sha512-RXT1Z7jgYrPEdD1VkErH9Wm+z6y7c/ua1Pu9VQ8weu9vtD15S8Qnyd1m4HS8ZPQUUM/gTxs/fL9+s53wRWpfGQ== - dependencies: - "@aws-crypto/sha256-browser" "2.0.0" - "@aws-crypto/sha256-js" "2.0.0" - "@aws-sdk/client-sts" "3.186.0" - "@aws-sdk/config-resolver" "3.186.0" - "@aws-sdk/credential-provider-node" "3.186.0" - "@aws-sdk/fetch-http-handler" "3.186.0" - "@aws-sdk/hash-node" "3.186.0" - "@aws-sdk/invalid-dependency" "3.186.0" - "@aws-sdk/middleware-content-length" "3.186.0" - "@aws-sdk/middleware-host-header" "3.186.0" - "@aws-sdk/middleware-logger" "3.186.0" - "@aws-sdk/middleware-recursion-detection" "3.186.0" - "@aws-sdk/middleware-retry" "3.186.0" - "@aws-sdk/middleware-serde" "3.186.0" - "@aws-sdk/middleware-signing" "3.186.0" - "@aws-sdk/middleware-stack" "3.186.0" - "@aws-sdk/middleware-user-agent" "3.186.0" - "@aws-sdk/node-config-provider" "3.186.0" - "@aws-sdk/node-http-handler" "3.186.0" - "@aws-sdk/protocol-http" "3.186.0" - "@aws-sdk/smithy-client" "3.186.0" - "@aws-sdk/types" "3.186.0" - "@aws-sdk/url-parser" "3.186.0" - "@aws-sdk/util-base64-browser" "3.186.0" - "@aws-sdk/util-base64-node" "3.186.0" - "@aws-sdk/util-body-length-browser" "3.186.0" - "@aws-sdk/util-body-length-node" "3.186.0" - "@aws-sdk/util-defaults-mode-browser" "3.186.0" - "@aws-sdk/util-defaults-mode-node" "3.186.0" - "@aws-sdk/util-user-agent-browser" "3.186.0" - "@aws-sdk/util-user-agent-node" "3.186.0" - "@aws-sdk/util-utf8-browser" "3.186.0" - "@aws-sdk/util-utf8-node" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/client-personalize-events@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-personalize-events/-/client-personalize-events-3.6.1.tgz#86942bb64108cfc2f6c31a8b54aab6fa7f7be00f" - integrity sha512-x9Jl/7emSQsB6GwBvjyw5BiSO26CnH4uvjNit6n54yNMtJ26q0+oIxkplnUDyjLTfLRe373c/z5/4dQQtDffkw== - dependencies: - "@aws-crypto/sha256-browser" "^1.0.0" - "@aws-crypto/sha256-js" "^1.0.0" - "@aws-sdk/config-resolver" "3.6.1" - "@aws-sdk/credential-provider-node" "3.6.1" - "@aws-sdk/fetch-http-handler" "3.6.1" - "@aws-sdk/hash-node" "3.6.1" - "@aws-sdk/invalid-dependency" "3.6.1" - "@aws-sdk/middleware-content-length" "3.6.1" - "@aws-sdk/middleware-host-header" "3.6.1" - "@aws-sdk/middleware-logger" "3.6.1" - "@aws-sdk/middleware-retry" "3.6.1" - "@aws-sdk/middleware-serde" "3.6.1" - "@aws-sdk/middleware-signing" "3.6.1" - "@aws-sdk/middleware-stack" "3.6.1" - "@aws-sdk/middleware-user-agent" "3.6.1" - "@aws-sdk/node-config-provider" "3.6.1" - "@aws-sdk/node-http-handler" "3.6.1" - "@aws-sdk/protocol-http" "3.6.1" - "@aws-sdk/smithy-client" "3.6.1" - "@aws-sdk/types" "3.6.1" - "@aws-sdk/url-parser" "3.6.1" - "@aws-sdk/url-parser-native" "3.6.1" - "@aws-sdk/util-base64-browser" "3.6.1" - "@aws-sdk/util-base64-node" "3.6.1" - "@aws-sdk/util-body-length-browser" "3.6.1" - "@aws-sdk/util-body-length-node" "3.6.1" - "@aws-sdk/util-user-agent-browser" "3.6.1" - "@aws-sdk/util-user-agent-node" "3.6.1" - "@aws-sdk/util-utf8-browser" "3.6.1" - "@aws-sdk/util-utf8-node" "3.6.1" - tslib "^2.0.0" - -"@aws-sdk/client-pinpoint@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-pinpoint/-/client-pinpoint-3.186.0.tgz#d0e63ee9883024e89bc56cf0e01baf01eda00f55" - integrity sha512-gTVIU+c4WSgvNDTIXTfVFqrHbMtxcjviqZMop+N62OtJO+xQ8tg9nKmfIlhTuErV7BrI4u3djk7bYE+atfP9dQ== - dependencies: - "@aws-crypto/sha256-browser" "2.0.0" - "@aws-crypto/sha256-js" "2.0.0" - "@aws-sdk/client-sts" "3.186.0" - "@aws-sdk/config-resolver" "3.186.0" - "@aws-sdk/credential-provider-node" "3.186.0" - "@aws-sdk/fetch-http-handler" "3.186.0" - "@aws-sdk/hash-node" "3.186.0" - "@aws-sdk/invalid-dependency" "3.186.0" - "@aws-sdk/middleware-content-length" "3.186.0" - "@aws-sdk/middleware-host-header" "3.186.0" - "@aws-sdk/middleware-logger" "3.186.0" - "@aws-sdk/middleware-recursion-detection" "3.186.0" - "@aws-sdk/middleware-retry" "3.186.0" - "@aws-sdk/middleware-serde" "3.186.0" - "@aws-sdk/middleware-signing" "3.186.0" - "@aws-sdk/middleware-stack" "3.186.0" - "@aws-sdk/middleware-user-agent" "3.186.0" - "@aws-sdk/node-config-provider" "3.186.0" - "@aws-sdk/node-http-handler" "3.186.0" - "@aws-sdk/protocol-http" "3.186.0" - "@aws-sdk/smithy-client" "3.186.0" - "@aws-sdk/types" "3.186.0" - "@aws-sdk/url-parser" "3.186.0" - "@aws-sdk/util-base64-browser" "3.186.0" - "@aws-sdk/util-base64-node" "3.186.0" - "@aws-sdk/util-body-length-browser" "3.186.0" - "@aws-sdk/util-body-length-node" "3.186.0" - "@aws-sdk/util-defaults-mode-browser" "3.186.0" - "@aws-sdk/util-defaults-mode-node" "3.186.0" - "@aws-sdk/util-user-agent-browser" "3.186.0" - "@aws-sdk/util-user-agent-node" "3.186.0" - "@aws-sdk/util-utf8-browser" "3.186.0" - "@aws-sdk/util-utf8-node" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/client-pinpoint@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-pinpoint/-/client-pinpoint-3.6.1.tgz#6b93f46475ae2667d77053be51ea62f52e330155" - integrity sha512-dueBedp91EKAHxcWLR3aNx/eUEdxdF9niEQTzOO2O4iJL2yvO2Hh7ZYiO7B3g7FuuICTpWSHd//Y9mGmSVLMCg== - dependencies: - "@aws-crypto/sha256-browser" "^1.0.0" - "@aws-crypto/sha256-js" "^1.0.0" - "@aws-sdk/config-resolver" "3.6.1" - "@aws-sdk/credential-provider-node" "3.6.1" - "@aws-sdk/fetch-http-handler" "3.6.1" - "@aws-sdk/hash-node" "3.6.1" - "@aws-sdk/invalid-dependency" "3.6.1" - "@aws-sdk/middleware-content-length" "3.6.1" - "@aws-sdk/middleware-host-header" "3.6.1" - "@aws-sdk/middleware-logger" "3.6.1" - "@aws-sdk/middleware-retry" "3.6.1" - "@aws-sdk/middleware-serde" "3.6.1" - "@aws-sdk/middleware-signing" "3.6.1" - "@aws-sdk/middleware-stack" "3.6.1" - "@aws-sdk/middleware-user-agent" "3.6.1" - "@aws-sdk/node-config-provider" "3.6.1" - "@aws-sdk/node-http-handler" "3.6.1" - "@aws-sdk/protocol-http" "3.6.1" - "@aws-sdk/smithy-client" "3.6.1" - "@aws-sdk/types" "3.6.1" - "@aws-sdk/url-parser" "3.6.1" - "@aws-sdk/url-parser-native" "3.6.1" - "@aws-sdk/util-base64-browser" "3.6.1" - "@aws-sdk/util-base64-node" "3.6.1" - "@aws-sdk/util-body-length-browser" "3.6.1" - "@aws-sdk/util-body-length-node" "3.6.1" - "@aws-sdk/util-user-agent-browser" "3.6.1" - "@aws-sdk/util-user-agent-node" "3.6.1" - "@aws-sdk/util-utf8-browser" "3.6.1" - "@aws-sdk/util-utf8-node" "3.6.1" - tslib "^2.0.0" - -"@aws-sdk/client-polly@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-polly/-/client-polly-3.6.1.tgz#869deb186e57fca29737bfa7af094599d7879841" - integrity sha512-y6fxVYndGS7z2KqHViPCqagBEOsZlxBUYUJZuD6WWTiQrI0Pwe5qG02oKJVaa5OmxE20QLf6bRBWj2rQpeF4IQ== - dependencies: - "@aws-crypto/sha256-browser" "^1.0.0" - "@aws-crypto/sha256-js" "^1.0.0" - "@aws-sdk/config-resolver" "3.6.1" - "@aws-sdk/credential-provider-node" "3.6.1" - "@aws-sdk/fetch-http-handler" "3.6.1" - "@aws-sdk/hash-node" "3.6.1" - "@aws-sdk/invalid-dependency" "3.6.1" - "@aws-sdk/middleware-content-length" "3.6.1" - "@aws-sdk/middleware-host-header" "3.6.1" - "@aws-sdk/middleware-logger" "3.6.1" - "@aws-sdk/middleware-retry" "3.6.1" - "@aws-sdk/middleware-serde" "3.6.1" - "@aws-sdk/middleware-signing" "3.6.1" - "@aws-sdk/middleware-stack" "3.6.1" - "@aws-sdk/middleware-user-agent" "3.6.1" - "@aws-sdk/node-config-provider" "3.6.1" - "@aws-sdk/node-http-handler" "3.6.1" - "@aws-sdk/protocol-http" "3.6.1" - "@aws-sdk/smithy-client" "3.6.1" - "@aws-sdk/types" "3.6.1" - "@aws-sdk/url-parser" "3.6.1" - "@aws-sdk/url-parser-native" "3.6.1" - "@aws-sdk/util-base64-browser" "3.6.1" - "@aws-sdk/util-base64-node" "3.6.1" - "@aws-sdk/util-body-length-browser" "3.6.1" - "@aws-sdk/util-body-length-node" "3.6.1" - "@aws-sdk/util-user-agent-browser" "3.6.1" - "@aws-sdk/util-user-agent-node" "3.6.1" - "@aws-sdk/util-utf8-browser" "3.6.1" - "@aws-sdk/util-utf8-node" "3.6.1" - tslib "^2.0.0" - -"@aws-sdk/client-rekognition@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-rekognition/-/client-rekognition-3.6.1.tgz#710ba6d4509a2caa417cf0702ba81b5b65aa73eb" - integrity sha512-Ia4FEog9RrI0IoDRbOJO6djwhVAAaEZutxEKrWbjrVz4bgib28L+V+yAio2SUneeirj8pNYXwBKPfoYOUqGHhA== - dependencies: - "@aws-crypto/sha256-browser" "^1.0.0" - "@aws-crypto/sha256-js" "^1.0.0" - "@aws-sdk/config-resolver" "3.6.1" - "@aws-sdk/credential-provider-node" "3.6.1" - "@aws-sdk/fetch-http-handler" "3.6.1" - "@aws-sdk/hash-node" "3.6.1" - "@aws-sdk/invalid-dependency" "3.6.1" - "@aws-sdk/middleware-content-length" "3.6.1" - "@aws-sdk/middleware-host-header" "3.6.1" - "@aws-sdk/middleware-logger" "3.6.1" - "@aws-sdk/middleware-retry" "3.6.1" - "@aws-sdk/middleware-serde" "3.6.1" - "@aws-sdk/middleware-signing" "3.6.1" - "@aws-sdk/middleware-stack" "3.6.1" - "@aws-sdk/middleware-user-agent" "3.6.1" - "@aws-sdk/node-config-provider" "3.6.1" - "@aws-sdk/node-http-handler" "3.6.1" - "@aws-sdk/protocol-http" "3.6.1" - "@aws-sdk/smithy-client" "3.6.1" - "@aws-sdk/types" "3.6.1" - "@aws-sdk/url-parser" "3.6.1" - "@aws-sdk/url-parser-native" "3.6.1" - "@aws-sdk/util-base64-browser" "3.6.1" - "@aws-sdk/util-base64-node" "3.6.1" - "@aws-sdk/util-body-length-browser" "3.6.1" - "@aws-sdk/util-body-length-node" "3.6.1" - "@aws-sdk/util-user-agent-browser" "3.6.1" - "@aws-sdk/util-user-agent-node" "3.6.1" - "@aws-sdk/util-utf8-browser" "3.6.1" - "@aws-sdk/util-utf8-node" "3.6.1" - "@aws-sdk/util-waiter" "3.6.1" - tslib "^2.0.0" - -"@aws-sdk/client-s3@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.6.1.tgz#aab1e0e92b353d9d51152d9347b7e1809f3593d0" - integrity sha512-59cTmZj92iwgNoAeJirK5sZNQNXLc/oI3luqrEHRNLuOh70bjdgad70T0a5k2Ysd/v/QNamqJxnCJMPuX1bhgw== - dependencies: - "@aws-crypto/sha256-browser" "^1.0.0" - "@aws-crypto/sha256-js" "^1.0.0" - "@aws-sdk/config-resolver" "3.6.1" - "@aws-sdk/credential-provider-node" "3.6.1" - "@aws-sdk/eventstream-serde-browser" "3.6.1" - "@aws-sdk/eventstream-serde-config-resolver" "3.6.1" - "@aws-sdk/eventstream-serde-node" "3.6.1" - "@aws-sdk/fetch-http-handler" "3.6.1" - "@aws-sdk/hash-blob-browser" "3.6.1" - "@aws-sdk/hash-node" "3.6.1" - "@aws-sdk/hash-stream-node" "3.6.1" - "@aws-sdk/invalid-dependency" "3.6.1" - "@aws-sdk/md5-js" "3.6.1" - "@aws-sdk/middleware-apply-body-checksum" "3.6.1" - "@aws-sdk/middleware-bucket-endpoint" "3.6.1" - "@aws-sdk/middleware-content-length" "3.6.1" - "@aws-sdk/middleware-expect-continue" "3.6.1" - "@aws-sdk/middleware-host-header" "3.6.1" - "@aws-sdk/middleware-location-constraint" "3.6.1" - "@aws-sdk/middleware-logger" "3.6.1" - "@aws-sdk/middleware-retry" "3.6.1" - "@aws-sdk/middleware-sdk-s3" "3.6.1" - "@aws-sdk/middleware-serde" "3.6.1" - "@aws-sdk/middleware-signing" "3.6.1" - "@aws-sdk/middleware-ssec" "3.6.1" - "@aws-sdk/middleware-stack" "3.6.1" - "@aws-sdk/middleware-user-agent" "3.6.1" - "@aws-sdk/node-config-provider" "3.6.1" - "@aws-sdk/node-http-handler" "3.6.1" - "@aws-sdk/protocol-http" "3.6.1" - "@aws-sdk/smithy-client" "3.6.1" - "@aws-sdk/types" "3.6.1" - "@aws-sdk/url-parser" "3.6.1" - "@aws-sdk/url-parser-native" "3.6.1" - "@aws-sdk/util-base64-browser" "3.6.1" - "@aws-sdk/util-base64-node" "3.6.1" - "@aws-sdk/util-body-length-browser" "3.6.1" - "@aws-sdk/util-body-length-node" "3.6.1" - "@aws-sdk/util-user-agent-browser" "3.6.1" - "@aws-sdk/util-user-agent-node" "3.6.1" - "@aws-sdk/util-utf8-browser" "3.6.1" - "@aws-sdk/util-utf8-node" "3.6.1" - "@aws-sdk/util-waiter" "3.6.1" - "@aws-sdk/xml-builder" "3.6.1" - fast-xml-parser "^3.16.0" - tslib "^2.0.0" - -"@aws-sdk/client-sso@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.186.0.tgz#233bdd1312dbf88ef9452f8a62c3c3f1ac580330" - integrity sha512-qwLPomqq+fjvp42izzEpBEtGL2+dIlWH5pUCteV55hTEwHgo+m9LJPIrMWkPeoMBzqbNiu5n6+zihnwYlCIlEA== - dependencies: - "@aws-crypto/sha256-browser" "2.0.0" - "@aws-crypto/sha256-js" "2.0.0" - "@aws-sdk/config-resolver" "3.186.0" - "@aws-sdk/fetch-http-handler" "3.186.0" - "@aws-sdk/hash-node" "3.186.0" - "@aws-sdk/invalid-dependency" "3.186.0" - "@aws-sdk/middleware-content-length" "3.186.0" - "@aws-sdk/middleware-host-header" "3.186.0" - "@aws-sdk/middleware-logger" "3.186.0" - "@aws-sdk/middleware-recursion-detection" "3.186.0" - "@aws-sdk/middleware-retry" "3.186.0" - "@aws-sdk/middleware-serde" "3.186.0" - "@aws-sdk/middleware-stack" "3.186.0" - "@aws-sdk/middleware-user-agent" "3.186.0" - "@aws-sdk/node-config-provider" "3.186.0" - "@aws-sdk/node-http-handler" "3.186.0" - "@aws-sdk/protocol-http" "3.186.0" - "@aws-sdk/smithy-client" "3.186.0" - "@aws-sdk/types" "3.186.0" - "@aws-sdk/url-parser" "3.186.0" - "@aws-sdk/util-base64-browser" "3.186.0" - "@aws-sdk/util-base64-node" "3.186.0" - "@aws-sdk/util-body-length-browser" "3.186.0" - "@aws-sdk/util-body-length-node" "3.186.0" - "@aws-sdk/util-defaults-mode-browser" "3.186.0" - "@aws-sdk/util-defaults-mode-node" "3.186.0" - "@aws-sdk/util-user-agent-browser" "3.186.0" - "@aws-sdk/util-user-agent-node" "3.186.0" - "@aws-sdk/util-utf8-browser" "3.186.0" - "@aws-sdk/util-utf8-node" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/client-sts@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.186.0.tgz#12514601b0b01f892ddb11d8a2ab4bee1b03cbf1" - integrity sha512-lyAPI6YmIWWYZHQ9fBZ7QgXjGMTtktL5fk8kOcZ98ja+8Vu0STH1/u837uxqvZta8/k0wijunIL3jWUhjsNRcg== - dependencies: - "@aws-crypto/sha256-browser" "2.0.0" - "@aws-crypto/sha256-js" "2.0.0" - "@aws-sdk/config-resolver" "3.186.0" - "@aws-sdk/credential-provider-node" "3.186.0" - "@aws-sdk/fetch-http-handler" "3.186.0" - "@aws-sdk/hash-node" "3.186.0" - "@aws-sdk/invalid-dependency" "3.186.0" - "@aws-sdk/middleware-content-length" "3.186.0" - "@aws-sdk/middleware-host-header" "3.186.0" - "@aws-sdk/middleware-logger" "3.186.0" - "@aws-sdk/middleware-recursion-detection" "3.186.0" - "@aws-sdk/middleware-retry" "3.186.0" - "@aws-sdk/middleware-sdk-sts" "3.186.0" - "@aws-sdk/middleware-serde" "3.186.0" - "@aws-sdk/middleware-signing" "3.186.0" - "@aws-sdk/middleware-stack" "3.186.0" - "@aws-sdk/middleware-user-agent" "3.186.0" - "@aws-sdk/node-config-provider" "3.186.0" - "@aws-sdk/node-http-handler" "3.186.0" - "@aws-sdk/protocol-http" "3.186.0" - "@aws-sdk/smithy-client" "3.186.0" - "@aws-sdk/types" "3.186.0" - "@aws-sdk/url-parser" "3.186.0" - "@aws-sdk/util-base64-browser" "3.186.0" - "@aws-sdk/util-base64-node" "3.186.0" - "@aws-sdk/util-body-length-browser" "3.186.0" - "@aws-sdk/util-body-length-node" "3.186.0" - "@aws-sdk/util-defaults-mode-browser" "3.186.0" - "@aws-sdk/util-defaults-mode-node" "3.186.0" - "@aws-sdk/util-user-agent-browser" "3.186.0" - "@aws-sdk/util-user-agent-node" "3.186.0" - "@aws-sdk/util-utf8-browser" "3.186.0" - "@aws-sdk/util-utf8-node" "3.186.0" - entities "2.2.0" - fast-xml-parser "3.19.0" - tslib "^2.3.1" - -"@aws-sdk/client-textract@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-textract/-/client-textract-3.6.1.tgz#b8972f53f0353222b4c052adc784291e602be6aa" - integrity sha512-nLrBzWDt3ToiGVFF4lW7a/eZpI2zjdvu7lwmOWyXX8iiPzhBVVEfd5oOorRyJYBsGMslp4sqV8TBkU5Ld/a97Q== - dependencies: - "@aws-crypto/sha256-browser" "^1.0.0" - "@aws-crypto/sha256-js" "^1.0.0" - "@aws-sdk/config-resolver" "3.6.1" - "@aws-sdk/credential-provider-node" "3.6.1" - "@aws-sdk/fetch-http-handler" "3.6.1" - "@aws-sdk/hash-node" "3.6.1" - "@aws-sdk/invalid-dependency" "3.6.1" - "@aws-sdk/middleware-content-length" "3.6.1" - "@aws-sdk/middleware-host-header" "3.6.1" - "@aws-sdk/middleware-logger" "3.6.1" - "@aws-sdk/middleware-retry" "3.6.1" - "@aws-sdk/middleware-serde" "3.6.1" - "@aws-sdk/middleware-signing" "3.6.1" - "@aws-sdk/middleware-stack" "3.6.1" - "@aws-sdk/middleware-user-agent" "3.6.1" - "@aws-sdk/node-config-provider" "3.6.1" - "@aws-sdk/node-http-handler" "3.6.1" - "@aws-sdk/protocol-http" "3.6.1" - "@aws-sdk/smithy-client" "3.6.1" - "@aws-sdk/types" "3.6.1" - "@aws-sdk/url-parser" "3.6.1" - "@aws-sdk/url-parser-native" "3.6.1" - "@aws-sdk/util-base64-browser" "3.6.1" - "@aws-sdk/util-base64-node" "3.6.1" - "@aws-sdk/util-body-length-browser" "3.6.1" - "@aws-sdk/util-body-length-node" "3.6.1" - "@aws-sdk/util-user-agent-browser" "3.6.1" - "@aws-sdk/util-user-agent-node" "3.6.1" - "@aws-sdk/util-utf8-browser" "3.6.1" - "@aws-sdk/util-utf8-node" "3.6.1" - tslib "^2.0.0" - -"@aws-sdk/client-translate@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-translate/-/client-translate-3.6.1.tgz#ce855c9fe7885b930d4039c2e45c869e3c0a6656" - integrity sha512-RIHY+Og1i43B5aWlfUUk0ZFnNfM7j2vzlYUwOqhndawV49GFf96M3pmskR5sKEZI+5TXY77qR9TgZ/r3UxVCRQ== - dependencies: - "@aws-crypto/sha256-browser" "^1.0.0" - "@aws-crypto/sha256-js" "^1.0.0" - "@aws-sdk/config-resolver" "3.6.1" - "@aws-sdk/credential-provider-node" "3.6.1" - "@aws-sdk/fetch-http-handler" "3.6.1" - "@aws-sdk/hash-node" "3.6.1" - "@aws-sdk/invalid-dependency" "3.6.1" - "@aws-sdk/middleware-content-length" "3.6.1" - "@aws-sdk/middleware-host-header" "3.6.1" - "@aws-sdk/middleware-logger" "3.6.1" - "@aws-sdk/middleware-retry" "3.6.1" - "@aws-sdk/middleware-serde" "3.6.1" - "@aws-sdk/middleware-signing" "3.6.1" - "@aws-sdk/middleware-stack" "3.6.1" - "@aws-sdk/middleware-user-agent" "3.6.1" - "@aws-sdk/node-config-provider" "3.6.1" - "@aws-sdk/node-http-handler" "3.6.1" - "@aws-sdk/protocol-http" "3.6.1" - "@aws-sdk/smithy-client" "3.6.1" - "@aws-sdk/types" "3.6.1" - "@aws-sdk/url-parser" "3.6.1" - "@aws-sdk/url-parser-native" "3.6.1" - "@aws-sdk/util-base64-browser" "3.6.1" - "@aws-sdk/util-base64-node" "3.6.1" - "@aws-sdk/util-body-length-browser" "3.6.1" - "@aws-sdk/util-body-length-node" "3.6.1" - "@aws-sdk/util-user-agent-browser" "3.6.1" - "@aws-sdk/util-user-agent-node" "3.6.1" - "@aws-sdk/util-utf8-browser" "3.6.1" - "@aws-sdk/util-utf8-node" "3.6.1" - tslib "^2.0.0" - uuid "^3.0.0" - -"@aws-sdk/config-resolver@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/config-resolver/-/config-resolver-3.186.0.tgz#68bbf82b572f03ee3ec9ac84d000147e1050149b" - integrity sha512-l8DR7Q4grEn1fgo2/KvtIfIHJS33HGKPQnht8OPxkl0dMzOJ0jxjOw/tMbrIcPnr2T3Fi7LLcj3dY1Fo1poruQ== - dependencies: - "@aws-sdk/signature-v4" "3.186.0" - "@aws-sdk/types" "3.186.0" - "@aws-sdk/util-config-provider" "3.186.0" - "@aws-sdk/util-middleware" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/config-resolver@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/config-resolver/-/config-resolver-3.6.1.tgz#3bcc5e6a0ebeedf0981b0540e1f18a72b4dafebf" - integrity sha512-qjP1g3jLIm+XvOIJ4J7VmZRi87vsDmTRzIFePVeG+EFWwYQLxQjTGMdIj3yKTh1WuZ0HByf47mGcpiS4HZLm1Q== - dependencies: - "@aws-sdk/signature-v4" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/credential-provider-cognito-identity@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.6.1.tgz#df928951612a34832c2df15fb899251d828c2df3" - integrity sha512-uJ9q+yq+Dhdo32gcv0p/AT7sKSAUH0y4ts9XRK/vx0dW9Q3XJy99mOJlq/6fkh4LfWeavJJlaCo9lSHNMWXx4w== - dependencies: - "@aws-sdk/client-cognito-identity" "3.6.1" - "@aws-sdk/property-provider" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/credential-provider-env@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.186.0.tgz#55dec9c4c29ebbdff4f3bce72de9e98f7a1f92e1" - integrity sha512-N9LPAqi1lsQWgxzmU4NPvLPnCN5+IQ3Ai1IFf3wM6FFPNoSUd1kIA2c6xaf0BE7j5Kelm0raZOb4LnV3TBAv+g== - dependencies: - "@aws-sdk/property-provider" "3.186.0" - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/credential-provider-env@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.6.1.tgz#d8b2dd36836432a9b8ec05a5cf9fe428b04c9964" - integrity sha512-coeFf/HnhpGidcAN1i1NuFgyFB2M6DeN1zNVy4f6s4mAh96ftr9DgWM1CcE3C+cLHEdpNqleVgC/2VQpyzOBLQ== - dependencies: - "@aws-sdk/property-provider" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/credential-provider-imds@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.186.0.tgz#73e0f62832726c7734b4f6c50a02ab0d869c00e1" - integrity sha512-iJeC7KrEgPPAuXjCZ3ExYZrRQvzpSdTZopYgUm5TnNZ8S1NU/4nvv5xVy61JvMj3JQAeG8UDYYgC421Foc8wQw== - dependencies: - "@aws-sdk/node-config-provider" "3.186.0" - "@aws-sdk/property-provider" "3.186.0" - "@aws-sdk/types" "3.186.0" - "@aws-sdk/url-parser" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/credential-provider-imds@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.6.1.tgz#b5a8b8ef15eac26c58e469451a6c7c34ab3ca875" - integrity sha512-bf4LMI418OYcQbyLZRAW8Q5AYM2IKrNqOnIcfrFn2f17ulG7TzoWW3WN/kMOw4TC9+y+vIlCWOv87GxU1yP0Bg== - dependencies: - "@aws-sdk/property-provider" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/credential-provider-ini@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.186.0.tgz#3b3873ccae855ee3f6f15dcd8212c5ca4ec01bf3" - integrity sha512-ecrFh3MoZhAj5P2k/HXo/hMJQ3sfmvlommzXuZ/D1Bj2yMcyWuBhF1A83Fwd2gtYrWRrllsK3IOMM5Jr8UIVZA== - dependencies: - "@aws-sdk/credential-provider-env" "3.186.0" - "@aws-sdk/credential-provider-imds" "3.186.0" - "@aws-sdk/credential-provider-sso" "3.186.0" - "@aws-sdk/credential-provider-web-identity" "3.186.0" - "@aws-sdk/property-provider" "3.186.0" - "@aws-sdk/shared-ini-file-loader" "3.186.0" - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/credential-provider-ini@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.6.1.tgz#0da6d9341e621f8e0815814ed017b88e268fbc3d" - integrity sha512-3jguW6+ttRNddRZvbrs1yb3F1jrUbqyv0UfRoHuOGthjTt+L9sDpJaJGugYnT3bS9WBu1NydLVE2kDV++mJGVw== - dependencies: - "@aws-sdk/property-provider" "3.6.1" - "@aws-sdk/shared-ini-file-loader" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/credential-provider-node@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.186.0.tgz#0be58623660b41eed3a349a89b31a01d4cc773ea" - integrity sha512-HIt2XhSRhEvVgRxTveLCzIkd/SzEBQfkQ6xMJhkBtfJw1o3+jeCk+VysXM0idqmXytctL0O3g9cvvTHOsUgxOA== - dependencies: - "@aws-sdk/credential-provider-env" "3.186.0" - "@aws-sdk/credential-provider-imds" "3.186.0" - "@aws-sdk/credential-provider-ini" "3.186.0" - "@aws-sdk/credential-provider-process" "3.186.0" - "@aws-sdk/credential-provider-sso" "3.186.0" - "@aws-sdk/credential-provider-web-identity" "3.186.0" - "@aws-sdk/property-provider" "3.186.0" - "@aws-sdk/shared-ini-file-loader" "3.186.0" - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/credential-provider-node@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.6.1.tgz#0055292a4f0f49d053e8dfcc9174d8d2cf6862bb" - integrity sha512-VAHOcsqkPrF1k/fA62pv9c75lUWe5bHpcbFX83C3EUPd2FXV10Lfkv6bdWhyZPQy0k8T+9/yikHH3c7ZQeFE5A== - dependencies: - "@aws-sdk/credential-provider-env" "3.6.1" - "@aws-sdk/credential-provider-imds" "3.6.1" - "@aws-sdk/credential-provider-ini" "3.6.1" - "@aws-sdk/credential-provider-process" "3.6.1" - "@aws-sdk/property-provider" "3.6.1" - "@aws-sdk/shared-ini-file-loader" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/credential-provider-process@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.186.0.tgz#e3be60983261a58c212f5c38b6fb76305bbb8ce7" - integrity sha512-ATRU6gbXvWC1TLnjOEZugC/PBXHBoZgBADid4fDcEQY1vF5e5Ux1kmqkJxyHtV5Wl8sE2uJfwWn+FlpUHRX67g== - dependencies: - "@aws-sdk/property-provider" "3.186.0" - "@aws-sdk/shared-ini-file-loader" "3.186.0" - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/credential-provider-process@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.6.1.tgz#5bf851f3ee232c565b8c82608926df0ad28c1958" - integrity sha512-d0/TpMoEV4qMYkdpyyjU2Otse9X2jC1DuxWajHOWZYEw8oejMvXYTZ10hNaXZvAcNM9q214rp+k4mkt6gIcI6g== - dependencies: - "@aws-sdk/credential-provider-ini" "3.6.1" - "@aws-sdk/property-provider" "3.6.1" - "@aws-sdk/shared-ini-file-loader" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/credential-provider-sso@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.186.0.tgz#e1aa466543b3b0877d45b885a1c11b329232df22" - integrity sha512-mJ+IZljgXPx99HCmuLgBVDPLepHrwqnEEC/0wigrLCx6uz3SrAWmGZsNbxSEtb2CFSAaczlTHcU/kIl7XZIyeQ== - dependencies: - "@aws-sdk/client-sso" "3.186.0" - "@aws-sdk/property-provider" "3.186.0" - "@aws-sdk/shared-ini-file-loader" "3.186.0" - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/credential-provider-web-identity@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.186.0.tgz#db43f37f7827b553490dd865dbaa9a2c45f95494" - integrity sha512-KqzI5eBV72FE+8SuOQAu+r53RXGVHg4AuDJmdXyo7Gc4wS/B9FNElA8jVUjjYgVnf0FSiri+l41VzQ44dCopSA== - dependencies: - "@aws-sdk/property-provider" "3.186.0" - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/eventstream-codec@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-codec/-/eventstream-codec-3.186.0.tgz#9da9608866b38179edf72987f2bc3b865d11db13" - integrity sha512-3kLcJ0/H+zxFlhTlE1SGoFpzd/SitwXOsTSlYVwrwdISKRjooGg0BJpm1CSTkvmWnQIUlYijJvS96TAJ+fCPIA== - dependencies: - "@aws-crypto/crc32" "2.0.0" - "@aws-sdk/types" "3.186.0" - "@aws-sdk/util-hex-encoding" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/eventstream-handler-node@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-handler-node/-/eventstream-handler-node-3.186.0.tgz#d58aec9a8617ed1a9a3800d5526333deb3efebb2" - integrity sha512-S8eAxCHyFAGSH7F6GHKU2ckpiwFPwJUQwMzewISLg3wzLQeu6lmduxBxVaV3/SoEbEMsbNmrgw9EXtw3Vt/odQ== - dependencies: - "@aws-sdk/eventstream-codec" "3.186.0" - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/eventstream-marshaller@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-marshaller/-/eventstream-marshaller-3.6.1.tgz#6abfbdf3639249d1a77686cbcae5d8e47bcba989" - integrity sha512-ZvN3Nvxn2Gul08L9MOSN123LwSO0E1gF/CqmOGZtEWzPnoSX/PWM9mhPPeXubyw2KdlXylOodYYw3EAATk3OmA== - dependencies: - "@aws-crypto/crc32" "^1.0.0" - "@aws-sdk/types" "3.6.1" - "@aws-sdk/util-hex-encoding" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/eventstream-serde-browser@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.186.0.tgz#2a0bd942f977b3e2f1a77822ac091ddebe069475" - integrity sha512-0r2c+yugBdkP5bglGhGOgztjeHdHTKqu2u6bvTByM0nJShNO9YyqWygqPqDUOE5axcYQE1D0aFDGzDtP3mGJhw== - dependencies: - "@aws-sdk/eventstream-serde-universal" "3.186.0" - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/eventstream-serde-browser@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.6.1.tgz#1253bd5215745f79d534fc9bc6bd006ee7a0f239" - integrity sha512-J8B30d+YUfkBtgWRr7+9AfYiPnbG28zjMlFGsJf8Wxr/hDCfff+Z8NzlBYFEbS7McXXhRiIN8DHUvCtolJtWJQ== - dependencies: - "@aws-sdk/eventstream-marshaller" "3.6.1" - "@aws-sdk/eventstream-serde-universal" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/eventstream-serde-config-resolver@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.186.0.tgz#6c277058bb0fa14752f0b6d7043576e0b5f13da4" - integrity sha512-xhwCqYrAX5c7fg9COXVw6r7Sa3BO5cCfQMSR5S1QisE7do8K1GDKEHvUCheOx+RLon+P3glLjuNBMdD0HfCVNA== - dependencies: - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/eventstream-serde-config-resolver@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.6.1.tgz#ebb5c1614f55d0ebb225defac1f76c420e188086" - integrity sha512-72pCzcT/KeD4gPgRVBSQzEzz4JBim8bNwPwZCGaIYdYAsAI8YMlvp0JNdis3Ov9DFURc87YilWKQlAfw7CDJxA== - dependencies: - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/eventstream-serde-node@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.186.0.tgz#dabeab714f447790c5dd31d401c5a3822b795109" - integrity sha512-9p/gdukJYfmA+OEYd6MfIuufxrrfdt15lBDM3FODuc9j09LSYSRHSxthkIhiM5XYYaaUM+4R0ZlSMdaC3vFDFQ== - dependencies: - "@aws-sdk/eventstream-serde-universal" "3.186.0" - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/eventstream-serde-node@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.6.1.tgz#705e12bea185905a198d7812af10e3a679dfc841" - integrity sha512-rjBbJFjCrEcm2NxZctp+eJmyPxKYayG3tQZo8PEAQSViIlK5QexQI3fgqNAeCtK7l/SFAAvnOMRZF6Z3NdUY6A== - dependencies: - "@aws-sdk/eventstream-marshaller" "3.6.1" - "@aws-sdk/eventstream-serde-universal" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/eventstream-serde-universal@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.186.0.tgz#85a88a2cd5c336b1271976fa8db70654ec90fbf4" - integrity sha512-rIgPmwUxn2tzainBoh+cxAF+b7o01CcW+17yloXmawsi0kiR7QK7v9m/JTGQPWKtHSsPOrtRzuiWQNX57SlcsQ== - dependencies: - "@aws-sdk/eventstream-codec" "3.186.0" - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/eventstream-serde-universal@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.6.1.tgz#5be6865adb55436cbc90557df3a3c49b53553470" - integrity sha512-rpRu97yAGHr9GQLWMzcGICR2PxNu1dHU/MYc9Kb6UgGeZd4fod4o1zjhAJuj98cXn2xwHNFM4wMKua6B4zKrZg== - dependencies: - "@aws-sdk/eventstream-marshaller" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/fetch-http-handler@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.186.0.tgz#c1adc5f741e1ba9ad9d3fb13c9c2afdc88530a85" - integrity sha512-k2v4AAHRD76WnLg7arH94EvIclClo/YfuqO7NoQ6/KwOxjRhs4G6TgIsAZ9E0xmqoJoV81Xqy8H8ldfy9F8LEw== - dependencies: - "@aws-sdk/protocol-http" "3.186.0" - "@aws-sdk/querystring-builder" "3.186.0" - "@aws-sdk/types" "3.186.0" - "@aws-sdk/util-base64-browser" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/fetch-http-handler@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.6.1.tgz#c5fb4a4ee158161fca52b220d2c11dddcda9b092" - integrity sha512-N8l6ZbwhINuWG5hsl625lmIQmVjzsqRPmlgh061jm5D90IhsM5/3A3wUxpB/k0av1dmuMRw/m0YtBU5w4LOwvw== - dependencies: - "@aws-sdk/protocol-http" "3.6.1" - "@aws-sdk/querystring-builder" "3.6.1" - "@aws-sdk/types" "3.6.1" - "@aws-sdk/util-base64-browser" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/hash-blob-browser@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.6.1.tgz#f44a1857b75769e21cd6091211171135e03531e6" - integrity sha512-9jPaZ/e3F8gf9JZd44DD6MvbYV6bKnn99rkG3GFIINOy9etoxPrLehp2bH2DK/j0ow60RNuwgUjj5qHV/zF67g== - dependencies: - "@aws-sdk/chunked-blob-reader" "3.6.1" - "@aws-sdk/chunked-blob-reader-native" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/hash-node@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/hash-node/-/hash-node-3.186.0.tgz#8cb13aae8f46eb360fed76baf5062f66f27dfb70" - integrity sha512-G3zuK8/3KExDTxqrGqko+opOMLRF0BwcwekV/wm3GKIM/NnLhHblBs2zd/yi7VsEoWmuzibfp6uzxgFpEoJ87w== - dependencies: - "@aws-sdk/types" "3.186.0" - "@aws-sdk/util-buffer-from" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/hash-node@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/hash-node/-/hash-node-3.6.1.tgz#72d75ec3b9c7e7f9b0c498805364f1f897165ce9" - integrity sha512-iKEpzpyaG9PYCnaOGwTIf0lffsF/TpsXrzAfnBlfeOU/3FbgniW2z/yq5xBbtMDtLobtOYC09kUFwDnDvuveSA== - dependencies: - "@aws-sdk/types" "3.6.1" - "@aws-sdk/util-buffer-from" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/hash-stream-node@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/hash-stream-node/-/hash-stream-node-3.6.1.tgz#91c77e382ef3d0472160a49b1109395a4a70c801" - integrity sha512-ePaWjCItIWxuSxA/UnUM/keQ3IAOsQz3FYSxu0KK8K0e1bKTEUgDIG9oMLBq7jIl9TzJG0HBXuPfMe73QHUNug== - dependencies: - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/invalid-dependency@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/invalid-dependency/-/invalid-dependency-3.186.0.tgz#aa6331ccf404cb659ec38483116080e4b82b0663" - integrity sha512-hjeZKqORhG2DPWYZ776lQ9YO3gjw166vZHZCZU/43kEYaCZHsF4mexHwHzreAY6RfS25cH60Um7dUh1aeVIpkw== - dependencies: - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/invalid-dependency@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/invalid-dependency/-/invalid-dependency-3.6.1.tgz#fd2519f5482c6d6113d38a73b7143fd8d5b5b670" - integrity sha512-d0RLqK7yeDCZJKopnGmGXo2rYkQNE7sGKVmBHQD1j1kKZ9lWwRoJeWqo834JNPZzY5XRvZG5SuIjJ1kFy8LpyQ== - dependencies: - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/is-array-buffer@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/is-array-buffer/-/is-array-buffer-3.186.0.tgz#7700e36f29d416c2677f4bf8816120f96d87f1b7" - integrity sha512-fObm+P6mjWYzxoFY4y2STHBmSdgKbIAXez0xope563mox62I8I4hhVPUCaDVydXvDpJv8tbedJMk0meJl22+xA== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/is-array-buffer@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/is-array-buffer/-/is-array-buffer-3.6.1.tgz#96df5d64b2d599947f81b164d5d92623f85c659c" - integrity sha512-qm2iDJmCrxlQE2dsFG+TujPe7jw4DF+4RTrsFMhk/e3lOl3MAzQ6Fc2kXtgeUcVrZVFTL8fQvXE1ByYyI6WbCw== - dependencies: - tslib "^1.8.0" - -"@aws-sdk/md5-js@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/md5-js/-/md5-js-3.6.1.tgz#bffe21106fba0174d73ccc2c29ca1c5364d2af2d" - integrity sha512-lzCqkZF1sbzGFDyq1dI+lR3AmlE33rbC/JhZ5fzw3hJZvfZ6Beq3Su7YwDo65IWEu0zOKYaNywTeOloXP/CkxQ== - dependencies: - "@aws-sdk/types" "3.6.1" - "@aws-sdk/util-utf8-browser" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/middleware-apply-body-checksum@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-apply-body-checksum/-/middleware-apply-body-checksum-3.6.1.tgz#dece86e489531981b8aa2786dafbbef69edce1d6" - integrity sha512-IncmXR1MPk6aYvmD37It8dP6wVMzaxxzgrkIU2ACkN5UVwA+/0Sr3ZNd9dNwjpyoH1AwpL9BetnlJaWtT6K5ew== - dependencies: - "@aws-sdk/is-array-buffer" "3.6.1" - "@aws-sdk/protocol-http" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/middleware-bucket-endpoint@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.6.1.tgz#7ebdd79fac0f78d8af549f4fd799d4f7d02e78de" - integrity sha512-Frcqn2RQDNHy+e2Q9hv3ejT3mQWtGlfZESbXEF6toR4M0R8MmEVqIB/ohI6VKBj11lRmGwvpPsR6zz+PJ8HS7A== - dependencies: - "@aws-sdk/protocol-http" "3.6.1" - "@aws-sdk/types" "3.6.1" - "@aws-sdk/util-arn-parser" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/middleware-content-length@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-content-length/-/middleware-content-length-3.186.0.tgz#8cc7aeec527738c46fdaf4a48b17c5cbfdc7ce58" - integrity sha512-Ol3c1ks3IK1s+Okc/rHIX7w2WpXofuQdoAEme37gHeml+8FtUlWH/881h62xfMdf+0YZpRuYv/eM7lBmJBPNJw== - dependencies: - "@aws-sdk/protocol-http" "3.186.0" - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/middleware-content-length@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-content-length/-/middleware-content-length-3.6.1.tgz#f9c00a4045b2b56c1ff8bcbb3dec9c3d42332992" - integrity sha512-QRcocG9f5YjYzbjs2HjKla6ZIjvx8Y8tm1ZSFOPey81m18CLif1O7M3AtJXvxn+0zeSck9StFdhz5gfjVNYtDg== - dependencies: - "@aws-sdk/protocol-http" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/middleware-eventstream@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-eventstream/-/middleware-eventstream-3.186.0.tgz#64a66102ed2e182182473948f131f23dda84e729" - integrity sha512-7yjFiitTGgfKL6cHK3u3HYFnld26IW5aUAFuEd6ocR/FjliysfBd8g0g1bw3bRfIMgCDD8OIOkXK8iCk2iYGWQ== - dependencies: - "@aws-sdk/protocol-http" "3.186.0" - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/middleware-expect-continue@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.6.1.tgz#56e56db572f81dd4fa8803e85bd1f36005f9fffa" - integrity sha512-vvMOqVYU3uvdJzg/X6NHewZUEBZhSqND1IEcdahLb6RmvDhsS39iS97VZmEFsjj/UFGoePtYjrrdEgRG9Rm1kQ== - dependencies: - "@aws-sdk/middleware-header-default" "3.6.1" - "@aws-sdk/protocol-http" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/middleware-header-default@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-header-default/-/middleware-header-default-3.6.1.tgz#a3a108d22cbdd1e1754910625fafb2f2a67fbcfc" - integrity sha512-YD137iIctXVH8Eut0WOBalvvA+uL0jM0UXZ9N2oKrC8kPQPpqjK9lYGFKZQFsl/XlQHAjJi+gCAFrYsBntRWJQ== - dependencies: - "@aws-sdk/protocol-http" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/middleware-host-header@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.186.0.tgz#fce4f1219ce1835e2348c787d8341080b0024e34" - integrity sha512-5bTzrRzP2IGwyF3QCyMGtSXpOOud537x32htZf344IvVjrqZF/P8CDfGTkHkeBCIH+wnJxjK+l/QBb3ypAMIqQ== - dependencies: - "@aws-sdk/protocol-http" "3.186.0" - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/middleware-host-header@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.6.1.tgz#6e1b4b95c5bfea5a4416fa32f11d8fa2e6edaeff" - integrity sha512-nwq8R2fGBRZQE0Fr/jiOgqfppfiTQCUoD8hyX3qSS7Qc2uqpsDOt2TnnoZl56mpQYkF/344IvMAkp+ew6wR73w== - dependencies: - "@aws-sdk/protocol-http" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/middleware-location-constraint@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.6.1.tgz#6fc2dd6a42968f011eb060ca564e9f749649eb01" - integrity sha512-nFisTc0O5D+4I+sRxiiLPasC/I4NDc3s+hgbPPt/b3uAdrujJjhwFBOSaTx8qQvz/xJPAA8pUA/bfWIyeZKi/w== - dependencies: - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/middleware-logger@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.186.0.tgz#8a027fbbb1b8098ccc888bce51f34b000c0a0550" - integrity sha512-/1gGBImQT8xYh80pB7QtyzA799TqXtLZYQUohWAsFReYB7fdh5o+mu2rX0FNzZnrLIh2zBUNs4yaWGsnab4uXg== - dependencies: - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/middleware-logger@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.6.1.tgz#78b3732cf188d5e4df13488db6418f7f98a77d6d" - integrity sha512-zxaSLpwKlja7JvK20UsDTxPqBZUo3rbDA1uv3VWwpxzOrEWSlVZYx/KLuyGWGkx9V71ZEkf6oOWWJIstS0wyQQ== - dependencies: - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/middleware-recursion-detection@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.186.0.tgz#9d9d3212e9a954b557840bb80415987f4484487e" - integrity sha512-Za7k26Kovb4LuV5tmC6wcVILDCt0kwztwSlB991xk4vwNTja8kKxSt53WsYG8Q2wSaW6UOIbSoguZVyxbIY07Q== - dependencies: - "@aws-sdk/protocol-http" "3.186.0" - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/middleware-retry@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-retry/-/middleware-retry-3.186.0.tgz#0ff9af58d73855863683991a809b40b93c753ad1" - integrity sha512-/VI9emEKhhDzlNv9lQMmkyxx3GjJ8yPfXH3HuAeOgM1wx1BjCTLRYEWnTbQwq7BDzVENdneleCsGAp7yaj80Aw== - dependencies: - "@aws-sdk/protocol-http" "3.186.0" - "@aws-sdk/service-error-classification" "3.186.0" - "@aws-sdk/types" "3.186.0" - "@aws-sdk/util-middleware" "3.186.0" - tslib "^2.3.1" - uuid "^8.3.2" - -"@aws-sdk/middleware-retry@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-retry/-/middleware-retry-3.6.1.tgz#202aadb1a3bf0e1ceabcd8319a5fa308b32db247" - integrity sha512-WHeo4d2jsXxBP+cec2SeLb0btYXwYXuE56WLmNt0RvJYmiBzytUeGJeRa9HuwV574kgigAuHGCeHlPO36G4Y0Q== - dependencies: - "@aws-sdk/protocol-http" "3.6.1" - "@aws-sdk/service-error-classification" "3.6.1" - "@aws-sdk/types" "3.6.1" - react-native-get-random-values "^1.4.0" - tslib "^1.8.0" - uuid "^3.0.0" - -"@aws-sdk/middleware-sdk-s3@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.6.1.tgz#371f8991ac82432982153c035ab9450d8df14546" - integrity sha512-HEA9kynNTsOSIIz8p5GEEAH03pnn+SSohwPl80sGqkmI1yl1tzjqgYZRii0e6acJTh4j9655XFzSx36hYPeB2w== - dependencies: - "@aws-sdk/protocol-http" "3.6.1" - "@aws-sdk/types" "3.6.1" - "@aws-sdk/util-arn-parser" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/middleware-sdk-sts@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.186.0.tgz#18f3d6b7b42c1345b5733ac3e3119d370a403e94" - integrity sha512-GDcK0O8rjtnd+XRGnxzheq1V2jk4Sj4HtjrxW/ROyhzLOAOyyxutBt+/zOpDD6Gba3qxc69wE+Cf/qngOkEkDw== - dependencies: - "@aws-sdk/middleware-signing" "3.186.0" - "@aws-sdk/property-provider" "3.186.0" - "@aws-sdk/protocol-http" "3.186.0" - "@aws-sdk/signature-v4" "3.186.0" - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/middleware-serde@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-serde/-/middleware-serde-3.186.0.tgz#f7944241ad5fb31cb15cd250c9e92147942b9ec6" - integrity sha512-6FEAz70RNf18fKL5O7CepPSwTKJEIoyG9zU6p17GzKMgPeFsxS5xO94Hcq5tV2/CqeHliebjqhKY7yi+Pgok7g== - dependencies: - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/middleware-serde@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-serde/-/middleware-serde-3.6.1.tgz#734c7d16c2aa9ccc01f6cca5e2f6aa2993b6739d" - integrity sha512-EdQCFZRERfP3uDuWcPNuaa2WUR3qL1WFDXafhcx+7ywQxagdYqBUWKFJlLYi6njbkOKXFM+eHBzoXGF0OV3MJA== - dependencies: - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/middleware-signing@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.186.0.tgz#37633bf855667b4841464e0044492d0aec5778b9" - integrity sha512-riCJYG/LlF/rkgVbHkr4xJscc0/sECzDivzTaUmfb9kJhAwGxCyNqnTvg0q6UO00kxSdEB9zNZI2/iJYVBijBQ== - dependencies: - "@aws-sdk/property-provider" "3.186.0" - "@aws-sdk/protocol-http" "3.186.0" - "@aws-sdk/signature-v4" "3.186.0" - "@aws-sdk/types" "3.186.0" - "@aws-sdk/util-middleware" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/middleware-signing@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.6.1.tgz#e70a2f35d85d70e33c9fddfb54b9520f6382db16" - integrity sha512-1woKq+1sU3eausdl8BNdAMRZMkSYuy4mxhLsF0/qAUuLwo1eJLLUCOQp477tICawgu4O4q2OAyUHk7wMqYnQCg== - dependencies: - "@aws-sdk/protocol-http" "3.6.1" - "@aws-sdk/signature-v4" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/middleware-ssec@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.6.1.tgz#c7dd80e4c1e06be9050c742af7879619b400f0d1" - integrity sha512-svuH6s91uKUTORt51msiL/ZBjtYSW32c3uVoWxludd/PEf6zO5wCmUEsKoyVwa88L7rrCq+81UBv5A8S5kc3Cw== - dependencies: - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/middleware-stack@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-stack/-/middleware-stack-3.186.0.tgz#da3445fe74b867ee6d7eec4f0dde28aaca1125d6" - integrity sha512-fENMoo0pW7UBrbuycPf+3WZ+fcUgP9PnQ0jcOK3WWZlZ9d2ewh4HNxLh4EE3NkNYj4VIUFXtTUuVNHlG8trXjQ== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/middleware-stack@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-stack/-/middleware-stack-3.6.1.tgz#d7483201706bb5935a62884e9b60f425f1c6434f" - integrity sha512-EPsIxMi8LtCt7YwTFpWGlVGYJc0q4kwFbOssY02qfqdCnyqi2y5wo089dH7OdxUooQ0D7CPsXM1zTTuzvm+9Fw== - dependencies: - tslib "^1.8.0" - -"@aws-sdk/middleware-user-agent@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.186.0.tgz#6d881e9cea5fe7517e220f3a47c2f3557c7f27fc" - integrity sha512-fb+F2PF9DLKOVMgmhkr+ltN8ZhNJavTla9aqmbd01846OLEaN1n5xEnV7p8q5+EznVBWDF38Oz9Ae5BMt3Hs7w== - dependencies: - "@aws-sdk/protocol-http" "3.186.0" - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/middleware-user-agent@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.6.1.tgz#6845dfb3bc6187897f348c2c87dec833e6a65c99" - integrity sha512-YvXvwllNDVvxQ30vIqLsx+P6jjnfFEQUmhlv64n98gOme6h2BqoyQDcC3yHRGctuxRZEsR7W/H1ASTKC+iabbQ== - dependencies: - "@aws-sdk/protocol-http" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/node-config-provider@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/node-config-provider/-/node-config-provider-3.186.0.tgz#64259429d39f2ef5a76663162bf2e8db6032a322" - integrity sha512-De93mgmtuUUeoiKXU8pVHXWKPBfJQlS/lh1k2H9T2Pd9Tzi0l7p5ttddx4BsEx4gk+Pc5flNz+DeptiSjZpa4A== - dependencies: - "@aws-sdk/property-provider" "3.186.0" - "@aws-sdk/shared-ini-file-loader" "3.186.0" - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/node-config-provider@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/node-config-provider/-/node-config-provider-3.6.1.tgz#cb85d06329347fde566f08426f8714b1f65d2fb7" - integrity sha512-x2Z7lm0ZhHYqMybvkaI5hDKfBkaLaXhTDfgrLl9TmBZ3QHO4fIHgeL82VZ90Paol+OS+jdq2AheLmzbSxv3HrA== - dependencies: - "@aws-sdk/property-provider" "3.6.1" - "@aws-sdk/shared-ini-file-loader" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/node-http-handler@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/node-http-handler/-/node-http-handler-3.186.0.tgz#8be1598a9187637a767dc337bf22fe01461e86eb" - integrity sha512-CbkbDuPZT9UNJ4dAZJWB3BV+Z65wFy7OduqGkzNNrKq6ZYMUfehthhUOTk8vU6RMe/0FkN+J0fFXlBx/bs/cHw== - dependencies: - "@aws-sdk/abort-controller" "3.186.0" - "@aws-sdk/protocol-http" "3.186.0" - "@aws-sdk/querystring-builder" "3.186.0" - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/node-http-handler@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/node-http-handler/-/node-http-handler-3.6.1.tgz#4b65c4dcc0cf46ba44cb6c3bf29c5f817bb8d9a7" - integrity sha512-6XSaoqbm9ZF6T4UdBCcs/Gn2XclwBotkdjj46AxO+9vRAgZDP+lH/8WwZsvfqJhhRhS0qxWrks98WGJwmaTG8g== - dependencies: - "@aws-sdk/abort-controller" "3.6.1" - "@aws-sdk/protocol-http" "3.6.1" - "@aws-sdk/querystring-builder" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/property-provider@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/property-provider/-/property-provider-3.186.0.tgz#af41e615662a2749d3ff7da78c41f79f4be95b3b" - integrity sha512-nWKqt36UW3xV23RlHUmat+yevw9up+T+953nfjcmCBKtgWlCWu/aUzewTRhKj3VRscbN+Wer95SBw9Lr/MMOlQ== - dependencies: - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/property-provider@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/property-provider/-/property-provider-3.6.1.tgz#d973fc87d199d32c44d947e17f2ee2dd140a9593" - integrity sha512-2gR2DzDySXKFoj9iXLm1TZBVSvFIikEPJsbRmAZx5RBY+tp1IXWqZM6PESjaLdLg/ZtR0QhW2ZcRn0fyq2JfnQ== - dependencies: - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/protocol-http@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/protocol-http/-/protocol-http-3.186.0.tgz#99115870846312dd4202b5e2cc68fe39324b9bfa" - integrity sha512-l/KYr/UBDUU5ginqTgHtFfHR3X6ljf/1J1ThIiUg3C3kVC/Zwztm7BEOw8hHRWnWQGU/jYasGYcrcPLdQqFZyQ== - dependencies: - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/protocol-http@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/protocol-http/-/protocol-http-3.6.1.tgz#d3d276846bec19ddb339d06bbc48116d17bbc656" - integrity sha512-WkQz7ncVYTLvCidDfXWouDzqxgSNPZDz3Bql+7VhZeITnzAEcr4hNMyEqMAVYBVugGmkG2W6YiUqNNs1goOcDA== - dependencies: - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/querystring-builder@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-builder/-/querystring-builder-3.186.0.tgz#a380db0e1c71004932d9e2f3e6dc6761d1165c47" - integrity sha512-mweCpuLufImxfq/rRBTEpjGuB4xhQvbokA+otjnUxlPdIobytLqEs7pCGQfLzQ7+1ZMo8LBXt70RH4A2nSX/JQ== - dependencies: - "@aws-sdk/types" "3.186.0" - "@aws-sdk/util-uri-escape" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/querystring-builder@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-builder/-/querystring-builder-3.6.1.tgz#4c769829a3760ef065d0d3801f297a7f0cd324d4" - integrity sha512-ESe255Yl6vB1AMNqaGSQow3TBYYnpw0AFjE40q2VyiNrkbaqKmW2EzjeCy3wEmB1IfJDHy3O12ZOMUMOnjFT8g== - dependencies: - "@aws-sdk/types" "3.6.1" - "@aws-sdk/util-uri-escape" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/querystring-parser@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-parser/-/querystring-parser-3.186.0.tgz#4db6d31ad4df0d45baa2a35e371fbaa23e45ddd2" - integrity sha512-0iYfEloghzPVXJjmnzHamNx1F1jIiTW9Svy5ZF9LVqyr/uHZcQuiWYsuhWloBMLs8mfWarkZM02WfxZ8buAuhg== - dependencies: - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/querystring-parser@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-parser/-/querystring-parser-3.6.1.tgz#e3fa5a710429c7dd411e802a0b82beb48012cce2" - integrity sha512-hh6dhqamKrWWaDSuO2YULci0RGwJWygoy8hpCRxs/FpzzHIcbm6Cl6Jhrn5eKBzOBv+PhCcYwbfad0kIZZovcQ== - dependencies: - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/s3-request-presigner@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.6.1.tgz#ec83c70171692862a7f7ebbd151242a5af443695" - integrity sha512-OI7UHCKBwuiO/RmHHewBKnL2NYqdilXRmpX67TJ4tTszIrWP2+vpm3lIfrx/BM8nf8nKTzgkO98uFhoJsEhmTg== - dependencies: - "@aws-sdk/protocol-http" "3.6.1" - "@aws-sdk/signature-v4" "3.6.1" - "@aws-sdk/smithy-client" "3.6.1" - "@aws-sdk/types" "3.6.1" - "@aws-sdk/util-create-request" "3.6.1" - "@aws-sdk/util-format-url" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/service-error-classification@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/service-error-classification/-/service-error-classification-3.186.0.tgz#6e4e1d4b53d68bd28c28d9cf0b3b4cb6a6a59dbb" - integrity sha512-DRl3ORk4tF+jmH5uvftlfaq0IeKKpt0UPAOAFQ/JFWe+TjOcQd/K+VC0iiIG97YFp3aeFmH1JbEgsNxd+8fdxw== - -"@aws-sdk/service-error-classification@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/service-error-classification/-/service-error-classification-3.6.1.tgz#296fe62ac61338341e8a009c9a2dab013a791903" - integrity sha512-kZ7ZhbrN1f+vrSRkTJvXsu7BlOyZgym058nPA745+1RZ1Rtv4Ax8oknf2RvJyj/1qRUi8LBaAREjzQ3C8tmLBA== - -"@aws-sdk/shared-ini-file-loader@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.186.0.tgz#a2d285bb3c4f8d69f7bfbde7a5868740cd3f7795" - integrity sha512-2FZqxmICtwN9CYid4dwfJSz/gGFHyStFQ3HCOQ8DsJUf2yREMSBsVmKqsyWgOrYcQ98gPcD5GIa7QO5yl3XF6A== - dependencies: - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/shared-ini-file-loader@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.6.1.tgz#2b7182cbb0d632ad7c9712bebffdeee24a6f7eb6" - integrity sha512-BnLHtsNLOoow6rPV+QVi6jnovU5g1m0YzoUG0BQYZ1ALyVlWVr0VvlUX30gMDfdYoPMp+DHvF8GXdMuGINq6kQ== - dependencies: - tslib "^1.8.0" - -"@aws-sdk/signature-v4@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-3.186.0.tgz#bbd56e71af95548abaeec6307ea1dfe7bd26b4e4" - integrity sha512-18i96P5c4suMqwSNhnEOqhq4doqqyjH4fn0YV3F8TkekHPIWP4mtIJ0PWAN4eievqdtcKgD/GqVO6FaJG9texw== - dependencies: - "@aws-sdk/is-array-buffer" "3.186.0" - "@aws-sdk/types" "3.186.0" - "@aws-sdk/util-hex-encoding" "3.186.0" - "@aws-sdk/util-middleware" "3.186.0" - "@aws-sdk/util-uri-escape" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/signature-v4@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-3.6.1.tgz#b20a3cf3e891131f83b012651f7d4af2bf240611" - integrity sha512-EAR0qGVL4AgzodZv4t+BSuBfyOXhTNxDxom50IFI1MqidR9vI6avNZKcPHhgXbm7XVcsDGThZKbzQ2q7MZ2NTA== - dependencies: - "@aws-sdk/is-array-buffer" "3.6.1" - "@aws-sdk/types" "3.6.1" - "@aws-sdk/util-hex-encoding" "3.6.1" - "@aws-sdk/util-uri-escape" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/smithy-client@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/smithy-client/-/smithy-client-3.186.0.tgz#67514544fb55d7eff46300e1e73311625cf6f916" - integrity sha512-rdAxSFGSnrSprVJ6i1BXi65r4X14cuya6fYe8dSdgmFSa+U2ZevT97lb3tSINCUxBGeMXhENIzbVGkRZuMh+DQ== - dependencies: - "@aws-sdk/middleware-stack" "3.186.0" - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/smithy-client@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/smithy-client/-/smithy-client-3.6.1.tgz#683fef89802e318922f8529a5433592d71a7ce9d" - integrity sha512-AVpRK4/iUxNeDdAm8UqP0ZgtgJMQeWcagTylijwelhWXyXzHUReY1sgILsWcdWnoy6gq845W7K2VBhBleni8+w== - dependencies: - "@aws-sdk/middleware-stack" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/types@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.186.0.tgz#f6fb6997b6a364f399288bfd5cd494bc680ac922" - integrity sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ== - -"@aws-sdk/types@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.6.1.tgz#00686db69e998b521fcd4a5f81ef0960980f80c4" - integrity sha512-4Dx3eRTrUHLxhFdLJL8zdNGzVsJfAxtxPYYGmIddUkO2Gj3WA1TGjdfG4XN/ClI6e1XonCHafQX3UYO/mgnH3g== - -"@aws-sdk/types@^3.1.0", "@aws-sdk/types@^3.110.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.272.0.tgz#83670e4009c2e72f1fdf55816c55c9f8b5935e0a" - integrity sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/url-parser-native@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/url-parser-native/-/url-parser-native-3.6.1.tgz#a5e787f98aafa777e73007f9490df334ef3389a2" - integrity sha512-3O+ktsrJoE8YQCho9L41YXO8EWILXrSeES7amUaV3mgIV5w4S3SB/r4RkmylpqRpQF7Ry8LFiAnMqH1wa4WBPA== - dependencies: - "@aws-sdk/querystring-parser" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - url "^0.11.0" - -"@aws-sdk/url-parser@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/url-parser/-/url-parser-3.186.0.tgz#e42f845cd405c1920fdbdcc796a350d4ace16ae9" - integrity sha512-jfdJkKqJZp8qjjwEjIGDqbqTuajBsddw02f86WiL8bPqD8W13/hdqbG4Fpwc+Bm6GwR6/4MY6xWXFnk8jDUKeA== - dependencies: - "@aws-sdk/querystring-parser" "3.186.0" - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/url-parser@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/url-parser/-/url-parser-3.6.1.tgz#f5d89fb21680469a61cb9fe08a7da3ef887884dd" - integrity sha512-pWFIePDx0PMCleQRsQDWoDl17YiijOLj0ZobN39rQt+wv5PhLSZDz9PgJsqS48nZ6hqsKgipRcjiBMhn5NtFcQ== - dependencies: - "@aws-sdk/querystring-parser" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/util-arn-parser@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.6.1.tgz#aa60b1bfa752ad3fa331f22fea4f703b741d1d6d" - integrity sha512-NFdYeuhaSrgnBG6Pt3zHNU7QwvhHq6sKUTWZShUayLMJYYbQr6IjmYVlPST4c84b+lyDoK68y/Zga621VfIdBg== - dependencies: - tslib "^1.8.0" - -"@aws-sdk/util-base64-browser@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-base64-browser/-/util-base64-browser-3.186.0.tgz#0310482752163fa819718ce9ea9250836b20346d" - integrity sha512-TpQL8opoFfzTwUDxKeon/vuc83kGXpYqjl6hR8WzmHoQgmFfdFlV+0KXZOohra1001OP3FhqvMqaYbO8p9vXVQ== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/util-base64-browser@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-base64-browser/-/util-base64-browser-3.6.1.tgz#eddea1311b41037fc3fddd889d3e0a9882363215" - integrity sha512-+DHAIgt0AFARDVC7J0Z9FkSmJhBMlkYdOPeAAgO0WaQoKj7rtsLQJ7P3v3aS1paKN5/sk5xNY7ziVB6uHtOvHA== - dependencies: - tslib "^1.8.0" - -"@aws-sdk/util-base64-node@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-base64-node/-/util-base64-node-3.186.0.tgz#500bd04b1ef7a6a5c0a2d11c0957a415922e05c7" - integrity sha512-wH5Y/EQNBfGS4VkkmiMyZXU+Ak6VCoFM1GKWopV+sj03zR2D4FHexi4SxWwEBMpZCd6foMtihhbNBuPA5fnh6w== - dependencies: - "@aws-sdk/util-buffer-from" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/util-base64-node@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-base64-node/-/util-base64-node-3.6.1.tgz#a79c233861e50d3a30728c72b736afdee07d4009" - integrity sha512-oiqzpsvtTSS92+cL3ykhGd7t3qBJKeHvrgOwUyEf1wFWHQ2DPJR+dIMy5rMFRXWLKCl3w7IddY2rJCkLYMjaqQ== - dependencies: - "@aws-sdk/util-buffer-from" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/util-body-length-browser@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.186.0.tgz#a898eda9f874f6974a9c5c60fcc76bcb6beac820" - integrity sha512-zKtjkI/dkj9oGkjo+7fIz+I9KuHrVt1ROAeL4OmDESS8UZi3/O8uMDFMuCp8jft6H+WFuYH6qRVWAVwXMiasXw== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/util-body-length-browser@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.6.1.tgz#2e8088f2d9a5a8258b4f56079a8890f538c2797e" - integrity sha512-IdWwE3rm/CFDk2F+IwTZOFTnnNW5SB8y1lWiQ54cfc7y03hO6jmXNnpZGZ5goHhT+vf1oheNQt1J47m0pM/Irw== - dependencies: - tslib "^1.8.0" - -"@aws-sdk/util-body-length-node@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-node/-/util-body-length-node-3.186.0.tgz#95efbacbd13cb739b942c126c5d16ecf6712d4db" - integrity sha512-U7Ii8u8Wvu9EnBWKKeuwkdrWto3c0j7LG677Spe6vtwWkvY70n9WGfiKHTgBpVeLNv8jvfcx5+H0UOPQK1o9SQ== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/util-body-length-node@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-node/-/util-body-length-node-3.6.1.tgz#6e4f2eae46c5a7b0417a12ca7f4b54c390d4cacd" - integrity sha512-CUG3gc18bSOsqViQhB3M4AlLpAWV47RE6yWJ6rLD0J6/rSuzbwbjzxM39q0YTAVuSo/ivdbij+G9c3QCirC+QQ== - dependencies: - tslib "^1.8.0" - -"@aws-sdk/util-buffer-from@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-buffer-from/-/util-buffer-from-3.186.0.tgz#01f7edb683d2f40374d0ca8ef2d16346dc8040a1" - integrity sha512-be2GCk2lsLWg/2V5Y+S4/9pOMXhOQo4DR4dIqBdR2R+jrMMHN9Xsr5QrkT6chcqLaJ/SBlwiAEEi3StMRmCOXA== - dependencies: - "@aws-sdk/is-array-buffer" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/util-buffer-from@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-buffer-from/-/util-buffer-from-3.6.1.tgz#24184ce74512f764d84002201b7f5101565e26f9" - integrity sha512-OGUh2B5NY4h7iRabqeZ+EgsrzE1LUmNFzMyhoZv0tO4NExyfQjxIYXLQQvydeOq9DJUbCw+yrRZrj8vXNDQG+g== - dependencies: - "@aws-sdk/is-array-buffer" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/util-config-provider@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-config-provider/-/util-config-provider-3.186.0.tgz#52ce3711edceadfac1b75fccc7c615e90c33fb2f" - integrity sha512-71Qwu/PN02XsRLApyxG0EUy/NxWh/CXxtl2C7qY14t+KTiRapwbDkdJ1cMsqYqghYP4BwJoj1M+EFMQSSlkZQQ== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/util-create-request@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-create-request/-/util-create-request-3.6.1.tgz#ecc4364551c7b3d0d9834ca3f56528fb8b083838" - integrity sha512-jR1U8WpwXl+xZ9ThS42Jr5MXuegQ7QioHsZjQn3V5pbm8CXTkBF0B2BcULQu/2G1XtHOJb8qUZQlk/REoaORfQ== - dependencies: - "@aws-sdk/middleware-stack" "3.6.1" - "@aws-sdk/smithy-client" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/util-defaults-mode-browser@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.186.0.tgz#d30b2f572e273d7d98287274c37c9ee00b493507" - integrity sha512-U8GOfIdQ0dZ7RRVpPynGteAHx4URtEh+JfWHHVfS6xLPthPHWTbyRhkQX++K/F8Jk+T5U8Anrrqlea4TlcO2DA== - dependencies: - "@aws-sdk/property-provider" "3.186.0" - "@aws-sdk/types" "3.186.0" - bowser "^2.11.0" - tslib "^2.3.1" - -"@aws-sdk/util-defaults-mode-node@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.186.0.tgz#8572453ba910fd2ab08d2cfee130ce5a0db83ba7" - integrity sha512-N6O5bpwCiE4z8y7SPHd7KYlszmNOYREa+mMgtOIXRU3VXSEHVKVWTZsHKvNTTHpW0qMqtgIvjvXCo3vsch5l3A== - dependencies: - "@aws-sdk/config-resolver" "3.186.0" - "@aws-sdk/credential-provider-imds" "3.186.0" - "@aws-sdk/node-config-provider" "3.186.0" - "@aws-sdk/property-provider" "3.186.0" - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/util-format-url@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-format-url/-/util-format-url-3.6.1.tgz#a011444aed0c47698d65095bcce95d7b4716324b" - integrity sha512-FvhcXcqLyJ0j0WdlmGs7PtjCCv8NaY4zBuXYO2iwAmqoy2SIZXQL63uAvmilqWj25q47ASAsUwSFLReCCfMklQ== - dependencies: - "@aws-sdk/querystring-builder" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/util-hex-encoding@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.186.0.tgz#7ed58b923997c6265f4dce60c8704237edb98895" - integrity sha512-UL9rdgIZz1E/jpAfaKH8QgUxNK9VP5JPgoR0bSiaefMjnsoBh0x/VVMsfUyziOoJCMLebhJzFowtwrSKEGsxNg== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/util-hex-encoding@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.6.1.tgz#84954fcc47b74ffbd2911ba5113e93bd9b1c6510" - integrity sha512-pzsGOHtU2eGca4NJgFg94lLaeXDOg8pcS9sVt4f9LmtUGbrqRveeyBv0XlkHeZW2n0IZBssPHipVYQFlk7iaRA== - dependencies: - tslib "^1.8.0" - -"@aws-sdk/util-locate-window@^3.0.0": - version "3.208.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz#0f598fc238a1256e4bcb64d01459f03a922dd4c3" - integrity sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/util-middleware@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-middleware/-/util-middleware-3.186.0.tgz#ba2e286b206cbead306b6d2564f9d0495f384b40" - integrity sha512-fddwDgXtnHyL9mEZ4s1tBBsKnVQHqTUmFbZKUUKPrg9CxOh0Y/zZxEa5Olg/8dS/LzM1tvg0ATkcyd4/kEHIhg== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/util-uri-escape@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-uri-escape/-/util-uri-escape-3.186.0.tgz#1752a93dfe58ec88196edb6929806807fd8986da" - integrity sha512-imtOrJFpIZAipAg8VmRqYwv1G/x4xzyoxOJ48ZSn1/ZGnKEEnB6n6E9gwYRebi4mlRuMSVeZwCPLq0ey5hReeQ== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/util-uri-escape@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-uri-escape/-/util-uri-escape-3.6.1.tgz#433e87458bb510d0e457a86c0acf12b046a5068c" - integrity sha512-tgABiT71r0ScRJZ1pMX0xO0QPMMiISCtumph50IU5VDyZWYgeIxqkMhIcrL1lX0QbNCMgX0n6rZxGrrbjDNavA== - dependencies: - tslib "^1.8.0" - -"@aws-sdk/util-user-agent-browser@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.186.0.tgz#02e214887d30a69176c6a6c2d6903ce774b013b4" - integrity sha512-fbRcTTutMk4YXY3A2LePI4jWSIeHOT8DaYavpc/9Xshz/WH9RTGMmokeVOcClRNBeDSi5cELPJJ7gx6SFD3ZlQ== - dependencies: - "@aws-sdk/types" "3.186.0" - bowser "^2.11.0" - tslib "^2.3.1" - -"@aws-sdk/util-user-agent-browser@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.6.1.tgz#11b9cc8743392761adb304460f4b54ec8acc2ee6" - integrity sha512-KhJ4VED4QpuBVPXoTjb5LqspX1xHWJTuL8hbPrKfxj+cAaRRW2CNEe7PPy2CfuHtPzP3dU3urtGTachbwNb0jg== - dependencies: - "@aws-sdk/types" "3.6.1" - bowser "^2.11.0" - tslib "^1.8.0" - -"@aws-sdk/util-user-agent-node@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.186.0.tgz#1ef74973442c8650c7b64ff2fd15cf3c09d8c004" - integrity sha512-oWZR7hN6NtOgnT6fUvHaafgbipQc2xJCRB93XHiF9aZGptGNLJzznIOP7uURdn0bTnF73ejbUXWLQIm8/6ue6w== - dependencies: - "@aws-sdk/node-config-provider" "3.186.0" - "@aws-sdk/types" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/util-user-agent-node@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.6.1.tgz#98384095fa67d098ae7dd26f3ccaad028e8aebb6" - integrity sha512-PWwL5EDRwhkXX40m5jjgttlBmLA7vDhHBen1Jcle0RPIDFRVPSE7GgvLF3y4r3SNH0WD6hxqadT50bHQynXW6w== - dependencies: - "@aws-sdk/node-config-provider" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/util-utf8-browser@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.186.0.tgz#5fee6385cfc3effa2be704edc2998abfd6633082" - integrity sha512-n+IdFYF/4qT2WxhMOCeig8LndDggaYHw3BJJtfIBZRiS16lgwcGYvOUmhCkn0aSlG1f/eyg9YZHQG0iz9eLdHQ== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/util-utf8-browser@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.6.1.tgz#97a8770cae9d29218adc0f32c7798350261377c7" - integrity sha512-gZPySY6JU5gswnw3nGOEHl3tYE7vPKvtXGYoS2NRabfDKRejFvu+4/nNW6SSpoOxk6LSXsrWB39NO51k+G4PVA== - dependencies: - tslib "^1.8.0" - -"@aws-sdk/util-utf8-browser@^3.0.0": - version "3.259.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" - integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/util-utf8-node@3.186.0": - version "3.186.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-node/-/util-utf8-node-3.186.0.tgz#722d9b0f5675ae2e9d79cf67322126d9c9d8d3d8" - integrity sha512-7qlE0dOVdjuRbZTb7HFywnHHCrsN7AeQiTnsWT63mjXGDbPeUWQQw3TrdI20um3cxZXnKoeudGq8K6zbXyQ4iA== - dependencies: - "@aws-sdk/util-buffer-from" "3.186.0" - tslib "^2.3.1" - -"@aws-sdk/util-utf8-node@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-node/-/util-utf8-node-3.6.1.tgz#18534c2069b61f5739ee4cdc70060c9f4b4c4c4f" - integrity sha512-4s0vYfMUn74XLn13rUUhNsmuPMh0j1d4rF58wXtjlVUU78THxonnN8mbCLC48fI3fKDHTmDDkeEqy7+IWP9VyA== - dependencies: - "@aws-sdk/util-buffer-from" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/util-waiter@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-waiter/-/util-waiter-3.6.1.tgz#5c66c2da33ff98468726fefddc2ca7ac3352c17d" - integrity sha512-CQMRteoxW1XZSzPBVrTsOTnfzsEGs8N/xZ8BuBnXLBjoIQmRKVxIH9lgphm1ohCtVHoSWf28XH/KoOPFULQ4Tg== - dependencies: - "@aws-sdk/abort-controller" "3.6.1" - "@aws-sdk/types" "3.6.1" - tslib "^1.8.0" - -"@aws-sdk/xml-builder@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.6.1.tgz#d85d7db5e8e30ba74de93ddf0cf6197e6e4b15ea" - integrity sha512-+HOCH4a0XO+I09okd0xdVP5Q5c9ZsEsDvnogiOcBQxoMivWhPUCo9pjXP3buCvVKP2oDHXQplBKSjGHvGaKFdg== - dependencies: - tslib "^1.8.0" - -"@babel/code-frame@^7.0.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/helper-validator-identifier@^7.18.6": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== - -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/runtime@^7.13.10": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673" - integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw== - dependencies: - regenerator-runtime "^0.13.11" - -"@floating-ui/core@^0.7.3": - version "0.7.3" - resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-0.7.3.tgz#d274116678ffae87f6b60e90f88cc4083eefab86" - integrity sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg== - -"@floating-ui/dom@^0.5.3": - version "0.5.4" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-0.5.4.tgz#4eae73f78bcd4bd553ae2ade30e6f1f9c73fe3f1" - integrity sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg== - dependencies: - "@floating-ui/core" "^0.7.3" - -"@floating-ui/react-dom@0.7.2": - version "0.7.2" - resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-0.7.2.tgz#0bf4ceccb777a140fc535c87eb5d6241c8e89864" - integrity sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg== - dependencies: - "@floating-ui/dom" "^0.5.3" - use-isomorphic-layout-effect "^1.1.1" - -"@jridgewell/gen-mapping@^0.3.0": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/source-map@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" - integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - -"@jridgewell/trace-mapping@^0.3.9": - version "0.3.17" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" - integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - -"@lezer/common@^0.15.0", "@lezer/common@^0.15.7": - version "0.15.12" - resolved "https://registry.yarnpkg.com/@lezer/common/-/common-0.15.12.tgz#2f21aec551dd5fd7d24eb069f90f54d5bc6ee5e9" - integrity sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig== - -"@lezer/lr@^0.15.4": - version "0.15.8" - resolved "https://registry.yarnpkg.com/@lezer/lr/-/lr-0.15.8.tgz#1564a911e62b0a0f75ca63794a6aa8c5dc63db21" - integrity sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg== - dependencies: - "@lezer/common" "^0.15.0" - -"@lmdb/lmdb-darwin-arm64@2.5.2": - version "2.5.2" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.5.2.tgz#bc66fa43286b5c082e8fee0eacc17995806b6fbe" - integrity sha512-+F8ioQIUN68B4UFiIBYu0QQvgb9FmlKw2ctQMSBfW2QBrZIxz9vD9jCGqTCPqZBRbPHAS/vG1zSXnKqnS2ch/A== - -"@lmdb/lmdb-darwin-x64@2.5.2": - version "2.5.2" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.5.2.tgz#89d8390041bce6bab24a82a20392be22faf54ffc" - integrity sha512-KvPH56KRLLx4KSfKBx0m1r7GGGUMXm0jrKmNE7plbHlesZMuPJICtn07HYgQhj1LNsK7Yqwuvnqh1QxhJnF1EA== - -"@lmdb/lmdb-linux-arm64@2.5.2": - version "2.5.2" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.5.2.tgz#14fe4c96c2bb1285f93797f45915fa35ee047268" - integrity sha512-aLl89VHL/wjhievEOlPocoefUyWdvzVrcQ/MHQYZm2JfV1jUsrbr/ZfkPPUFvZBf+VSE+Q0clWs9l29PCX1hTQ== - -"@lmdb/lmdb-linux-arm@2.5.2": - version "2.5.2" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.5.2.tgz#05bde4573ab10cf21827339fe687148f2590cfa1" - integrity sha512-5kQAP21hAkfW5Bl+e0P57dV4dGYnkNIpR7f/GAh6QHlgXx+vp/teVj4PGRZaKAvt0GX6++N6hF8NnGElLDuIDw== - -"@lmdb/lmdb-linux-x64@2.5.2": - version "2.5.2" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.5.2.tgz#d2f85afd857d2c33d2caa5b057944574edafcfee" - integrity sha512-xUdUfwDJLGjOUPH3BuPBt0NlIrR7f/QHKgu3GZIXswMMIihAekj2i97oI0iWG5Bok/b+OBjHPfa8IU9velnP/Q== - -"@lmdb/lmdb-win32-x64@2.5.2": - version "2.5.2" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.5.2.tgz#28f643fbc0bec30b07fbe95b137879b6b4d1c9c5" - integrity sha512-zrBczSbXKxEyK2ijtbRdICDygRqWSRPpZMN5dD1T8VMEW5RIhIbwFWw2phDRXuBQdVDpSjalCIUMWMV2h3JaZA== - -"@mapbox/extent@0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@mapbox/extent/-/extent-0.4.0.tgz#3e591f32e1f0c3981c864239f7b0ac06e610f8a9" - integrity sha512-MSoKw3qPceGuupn04sdaJrFeLKvcSETVLZCGS8JA9x6zXQL3FWiKaIXYIZEDXd5jpXpWlRxinCZIN49yRy0C9A== - -"@mapbox/geojson-area@^0.2.2": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@mapbox/geojson-area/-/geojson-area-0.2.2.tgz#18d7814aa36bf23fbbcc379f8e26a22927debf10" - integrity sha512-bBqqFn1kIbLBfn7Yq1PzzwVkPYQr9lVUeT8Dhd0NL5n76PBuXzOcuLV7GOSbEB1ia8qWxH4COCvFpziEu/yReA== - dependencies: - wgs84 "0.0.0" - -"@mapbox/geojson-coords@0.0.2": - version "0.0.2" - resolved "https://registry.yarnpkg.com/@mapbox/geojson-coords/-/geojson-coords-0.0.2.tgz#f73d5744c832de0f05c48899f16a4288cefb2606" - integrity sha512-YuVzpseee/P1T5BWyeVVPppyfmuXYHFwZHmybkqaMfu4BWlOf2cmMGKj2Rr92MwfSTOCSUA0PAsVGRG8akY0rg== - dependencies: - "@mapbox/geojson-normalize" "0.0.1" - geojson-flatten "^1.0.4" - -"@mapbox/geojson-extent@^1.0.0", "@mapbox/geojson-extent@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@mapbox/geojson-extent/-/geojson-extent-1.0.1.tgz#bd99a6b66ba98e63a29511c9cd1bbd1df4c1e203" - integrity sha512-hh8LEO3djT4fqfr8sSC6wKt+p0TMiu+KOLMBUiFOyj+zGq7+IXwQGl0ppCVDkyzCewyd9LoGe9zAvDxXrLfhLw== - dependencies: - "@mapbox/extent" "0.4.0" - "@mapbox/geojson-coords" "0.0.2" - rw "~0.1.4" - traverse "~0.6.6" - -"@mapbox/geojson-normalize@0.0.1", "@mapbox/geojson-normalize@^0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@mapbox/geojson-normalize/-/geojson-normalize-0.0.1.tgz#1da1e6b3a7add3ad29909b30f438f60581b7cd80" - integrity sha512-82V7YHcle8lhgIGqEWwtXYN5cy0QM/OHq3ypGhQTbvHR57DF0vMHMjjVSQKFfVXBe/yWCBZTyOuzvK7DFFnx5Q== - -"@mapbox/geojson-rewind@^0.5.0", "@mapbox/geojson-rewind@^0.5.1": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz#591a5d71a9cd1da1a0bf3420b3bea31b0fc7946a" - integrity sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA== - dependencies: - get-stream "^6.0.1" - minimist "^1.2.6" - -"@mapbox/geojson-types@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz#9aecf642cb00eab1080a57c4f949a65b4a5846d6" - integrity sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw== - -"@mapbox/jsonlint-lines-primitives@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz#ce56e539f83552b58d10d672ea4d6fc9adc7b234" - integrity sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ== - -"@mapbox/mapbox-gl-draw@1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-draw/-/mapbox-gl-draw-1.3.0.tgz#7a30fb99488cb47a32c25e99c3c62413b04bbaed" - integrity sha512-B+KWK+dAgzLHMNyKVuuMRfjeSlQ77MhNLdfpQQpbp3pkhnrdmydDe3ixto1Ua78hktNut0WTrAaD8gYu4PVcjA== - dependencies: - "@mapbox/geojson-area" "^0.2.2" - "@mapbox/geojson-extent" "^1.0.0" - "@mapbox/geojson-normalize" "^0.0.1" - "@mapbox/point-geometry" "^0.1.0" - hat "0.0.3" - lodash.isequal "^4.5.0" - xtend "^4.0.2" - -"@mapbox/mapbox-gl-draw@^1.3.0": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-draw/-/mapbox-gl-draw-1.4.1.tgz#96dcec4d3957150de854423ac15856fde43d1452" - integrity sha512-g6F49KZagF9269/IoF6vZJeail6qtoc5mVF3eVRikNT7UFnY0QASfe2y53mgE99s6GrHdpV+PZuFxaL71hkMhg== - dependencies: - "@mapbox/geojson-area" "^0.2.2" - "@mapbox/geojson-extent" "^1.0.1" - "@mapbox/geojson-normalize" "^0.0.1" - "@mapbox/point-geometry" "^0.1.0" - hat "0.0.3" - lodash.isequal "^4.5.0" - xtend "^4.0.2" - -"@mapbox/mapbox-gl-supported@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.5.0.tgz#f60b6a55a5d8e5ee908347d2ce4250b15103dc8e" - integrity sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg== - -"@mapbox/mapbox-gl-supported@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-2.0.1.tgz#c15367178d8bfe4765e6b47b542fe821ce259c7b" - integrity sha512-HP6XvfNIzfoMVfyGjBckjiAOQK9WfX0ywdLubuPMPv+Vqf5fj0uCbgBQYpiqcWZT6cbyyRnTSXDheT1ugvF6UQ== - -"@mapbox/point-geometry@0.1.0", "@mapbox/point-geometry@^0.1.0", "@mapbox/point-geometry@~0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz#8a83f9335c7860effa2eeeca254332aa0aeed8f2" - integrity sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ== - -"@mapbox/tiny-sdf@^1.1.1": - version "1.2.5" - resolved "https://registry.yarnpkg.com/@mapbox/tiny-sdf/-/tiny-sdf-1.2.5.tgz#424c620a96442b20402552be70a7f62a8407cc59" - integrity sha512-cD8A/zJlm6fdJOk6DqPUV8mcpyJkRz2x2R+/fYcWDYG3oWbG7/L7Yl/WqQ1VZCjnL9OTIMAn6c+BC5Eru4sQEw== - -"@mapbox/tiny-sdf@^2.0.4": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz#9a1d33e5018093e88f6a4df2343e886056287282" - integrity sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA== - -"@mapbox/unitbezier@^0.0.0": - version "0.0.0" - resolved "https://registry.yarnpkg.com/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz#15651bd553a67b8581fb398810c98ad86a34524e" - integrity sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA== - -"@mapbox/unitbezier@^0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz#d32deb66c7177e9e9dfc3bbd697083e2e657ff01" - integrity sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw== - -"@mapbox/vector-tile@^1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz#d3a74c90402d06e89ec66de49ec817ff53409666" - integrity sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw== - dependencies: - "@mapbox/point-geometry" "~0.1.0" - -"@mapbox/whoots-js@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz#497c67a1cef50d1a2459ba60f315e448d2ad87fe" - integrity sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q== - -"@maplibre/maplibre-gl-geocoder@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@maplibre/maplibre-gl-geocoder/-/maplibre-gl-geocoder-1.5.0.tgz#6b413525b361b4759df0fd17429e12b78f03b3a4" - integrity sha512-PsAbV7WFIOu5QYZne95FiXoV7AV1/6ULMjQxgInhZ5DdB0hDLjciQPegnyDgkzI8JfeqoUMZVS/MglZnSZYhyQ== - dependencies: - lodash.debounce "^4.0.6" - subtag "^0.5.0" - suggestions-list "^0.0.2" - xtend "^4.0.1" - -"@mischnic/json-sourcemap@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@mischnic/json-sourcemap/-/json-sourcemap-0.1.0.tgz#38af657be4108140a548638267d02a2ea3336507" - integrity sha512-dQb3QnfNqmQNYA4nFSN/uLaByIic58gOXq4Y4XqLOWmOrw73KmJPt/HLyG0wvn1bnR6mBKs/Uwvkh+Hns1T0XA== - dependencies: - "@lezer/common" "^0.15.7" - "@lezer/lr" "^0.15.4" - json5 "^2.2.1" - -"@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.2.tgz#44d752c1a2dc113f15f781b7cc4f53a307e3fa38" - integrity sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ== - -"@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.2.tgz#f954f34355712212a8e06c465bc06c40852c6bb3" - integrity sha512-lwriRAHm1Yg4iDf23Oxm9n/t5Zpw1lVnxYU3HnJPTi2lJRkKTrps1KVgvL6m7WvmhYVt/FIsssWay+k45QHeuw== - -"@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.2.tgz#45c63037f045c2b15c44f80f0393fa24f9655367" - integrity sha512-FU20Bo66/f7He9Fp9sP2zaJ1Q8L9uLPZQDub/WlUip78JlPeMbVL8546HbZfcW9LNciEXc8d+tThSJjSC+tmsg== - -"@msgpackr-extract/msgpackr-extract-linux-arm@3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.2.tgz#35707efeafe6d22b3f373caf9e8775e8920d1399" - integrity sha512-MOI9Dlfrpi2Cuc7i5dXdxPbFIgbDBGgKR5F2yWEa6FVEtSWncfVNKW5AKjImAQ6CZlBK9tympdsZJ2xThBiWWA== - -"@msgpackr-extract/msgpackr-extract-linux-x64@3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.2.tgz#091b1218b66c341f532611477ef89e83f25fae4f" - integrity sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA== - -"@msgpackr-extract/msgpackr-extract-win32-x64@3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.2.tgz#0f164b726869f71da3c594171df5ebc1c4b0a407" - integrity sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ== - -"@parcel/bundler-default@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/bundler-default/-/bundler-default-2.8.3.tgz#d64739dbc2dbd59d6629861bf77a8083aced5229" - integrity sha512-yJvRsNWWu5fVydsWk3O2L4yIy3UZiKWO2cPDukGOIWMgp/Vbpp+2Ct5IygVRtE22bnseW/E/oe0PV3d2IkEJGg== - dependencies: - "@parcel/diagnostic" "2.8.3" - "@parcel/graph" "2.8.3" - "@parcel/hash" "2.8.3" - "@parcel/plugin" "2.8.3" - "@parcel/utils" "2.8.3" - nullthrows "^1.1.1" - -"@parcel/cache@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/cache/-/cache-2.8.3.tgz#169e130cf59913c0ed9fadce1a450e68f710e16f" - integrity sha512-k7xv5vSQrJLdXuglo+Hv3yF4BCSs1tQ/8Vbd6CHTkOhf7LcGg6CPtLw053R/KdMpd/4GPn0QrAsOLdATm1ELtQ== - dependencies: - "@parcel/fs" "2.8.3" - "@parcel/logger" "2.8.3" - "@parcel/utils" "2.8.3" - lmdb "2.5.2" - -"@parcel/codeframe@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/codeframe/-/codeframe-2.8.3.tgz#84fb529ef70def7f5bc64f6c59b18d24826f5fcc" - integrity sha512-FE7sY53D6n/+2Pgg6M9iuEC6F5fvmyBkRE4d9VdnOoxhTXtkEqpqYgX7RJ12FAQwNlxKq4suBJQMgQHMF2Kjeg== - dependencies: - chalk "^4.1.0" - -"@parcel/compressor-raw@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/compressor-raw/-/compressor-raw-2.8.3.tgz#301753df8c6de967553149639e8a4179b88f0c95" - integrity sha512-bVDsqleBUxRdKMakWSlWC9ZjOcqDKE60BE+Gh3JSN6WJrycJ02P5wxjTVF4CStNP/G7X17U+nkENxSlMG77ySg== - dependencies: - "@parcel/plugin" "2.8.3" - -"@parcel/config-default@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/config-default/-/config-default-2.8.3.tgz#9a43486e7c702e96c68052c37b79098d7240e35b" - integrity sha512-o/A/mbrO6X/BfGS65Sib8d6SSG45NYrNooNBkH/o7zbOBSRQxwyTlysleK1/3Wa35YpvFyLOwgfakqCtbGy4fw== - dependencies: - "@parcel/bundler-default" "2.8.3" - "@parcel/compressor-raw" "2.8.3" - "@parcel/namer-default" "2.8.3" - "@parcel/optimizer-css" "2.8.3" - "@parcel/optimizer-htmlnano" "2.8.3" - "@parcel/optimizer-image" "2.8.3" - "@parcel/optimizer-svgo" "2.8.3" - "@parcel/optimizer-terser" "2.8.3" - "@parcel/packager-css" "2.8.3" - "@parcel/packager-html" "2.8.3" - "@parcel/packager-js" "2.8.3" - "@parcel/packager-raw" "2.8.3" - "@parcel/packager-svg" "2.8.3" - "@parcel/reporter-dev-server" "2.8.3" - "@parcel/resolver-default" "2.8.3" - "@parcel/runtime-browser-hmr" "2.8.3" - "@parcel/runtime-js" "2.8.3" - "@parcel/runtime-react-refresh" "2.8.3" - "@parcel/runtime-service-worker" "2.8.3" - "@parcel/transformer-babel" "2.8.3" - "@parcel/transformer-css" "2.8.3" - "@parcel/transformer-html" "2.8.3" - "@parcel/transformer-image" "2.8.3" - "@parcel/transformer-js" "2.8.3" - "@parcel/transformer-json" "2.8.3" - "@parcel/transformer-postcss" "2.8.3" - "@parcel/transformer-posthtml" "2.8.3" - "@parcel/transformer-raw" "2.8.3" - "@parcel/transformer-react-refresh-wrap" "2.8.3" - "@parcel/transformer-svg" "2.8.3" - -"@parcel/core@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/core/-/core-2.8.3.tgz#22a69f36095d53736ab10bf42697d9aa5f4e382b" - integrity sha512-Euf/un4ZAiClnlUXqPB9phQlKbveU+2CotZv7m7i+qkgvFn5nAGnrV4h1OzQU42j9dpgOxWi7AttUDMrvkbhCQ== - dependencies: - "@mischnic/json-sourcemap" "^0.1.0" - "@parcel/cache" "2.8.3" - "@parcel/diagnostic" "2.8.3" - "@parcel/events" "2.8.3" - "@parcel/fs" "2.8.3" - "@parcel/graph" "2.8.3" - "@parcel/hash" "2.8.3" - "@parcel/logger" "2.8.3" - "@parcel/package-manager" "2.8.3" - "@parcel/plugin" "2.8.3" - "@parcel/source-map" "^2.1.1" - "@parcel/types" "2.8.3" - "@parcel/utils" "2.8.3" - "@parcel/workers" "2.8.3" - abortcontroller-polyfill "^1.1.9" - base-x "^3.0.8" - browserslist "^4.6.6" - clone "^2.1.1" - dotenv "^7.0.0" - dotenv-expand "^5.1.0" - json5 "^2.2.0" - msgpackr "^1.5.4" - nullthrows "^1.1.1" - semver "^5.7.1" - -"@parcel/diagnostic@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/diagnostic/-/diagnostic-2.8.3.tgz#d560276d5d2804b48beafa1feaf3fc6b2ac5e39d" - integrity sha512-u7wSzuMhLGWZjVNYJZq/SOViS3uFG0xwIcqXw12w54Uozd6BH8JlhVtVyAsq9kqnn7YFkw6pXHqAo5Tzh4FqsQ== - dependencies: - "@mischnic/json-sourcemap" "^0.1.0" - nullthrows "^1.1.1" - -"@parcel/events@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/events/-/events-2.8.3.tgz#205f8d874e6ecc2cbdb941bf8d54bae669e571af" - integrity sha512-hoIS4tAxWp8FJk3628bsgKxEvR7bq2scCVYHSqZ4fTi/s0+VymEATrRCUqf+12e5H47uw1/ZjoqrGtBI02pz4w== - -"@parcel/fs-search@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/fs-search/-/fs-search-2.8.3.tgz#1c7d812c110b808758f44c56e61dfffdb09e9451" - integrity sha512-DJBT2N8knfN7Na6PP2mett3spQLTqxFrvl0gv+TJRp61T8Ljc4VuUTb0hqBj+belaASIp3Q+e8+SgaFQu7wLiQ== - dependencies: - detect-libc "^1.0.3" - -"@parcel/fs@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/fs/-/fs-2.8.3.tgz#80536afe877fc8a2bd26be5576b9ba27bb4c5754" - integrity sha512-y+i+oXbT7lP0e0pJZi/YSm1vg0LDsbycFuHZIL80pNwdEppUAtibfJZCp606B7HOjMAlNZOBo48e3hPG3d8jgQ== - dependencies: - "@parcel/fs-search" "2.8.3" - "@parcel/types" "2.8.3" - "@parcel/utils" "2.8.3" - "@parcel/watcher" "^2.0.7" - "@parcel/workers" "2.8.3" - -"@parcel/graph@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/graph/-/graph-2.8.3.tgz#00ffe8ec032e74fee57199e54529f1da7322571d" - integrity sha512-26GL8fYZPdsRhSXCZ0ZWliloK6DHlMJPWh6Z+3VVZ5mnDSbYg/rRKWmrkhnr99ZWmL9rJsv4G74ZwvDEXTMPBg== - dependencies: - nullthrows "^1.1.1" - -"@parcel/hash@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/hash/-/hash-2.8.3.tgz#bc2499a27395169616cad2a99e19e69b9098f6e9" - integrity sha512-FVItqzjWmnyP4ZsVgX+G00+6U2IzOvqDtdwQIWisCcVoXJFCqZJDy6oa2qDDFz96xCCCynjRjPdQx2jYBCpfYw== - dependencies: - detect-libc "^1.0.3" - xxhash-wasm "^0.4.2" - -"@parcel/logger@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/logger/-/logger-2.8.3.tgz#e14e4debafb3ca9e87c07c06780f9afc38b2712c" - integrity sha512-Kpxd3O/Vs7nYJIzkdmB6Bvp3l/85ydIxaZaPfGSGTYOfaffSOTkhcW9l6WemsxUrlts4za6CaEWcc4DOvaMOPA== - dependencies: - "@parcel/diagnostic" "2.8.3" - "@parcel/events" "2.8.3" - -"@parcel/markdown-ansi@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/markdown-ansi/-/markdown-ansi-2.8.3.tgz#1337d421bb1133ad178f386a8e1b746631bba4a1" - integrity sha512-4v+pjyoh9f5zuU/gJlNvNFGEAb6J90sOBwpKJYJhdWXLZMNFCVzSigxrYO+vCsi8G4rl6/B2c0LcwIMjGPHmFQ== - dependencies: - chalk "^4.1.0" - -"@parcel/namer-default@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/namer-default/-/namer-default-2.8.3.tgz#5304bee74beb4b9c1880781bdbe35be0656372f4" - integrity sha512-tJ7JehZviS5QwnxbARd8Uh63rkikZdZs1QOyivUhEvhN+DddSAVEdQLHGPzkl3YRk0tjFhbqo+Jci7TpezuAMw== - dependencies: - "@parcel/diagnostic" "2.8.3" - "@parcel/plugin" "2.8.3" - nullthrows "^1.1.1" - -"@parcel/node-resolver-core@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/node-resolver-core/-/node-resolver-core-2.8.3.tgz#581df074a27646400b3fed9da95297b616a7db8f" - integrity sha512-12YryWcA5Iw2WNoEVr/t2HDjYR1iEzbjEcxfh1vaVDdZ020PiGw67g5hyIE/tsnG7SRJ0xdRx1fQ2hDgED+0Ww== - dependencies: - "@parcel/diagnostic" "2.8.3" - "@parcel/utils" "2.8.3" - nullthrows "^1.1.1" - semver "^5.7.1" - -"@parcel/optimizer-css@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/optimizer-css/-/optimizer-css-2.8.3.tgz#420a333f4b78f7ff15e69217dfed34421b1143ee" - integrity sha512-JotGAWo8JhuXsQDK0UkzeQB0UR5hDAKvAviXrjqB4KM9wZNLhLleeEAW4Hk8R9smCeQFP6Xg/N/NkLDpqMwT3g== - dependencies: - "@parcel/diagnostic" "2.8.3" - "@parcel/plugin" "2.8.3" - "@parcel/source-map" "^2.1.1" - "@parcel/utils" "2.8.3" - browserslist "^4.6.6" - lightningcss "^1.16.1" - nullthrows "^1.1.1" - -"@parcel/optimizer-htmlnano@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.8.3.tgz#a71ab6f0f24160ef9f573266064438eff65e96d0" - integrity sha512-L8/fHbEy8Id2a2E0fwR5eKGlv9VYDjrH9PwdJE9Za9v1O/vEsfl/0T/79/x129l5O0yB6EFQkFa20MiK3b+vOg== - dependencies: - "@parcel/plugin" "2.8.3" - htmlnano "^2.0.0" - nullthrows "^1.1.1" - posthtml "^0.16.5" - svgo "^2.4.0" - -"@parcel/optimizer-image@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/optimizer-image/-/optimizer-image-2.8.3.tgz#ea49b4245b4f7d60b38c7585c6311fb21d341baa" - integrity sha512-SD71sSH27SkCDNUNx9A3jizqB/WIJr3dsfp+JZGZC42tpD/Siim6Rqy9M4To/BpMMQIIiEXa5ofwS+DgTEiEHQ== - dependencies: - "@parcel/diagnostic" "2.8.3" - "@parcel/plugin" "2.8.3" - "@parcel/utils" "2.8.3" - "@parcel/workers" "2.8.3" - detect-libc "^1.0.3" - -"@parcel/optimizer-svgo@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/optimizer-svgo/-/optimizer-svgo-2.8.3.tgz#04da4efec6b623679539a84961bff6998034ba8a" - integrity sha512-9KQed99NZnQw3/W4qBYVQ7212rzA9EqrQG019TIWJzkA9tjGBMIm2c/nXpK1tc3hQ3e7KkXkFCQ3C+ibVUnHNA== - dependencies: - "@parcel/diagnostic" "2.8.3" - "@parcel/plugin" "2.8.3" - "@parcel/utils" "2.8.3" - svgo "^2.4.0" - -"@parcel/optimizer-terser@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/optimizer-terser/-/optimizer-terser-2.8.3.tgz#3a06d98d09386a1a0ae1be85376a8739bfba9618" - integrity sha512-9EeQlN6zIeUWwzrzu6Q2pQSaYsYGah8MtiQ/hog9KEPlYTP60hBv/+utDyYEHSQhL7y5ym08tPX5GzBvwAD/dA== - dependencies: - "@parcel/diagnostic" "2.8.3" - "@parcel/plugin" "2.8.3" - "@parcel/source-map" "^2.1.1" - "@parcel/utils" "2.8.3" - nullthrows "^1.1.1" - terser "^5.2.0" - -"@parcel/package-manager@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/package-manager/-/package-manager-2.8.3.tgz#ddd0d62feae3cf0fb6cc0537791b3a16296ad458" - integrity sha512-tIpY5pD2lH53p9hpi++GsODy6V3khSTX4pLEGuMpeSYbHthnOViobqIlFLsjni+QA1pfc8NNNIQwSNdGjYflVA== - dependencies: - "@parcel/diagnostic" "2.8.3" - "@parcel/fs" "2.8.3" - "@parcel/logger" "2.8.3" - "@parcel/types" "2.8.3" - "@parcel/utils" "2.8.3" - "@parcel/workers" "2.8.3" - semver "^5.7.1" - -"@parcel/packager-css@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/packager-css/-/packager-css-2.8.3.tgz#0eff34268cb4f5dfb53c1bbca85f5567aeb1835a" - integrity sha512-WyvkMmsurlHG8d8oUVm7S+D+cC/T3qGeqogb7sTI52gB6uiywU7lRCizLNqGFyFGIxcVTVHWnSHqItBcLN76lA== - dependencies: - "@parcel/plugin" "2.8.3" - "@parcel/source-map" "^2.1.1" - "@parcel/utils" "2.8.3" - nullthrows "^1.1.1" - -"@parcel/packager-html@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/packager-html/-/packager-html-2.8.3.tgz#f9263b891aa4dd46c6e2fa2b07025a482132fff1" - integrity sha512-OhPu1Hx1RRKJodpiu86ZqL8el2Aa4uhBHF6RAL1Pcrh2EhRRlPf70Sk0tC22zUpYL7es+iNKZ/n0Rl+OWSHWEw== - dependencies: - "@parcel/plugin" "2.8.3" - "@parcel/types" "2.8.3" - "@parcel/utils" "2.8.3" - nullthrows "^1.1.1" - posthtml "^0.16.5" - -"@parcel/packager-js@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/packager-js/-/packager-js-2.8.3.tgz#3ed11565915d73d12192b6901c75a6b820e4a83a" - integrity sha512-0pGKC3Ax5vFuxuZCRB+nBucRfFRz4ioie19BbDxYnvBxrd4M3FIu45njf6zbBYsI9eXqaDnL1b3DcZJfYqtIzw== - dependencies: - "@parcel/diagnostic" "2.8.3" - "@parcel/hash" "2.8.3" - "@parcel/plugin" "2.8.3" - "@parcel/source-map" "^2.1.1" - "@parcel/utils" "2.8.3" - globals "^13.2.0" - nullthrows "^1.1.1" - -"@parcel/packager-raw@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/packager-raw/-/packager-raw-2.8.3.tgz#bdec826df991e186cb58691cc45d12ad5c06676e" - integrity sha512-BA6enNQo1RCnco9MhkxGrjOk59O71IZ9DPKu3lCtqqYEVd823tXff2clDKHK25i6cChmeHu6oB1Rb73hlPqhUA== - dependencies: - "@parcel/plugin" "2.8.3" - -"@parcel/packager-svg@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/packager-svg/-/packager-svg-2.8.3.tgz#7233315296001c531cb55ca96b5f2ef672343630" - integrity sha512-mvIoHpmv5yzl36OjrklTDFShLUfPFTwrmp1eIwiszGdEBuQaX7JVI3Oo2jbVQgcN4W7J6SENzGQ3Q5hPTW3pMw== - dependencies: - "@parcel/plugin" "2.8.3" - "@parcel/types" "2.8.3" - "@parcel/utils" "2.8.3" - posthtml "^0.16.4" - -"@parcel/plugin@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/plugin/-/plugin-2.8.3.tgz#7bb30a5775eaa6473c27f002a0a3ee7308d6d669" - integrity sha512-jZ6mnsS4D9X9GaNnvrixDQwlUQJCohDX2hGyM0U0bY2NWU8Km97SjtoCpWjq+XBCx/gpC4g58+fk9VQeZq2vlw== - dependencies: - "@parcel/types" "2.8.3" - -"@parcel/reporter-cli@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/reporter-cli/-/reporter-cli-2.8.3.tgz#12a4743b51b8fe6837f53c20e01bbf1f7336e8e4" - integrity sha512-3sJkS6tFFzgIOz3u3IpD/RsmRxvOKKiQHOTkiiqRt1l44mMDGKS7zANRnJYsQzdCsgwc9SOP30XFgJwtoVlMbw== - dependencies: - "@parcel/plugin" "2.8.3" - "@parcel/types" "2.8.3" - "@parcel/utils" "2.8.3" - chalk "^4.1.0" - term-size "^2.2.1" - -"@parcel/reporter-dev-server@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/reporter-dev-server/-/reporter-dev-server-2.8.3.tgz#a0daa5cc015642684cea561f4e0e7116bbffdc1c" - integrity sha512-Y8C8hzgzTd13IoWTj+COYXEyCkXfmVJs3//GDBsH22pbtSFMuzAZd+8J9qsCo0EWpiDow7V9f1LischvEh3FbQ== - dependencies: - "@parcel/plugin" "2.8.3" - "@parcel/utils" "2.8.3" - -"@parcel/resolver-default@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/resolver-default/-/resolver-default-2.8.3.tgz#5ae41e537ae4a793c1abb47f094482b9e2ac3535" - integrity sha512-k0B5M/PJ+3rFbNj4xZSBr6d6HVIe6DH/P3dClLcgBYSXAvElNDfXgtIimbjCyItFkW9/BfcgOVKEEIZOeySH/A== - dependencies: - "@parcel/node-resolver-core" "2.8.3" - "@parcel/plugin" "2.8.3" - -"@parcel/runtime-browser-hmr@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.8.3.tgz#1fa74e1fbd1030b0a920c58afa3a9eb7dc4bcd1e" - integrity sha512-2O1PYi2j/Q0lTyGNV3JdBYwg4rKo6TEVFlYGdd5wCYU9ZIN9RRuoCnWWH2qCPj3pjIVtBeppYxzfVjPEHINWVg== - dependencies: - "@parcel/plugin" "2.8.3" - "@parcel/utils" "2.8.3" - -"@parcel/runtime-js@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/runtime-js/-/runtime-js-2.8.3.tgz#0baa4c8fbf77eabce05d01ccc186614968ffc0cd" - integrity sha512-IRja0vNKwvMtPgIqkBQh0QtRn0XcxNC8HU1jrgWGRckzu10qJWO+5ULgtOeR4pv9krffmMPqywGXw6l/gvJKYQ== - dependencies: - "@parcel/plugin" "2.8.3" - "@parcel/utils" "2.8.3" - nullthrows "^1.1.1" - -"@parcel/runtime-react-refresh@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.8.3.tgz#381a942fb81e8f5ac6c7e0ee1b91dbf34763c3f8" - integrity sha512-2v/qFKp00MfG0234OdOgQNAo6TLENpFYZMbVbAsPMY9ITiqG73MrEsrGXVoGbYiGTMB/Toer/lSWlJxtacOCuA== - dependencies: - "@parcel/plugin" "2.8.3" - "@parcel/utils" "2.8.3" - react-error-overlay "6.0.9" - react-refresh "^0.9.0" - -"@parcel/runtime-service-worker@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/runtime-service-worker/-/runtime-service-worker-2.8.3.tgz#54d92da9ff1dfbd27db0e84164a22fa59e99b348" - integrity sha512-/Skkw+EeRiwzOJso5fQtK8c9b452uWLNhQH1ISTodbmlcyB4YalAiSsyHCtMYD0c3/t5Sx4ZS7vxBAtQd0RvOw== - dependencies: - "@parcel/plugin" "2.8.3" - "@parcel/utils" "2.8.3" - nullthrows "^1.1.1" - -"@parcel/source-map@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@parcel/source-map/-/source-map-2.1.1.tgz#fb193b82dba6dd62cc7a76b326f57bb35000a782" - integrity sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew== - dependencies: - detect-libc "^1.0.3" - -"@parcel/transformer-babel@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/transformer-babel/-/transformer-babel-2.8.3.tgz#286bc6cb9afe4c0259f0b28e0f2f47322a24b130" - integrity sha512-L6lExfpvvC7T/g3pxf3CIJRouQl+sgrSzuWQ0fD4PemUDHvHchSP4SNUVnd6gOytF3Y1KpnEZIunQGi5xVqQCQ== - dependencies: - "@parcel/diagnostic" "2.8.3" - "@parcel/plugin" "2.8.3" - "@parcel/source-map" "^2.1.1" - "@parcel/utils" "2.8.3" - browserslist "^4.6.6" - json5 "^2.2.0" - nullthrows "^1.1.1" - semver "^5.7.0" - -"@parcel/transformer-css@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/transformer-css/-/transformer-css-2.8.3.tgz#d6c44100204e73841ad8e0f90472172ea8b9120c" - integrity sha512-xTqFwlSXtnaYen9ivAgz+xPW7yRl/u4QxtnDyDpz5dr8gSeOpQYRcjkd4RsYzKsWzZcGtB5EofEk8ayUbWKEUg== - dependencies: - "@parcel/diagnostic" "2.8.3" - "@parcel/plugin" "2.8.3" - "@parcel/source-map" "^2.1.1" - "@parcel/utils" "2.8.3" - browserslist "^4.6.6" - lightningcss "^1.16.1" - nullthrows "^1.1.1" - -"@parcel/transformer-html@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/transformer-html/-/transformer-html-2.8.3.tgz#5c68b28ee6b8c7a13b8aee87f7957ad3227bd83f" - integrity sha512-kIZO3qsMYTbSnSpl9cnZog+SwL517ffWH54JeB410OSAYF1ouf4n5v9qBnALZbuCCmPwJRGs4jUtE452hxwN4g== - dependencies: - "@parcel/diagnostic" "2.8.3" - "@parcel/hash" "2.8.3" - "@parcel/plugin" "2.8.3" - nullthrows "^1.1.1" - posthtml "^0.16.5" - posthtml-parser "^0.10.1" - posthtml-render "^3.0.0" - semver "^5.7.1" - srcset "4" - -"@parcel/transformer-image@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/transformer-image/-/transformer-image-2.8.3.tgz#73805b2bfc3c8919d7737544e5f8be39e3f303fe" - integrity sha512-cO4uptcCGTi5H6bvTrAWEFUsTNhA4kCo8BSvRSCHA2sf/4C5tGQPHt3JhdO0GQLPwZRCh/R41EkJs5HZ8A8DAg== - dependencies: - "@parcel/plugin" "2.8.3" - "@parcel/utils" "2.8.3" - "@parcel/workers" "2.8.3" - nullthrows "^1.1.1" - -"@parcel/transformer-js@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/transformer-js/-/transformer-js-2.8.3.tgz#fe400df428394d1e7fe5afb6dea5c7c858e44f03" - integrity sha512-9Qd6bib+sWRcpovvzvxwy/PdFrLUXGfmSW9XcVVG8pvgXsZPFaNjnNT8stzGQj1pQiougCoxMY4aTM5p1lGHEQ== - dependencies: - "@parcel/diagnostic" "2.8.3" - "@parcel/plugin" "2.8.3" - "@parcel/source-map" "^2.1.1" - "@parcel/utils" "2.8.3" - "@parcel/workers" "2.8.3" - "@swc/helpers" "^0.4.12" - browserslist "^4.6.6" - detect-libc "^1.0.3" - nullthrows "^1.1.1" - regenerator-runtime "^0.13.7" - semver "^5.7.1" - -"@parcel/transformer-json@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/transformer-json/-/transformer-json-2.8.3.tgz#25deb3a5138cc70a83269fc5d39d564609354d36" - integrity sha512-B7LmVq5Q7bZO4ERb6NHtRuUKWGysEeaj9H4zelnyBv+wLgpo4f5FCxSE1/rTNmP9u1qHvQ3scGdK6EdSSokGPg== - dependencies: - "@parcel/plugin" "2.8.3" - json5 "^2.2.0" - -"@parcel/transformer-postcss@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/transformer-postcss/-/transformer-postcss-2.8.3.tgz#df4fdc1c90893823445f2a8eb8e2bdd0349ccc58" - integrity sha512-e8luB/poIlz6jBsD1Izms+6ElbyzuoFVa4lFVLZnTAChI3UxPdt9p/uTsIO46HyBps/Bk8ocvt3J4YF84jzmvg== - dependencies: - "@parcel/diagnostic" "2.8.3" - "@parcel/hash" "2.8.3" - "@parcel/plugin" "2.8.3" - "@parcel/utils" "2.8.3" - clone "^2.1.1" - nullthrows "^1.1.1" - postcss-value-parser "^4.2.0" - semver "^5.7.1" - -"@parcel/transformer-posthtml@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/transformer-posthtml/-/transformer-posthtml-2.8.3.tgz#7c3912a5a631cb26485f6464e0d6eeabb6f1e718" - integrity sha512-pkzf9Smyeaw4uaRLsT41RGrPLT5Aip8ZPcntawAfIo+KivBQUV0erY1IvHYjyfFzq1ld/Fo2Ith9He6mxpPifA== - dependencies: - "@parcel/plugin" "2.8.3" - "@parcel/utils" "2.8.3" - nullthrows "^1.1.1" - posthtml "^0.16.5" - posthtml-parser "^0.10.1" - posthtml-render "^3.0.0" - semver "^5.7.1" - -"@parcel/transformer-raw@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/transformer-raw/-/transformer-raw-2.8.3.tgz#3a22213fe18a5f83fd78889cb49f06e059cfead7" - integrity sha512-G+5cXnd2/1O3nV/pgRxVKZY/HcGSseuhAe71gQdSQftb8uJEURyUHoQ9Eh0JUD3MgWh9V+nIKoyFEZdf9T0sUQ== - dependencies: - "@parcel/plugin" "2.8.3" - -"@parcel/transformer-react-refresh-wrap@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.8.3.tgz#8b0392638405dd470a886002229f7889d5464822" - integrity sha512-q8AAoEvBnCf/nPvgOwFwKZfEl/thwq7c2duxXkhl+tTLDRN2vGmyz4355IxCkavSX+pLWSQ5MexklSEeMkgthg== - dependencies: - "@parcel/plugin" "2.8.3" - "@parcel/utils" "2.8.3" - react-refresh "^0.9.0" - -"@parcel/transformer-svg@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/transformer-svg/-/transformer-svg-2.8.3.tgz#4df959cba4ebf45d7aaddd540f752e6e84df38b2" - integrity sha512-3Zr/gBzxi1ZH1fftH/+KsZU7w5GqkmxlB0ZM8ovS5E/Pl1lq1t0xvGJue9m2VuQqP8Mxfpl5qLFmsKlhaZdMIQ== - dependencies: - "@parcel/diagnostic" "2.8.3" - "@parcel/hash" "2.8.3" - "@parcel/plugin" "2.8.3" - nullthrows "^1.1.1" - posthtml "^0.16.5" - posthtml-parser "^0.10.1" - posthtml-render "^3.0.0" - semver "^5.7.1" - -"@parcel/types@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/types/-/types-2.8.3.tgz#3306bc5391b6913bd619914894b8cd84a24b30fa" - integrity sha512-FECA1FB7+0UpITKU0D6TgGBpGxYpVSMNEENZbSJxFSajNy3wrko+zwBKQmFOLOiPcEtnGikxNs+jkFWbPlUAtw== - dependencies: - "@parcel/cache" "2.8.3" - "@parcel/diagnostic" "2.8.3" - "@parcel/fs" "2.8.3" - "@parcel/package-manager" "2.8.3" - "@parcel/source-map" "^2.1.1" - "@parcel/workers" "2.8.3" - utility-types "^3.10.0" - -"@parcel/utils@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/utils/-/utils-2.8.3.tgz#0d56c9e8e22c119590a5e044a0e01031965da40e" - integrity sha512-IhVrmNiJ+LOKHcCivG5dnuLGjhPYxQ/IzbnF2DKNQXWBTsYlHkJZpmz7THoeLtLliGmSOZ3ZCsbR8/tJJKmxjA== - dependencies: - "@parcel/codeframe" "2.8.3" - "@parcel/diagnostic" "2.8.3" - "@parcel/hash" "2.8.3" - "@parcel/logger" "2.8.3" - "@parcel/markdown-ansi" "2.8.3" - "@parcel/source-map" "^2.1.1" - chalk "^4.1.0" - -"@parcel/watcher@^2.0.7": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.1.0.tgz#5f32969362db4893922c526a842d8af7a8538545" - integrity sha512-8s8yYjd19pDSsBpbkOHnT6Z2+UJSuLQx61pCFM0s5wSRvKCEMDjd/cHY3/GI1szHIWbpXpsJdg3V6ISGGx9xDw== - dependencies: - is-glob "^4.0.3" - micromatch "^4.0.5" - node-addon-api "^3.2.1" - node-gyp-build "^4.3.0" - -"@parcel/workers@2.8.3": - version "2.8.3" - resolved "https://registry.yarnpkg.com/@parcel/workers/-/workers-2.8.3.tgz#255450ccf4db234082407e4ddda5fd575f08c235" - integrity sha512-+AxBnKgjqVpUHBcHLWIHcjYgKIvHIpZjN33mG5LG9XXvrZiqdWvouEzqEXlVLq5VzzVbKIQQcmsvRy138YErkg== - dependencies: - "@parcel/diagnostic" "2.8.3" - "@parcel/logger" "2.8.3" - "@parcel/types" "2.8.3" - "@parcel/utils" "2.8.3" - chrome-trace-event "^1.0.2" - nullthrows "^1.1.1" - -"@radix-ui/number@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/number/-/number-1.0.0.tgz#4c536161d0de750b3f5d55860fc3de46264f897b" - integrity sha512-Ofwh/1HX69ZfJRiRBMTy7rgjAzHmwe4kW9C9Y99HTRUcYLUuVT0KESFj15rPjRgKJs20GPq8Bm5aEDJ8DuA3vA== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/primitive@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.0.0.tgz#e1d8ef30b10ea10e69c76e896f608d9276352253" - integrity sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-accordion@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-accordion/-/react-accordion-1.0.0.tgz#bf69dc1f13fce05d6d7560ff79954c49abc1b71b" - integrity sha512-F4vrzev+f1gjrWiU+IFQIzN43fYyvQ+AN0OicHYoDddis53xnPC0DKm16Ks4/XjvmqbISAR/FscYX0vymEHxcA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.0" - "@radix-ui/react-collapsible" "1.0.0" - "@radix-ui/react-collection" "1.0.0" - "@radix-ui/react-compose-refs" "1.0.0" - "@radix-ui/react-context" "1.0.0" - "@radix-ui/react-id" "1.0.0" - "@radix-ui/react-primitive" "1.0.0" - "@radix-ui/react-use-controllable-state" "1.0.0" - -"@radix-ui/react-arrow@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.0.0.tgz#c461f4c2cab3317e3d42a1ae62910a4cbb0192a1" - integrity sha512-1MUuv24HCdepi41+qfv125EwMuxgQ+U+h0A9K3BjCO/J8nVRREKHHpkD9clwfnjEDk9hgGzCnff4aUKCPiRepw== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-primitive" "1.0.0" - -"@radix-ui/react-collapsible@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-collapsible/-/react-collapsible-1.0.0.tgz#0d94fc847c2d4bee1ab646d15c87bd3be6448873" - integrity sha512-NfZqWntvPsC43szs0NvumRjmTTJTLgaDOAnmVGDZaGsg2u6LcJwUT7YeYSKnlxWRQWN4pwwEfoYdWrtoutfO8g== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.0" - "@radix-ui/react-compose-refs" "1.0.0" - "@radix-ui/react-context" "1.0.0" - "@radix-ui/react-id" "1.0.0" - "@radix-ui/react-presence" "1.0.0" - "@radix-ui/react-primitive" "1.0.0" - "@radix-ui/react-use-controllable-state" "1.0.0" - "@radix-ui/react-use-layout-effect" "1.0.0" - -"@radix-ui/react-collection@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.0.0.tgz#0ec4c72fabd35a03b5787075ac799e3b17ca5710" - integrity sha512-8i1pf5dKjnq90Z8udnnXKzdCEV3/FYrfw0n/b6NvB6piXEn3fO1bOh7HBcpG8XrnIXzxlYu2oCcR38QpyLS/mg== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-compose-refs" "1.0.0" - "@radix-ui/react-context" "1.0.0" - "@radix-ui/react-primitive" "1.0.0" - "@radix-ui/react-slot" "1.0.0" - -"@radix-ui/react-compose-refs@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz#37595b1f16ec7f228d698590e78eeed18ff218ae" - integrity sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-context@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.0.0.tgz#f38e30c5859a9fb5e9aa9a9da452ee3ed9e0aee0" - integrity sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-direction@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.0.0.tgz#a2e0b552352459ecf96342c79949dd833c1e6e45" - integrity sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-dismissable-layer@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.0.tgz#35b7826fa262fd84370faef310e627161dffa76b" - integrity sha512-n7kDRfx+LB1zLueRDvZ1Pd0bxdJWDUZNQ/GWoxDn2prnuJKRdxsjulejX/ePkOsLi2tTm6P24mDqlMSgQpsT6g== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.0" - "@radix-ui/react-compose-refs" "1.0.0" - "@radix-ui/react-primitive" "1.0.0" - "@radix-ui/react-use-callback-ref" "1.0.0" - "@radix-ui/react-use-escape-keydown" "1.0.0" - -"@radix-ui/react-dropdown-menu@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-1.0.0.tgz#687959e1bcdd5e8eb0de406484aff28d0974c593" - integrity sha512-Ptben3TxPWrZLbInO7zjAK73kmjYuStsxfg6ujgt+EywJyREoibhZYnsSNqC+UiOtl4PdW/MOHhxVDtew5fouQ== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.0" - "@radix-ui/react-compose-refs" "1.0.0" - "@radix-ui/react-context" "1.0.0" - "@radix-ui/react-id" "1.0.0" - "@radix-ui/react-menu" "1.0.0" - "@radix-ui/react-primitive" "1.0.0" - "@radix-ui/react-use-controllable-state" "1.0.0" - -"@radix-ui/react-focus-guards@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.0.tgz#339c1c69c41628c1a5e655f15f7020bf11aa01fa" - integrity sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-focus-scope@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.0.tgz#95a0c1188276dc8933b1eac5f1cdb6471e01ade5" - integrity sha512-C4SWtsULLGf/2L4oGeIHlvWQx7Rf+7cX/vKOAD2dXW0A1b5QXwi3wWeaEgW+wn+SEVrraMUk05vLU9fZZz5HbQ== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-compose-refs" "1.0.0" - "@radix-ui/react-primitive" "1.0.0" - "@radix-ui/react-use-callback-ref" "1.0.0" - -"@radix-ui/react-id@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.0.0.tgz#8d43224910741870a45a8c9d092f25887bb6d11e" - integrity sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-layout-effect" "1.0.0" - -"@radix-ui/react-menu@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-menu/-/react-menu-1.0.0.tgz#f1e07778c0011aa0c5be260fee88491d3aadf261" - integrity sha512-icW4C64T6nHh3Z4Q1fxO1RlSShouFF4UpUmPV8FLaJZfphDljannKErDuALDx4ClRLihAPZ9i+PrLNPoWS2DMA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.0" - "@radix-ui/react-collection" "1.0.0" - "@radix-ui/react-compose-refs" "1.0.0" - "@radix-ui/react-context" "1.0.0" - "@radix-ui/react-direction" "1.0.0" - "@radix-ui/react-dismissable-layer" "1.0.0" - "@radix-ui/react-focus-guards" "1.0.0" - "@radix-ui/react-focus-scope" "1.0.0" - "@radix-ui/react-id" "1.0.0" - "@radix-ui/react-popper" "1.0.0" - "@radix-ui/react-portal" "1.0.0" - "@radix-ui/react-presence" "1.0.0" - "@radix-ui/react-primitive" "1.0.0" - "@radix-ui/react-roving-focus" "1.0.0" - "@radix-ui/react-slot" "1.0.0" - "@radix-ui/react-use-callback-ref" "1.0.0" - aria-hidden "^1.1.1" - react-remove-scroll "2.5.4" - -"@radix-ui/react-popper@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.0.0.tgz#fb4f937864bf39c48f27f55beee61fa9f2bef93c" - integrity sha512-k2dDd+1Wl0XWAMs9ZvAxxYsB9sOsEhrFQV4CINd7IUZf0wfdye4OHen9siwxvZImbzhgVeKTJi68OQmPRvVdMg== - dependencies: - "@babel/runtime" "^7.13.10" - "@floating-ui/react-dom" "0.7.2" - "@radix-ui/react-arrow" "1.0.0" - "@radix-ui/react-compose-refs" "1.0.0" - "@radix-ui/react-context" "1.0.0" - "@radix-ui/react-primitive" "1.0.0" - "@radix-ui/react-use-layout-effect" "1.0.0" - "@radix-ui/react-use-rect" "1.0.0" - "@radix-ui/react-use-size" "1.0.0" - "@radix-ui/rect" "1.0.0" - -"@radix-ui/react-portal@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.0.0.tgz#7220b66743394fabb50c55cb32381395cc4a276b" - integrity sha512-a8qyFO/Xb99d8wQdu4o7qnigNjTPG123uADNecz0eX4usnQEj7o+cG4ZX4zkqq98NYekT7UoEQIjxBNWIFuqTA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-primitive" "1.0.0" - -"@radix-ui/react-presence@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.0.0.tgz#814fe46df11f9a468808a6010e3f3ca7e0b2e84a" - integrity sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-compose-refs" "1.0.0" - "@radix-ui/react-use-layout-effect" "1.0.0" - -"@radix-ui/react-primitive@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz#376cd72b0fcd5e0e04d252ed33eb1b1f025af2b0" - integrity sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-slot" "1.0.0" - -"@radix-ui/react-roving-focus@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.0.tgz#aadeb65d5dbcdbdd037078156ae1f57c2ff754ee" - integrity sha512-lHvO4MhvoWpeNbiJAoyDsEtbKqP2jkkdwsMVJ3kfqbkC71J/aXE6Th6gkZA1xHEqSku+t+UgoDjvE7Z3gsBpcg== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.0" - "@radix-ui/react-collection" "1.0.0" - "@radix-ui/react-compose-refs" "1.0.0" - "@radix-ui/react-context" "1.0.0" - "@radix-ui/react-direction" "1.0.0" - "@radix-ui/react-id" "1.0.0" - "@radix-ui/react-primitive" "1.0.0" - "@radix-ui/react-use-callback-ref" "1.0.0" - "@radix-ui/react-use-controllable-state" "1.0.0" - -"@radix-ui/react-slider@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-slider/-/react-slider-1.0.0.tgz#4cabadd243aa088eb45ac710cd7cdc518fafb07e" - integrity sha512-LMZET7vn7HYwYSjsc9Jcen8Vn4cJXZZxQT7T+lGlqp+F+FofX+H86TBF2yDq+L51d99f1KLEsflTGBz9WRLSig== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/number" "1.0.0" - "@radix-ui/primitive" "1.0.0" - "@radix-ui/react-collection" "1.0.0" - "@radix-ui/react-compose-refs" "1.0.0" - "@radix-ui/react-context" "1.0.0" - "@radix-ui/react-direction" "1.0.0" - "@radix-ui/react-primitive" "1.0.0" - "@radix-ui/react-use-controllable-state" "1.0.0" - "@radix-ui/react-use-layout-effect" "1.0.0" - "@radix-ui/react-use-previous" "1.0.0" - "@radix-ui/react-use-size" "1.0.0" - -"@radix-ui/react-slot@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.0.0.tgz#7fa805b99891dea1e862d8f8fbe07f4d6d0fd698" - integrity sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-compose-refs" "1.0.0" - -"@radix-ui/react-tabs@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-tabs/-/react-tabs-1.0.0.tgz#135c67f1f2bd9ada69a3f6e38dd897d459af5fe5" - integrity sha512-oKUwEDsySVC0uuSEH7SHCVt1+ijmiDFAI9p+fHCtuZdqrRDKIFs09zp5nrmu4ggP6xqSx9lj1VSblnDH+n3IBA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.0" - "@radix-ui/react-context" "1.0.0" - "@radix-ui/react-direction" "1.0.0" - "@radix-ui/react-id" "1.0.0" - "@radix-ui/react-presence" "1.0.0" - "@radix-ui/react-primitive" "1.0.0" - "@radix-ui/react-roving-focus" "1.0.0" - "@radix-ui/react-use-controllable-state" "1.0.0" - -"@radix-ui/react-use-callback-ref@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz#9e7b8b6b4946fe3cbe8f748c82a2cce54e7b6a90" - integrity sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-use-controllable-state@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.0.tgz#a64deaafbbc52d5d407afaa22d493d687c538b7f" - integrity sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-callback-ref" "1.0.0" - -"@radix-ui/react-use-escape-keydown@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.0.tgz#aef375db4736b9de38a5a679f6f49b45a060e5d1" - integrity sha512-JwfBCUIfhXRxKExgIqGa4CQsiMemo1Xt0W/B4ei3fpzpvPENKpMKQ8mZSB6Acj3ebrAEgi2xiQvcI1PAAodvyg== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-callback-ref" "1.0.0" - -"@radix-ui/react-use-layout-effect@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz#2fc19e97223a81de64cd3ba1dc42ceffd82374dc" - integrity sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-use-previous@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-previous/-/react-use-previous-1.0.0.tgz#e48a69c3a7d8078a967084038df66d0d181c56ac" - integrity sha512-RG2K8z/K7InnOKpq6YLDmT49HGjNmrK+fr82UCVKT2sW0GYfVnYp4wZWBooT/EYfQ5faA9uIjvsuMMhH61rheg== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-use-rect@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.0.0.tgz#b040cc88a4906b78696cd3a32b075ed5b1423b3e" - integrity sha512-TB7pID8NRMEHxb/qQJpvSt3hQU4sqNPM1VCTjTRjEOa7cEop/QMuq8S6fb/5Tsz64kqSvB9WnwsDHtjnrM9qew== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/rect" "1.0.0" - -"@radix-ui/react-use-size@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.0.0.tgz#a0b455ac826749419f6354dc733e2ca465054771" - integrity sha512-imZ3aYcoYCKhhgNpkNDh/aTiU05qw9hX+HHI1QDBTyIlcFjgeFlKKySNGMwTp7nYFLQg/j0VA2FmCY4WPDDHMg== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-layout-effect" "1.0.0" - -"@radix-ui/rect@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.0.0.tgz#0dc8e6a829ea2828d53cbc94b81793ba6383bf3c" - integrity sha512-d0O68AYy/9oeEy1DdC07bz1/ZXX+DqCskRd3i4JzLSTXwefzaepQrKjXC7aNM8lTHjFLDO0pDgaEiQ7jEk+HVg== - dependencies: - "@babel/runtime" "^7.13.10" - -"@swc/helpers@^0.4.12": - version "0.4.14" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74" - integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw== - dependencies: - tslib "^2.4.0" - -"@trysound/sax@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" - integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== - -"@turf/along@^6.0.1", "@turf/along@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/along/-/along-6.5.0.tgz#ab12eec58a14de60fe243a62d31a474f415c8fef" - integrity sha512-LLyWQ0AARqJCmMcIEAXF4GEu8usmd4Kbz3qk1Oy5HoRNpZX47+i5exQtmIWKdqJ1MMhW26fCTXgpsEs5zgJ5gw== - dependencies: - "@turf/bearing" "^6.5.0" - "@turf/destination" "^6.5.0" - "@turf/distance" "^6.5.0" - "@turf/helpers" "^6.5.0" - "@turf/invariant" "^6.5.0" - -"@turf/bbox@*": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/bbox/-/bbox-6.5.0.tgz#bec30a744019eae420dac9ea46fb75caa44d8dc5" - integrity sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw== - dependencies: - "@turf/helpers" "^6.5.0" - "@turf/meta" "^6.5.0" - -"@turf/bearing@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/bearing/-/bearing-6.5.0.tgz#462a053c6c644434bdb636b39f8f43fb0cd857b0" - integrity sha512-dxINYhIEMzgDOztyMZc20I7ssYVNEpSv04VbMo5YPQsqa80KO3TFvbuCahMsCAW5z8Tncc8dwBlEFrmRjJG33A== - dependencies: - "@turf/helpers" "^6.5.0" - "@turf/invariant" "^6.5.0" - -"@turf/boolean-clockwise@6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/boolean-clockwise/-/boolean-clockwise-6.5.0.tgz#34573ecc18f900080f00e4ff364631a8b1135794" - integrity sha512-45+C7LC5RMbRWrxh3Z0Eihsc8db1VGBO5d9BLTOAwU4jR6SgsunTfRWR16X7JUwIDYlCVEmnjcXJNi/kIU3VIw== - dependencies: - "@turf/helpers" "^6.5.0" - "@turf/invariant" "^6.5.0" - -"@turf/circle@^6.0.1", "@turf/circle@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/circle/-/circle-6.5.0.tgz#dc017d8c0131d1d212b7c06f76510c22bbeb093c" - integrity sha512-oU1+Kq9DgRnoSbWFHKnnUdTmtcRUMmHoV9DjTXu9vOLNV5OWtAAh1VZ+mzsioGGzoDNT/V5igbFOkMfBQc0B6A== - dependencies: - "@turf/destination" "^6.5.0" - "@turf/helpers" "^6.5.0" - -"@turf/destination@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/destination/-/destination-6.5.0.tgz#30a84702f9677d076130e0440d3223ae503fdae1" - integrity sha512-4cnWQlNC8d1tItOz9B4pmJdWpXqS0vEvv65bI/Pj/genJnsL7evI0/Xw42RvEGROS481MPiU80xzvwxEvhQiMQ== - dependencies: - "@turf/helpers" "^6.5.0" - "@turf/invariant" "^6.5.0" - -"@turf/distance@^6.0.1", "@turf/distance@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/distance/-/distance-6.5.0.tgz#21f04d5f86e864d54e2abde16f35c15b4f36149a" - integrity sha512-xzykSLfoURec5qvQJcfifw/1mJa+5UwByZZ5TZ8iaqjGYN0vomhV9aiSLeYdUGtYRESZ+DYC/OzY+4RclZYgMg== - dependencies: - "@turf/helpers" "^6.5.0" - "@turf/invariant" "^6.5.0" - -"@turf/helpers@6.x", "@turf/helpers@^6.1.4", "@turf/helpers@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-6.5.0.tgz#f79af094bd6b8ce7ed2bd3e089a8493ee6cae82e" - integrity sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw== - -"@turf/invariant@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/invariant/-/invariant-6.5.0.tgz#970afc988023e39c7ccab2341bd06979ddc7463f" - integrity sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg== - dependencies: - "@turf/helpers" "^6.5.0" - -"@turf/length@^6.0.2", "@turf/length@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/length/-/length-6.5.0.tgz#ff4e9072d5f997e1c32a1311d214d184463f83fa" - integrity sha512-5pL5/pnw52fck3oRsHDcSGrj9HibvtlrZ0QNy2OcW8qBFDNgZ4jtl6U7eATVoyWPKBHszW3dWETW+iLV7UARig== - dependencies: - "@turf/distance" "^6.5.0" - "@turf/helpers" "^6.5.0" - "@turf/meta" "^6.5.0" - -"@turf/line-intersect@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/line-intersect/-/line-intersect-6.5.0.tgz#dea48348b30c093715d2195d2dd7524aee4cf020" - integrity sha512-CS6R1tZvVQD390G9Ea4pmpM6mJGPWoL82jD46y0q1KSor9s6HupMIo1kY4Ny+AEYQl9jd21V3Scz20eldpbTVA== - dependencies: - "@turf/helpers" "^6.5.0" - "@turf/invariant" "^6.5.0" - "@turf/line-segment" "^6.5.0" - "@turf/meta" "^6.5.0" - geojson-rbush "3.x" - -"@turf/line-segment@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/line-segment/-/line-segment-6.5.0.tgz#ee73f3ffcb7c956203b64ed966d96af380a4dd65" - integrity sha512-jI625Ho4jSuJESNq66Mmi290ZJ5pPZiQZruPVpmHkUw257Pew0alMmb6YrqYNnLUuiVVONxAAKXUVeeUGtycfw== - dependencies: - "@turf/helpers" "^6.5.0" - "@turf/invariant" "^6.5.0" - "@turf/meta" "^6.5.0" - -"@turf/line-slice@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/line-slice/-/line-slice-6.5.0.tgz#7b6e0c8e8e93fdb4e65c3b9a123a2ec93a21bdb0" - integrity sha512-vDqJxve9tBHhOaVVFXqVjF5qDzGtKWviyjbyi2QnSnxyFAmLlLnBfMX8TLQCAf2GxHibB95RO5FBE6I2KVPRuw== - dependencies: - "@turf/helpers" "^6.5.0" - "@turf/invariant" "^6.5.0" - "@turf/nearest-point-on-line" "^6.5.0" - -"@turf/meta@6.x", "@turf/meta@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/meta/-/meta-6.5.0.tgz#b725c3653c9f432133eaa04d3421f7e51e0418ca" - integrity sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA== - dependencies: - "@turf/helpers" "^6.5.0" - -"@turf/nearest-point-on-line@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@turf/nearest-point-on-line/-/nearest-point-on-line-6.5.0.tgz#8e1cd2cdc0b5acaf4c8d8b3b33bb008d3cb99e7b" - integrity sha512-WthrvddddvmymnC+Vf7BrkHGbDOUu6Z3/6bFYUGv1kxw8tiZ6n83/VG6kHz4poHOfS0RaNflzXSkmCi64fLBlg== - dependencies: - "@turf/bearing" "^6.5.0" - "@turf/destination" "^6.5.0" - "@turf/distance" "^6.5.0" - "@turf/helpers" "^6.5.0" - "@turf/invariant" "^6.5.0" - "@turf/line-intersect" "^6.5.0" - "@turf/meta" "^6.5.0" - -"@types/cookie@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.3.3.tgz#85bc74ba782fb7aa3a514d11767832b0e3bc6803" - integrity sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow== - -"@types/geojson@*", "@types/geojson@^7946.0.8": - version "7946.0.10" - resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.10.tgz#6dfbf5ea17142f7f9a043809f1cd4c448cb68249" - integrity sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA== - -"@types/geojson@7946.0.8": - version "7946.0.8" - resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.8.tgz#30744afdb385e2945e22f3b033f897f76b1f12ca" - integrity sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA== - -"@types/mapbox-gl@^2.6.0": - version "2.7.10" - resolved "https://registry.yarnpkg.com/@types/mapbox-gl/-/mapbox-gl-2.7.10.tgz#a3a32a366bad8966c0a40b78209ed430ba018ce1" - integrity sha512-nMVEcu9bAcenvx6oPWubQSPevsekByjOfKjlkr+8P91vawtkxTnopDoXXq1Qn/f4cg3zt0Z2W9DVsVsKRNXJTw== - dependencies: - "@types/geojson" "*" - -"@types/mapbox__point-geometry@*", "@types/mapbox__point-geometry@^0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.2.tgz#488a9b76e8457d6792ea2504cdd4ecdd9860a27e" - integrity sha512-D0lgCq+3VWV85ey1MZVkE8ZveyuvW5VAfuahVTQRpXFQTxw03SuIf1/K4UQ87MMIXVKzpFjXFiFMZzLj2kU+iA== - -"@types/mapbox__vector-tile@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.0.tgz#8fa1379dbaead1e1b639b8d96cfd174404c379d6" - integrity sha512-kDwVreQO5V4c8yAxzZVQLE5tyWF+IPToAanloQaSnwfXmIcJ7cyOrv8z4Ft4y7PsLYmhWXmON8MBV8RX0Rgr8g== - dependencies: - "@types/geojson" "*" - "@types/mapbox__point-geometry" "*" - "@types/pbf" "*" - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/pbf@*", "@types/pbf@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/pbf/-/pbf-3.0.2.tgz#8d291ad68b4b8c533e96c174a2e3e6399a59ed61" - integrity sha512-EDrLIPaPXOZqDjrkzxxbX7UlJSeQVgah3i0aA4pOSzmK9zq3BIh7/MZIQxED7slJByvKM4Gc6Hypyu2lJzh3SQ== - -"@xstate/react@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@xstate/react/-/react-3.0.0.tgz#888d9a6f128c70b632c18ad55f1f851f6ab092ba" - integrity sha512-KHSCfwtb8gZ7QH2luihvmKYI+0lcdHQOmGNRUxUEs4zVgaJCyd8csCEmwPsudpliLdUmyxX2pzUBojFkINpotw== - dependencies: - use-isomorphic-layout-effect "^1.0.0" - use-sync-external-store "^1.0.0" - -"@xstate/react@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@xstate/react/-/react-3.0.1.tgz#937eeb5d5d61734ab756ca40146f84a6fe977095" - integrity sha512-/tq/gg92P9ke8J+yDNDBv5/PAxBvXJf2cYyGDByzgtl5wKaxKxzDT82Gj3eWlCJXkrBg4J5/V47//gRJuVH2fA== - dependencies: - use-isomorphic-layout-effect "^1.0.0" - use-sync-external-store "^1.0.0" - -abortcontroller-polyfill@^1.1.9: - version "1.7.5" - resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" - integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ== - -acorn@^8.5.0: - version "8.8.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== - -amazon-cognito-identity-js@6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.1.2.tgz#975df21b0590098c2d3f455f48dbba255560bbf5" - integrity sha512-Ptutf9SLvKEM1Kr2kTPUvu/9THjQ0Si1l80iZYcS8NqScAAiDg8WjOOhQeJPcQDXt3Vym91luZ6zNW/3ErjEdQ== - dependencies: - "@aws-crypto/sha256-js" "1.2.2" - buffer "4.9.2" - fast-base64-decode "^1.0.0" - isomorphic-unfetch "^3.0.0" - js-cookie "^2.2.1" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -aria-hidden@^1.1.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.2.tgz#8c4f7cc88d73ca42114106fdf6f47e68d31475b8" - integrity sha512-6y/ogyDTk/7YAe91T3E2PR1ALVKyM2QbTio5HwM+N1Q6CMlCKhvClyIjkckBswa0f2xJhjsfzIGa1yVSe1UMVA== - dependencies: - tslib "^2.0.0" - -aws-amplify-react@^5.1.43: - version "5.1.43" - resolved "https://registry.yarnpkg.com/aws-amplify-react/-/aws-amplify-react-5.1.43.tgz#aa07b30da2e061fe55959252fc95a5a6726c1a01" - integrity sha512-dhetRbT1qLXrH6p30J8VwVz0t/zzMyMopb/ciMSxhuukfgGo8/8dsiIYgABdrvoZojwhlY24M7RHPAMIPva+Vg== - dependencies: - qrcode.react "^0.8.0" - regenerator-runtime "^0.11.1" - -aws-amplify@^5.0.15: - version "5.0.15" - resolved "https://registry.yarnpkg.com/aws-amplify/-/aws-amplify-5.0.15.tgz#bf0e52892f327d36925b744ed2afbe880e5c6cd5" - integrity sha512-qIELCzAweJ7hYqbEshkawr2GQbkQeNOGl0ZaVu2slbyOLujYuIhCWOPrzpQkrApt9WIIdJDPqiB12F93PBbmQw== - dependencies: - "@aws-amplify/analytics" "6.0.15" - "@aws-amplify/api" "5.0.15" - "@aws-amplify/auth" "5.1.9" - "@aws-amplify/cache" "5.0.15" - "@aws-amplify/core" "5.0.15" - "@aws-amplify/datastore" "4.0.15" - "@aws-amplify/geo" "2.0.15" - "@aws-amplify/interactions" "5.0.15" - "@aws-amplify/notifications" "1.0.15" - "@aws-amplify/predictions" "5.0.15" - "@aws-amplify/pubsub" "5.0.15" - "@aws-amplify/storage" "5.1.5" - "@aws-amplify/xr" "4.0.15" - tslib "^2.0.0" - -axios@0.26.0: - version "0.26.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.26.0.tgz#9a318f1c69ec108f8cd5f3c3d390366635e13928" - integrity sha512-lKoGLMYtHvFrPVt3r+RBMp9nh34N0M8zEfCWqdWZx6phynIEhQqAdydpyBAAG211zlhX9Rgu08cOamy6XjE5Og== - dependencies: - follow-redirects "^1.14.8" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base-64@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/base-64/-/base-64-1.0.0.tgz#09d0f2084e32a3fd08c2475b973788eee6ae8f4a" - integrity sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg== - -base-x@^3.0.8: - version "3.0.9" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== - dependencies: - safe-buffer "^5.0.1" - -base64-js@^1.0.2, base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - -bowser@^2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" - integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.6.6: - version "4.21.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" - integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== - dependencies: - caniuse-lite "^1.0.30001449" - electron-to-chromium "^1.4.284" - node-releases "^2.0.8" - update-browserslist-db "^1.0.10" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer@4.9.2: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camel-case@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" - integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== - dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" - -camelcase-keys@6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" - integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== - dependencies: - camelcase "^5.3.1" - map-obj "^4.0.0" - quick-lru "^4.0.1" - -camelcase@^5.0.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -caniuse-lite@^1.0.30001449: - version "1.0.30001457" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001457.tgz#6af34bb5d720074e2099432aa522c21555a18301" - integrity sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA== - -capital-case@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669" - integrity sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - upper-case-first "^2.0.2" - -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -change-case@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/change-case/-/change-case-4.1.2.tgz#fedfc5f136045e2398c0410ee441f95704641e12" - integrity sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A== - dependencies: - camel-case "^4.1.2" - capital-case "^1.0.4" - constant-case "^3.0.4" - dot-case "^3.0.4" - header-case "^2.0.4" - no-case "^3.0.4" - param-case "^3.0.4" - pascal-case "^3.1.2" - path-case "^3.0.4" - sentence-case "^3.0.4" - snake-case "^3.0.4" - tslib "^2.0.3" - -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -classnames@2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" - integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - -clone@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^7.0.0, commander@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -commander@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -constant-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-3.0.4.tgz#3b84a9aeaf4cf31ec45e6bf5de91bdfb0589faf1" - integrity sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - upper-case "^2.0.2" - -cookie@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - -cosmiconfig@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" - integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -css-select@^4.1.3: - version "4.3.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" - integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== - dependencies: - boolbase "^1.0.0" - css-what "^6.0.1" - domhandler "^4.3.1" - domutils "^2.8.0" - nth-check "^2.0.1" - -css-tree@^1.1.2, css-tree@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== - dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" - -css-what@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - -csscolorparser@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/csscolorparser/-/csscolorparser-1.0.3.tgz#b34f391eea4da8f3e98231e2ccd8df9c041f171b" - integrity sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w== - -csso@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== - dependencies: - css-tree "^1.1.2" - -csstype@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" - integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== - -debounce@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" - integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== - -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - -deepmerge@4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -detect-libc@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== - -detect-node-es@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" - integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== - -dijkstrajs@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.2.tgz#2e48c0d3b825462afe75ab4ad5e829c8ece36257" - integrity sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg== - -dom-serializer@^1.0.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" - integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - -domelementtype@^2.0.1, domelementtype@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domhandler@^4.2.0, domhandler@^4.2.2, domhandler@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== - dependencies: - domelementtype "^2.2.0" - -domutils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -dotenv-expand@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" - integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== - -dotenv@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-7.0.0.tgz#a2be3cd52736673206e8a85fb5210eea29628e7c" - integrity sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g== - -earcut@^2.2.2, earcut@^2.2.3: - version "2.2.4" - resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.4.tgz#6d02fd4d68160c114825d06890a92ecaae60343a" - integrity sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ== - -electron-to-chromium@^1.4.284: - version "1.4.304" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.304.tgz#d6eb7fea4073aacc471cf117df08b4b4978dc6ad" - integrity sha512-6c8M+ojPgDIXN2NyfGn8oHASXYnayj+gSEnGeLMKb9zjsySeVB/j7KkNAAG9yDcv8gNlhvFg5REa1N/kQU6pgA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -encode-utf8@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" - integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== - -entities@2.2.0, entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -entities@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" - integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -events@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -fast-base64-decode@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz#b434a0dd7d92b12b43f26819300d2dafb83ee418" - integrity sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q== - -fast-xml-parser@3.19.0: - version "3.19.0" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz#cb637ec3f3999f51406dd8ff0e6fc4d83e520d01" - integrity sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg== - -fast-xml-parser@^3.16.0: - version "3.21.1" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-3.21.1.tgz#152a1d51d445380f7046b304672dd55d15c9e736" - integrity sha512-FTFVjYoBOZTJekiUsawGsSYV9QL0A+zDYCRj7y34IO6Jg+2IMYEtQa+bbictpdpV8dHxXywqU7C0gRDEOFtBFg== - dependencies: - strnum "^1.0.4" - -fflate@0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.7.3.tgz#288b034ff0e9c380eaa2feff48c787b8371b7fa5" - integrity sha512-0Zz1jOzJWERhyhsimS54VTqOteCNwRtIlh8isdL0AXLo0g7xNTfTL7oWrkmCnPhZGocKIkWHBistBrrpoNH3aw== - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -follow-redirects@^1.14.8: - version "1.15.6" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" - integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== - -fs-extra@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fuzzy@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/fuzzy/-/fuzzy-0.1.3.tgz#4c76ec2ff0ac1a36a9dccf9a00df8623078d4ed8" - integrity sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w== - -geojson-flatten@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/geojson-flatten/-/geojson-flatten-1.1.1.tgz#601aae07ba6406281ebca683573dcda69eba04c7" - integrity sha512-k/6BCd0qAt7vdqdM1LkLfAy72EsLDy0laNwX0x2h49vfYCiQkRc4PSra8DNEdJ10EKRpwEvDXMb0dBknTJuWpQ== - -geojson-rbush@3.x: - version "3.2.0" - resolved "https://registry.yarnpkg.com/geojson-rbush/-/geojson-rbush-3.2.0.tgz#8b543cf0d56f99b78faf1da52bb66acad6dfc290" - integrity sha512-oVltQTXolxvsz1sZnutlSuLDEcQAKYC/uXt9zDzJJ6bu0W+baTI8LZBaTup5afzibEH4N3jlq2p+a152wlBJ7w== - dependencies: - "@turf/bbox" "*" - "@turf/helpers" "6.x" - "@turf/meta" "6.x" - "@types/geojson" "7946.0.8" - rbush "^3.0.1" - -geojson-vt@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/geojson-vt/-/geojson-vt-3.2.1.tgz#f8adb614d2c1d3f6ee7c4265cad4bbf3ad60c8b7" - integrity sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg== - -get-caller-file@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-nonce@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" - integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== - -get-port@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" - integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw== - -get-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -gl-matrix@^3.2.1, gl-matrix@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.4.3.tgz#fc1191e8320009fd4d20e9339595c6041ddc22c9" - integrity sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA== - -glob@^7.2.0: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^13.2.0: - version "13.20.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" - integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== - dependencies: - type-fest "^0.20.2" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -graphql@15.8.0: - version "15.8.0" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.8.0.tgz#33410e96b012fa3bdb1091cc99a94769db212b38" - integrity sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw== - -grid-index@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/grid-index/-/grid-index-1.1.0.tgz#97f8221edec1026c8377b86446a7c71e79522ea7" - integrity sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -hat@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/hat/-/hat-0.0.3.tgz#bb014a9e64b3788aed8005917413d4ff3d502d8a" - integrity sha512-zpImx2GoKXy42fVDSEad2BPKuSQdLcqsCYa48K3zHSzM/ugWuYjLDr8IXxpVuL7uCLHw56eaiLxCRthhOzf5ug== - -header-case@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063" - integrity sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q== - dependencies: - capital-case "^1.0.4" - tslib "^2.0.3" - -htmlnano@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/htmlnano/-/htmlnano-2.0.3.tgz#50ee639ed63357d4a6c01309f52a35892e4edc2e" - integrity sha512-S4PGGj9RbdgW8LhbILNK7W9JhmYP8zmDY7KDV/8eCiJBQJlbmltp5I0gv8c5ntLljfdxxfmJ+UJVSqyH4mb41A== - dependencies: - cosmiconfig "^7.0.1" - posthtml "^0.16.5" - timsort "^0.3.0" - -htmlparser2@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-7.2.0.tgz#8817cdea38bbc324392a90b1990908e81a65f5a5" - integrity sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.2" - domutils "^2.8.0" - entities "^3.0.1" - -idb@5.0.6: - version "5.0.6" - resolved "https://registry.yarnpkg.com/idb/-/idb-5.0.6.tgz#8c94624f5a8a026abe3bef3c7166a5febd1cadc1" - integrity sha512-/PFvOWPzRcEPmlDt5jEvzVZVs0wyd/EvGvkDIcbBpGuMMLQKrTPG0TxvE2UJtgZtCQCmOtM2QD7yQJBVEjKGOw== - -ieee754@^1.1.12, ieee754@^1.1.13, ieee754@^1.1.4: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -immer@9.0.6: - version "9.0.6" - resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.6.tgz#7a96bf2674d06c8143e327cbf73539388ddf1a73" - integrity sha512-G95ivKpy+EvVAnAab4fVa4YGYn24J1SpEktnJX7JJ45Bd7xqME/SCplFzYFmTbrkwZbQ4xJK1xMTUYBkN6pWsQ== - -import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-json@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-json/-/is-json-2.0.1.tgz#6be166d144828a131d686891b983df62c39491ff" - integrity sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -isarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isomorphic-unfetch@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz#87341d5f4f7b63843d468438128cb087b7c3e98f" - integrity sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q== - dependencies: - node-fetch "^2.6.1" - unfetch "^4.2.0" - -js-cookie@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" - integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json5@^2.2.0, json5@^2.2.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonc-parser@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" - integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== - -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" - -kdbush@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/kdbush/-/kdbush-3.0.0.tgz#f8484794d47004cc2d85ed3a79353dbe0abc2bf0" - integrity sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew== - -lightningcss-darwin-arm64@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.19.0.tgz#56ab071e932f845dbb7667f44f5b78441175a343" - integrity sha512-wIJmFtYX0rXHsXHSr4+sC5clwblEMji7HHQ4Ub1/CznVRxtCFha6JIt5JZaNf8vQrfdZnBxLLC6R8pC818jXqg== - -lightningcss-darwin-x64@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.19.0.tgz#c867308b88859ba61a2c46c82b1ca52ff73a1bd0" - integrity sha512-Lif1wD6P4poaw9c/4Uh2z+gmrWhw/HtXFoeZ3bEsv6Ia4tt8rOJBdkfVaUJ6VXmpKHALve+iTyP2+50xY1wKPw== - -lightningcss-linux-arm-gnueabihf@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.19.0.tgz#0f921dc45f2e5c3aea70fab98844ac0e5f2f81be" - integrity sha512-P15VXY5682mTXaiDtbnLYQflc8BYb774j2R84FgDLJTN6Qp0ZjWEFyN1SPqyfTj2B2TFjRHRUvQSSZ7qN4Weig== - -lightningcss-linux-arm64-gnu@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.19.0.tgz#027f9df9c7f4ffa127c37a71726245a5794d7ba2" - integrity sha512-zwXRjWqpev8wqO0sv0M1aM1PpjHz6RVIsBcxKszIG83Befuh4yNysjgHVplF9RTU7eozGe3Ts7r6we1+Qkqsww== - -lightningcss-linux-arm64-musl@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.19.0.tgz#85ea987da868524eac6db94f8e1eaa23d0b688a3" - integrity sha512-vSCKO7SDnZaFN9zEloKSZM5/kC5gbzUjoJQ43BvUpyTFUX7ACs/mDfl2Eq6fdz2+uWhUh7vf92c4EaaP4udEtA== - -lightningcss-linux-x64-gnu@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.19.0.tgz#02bec89579ab4153dccc0def755d1fd9e3ee7f3c" - integrity sha512-0AFQKvVzXf9byrXUq9z0anMGLdZJS+XSDqidyijI5njIwj6MdbvX2UZK/c4FfNmeRa2N/8ngTffoIuOUit5eIQ== - -lightningcss-linux-x64-musl@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.19.0.tgz#e36a5df8193ae961d22974635e4c100a1823bb8c" - integrity sha512-SJoM8CLPt6ECCgSuWe+g0qo8dqQYVcPiW2s19dxkmSI5+Uu1GIRzyKA0b7QqmEXolA+oSJhQqCmJpzjY4CuZAg== - -lightningcss-win32-x64-msvc@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.19.0.tgz#0854dbd153035eca1396e2227c708ad43655a61c" - integrity sha512-C+VuUTeSUOAaBZZOPT7Etn/agx/MatzJzGRkeV+zEABmPuntv1zihncsi+AyGmjkkzq3wVedEy7h0/4S84mUtg== - -lightningcss@^1.16.1: - version "1.19.0" - resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.19.0.tgz#fbbad0975de66252e38d96b5bdd2a62f2dd0ffbf" - integrity sha512-yV5UR7og+Og7lQC+70DA7a8ta1uiOPnWPJfxa0wnxylev5qfo4P+4iMpzWAdYWOca4jdNQZii+bDL/l+4hUXIA== - dependencies: - detect-libc "^1.0.3" - optionalDependencies: - lightningcss-darwin-arm64 "1.19.0" - lightningcss-darwin-x64 "1.19.0" - lightningcss-linux-arm-gnueabihf "1.19.0" - lightningcss-linux-arm64-gnu "1.19.0" - lightningcss-linux-arm64-musl "1.19.0" - lightningcss-linux-x64-gnu "1.19.0" - lightningcss-linux-x64-musl "1.19.0" - lightningcss-win32-x64-msvc "1.19.0" - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -lmdb@2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/lmdb/-/lmdb-2.5.2.tgz#37e28a9fb43405f4dc48c44cec0e13a14c4a6ff1" - integrity sha512-V5V5Xa2Hp9i2XsbDALkBTeHXnBXh/lEmk9p22zdr7jtuOIY9TGhjK6vAvTpOOx9IKU4hJkRWZxn/HsvR1ELLtA== - dependencies: - msgpackr "^1.5.4" - node-addon-api "^4.3.0" - node-gyp-build-optional-packages "5.0.3" - ordered-binary "^1.2.4" - weak-lru-cache "^1.2.2" - optionalDependencies: - "@lmdb/lmdb-darwin-arm64" "2.5.2" - "@lmdb/lmdb-darwin-x64" "2.5.2" - "@lmdb/lmdb-linux-arm" "2.5.2" - "@lmdb/lmdb-linux-arm64" "2.5.2" - "@lmdb/lmdb-linux-x64" "2.5.2" - "@lmdb/lmdb-win32-x64" "2.5.2" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash.debounce@^4.0.6: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - -lodash.isequal@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== - -lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - -map-obj@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" - integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== - -mapbox-gl@1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/mapbox-gl/-/mapbox-gl-1.13.1.tgz#322efe75ab4c764fc4c776da1506aad58d5a5b9d" - integrity sha512-GSyubcoSF5MyaP8z+DasLu5v7KmDK2pp4S5+VQ5WdVQUOaAqQY4jwl4JpcdNho3uWm2bIKs7x1l7q3ynGmW60g== - dependencies: - "@mapbox/geojson-rewind" "^0.5.0" - "@mapbox/geojson-types" "^1.0.2" - "@mapbox/jsonlint-lines-primitives" "^2.0.2" - "@mapbox/mapbox-gl-supported" "^1.5.0" - "@mapbox/point-geometry" "^0.1.0" - "@mapbox/tiny-sdf" "^1.1.1" - "@mapbox/unitbezier" "^0.0.0" - "@mapbox/vector-tile" "^1.3.1" - "@mapbox/whoots-js" "^3.1.0" - csscolorparser "~1.0.3" - earcut "^2.2.2" - geojson-vt "^3.2.1" - gl-matrix "^3.2.1" - grid-index "^1.1.0" - minimist "^1.2.5" - murmurhash-js "^1.0.0" - pbf "^3.2.1" - potpack "^1.0.1" - quickselect "^2.0.0" - rw "^1.3.3" - supercluster "^7.1.0" - tinyqueue "^2.0.3" - vt-pbf "^3.1.1" - -maplibre-gl-draw-circle@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/maplibre-gl-draw-circle/-/maplibre-gl-draw-circle-0.1.1.tgz#2b3ff6433c0b82dfc63b3ea555d8074492150180" - integrity sha512-CGdPcoTj9nWHn0Pa37tCoIyVKnN3AozWZjF2C64jnoWw1yzV4tOsUm+VWPbRRotJVKFQoEKHL8/5EjuS1FNiXQ== - dependencies: - "@mapbox/mapbox-gl-draw" "1.3.0" - "@turf/along" "^6.0.1" - "@turf/circle" "^6.0.1" - "@turf/distance" "^6.0.1" - "@turf/helpers" "^6.1.4" - "@turf/length" "^6.0.2" - -maplibre-gl-js-amplify@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/maplibre-gl-js-amplify/-/maplibre-gl-js-amplify-3.0.2.tgz#ccb7f97e4ec31ca0c0dc287b11fb739d45131f86" - integrity sha512-zCnpB6jPKvROLa45yqNkliffrHWu6Z2hZCLVk098/BeWEJjU54eBTxEgezGkIKdD/qPTohq6tf9t/6SEWYsOQA== - dependencies: - "@mapbox/mapbox-gl-draw" "^1.3.0" - "@maplibre/maplibre-gl-geocoder" "^1.5.0" - "@turf/along" "^6.5.0" - "@turf/circle" "^6.5.0" - "@turf/distance" "^6.5.0" - "@turf/helpers" "^6.5.0" - "@turf/length" "^6.5.0" - "@turf/line-slice" "^6.5.0" - debounce "^1.2.1" - maplibre-gl-draw-circle "^0.1.1" - -maplibre-gl@2.1.9: - version "2.1.9" - resolved "https://registry.yarnpkg.com/maplibre-gl/-/maplibre-gl-2.1.9.tgz#042f3ef4224fa890ecf7a410145243f1fc943dcd" - integrity sha512-pnWJmILeZpgA5QSI7K7xFK3yrkyYTd9srw3fCi2Ca52Phm78hsznPwUErEQcZLfxXKn/1h9t8IPdj0TH0NBNbg== - dependencies: - "@mapbox/geojson-rewind" "^0.5.1" - "@mapbox/jsonlint-lines-primitives" "^2.0.2" - "@mapbox/mapbox-gl-supported" "^2.0.1" - "@mapbox/point-geometry" "^0.1.0" - "@mapbox/tiny-sdf" "^2.0.4" - "@mapbox/unitbezier" "^0.0.1" - "@mapbox/vector-tile" "^1.3.1" - "@mapbox/whoots-js" "^3.1.0" - "@types/geojson" "^7946.0.8" - "@types/mapbox__point-geometry" "^0.1.2" - "@types/mapbox__vector-tile" "^1.3.0" - "@types/pbf" "^3.0.2" - csscolorparser "~1.0.3" - earcut "^2.2.3" - geojson-vt "^3.2.1" - gl-matrix "^3.4.3" - murmurhash-js "^1.0.0" - pbf "^3.2.1" - potpack "^1.0.2" - quickselect "^2.0.0" - supercluster "^7.1.4" - tinyqueue "^2.0.3" - vt-pbf "^3.1.3" - -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== - -micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.5, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -msgpackr-extract@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/msgpackr-extract/-/msgpackr-extract-3.0.2.tgz#e05ec1bb4453ddf020551bcd5daaf0092a2c279d" - integrity sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A== - dependencies: - node-gyp-build-optional-packages "5.0.7" - optionalDependencies: - "@msgpackr-extract/msgpackr-extract-darwin-arm64" "3.0.2" - "@msgpackr-extract/msgpackr-extract-darwin-x64" "3.0.2" - "@msgpackr-extract/msgpackr-extract-linux-arm" "3.0.2" - "@msgpackr-extract/msgpackr-extract-linux-arm64" "3.0.2" - "@msgpackr-extract/msgpackr-extract-linux-x64" "3.0.2" - "@msgpackr-extract/msgpackr-extract-win32-x64" "3.0.2" - -msgpackr@^1.5.4: - version "1.10.1" - resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.10.1.tgz#51953bb4ce4f3494f0c4af3f484f01cfbb306555" - integrity sha512-r5VRLv9qouXuLiIBrLpl2d5ZvPt8svdQTl5/vMvE4nzDMyEX4sgW5yWhuBBj5UmgwOTWj8CIdSXn5sAfsHAWIQ== - optionalDependencies: - msgpackr-extract "^3.0.2" - -murmurhash-js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/murmurhash-js/-/murmurhash-js-1.0.0.tgz#b06278e21fc6c37fa5313732b0412bcb6ae15f51" - integrity sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw== - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -node-addon-api@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" - integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== - -node-addon-api@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f" - integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== - -node-fetch@^2.6.1: - version "2.6.9" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" - integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== - dependencies: - whatwg-url "^5.0.0" - -node-gyp-build-optional-packages@5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.3.tgz#92a89d400352c44ad3975010368072b41ad66c17" - integrity sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA== - -node-gyp-build-optional-packages@5.0.7: - version "5.0.7" - resolved "https://registry.yarnpkg.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz#5d2632bbde0ab2f6e22f1bbac2199b07244ae0b3" - integrity sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w== - -node-gyp-build@^4.3.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" - integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== - -node-releases@^2.0.8: - version "2.0.10" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" - integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== - -nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - -nullthrows@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" - integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== - -object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -ordered-binary@^1.2.4: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ordered-binary/-/ordered-binary-1.4.0.tgz#6bb53d44925f3b8afc33d1eed0fa15693b211389" - integrity sha512-EHQ/jk4/a9hLupIKxTfUsQRej1Yd/0QLQs3vGvIqg5ZtCYSzNhkzHoZc7Zf4e4kUlDaC3Uw8Q/1opOLNN2OKRQ== - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -paho-mqtt@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/paho-mqtt/-/paho-mqtt-1.1.0.tgz#8c10e29eb162e966fb15188d965c3dce505de9d9" - integrity sha512-KPbL9KAB0ASvhSDbOrZBaccXS+/s7/LIofbPyERww8hM5Ko71GUJQ6Nmg0BWqj8phAIT8zdf/Sd/RftHU9i2HA== - -pako@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pako/-/pako-2.0.4.tgz#6cebc4bbb0b6c73b0d5b8d7e8476e2b2fbea576d" - integrity sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg== - -param-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" - integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -parcel@^2.8.3: - version "2.8.3" - resolved "https://registry.yarnpkg.com/parcel/-/parcel-2.8.3.tgz#1ff71d7317274fd367379bc7310a52c6b75d30c2" - integrity sha512-5rMBpbNE72g6jZvkdR5gS2nyhwIXaJy8i65osOqs/+5b7zgf3eMKgjSsDrv6bhz3gzifsba6MBJiZdBckl+vnA== - dependencies: - "@parcel/config-default" "2.8.3" - "@parcel/core" "2.8.3" - "@parcel/diagnostic" "2.8.3" - "@parcel/events" "2.8.3" - "@parcel/fs" "2.8.3" - "@parcel/logger" "2.8.3" - "@parcel/package-manager" "2.8.3" - "@parcel/reporter-cli" "2.8.3" - "@parcel/reporter-dev-server" "2.8.3" - "@parcel/utils" "2.8.3" - chalk "^4.1.0" - commander "^7.0.0" - get-port "^4.2.0" - v8-compile-cache "^2.0.0" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -path-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/path-case/-/path-case-3.0.4.tgz#9168645334eb942658375c56f80b4c0cb5f82c6f" - integrity sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pbf@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/pbf/-/pbf-3.2.1.tgz#b4c1b9e72af966cd82c6531691115cc0409ffe2a" - integrity sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ== - dependencies: - ieee754 "^1.1.12" - resolve-protobuf-schema "^2.1.0" - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pngjs@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" - integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== - -postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -posthtml-parser@^0.10.1: - version "0.10.2" - resolved "https://registry.yarnpkg.com/posthtml-parser/-/posthtml-parser-0.10.2.tgz#df364d7b179f2a6bf0466b56be7b98fd4e97c573" - integrity sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg== - dependencies: - htmlparser2 "^7.1.1" - -posthtml-parser@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/posthtml-parser/-/posthtml-parser-0.11.0.tgz#25d1c7bf811ea83559bc4c21c189a29747a24b7a" - integrity sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw== - dependencies: - htmlparser2 "^7.1.1" - -posthtml-render@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/posthtml-render/-/posthtml-render-3.0.0.tgz#97be44931496f495b4f07b99e903cc70ad6a3205" - integrity sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA== - dependencies: - is-json "^2.0.1" - -posthtml@^0.16.4, posthtml@^0.16.5: - version "0.16.6" - resolved "https://registry.yarnpkg.com/posthtml/-/posthtml-0.16.6.tgz#e2fc407f67a64d2fa3567afe770409ffdadafe59" - integrity sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ== - dependencies: - posthtml-parser "^0.11.0" - posthtml-render "^3.0.0" - -potpack@^1.0.1, potpack@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/potpack/-/potpack-1.0.2.tgz#23b99e64eb74f5741ffe7656b5b5c4ddce8dfc14" - integrity sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ== - -prop-types@^15.6.0: - version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - -protocol-buffers-schema@^3.3.1: - version "3.6.0" - resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz#77bc75a48b2ff142c1ad5b5b90c94cd0fa2efd03" - integrity sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw== - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== - -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== - -qr.js@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/qr.js/-/qr.js-0.0.0.tgz#cace86386f59a0db8050fa90d9b6b0e88a1e364f" - integrity sha512-c4iYnWb+k2E+vYpRimHqSu575b1/wKl4XFeJGpFmrJQz5I88v9aY2czh7s0w36srfCM1sXgC/xpoJz5dJfq+OQ== - -qrcode.react@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/qrcode.react/-/qrcode.react-0.8.0.tgz#413b31cc3b62910e39513f7bead945e01c4c34fb" - integrity sha512-16wKpuFvLwciIq2YAsfmPUCnSR8GrYPsXRK5KVdcIuX0+W/MKZbBkFhl44ttRx4TWZHqRjfztoWOxdPF0Hb9JA== - dependencies: - prop-types "^15.6.0" - qr.js "0.0.0" - -qrcode@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.5.0.tgz#95abb8a91fdafd86f8190f2836abbfc500c72d1b" - integrity sha512-9MgRpgVc+/+47dFvQeD6U2s0Z92EsKzcHogtum4QB+UNd025WOJSHvn/hjk9xmzj7Stj95CyUAs31mrjxliEsQ== - dependencies: - dijkstrajs "^1.0.1" - encode-utf8 "^1.0.3" - pngjs "^5.0.0" - yargs "^15.3.1" - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== - -quick-lru@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" - integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== - -quickselect@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-2.0.0.tgz#f19680a486a5eefb581303e023e98faaf25dd018" - integrity sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw== - -rbush@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/rbush/-/rbush-3.0.1.tgz#5fafa8a79b3b9afdfe5008403a720cc1de882ecf" - integrity sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w== - dependencies: - quickselect "^2.0.0" - -react-dom@^17: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" - -react-error-overlay@6.0.9: - version "6.0.9" - resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" - integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== - -react-generate-context@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/react-generate-context/-/react-generate-context-1.0.1.tgz#4454cfecb0b3f27502185dfa5c63d5f5ec14b936" - integrity sha512-rOFGh3KgC2Ot66DmVCcT1p8lVJCmmCjzGE5WK/KsyDFi43wpIbW1PYcr04cQ3mbF4LaIkY6SpK7k1DOgwtpUXA== - -react-is@^16.13.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-map-gl@7.0.15: - version "7.0.15" - resolved "https://registry.yarnpkg.com/react-map-gl/-/react-map-gl-7.0.15.tgz#ded08ccff49012099a9945b6c2ef7f266dfbde49" - integrity sha512-l7x8lBhIEcHTreSgrc7hsKv5HsMY1wQg2PVXuKAPmQtgRZc9C3NGwurVJFe24gOlAwzta5UavAHWDiZdU1ZNCw== - dependencies: - "@types/mapbox-gl" "^2.6.0" - -react-native-get-random-values@^1.4.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/react-native-get-random-values/-/react-native-get-random-values-1.8.0.tgz#1cb4bd4bd3966a356e59697b8f372999fe97cb16" - integrity sha512-H/zghhun0T+UIJLmig3+ZuBCvF66rdbiWUfRSNS6kv5oDSpa1ZiVyvRWtuPesQpT8dXj+Bv7WJRQOUP+5TB1sA== - dependencies: - fast-base64-decode "^1.0.0" - -react-refresh@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.9.0.tgz#71863337adc3e5c2f8a6bfddd12ae3bfe32aafbf" - integrity sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ== - -react-remove-scroll-bar@^2.3.3: - version "2.3.4" - resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz#53e272d7a5cb8242990c7f144c44d8bd8ab5afd9" - integrity sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A== - dependencies: - react-style-singleton "^2.2.1" - tslib "^2.0.0" - -react-remove-scroll@2.5.4: - version "2.5.4" - resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.5.4.tgz#afe6491acabde26f628f844b67647645488d2ea0" - integrity sha512-xGVKJJr0SJGQVirVFAUZ2k1QLyO6m+2fy0l8Qawbp5Jgrv3DeLalrfMNBFSlmz5kriGGzsVBtGVnf4pTKIhhWA== - dependencies: - react-remove-scroll-bar "^2.3.3" - react-style-singleton "^2.2.1" - tslib "^2.1.0" - use-callback-ref "^1.3.0" - use-sidecar "^1.1.2" - -react-style-singleton@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.1.tgz#f99e420492b2d8f34d38308ff660b60d0b1205b4" - integrity sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g== - dependencies: - get-nonce "^1.0.0" - invariant "^2.2.4" - tslib "^2.0.0" - -react@^17: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -regenerator-runtime@^0.11.1: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== - -regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.7: - version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-protobuf-schema@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz#9ca9a9e69cf192bbdaf1006ec1973948aa4a3758" - integrity sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ== - dependencies: - protocol-buffers-schema "^3.3.1" - -rw@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" - integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ== - -rw@~0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/rw/-/rw-0.1.4.tgz#4903cbd80248ae0ede685bf58fd236a7a9b29a3e" - integrity sha512-vSj3D96kMcjNyqPcp65wBRIDImGSrUuMxngNNxvw8MQaO+aQ6llzRPH7XcJy5zrpb3wU++045+Uz/IDIM684iw== - -safe-buffer@^5.0.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -semver@^5.7.0, semver@^5.7.1: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -sentence-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f" - integrity sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - upper-case-first "^2.0.2" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -snake-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" - integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -srcset@4: - version "4.0.0" - resolved "https://registry.yarnpkg.com/srcset/-/srcset-4.0.0.tgz#336816b665b14cd013ba545b6fe62357f86e65f4" - integrity sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw== - -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strnum@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" - integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== - -style-dictionary@3.7.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/style-dictionary/-/style-dictionary-3.7.1.tgz#d61c980513d7bb0a1946a9fab31491a672d0f6a2" - integrity sha512-yYU9Z/J8Znj9T9oJVjo8VOYamrOxv0UbBKPjhSt+PharxrhyQCM4RWb71fgEfv2pK9KO8G83/0ChDNQZ1mn0wQ== - dependencies: - chalk "^4.0.0" - change-case "^4.1.2" - commander "^8.3.0" - fs-extra "^10.0.0" - glob "^7.2.0" - json5 "^2.2.0" - jsonc-parser "^3.0.0" - lodash "^4.17.15" - tinycolor2 "^1.4.1" - -subtag@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/subtag/-/subtag-0.5.0.tgz#1728a8df5257fb98ded4fb981b2ac7af10cf58ba" - integrity sha512-CaIBcTSb/nyk4xiiSOtZYz1B+F12ZxW8NEp54CdT+84vmh/h4sUnHGC6+KQXUfED8u22PQjCYWfZny8d2ELXwg== - -suggestions-list@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/suggestions-list/-/suggestions-list-0.0.2.tgz#3c5f501833e697a726a1bf58fbc454d57ffa0e98" - integrity sha512-Yw0fdq14c6RQWQIfE1/8WEi9Dp8rjyCD6FhYA/Tit2/ADbE9Y4ADG4ezlvivsa8Civ5nz++pyVVBMjOMlgIUJw== - dependencies: - fuzzy "^0.1.1" - xtend "^4.0.0" - -supercluster@^7.1.0, supercluster@^7.1.4: - version "7.1.5" - resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-7.1.5.tgz#65a6ce4a037a972767740614c19051b64b8be5a3" - integrity sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg== - dependencies: - kdbush "^3.0.0" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.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== - dependencies: - has-flag "^4.0.0" - -svgo@^2.4.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" - integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== - dependencies: - "@trysound/sax" "0.2.0" - commander "^7.2.0" - css-select "^4.1.3" - css-tree "^1.1.3" - csso "^4.2.0" - picocolors "^1.0.0" - stable "^0.1.8" - -term-size@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" - integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== - -terser@^5.2.0: - version "5.16.4" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.4.tgz#51284b440b93242291a98f2a9903c024cfb70e6e" - integrity sha512-5yEGuZ3DZradbogeYQ1NaGz7rXVBDWujWlx1PT8efXO6Txn+eWbfKqB2bTDVmFXmePFkoLU6XI8UektMIEA0ug== - dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" - commander "^2.20.0" - source-map-support "~0.5.20" - -timsort@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" - integrity sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A== - -tinycolor2@1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803" - integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA== - -tinycolor2@^1.4.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.6.0.tgz#f98007460169b0263b97072c5ae92484ce02d09e" - integrity sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw== - -tinyqueue@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/tinyqueue/-/tinyqueue-2.0.3.tgz#64d8492ebf39e7801d7bd34062e29b45b2035f08" - integrity sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -traverse@~0.6.6: - version "0.6.7" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.7.tgz#46961cd2d57dd8706c36664acde06a248f1173fe" - integrity sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg== - -tslib@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" - integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== - -tslib@^1.11.1, tslib@^1.8.0, tslib@^1.9.3: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" - integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -ulid@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/ulid/-/ulid-2.3.0.tgz#93063522771a9774121a84d126ecd3eb9804071f" - integrity sha512-keqHubrlpvT6G2wH0OEfSW4mquYRcbe/J8NMmveoQOjUqmo+hXtO+ORCpWhdbZ7k72UtY61BL7haGxW6enBnjw== - -unfetch@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" - integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== - -universal-cookie@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/universal-cookie/-/universal-cookie-4.0.4.tgz#06e8b3625bf9af049569ef97109b4bb226ad798d" - integrity sha512-lbRVHoOMtItjWbM7TwDLdl8wug7izB0tq3/YVKhT/ahB4VDvWMyvnADfnJI8y6fSvsjh51Ix7lTGC6Tn4rMPhw== - dependencies: - "@types/cookie" "^0.3.3" - cookie "^0.4.0" - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -update-browserslist-db@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -upper-case-first@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-2.0.2.tgz#992c3273f882abd19d1e02894cc147117f844324" - integrity sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg== - dependencies: - tslib "^2.0.3" - -upper-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-2.0.2.tgz#d89810823faab1df1549b7d97a76f8662bae6f7a" - integrity sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg== - dependencies: - tslib "^2.0.3" - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ== - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use-callback-ref@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.0.tgz#772199899b9c9a50526fedc4993fc7fa1f7e32d5" - integrity sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w== - dependencies: - tslib "^2.0.0" - -use-isomorphic-layout-effect@^1.0.0, use-isomorphic-layout-effect@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" - integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== - -use-sidecar@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.2.tgz#2f43126ba2d7d7e117aa5855e5d8f0276dfe73c2" - integrity sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw== - dependencies: - detect-node-es "^1.1.0" - tslib "^2.0.0" - -use-sync-external-store@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" - integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== - -utility-types@^3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b" - integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== - -uuid@3.4.0, uuid@^3.0.0, uuid@^3.2.1: - 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: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-compile-cache@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -vt-pbf@^3.1.1, vt-pbf@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/vt-pbf/-/vt-pbf-3.1.3.tgz#68fd150756465e2edae1cc5c048e063916dcfaac" - integrity sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA== - dependencies: - "@mapbox/point-geometry" "0.1.0" - "@mapbox/vector-tile" "^1.3.1" - pbf "^3.2.1" - -weak-lru-cache@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz#fdbb6741f36bae9540d12f480ce8254060dccd19" - integrity sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw== - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -wgs84@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/wgs84/-/wgs84-0.0.0.tgz#34fdc555917b6e57cf2a282ed043710c049cdc76" - integrity sha512-ANHlY4Rb5kHw40D0NJ6moaVfOCMrp9Gpd1R/AIQYg2ko4/jzcJ+TVXYYF6kXJqQwITvEZP4yEthjM7U6rYlljQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -xstate@^4.33.6: - version "4.36.0" - resolved "https://registry.yarnpkg.com/xstate/-/xstate-4.36.0.tgz#8bc633e4670be37c4e1adb28b4649b0a951ef7f1" - integrity sha512-AUI+KPgyy3g4PDpZWzUy/5ubd8VymbqikNmrJx5AQfqh+AQnemkBiabGROno+am1wUl2yeuT3UDrzUTSidfa6g== - -xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -xxhash-wasm@^0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz#752398c131a4dd407b5132ba62ad372029be6f79" - integrity sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA== - -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs@^15.3.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - -zen-observable-ts@0.8.19: - version "0.8.19" - resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.19.tgz#c094cd20e83ddb02a11144a6e2a89706946b5694" - integrity sha512-u1a2rpE13G+jSzrg3aiCqXU5tN2kw41b+cBZGmnc+30YimdkKiDj9bTowcB41eL77/17RF/h+393AuVgShyheQ== - dependencies: - tslib "^1.9.3" - zen-observable "^0.8.0" - -zen-observable@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.7.1.tgz#f84075c0ee085594d3566e1d6454207f126411b3" - integrity sha512-OI6VMSe0yeqaouIXtedC+F55Sr6r9ppS7+wTbSexkYdHbdt4ctTuPNXP/rwm7GTVI63YBc+EBT0b0tl7YnJLRg== - -zen-observable@^0.8.0: - version "0.8.15" - resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" - integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ== - -zen-push@0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/zen-push/-/zen-push-0.2.1.tgz#ddc33b90f66f9a84237d5f1893970f6be60c3c28" - integrity sha512-Qv4qvc8ZIue51B/0zmeIMxpIGDVhz4GhJALBvnKs/FRa2T7jy4Ori9wFwaHVt0zWV7MIFglKAHbgnVxVTw7U1w== - dependencies: - zen-observable "^0.7.0" diff --git a/packages/ui/.storybook/main.js b/packages/ui/.storybook/main.js deleted file mode 100644 index 8e9faebce9..0000000000 --- a/packages/ui/.storybook/main.js +++ /dev/null @@ -1,76 +0,0 @@ -import { join, dirname, resolve } from 'path' - -/** - * This function is used to resolve the absolute path of a package. - * It is needed in projects that use Yarn PnP or are set up within a monorepo. - */ -function getAbsolutePath(value) { - return dirname(require.resolve(join(value, 'package.json'))) -} - -/** @type { import('@storybook/react-webpack5').StorybookConfig } */ -const config = { - stories: [ - './cljs/*_story.js', - '../src/**/*.story.@(js|jsx|mjs|ts|tsx)' - ], - addons: [ - getAbsolutePath('@storybook/addon-links'), - getAbsolutePath('@storybook/addon-essentials'), - getAbsolutePath('@storybook/addon-onboarding'), - getAbsolutePath('@storybook/addon-interactions'), - getAbsolutePath('@storybook/addon-toolbars') - ], - framework: { - name: getAbsolutePath('@storybook/react-webpack5'), - options: {}, - }, - docs: { - autodocs: 'tag', - }, - features: { - storyStoreV7: false - }, - - async webpackFinal(config) { - // module name resolver - config.resolve.alias = { - '@/components': resolve(__dirname, '../@/components'), - '@/lib': resolve(__dirname, '../@/lib') - } - - // NOTE: Don't use .babelrc for this. Because the parcel bundler share - // the babel config with storybook webpack from root path. - const babelLoaderRule = config.module.rules.find( - (rule) => rule.test.toString() === /\.(mjs|tsx?|jsx?)$/.toString() - ) - - // babelLoaderRule.include?.push(__dirname) - const babelLoaderPresets = babelLoaderRule?.use[0].options.presets - babelLoaderPresets.unshift( - [require.resolve('@babel/preset-env'), { - 'targets': { - 'chrome': 100, - 'safari': 15, - 'firefox': 91 - } - }] - ) - babelLoaderPresets.push('@babel/preset-typescript') - - // postcss loader - config.module.rules.push({ - test: /\.css$/, - use: [ - { - loader: 'postcss-loader', - options: {}, - }, - ], - }) - - return config - } -} - -export default config diff --git a/packages/ui/.storybook/manager.js b/packages/ui/.storybook/manager.js deleted file mode 100644 index 122e6603fc..0000000000 --- a/packages/ui/.storybook/manager.js +++ /dev/null @@ -1,30 +0,0 @@ -import React from 'react' - -import { addons, types } from '@storybook/manager-api' -import { FORCE_RE_RENDER } from '@storybook/core-events' - -addons.register('my/toolbar', () => { - addons.add('my-toolbar-addon/toolbar', { - title: 'Example Storybook toolbar', - //👇 Sets the type of UI element in Storybook - type: types.TOOL, - //👇 Shows the Toolbar UI element if either the Canvas or Docs tab is active - match: ({ viewMode }) => !!(viewMode && viewMode.match(/^(story|docs)$/)), - render: ({ active }) => { - const defaultTheme = window.localStorage.getItem('__ls-theme-color__') - return ( -
- -
- ) - }, - }) -}) \ No newline at end of file diff --git a/packages/ui/.storybook/preview-head.html b/packages/ui/.storybook/preview-head.html deleted file mode 100644 index d134c9e82e..0000000000 --- a/packages/ui/.storybook/preview-head.html +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/packages/ui/.storybook/preview.js b/packages/ui/.storybook/preview.js deleted file mode 100644 index c2fdee4720..0000000000 --- a/packages/ui/.storybook/preview.js +++ /dev/null @@ -1,73 +0,0 @@ -import '../src/radix.css' -import '../src/radix-hsl.css' -import './theme.css' -import '../src/index.css' -import { useEffect } from 'react' - -// require in this file to keep app state when HMR -const { setupGlobals } = require('../src/ui') - -setupGlobals() - -// REPL -if (process.env.NODE_ENV !== 'production') { - require('./cljs/cljs_env') - require('./cljs/shadow.cljs.devtools.client.browser') -} - -function ThemeObserver( - { children } -) { - const theme = window.localStorage.getItem('__ls-theme-color__') - - useEffect(() => { - const html = document.documentElement - html.dataset.color = theme - return () => (delete html.dataset.theme) - }, [theme]) - - return ( -
- {children} -
- ) -} - -/** @type { import('@storybook/react').Preview } */ -const preview = { - parameters: { - actions: { argTypesRegex: '^on[A-Z].*' }, - controls: { - matchers: { - color: /(background|color)$/i, - date: /Date$/i, - }, - }, - }, - decorators: [ - (Story) => { - return ( - - - - ) - } - ], - globalTypes: { - theme: { - // description: 'Global theme for components', - // defaultValue: 'light', - // toolbar: { - // // The label to show for this toolbar item - // title: 'Theme', - // icon: 'circlehollow', - // // Array of plain string values or MenuItem shape (see below) - // items: ['light', 'dark'], - // // Change title based on selected value - // dynamicTitle: true, - // }, - }, - }, -} - -export default preview diff --git a/packages/ui/.storybook/theme.css b/packages/ui/.storybook/theme.css deleted file mode 100644 index 0ba9b38569..0000000000 --- a/packages/ui/.storybook/theme.css +++ /dev/null @@ -1,119 +0,0 @@ -* { - @apply border-border; -} - -body { - @apply bg-background text-foreground; - - .ui__toaster { - &-viewport { - @apply gap-2; - } - } -} - -/* light */ -html { - &[data-color=default] { - --accent: 210 40% 96.1%; - --accent-foreground: 222.2 47.4% 11.2%; - - --primary: 200 97% 37%; - --primary-foreground: 255 92% 100%; - - --ring: 200 97% 37%; - } - - &[data-color=blue] { - --background: 0 0% 100%; - --foreground: 222.2 84% 4.9%; - --card: 0 0% 100%; - --card-foreground: 222.2 84% 4.9%; - --popover: 0 0% 100%; - --popover-foreground: 222.2 84% 4.9%; - --primary: 221.2 83.2% 53.3%; - --primary-foreground: 210 40% 98%; - --secondary: 210 40% 96.1%; - --secondary-foreground: 222.2 47.4% 11.2%; - --muted: 210 40% 96.1%; - --muted-foreground: 215.4 16.3% 46.9%; - --accent: 210 40% 96.1%; - --accent-foreground: 222.2 47.4% 11.2%; - --destructive: 0 84.2% 60.2%; - --destructive-foreground: 210 40% 98%; - --border: 214.3 31.8% 91.4%; - --input: 214.3 31.8% 91.4%; - --ring: 221.2 83.2% 53.3%; - --radius: 0.5rem; - } - - &[data-color=green] { - --background: 0 0% 100%; - --foreground: 240 10% 3.9%; - --card: 0 0% 100%; - --card-foreground: 240 10% 3.9%; - --popover: 0 0% 100%; - --popover-foreground: 240 10% 3.9%; - --primary: 142.1 76.2% 36.3%; - --primary-foreground: 355.7 100% 97.3%; - --secondary: 240 4.8% 95.9%; - --secondary-foreground: 240 5.9% 10%; - --muted: 240 4.8% 95.9%; - --muted-foreground: 240 3.8% 46.1%; - --accent: 240 4.8% 95.9%; - --accent-foreground: 240 5.9% 10%; - --destructive: 0 84.2% 60.2%; - --destructive-foreground: 0 0% 98%; - --border: 240 5.9% 90%; - --input: 240 5.9% 90%; - --ring: 142.1 76.2% 36.3%; - --radius: 0.5rem; - } - - &[data-color=orange] { - --background: 0 0% 100%; - --foreground: 20 14.3% 4.1%; - --card: 0 0% 100%; - --card-foreground: 20 14.3% 4.1%; - --popover: 0 0% 100%; - --popover-foreground: 20 14.3% 4.1%; - --primary: 24.6 95% 53.1%; - --primary-foreground: 60 9.1% 97.8%; - --secondary: 60 4.8% 95.9%; - --secondary-foreground: 24 9.8% 10%; - --muted: 60 4.8% 95.9%; - --muted-foreground: 25 5.3% 44.7%; - --accent: 60 4.8% 95.9%; - --accent-foreground: 24 9.8% 10%; - --destructive: 0 84.2% 60.2%; - --destructive-foreground: 60 9.1% 97.8%; - --border: 20 5.9% 90%; - --input: 20 5.9% 90%; - --ring: 24.6 95% 53.1%; - --radius: 0.5rem; - } -} - -html[data-color-scheme=dark] { - &[data-color=green] { - --background: 20 14.3% 4.1%; - --foreground: 0 0% 95%; - --card: 24 9.8% 10%; - --card-foreground: 0 0% 95%; - --popover: 0 0% 9%; - --popover-foreground: 0 0% 95%; - --primary: 142.1 70.6% 45.3%; - --primary-foreground: 144.9 80.4% 10%; - --secondary: 240 3.7% 15.9%; - --secondary-foreground: 0 0% 98%; - --muted: 0 0% 15%; - --muted-foreground: 240 5% 64.9%; - --accent: 12 6.5% 15.1%; - --accent-foreground: 0 0% 98%; - --destructive: 0 62.8% 30.6%; - --destructive-foreground: 0 85.7% 97.3%; - --border: 240 3.7% 15.9%; - --input: 240 3.7% 15.9%; - --ring: 142.4 71.8% 29.2%; - } -} diff --git a/packages/ui/.storybook/theme_hsl.css b/packages/ui/.storybook/theme_hsl.css deleted file mode 100644 index 77344ec93f..0000000000 --- a/packages/ui/.storybook/theme_hsl.css +++ /dev/null @@ -1,113 +0,0 @@ -* { - @apply border-border; -} - -body { - @apply bg-background text-foreground; -} - -/* light */ -html { - &[data-theme=default] { - --accent: hsl(210 40% 96.1%); - --accent-foreground: hsl(222.2 47.4% 11.2%); - - --primary: hsl(200 97% 37%); - --primary-foreground: hsl(255 92% 100%); - - --ring: hsl(200 97% 37%); - } - - &[data-theme=blue] { - --background: hsl(0 0% 100%); - --foreground: hsl(222.2 84% 4.9%); - --card: hsl(0 0% 100%); - --card-foreground: hsl(222.2 84% 4.9%); - --popover: hsl(0 0% 100%); - --popover-foreground: hsl(222.2 84% 4.9%); - --primary: hsl(221.2 83.2% 53.3%); - --primary-foreground: hsl(210 40% 98%); - --secondary: hsl(210 40% 96.1%); - --secondary-foreground: hsl(222.2 47.4% 11.2%); - --muted: hsl(210 40% 96.1%); - --muted-foreground: hsl(215.4 16.3% 46.9%); - --accent: hsl(210 40% 96.1%); - --accent-foreground: hsl(222.2 47.4% 11.2%); - --destructive: hsl(0 84.2% 60.2%); - --destructive-foreground: hsl(210 40% 98%); - --border: hsl(214.3 31.8% 91.4%); - --input: hsl(214.3 31.8% 91.4%); - --ring: hsl(221.2 83.2% 53.3%); - --radius: 0.5rem; - } - - &[data-theme=green] { - --background: hsl(0 0% 100%); - --foreground: hsl(240 10% 3.9%); - --card: hsl(0 0% 100%); - --card-foreground: hsl(240 10% 3.9%); - --popover: hsl(0 0% 100%); - --popover-foreground: hsl(240 10% 3.9%); - --primary: hsl(142.1 76.2% 36.3%); - --primary-foreground: hsl(355.7 100% 97.3%); - --secondary: hsl(240 4.8% 95.9%); - --secondary-foreground: hsl(240 5.9% 10%); - --muted: hsl(240 4.8% 95.9%); - --muted-foreground: hsl(240 3.8% 46.1%); - --accent: hsl(240 4.8% 95.9%); - --accent-foreground: hsl(240 5.9% 10%); - --destructive: hsl(0 84.2% 60.2%); - --destructive-foreground: hsl(0 0% 98%); - --border: hsl(240 5.9% 90%); - --input: hsl(240 5.9% 90%); - --ring: hsl(142.1 76.2% 36.3%); - --radius: 0.5rem; - } - - &[data-theme=orange] { - --background: hsl(0 0% 100%); - --foreground: hsl(20 14.3% 4.1%); - --card: hsl(0 0% 100%); - --card-foreground: hsl(20 14.3% 4.1%); - --popover: hsl(0 0% 100%); - --popover-foreground: hsl(20 14.3% 4.1%); - --primary: hsl(24.6 95% 53.1%); - --primary-foreground: hsl(60 9.1% 97.8%); - --secondary: hsl(60 4.8% 95.9%); - --secondary-foreground: hsl(24 9.8% 10%); - --muted: hsl(60 4.8% 95.9%); - --muted-foreground: hsl(25 5.3% 44.7%); - --accent: hsl(60 4.8% 95.9%); - --accent-foreground: hsl(24 9.8% 10%); - --destructive: hsl(0 84.2% 60.2%); - --destructive-foreground: hsl(60 9.1% 97.8%); - --border: hsl(20 5.9% 90%); - --input: hsl(20 5.9% 90%); - --ring: hsl(24.6 95% 53.1%); - --radius: 0.5rem; - } -} - -html[data-color-scheme=dark] { - &[data-theme=green] { - --background: hsl(20 14.3% 4.1%); - --foreground: hsl(0 0% 95%); - --card: hsl(24 9.8% 10%); - --card-foreground: hsl(0 0% 95%); - --popover: hsl(0 0% 9%); - --popover-foreground: hsl(0 0% 95%); - --primary: hsl(142.1 70.6% 45.3%); - --primary-foreground: hsl(144.9 80.4% 10%); - --secondary: hsl(240 3.7% 15.9%); - --secondary-foreground: hsl(0 0% 98%); - --muted: hsl(0 0% 15%); - --muted-foreground: hsl(240 5% 64.9%); - --accent: hsl(12 6.5% 15.1%); - --accent-foreground: hsl(0 0% 98%); - --destructive: hsl(0 62.8% 30.6%); - --destructive-foreground: hsl(0 85.7% 97.3%); - --border: hsl(240 3.7% 15.9%); - --input: hsl(240 3.7% 15.9%); - --ring: hsl(142.4 71.8% 29.2%); - } -} diff --git a/packages/ui/README.md b/packages/ui/README.md index e4e13bf44a..c1db49609c 100644 --- a/packages/ui/README.md +++ b/packages/ui/README.md @@ -12,21 +12,6 @@ It is recommended to install through CLI mode. npx shadcn-ui@latest add button ``` -#### 🦄 Play with Storybook -1. Watch shui cljs stories from root [scripts](https://github.com/logseq/logseq/blob/15be34fc5c79ccef9e7756131f54436763f36699/package.json#L59). - -```shell -yarn run cljs:watch-storybook - -# cljs:watch-stories: "clojure -M:cljs watch stories-dev" -``` - -2. Set up storybook from the current working directory. - -```shell -yarn run watch:storybook -``` - ### Credits - https://ui.shadcn.com/ diff --git a/packages/ui/package.json b/packages/ui/package.json index c2ee2c0faf..4cb90e893f 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -7,77 +7,65 @@ "watch:ui:examples": "parcel serve ./examples/index.html", "build:ui:only": "parcel build --target ui", "build:ui": "rm -rf .parcel-cache && yarn build:ui:only", - "watch:storybook": "storybook dev -p 6006", "postinstall": "yarn build:ui" }, "dependencies": { - "@hookform/resolvers": "^3.3.2", + "@hookform/resolvers": "^5.2.2", "@radix-ui/colors": "^3.0.0", - "@radix-ui/react-alert-dialog": "^1.1.11", - "@radix-ui/react-avatar": "^1.1.7", - "@radix-ui/react-checkbox": "^1.2.3", - "@radix-ui/react-context-menu": "^2.2.12", - "@radix-ui/react-dialog": "^1.1.11", - "@radix-ui/react-dropdown-menu": "^2.1.12", - "@radix-ui/react-label": "^2.1.4", - "@radix-ui/react-popover": "^1.1.11", - "@radix-ui/react-radio-group": "^1.3.4", - "@radix-ui/react-select": "^2.2.2", - "@radix-ui/react-separator": "^1.1.4", - "@radix-ui/react-slider": "^1.3.2", - "@radix-ui/react-slot": "^1.2.0", - "@radix-ui/react-switch": "^1.2.2", - "@radix-ui/react-tabs": "^1.1.9", - "@radix-ui/react-toast": "^1.2.11", - "@radix-ui/react-toggle": "^1.1.6", - "@radix-ui/react-toggle-group": "^1.1.7", - "@radix-ui/react-tooltip": "^1.2.4", - "aws-amplify": "^6.15.6", + "@radix-ui/react-alert-dialog": "^1.1.15", + "@radix-ui/react-avatar": "^1.1.11", + "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-context-menu": "^2.2.16", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-label": "^2.1.8", + "@radix-ui/react-popover": "^1.1.15", + "@radix-ui/react-radio-group": "^1.3.8", + "@radix-ui/react-select": "^2.2.6", + "@radix-ui/react-separator": "^1.1.8", + "@radix-ui/react-slider": "^1.3.6", + "@radix-ui/react-slot": "^1.2.4", + "@radix-ui/react-switch": "^1.2.6", + "@radix-ui/react-tabs": "^1.1.13", + "@radix-ui/react-toast": "^1.2.15", + "@radix-ui/react-toggle": "^1.1.10", + "@radix-ui/react-toggle-group": "^1.1.11", + "@radix-ui/react-tooltip": "^1.2.8", + "aws-amplify": "^6.16.3", "class-variance-authority": "^0.7.1", - "clsx": "^2.0.0", - "cmdk": "^0.2.0", + "clsx": "^2.1.1", + "cmdk": "^1.1.1", "date-fns": "^2.30.0", - "lucide-react": "^0.468.0", - "react": "^18", + "lucide-react": "^0.577.0", + "react": "^18.3.1", "react-day-picker": "^8.9.1", - "react-dom": "^18", - "react-hook-form": "^7.48.2", - "react-remove-scroll": "^2.5.7", - "tailwind-merge": "^2.0.0", + "react-dom": "^18.3.1", + "react-hook-form": "^7.71.2", + "react-remove-scroll": "^2.7.2", + "tailwind-merge": "^3.5.0", "tailwindcss-animate": "^1.0.7", "uniqolor": "1.1.1", - "yup": "^1.3.2", - "zod": "^3.22.4" + "yup": "^1.7.1", + "zod": "^4.3.6" }, "devDependencies": { - "@babel/core": "^7.23.2", - "@babel/preset-env": "^7.23.2", - "@babel/preset-react": "^7.22.15", - "@babel/preset-typescript": "^7.23.2", - "@storybook/addon-essentials": "^7.5.3", - "@storybook/addon-interactions": "^7.5.3", - "@storybook/addon-links": "^7.5.3", - "@storybook/addon-onboarding": "^1.0.8", - "@storybook/addon-styling-webpack": "^0.0.5", - "@storybook/addon-toolbars": "^7.5.3", - "@storybook/blocks": "^7.5.3", - "@storybook/react": "^7.5.3", - "@storybook/react-webpack5": "^7.5.3", - "@storybook/testing-library": "^0.2.2", - "@types/babel__core": "^7", - "@types/babel__preset-env": "^7", - "@types/prop-types": "^15", - "@types/react": "17", - "@types/react-dom": "17", + "@babel/core": "^7.29.0", + "@babel/preset-env": "^7.29.2", + "@babel/preset-react": "^7.28.5", + "@babel/preset-typescript": "^7.28.5", + "@types/babel__core": "^7.20.5", + "@types/babel__preset-env": "^7.10.0", + "@types/prop-types": "^15.7.15", + "@types/react": "18.3.1", + "@types/react-dom": "18.3.1", "buffer": "^5.5.0", "parcel": "2.8.3", - "postcss": "^8.4.31", - "postcss-loader": "^7.3.3", - "postcss-nesting": "^12.0.1", - "storybook": "^7.5.3", - "string-width": "4.2.0", - "strip-ansi": "^6", - "style-loader": "3.3.1" + "postcss": "^8.5.8", + "postcss-loader": "^8.2.1", + "postcss-nesting": "^14.0.0", + "string-width": "8.2.0", + "strip-ansi": "^7.2.0", + "style-loader": "4.0.0" }, "alias": { "react": { @@ -103,8 +91,8 @@ }, "resolutions": { "jackspeak": "^2", - "string-width": "^4", - "strip-ansi": "^6" + "string-width": "^8", + "strip-ansi": "^7" }, "license": "MIT" } diff --git a/packages/ui/src/Demo.story.tsx b/packages/ui/src/Demo.story.tsx deleted file mode 100644 index b52ef48799..0000000000 --- a/packages/ui/src/Demo.story.tsx +++ /dev/null @@ -1,88 +0,0 @@ -import { Button } from '@/components/ui/button' -import { Meta, StoryObj } from '@storybook/react' -import { DropdownMenuCheckboxItemProps } from '@radix-ui/react-dropdown-menu' - -import { - DropdownMenu, - DropdownMenuCheckboxItem, - DropdownMenuContent, - DropdownMenuLabel, - DropdownMenuSeparator, - DropdownMenuTrigger, -} from '@/components/ui/dropdown-menu' -import React from 'react' -import { Toaster } from '@/components/ui/toaster' -import { useToast } from '@/components/ui/use-toast' - -export default { - title: 'JS/Button', - component: Button, - args: { - children: 'LS Button' - } -} as Meta - -type Checked = DropdownMenuCheckboxItemProps['checked'] - -export function DropdownMenuCheckboxes() { - const [showStatusBar, setShowStatusBar] = React.useState(true) - const [showActivityBar, setShowActivityBar] = React.useState(false) - const [showPanel, setShowPanel] = React.useState(false) - - return ( - - - {/**/} - - - - Appearance - - - - Status Bar - - - - Activity Bar - - - Panel - - - - ) -} - -export const Primary: StoryObj = - { - render: () => { - const { toast } = useToast() - - return ( -
- - - }) - }}>toast -
- - -
- ) - } - } \ No newline at end of file diff --git a/packages/ui/yarn.lock b/packages/ui/yarn.lock index d8d2d729c3..999edcdd39 100644 --- a/packages/ui/yarn.lock +++ b/packages/ui/yarn.lock @@ -2,80 +2,65 @@ # yarn lockfile v1 -"@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== +"@aws-amplify/analytics@7.0.93": + version "7.0.93" + resolved "https://registry.yarnpkg.com/@aws-amplify/analytics/-/analytics-7.0.93.tgz#73330b5bde07f2c867819d57705b0a844b8b6ab4" + integrity sha512-3WoB0VzATJyupTNQ+ZnzE0pLYnpZPtqNN4deZ8gadG5uzGhhvkt9uZtgVnn/QFGb35DnP8qNDTRiM0rL3vjyZQ== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@aw-web-design/x-default-browser@1.4.126": - version "1.4.126" - resolved "https://registry.yarnpkg.com/@aw-web-design/x-default-browser/-/x-default-browser-1.4.126.tgz#43e4bd8f0314ed907a8718d7e862a203af79bc16" - integrity sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug== - dependencies: - default-browser-id "3.0.0" - -"@aws-amplify/analytics@7.0.87": - version "7.0.87" - resolved "https://registry.yarnpkg.com/@aws-amplify/analytics/-/analytics-7.0.87.tgz#32405d022e4bbca0f854337b41c75a03878daba6" - integrity sha512-Kkehhc1PIE9lGXUtq4vm9dcV4HmfXkDXoBmmLeaax3YVbJMjmyvXw7Mdvp1P+zURdb3p+EALmKii0pKgfMe5FQ== - dependencies: - "@aws-sdk/client-firehose" "3.621.0" - "@aws-sdk/client-kinesis" "3.621.0" - "@aws-sdk/client-personalize-events" "3.621.0" + "@aws-sdk/client-firehose" "3.982.0" + "@aws-sdk/client-kinesis" "3.982.0" + "@aws-sdk/client-personalize-events" "3.982.0" "@smithy/util-utf8" "2.0.0" tslib "^2.5.0" -"@aws-amplify/api-graphql@4.7.22": - version "4.7.22" - resolved "https://registry.yarnpkg.com/@aws-amplify/api-graphql/-/api-graphql-4.7.22.tgz#ea1e7863ebc0a3cf3aa360829eda1f02b1ade27f" - integrity sha512-zHOeh/Yfogss4+35GTCLrxKTfCMvFmtYuUKbBftfJ5BSrAsppMBA5yPr03Mea3xNhZLFunkFJj8tkgXAoADeKA== +"@aws-amplify/api-graphql@4.8.5": + version "4.8.5" + resolved "https://registry.yarnpkg.com/@aws-amplify/api-graphql/-/api-graphql-4.8.5.tgz#5ae415dd72ab5e0f492cfcc4ae358643603ea36f" + integrity sha512-Xu45+MizoethsRfCFIdN9RORenCu0e41tMkiTFVE5oKC76eoOlYHg2LlhG2Lmmasby/Ggi5bZouVxJIcP4IeIA== dependencies: - "@aws-amplify/api-rest" "4.4.0" - "@aws-amplify/core" "6.13.2" + "@aws-amplify/api-rest" "4.6.3" + "@aws-amplify/core" "6.16.1" "@aws-amplify/data-schema" "^1.7.0" - "@aws-sdk/types" "3.387.0" + "@aws-sdk/types" "3.973.1" graphql "15.8.0" rxjs "^7.8.1" tslib "^2.5.0" uuid "^11.0.0" -"@aws-amplify/api-rest@4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@aws-amplify/api-rest/-/api-rest-4.4.0.tgz#8995243c7cf3fd39ed61bc5bba500106e1de0e80" - integrity sha512-woly6TqB6z+LoB2UoVut11Sg+HauuXIUQAbnnjPp18lWIyO2SYLp5EqgczAUP/AC0WP8/SCLOPSZnJkDnKT4QA== +"@aws-amplify/api-rest@4.6.3": + version "4.6.3" + resolved "https://registry.yarnpkg.com/@aws-amplify/api-rest/-/api-rest-4.6.3.tgz#e5b42be6bef0ac2671c664128547680fdcf5a7f0" + integrity sha512-SPhttyB9SR2p5PkUPmUPfkXNqGrgvdqiNHNHhx7FjHnqFBXLDRtGhzqRbE7faDeAwrcWz1HCtcpk7MLHYt94yg== dependencies: tslib "^2.5.0" -"@aws-amplify/api@6.3.18": - version "6.3.18" - resolved "https://registry.yarnpkg.com/@aws-amplify/api/-/api-6.3.18.tgz#a020b56f449e9c8b46af86b6fbf116b27e141e39" - integrity sha512-9R5yhx/7SOadrmFch1Z33yh/Pyye1N6tk9E6u8yLLv1dkbeeRAXAwiTSICT5kBXB7X+9CfGGFA8GMxWjMgEC0w== +"@aws-amplify/api@6.3.24": + version "6.3.24" + resolved "https://registry.yarnpkg.com/@aws-amplify/api/-/api-6.3.24.tgz#ae1b512b85c2a85ace7b12e3d68b261e93d4b184" + integrity sha512-19CVHj+0J35aHMPNzy12nO1mJS4oP68yFUfiMnulSsiVGV5XhUDc/bkdcX0uI7U1SsUSs+9TOBwZg27bzYIGkg== dependencies: - "@aws-amplify/api-graphql" "4.7.22" - "@aws-amplify/api-rest" "4.4.0" + "@aws-amplify/api-graphql" "4.8.5" + "@aws-amplify/api-rest" "4.6.3" "@aws-amplify/data-schema" "^1.7.0" rxjs "^7.8.1" tslib "^2.5.0" -"@aws-amplify/auth@6.15.1": - version "6.15.1" - resolved "https://registry.yarnpkg.com/@aws-amplify/auth/-/auth-6.15.1.tgz#2ab61777ab243301e495c5bdbb3aafa2b7dbbdfb" - integrity sha512-lbvtABrUye0eQiHj5l7tRPIcrTchSUfA2UyBv48vz9YQDuQjwGNAFbFs074N7zaib6PQqO9QOJ8EQBskLypHcg== +"@aws-amplify/auth@6.19.1": + version "6.19.1" + resolved "https://registry.yarnpkg.com/@aws-amplify/auth/-/auth-6.19.1.tgz#3ae20290e92d8193d063ea4c8b0de1e9ded634aa" + integrity sha512-N6bqBUEly/xUiho0X5oGhLEDlQTWsj1i0FquDYsyuav5e9HHQBLNgG1zmpq28lyxtDaUREi/IDx+CD10EpcPcQ== dependencies: "@aws-crypto/sha256-js" "5.2.0" "@smithy/types" "^3.3.0" tslib "^2.5.0" -"@aws-amplify/core@6.13.2": - version "6.13.2" - resolved "https://registry.yarnpkg.com/@aws-amplify/core/-/core-6.13.2.tgz#fc6e0bbfe227fa00a745d34e2a2ca39467534856" - integrity sha512-nxetCeXgfMalkEUXb0gkYEnAkz9oi2tFIT9e/rng/68GsNGbJTAhbsjAeDdQJXNPbVOAeg7j2ILrJeSuxpV09A== +"@aws-amplify/core@6.16.1": + version "6.16.1" + resolved "https://registry.yarnpkg.com/@aws-amplify/core/-/core-6.16.1.tgz#ae28c4f8c8b5c5acf1eb972d65f295540299ab3f" + integrity sha512-WHO6yYegmnZ+K3vnYzVwy+wnxYqSkdFakBIlgm4922QXHOQYWdIl/rrTcaagrpJEGT6YlTnqx1ANIoPojNxWmw== dependencies: "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/types" "3.398.0" + "@aws-sdk/types" "3.973.1" "@smithy/util-hex-encoding" "2.0.0" "@types/uuid" "^9.0.0" js-cookie "^3.0.5" @@ -102,38 +87,38 @@ "@types/json-schema" "^7.0.15" rxjs "^7.8.1" -"@aws-amplify/datastore@5.0.89": - version "5.0.89" - resolved "https://registry.yarnpkg.com/@aws-amplify/datastore/-/datastore-5.0.89.tgz#5af0eff4e5d511d5ade123c16ad109e6f8aab184" - integrity sha512-8Mku5ZAeGWEjH6UHjycbIgjrVAg2JSyx8q9ZBbqcY1AhXpZ7y4r8PzY46FVAdmUq6jzhlSjGycZ6KSg7TRaY1A== +"@aws-amplify/datastore@5.1.5": + version "5.1.5" + resolved "https://registry.yarnpkg.com/@aws-amplify/datastore/-/datastore-5.1.5.tgz#edd44b258d8289931d7af122d7160d9d30fbc4e5" + integrity sha512-/9o4eYqWOlxVxe/riDd282FmUHHSiGUEAwle464T8wzNSqPTB7yTeQfzt2LFYTWsrYLCSR0OtOM1bY5VPSVmew== dependencies: - "@aws-amplify/api" "6.3.18" - "@aws-amplify/api-graphql" "4.7.22" + "@aws-amplify/api" "6.3.24" + "@aws-amplify/api-graphql" "4.8.5" buffer "4.9.2" idb "5.0.6" immer "9.0.6" rxjs "^7.8.1" ulid "^2.3.0" -"@aws-amplify/notifications@2.0.87": - version "2.0.87" - resolved "https://registry.yarnpkg.com/@aws-amplify/notifications/-/notifications-2.0.87.tgz#1eba9e520f5226e9066a68c8fe2e64617190bce3" - integrity sha512-GB/gYS9V9dj8gYpSVaf0JrnSv9Rd3g3sFGSCqFBSQjutGrPWAHHBMIQrQwr1p5Jt8QfCBoFN8CWcBvFlW7D/wQ== +"@aws-amplify/notifications@2.0.93": + version "2.0.93" + resolved "https://registry.yarnpkg.com/@aws-amplify/notifications/-/notifications-2.0.93.tgz#18675c89163f3a8abe81d880fda53f498b5db7ac" + integrity sha512-NtHKusaiWzkPXuaKsTyvKAWE8JnQcXmQoaidQ5/a9/nWWTzs983l5xgc4OPvfVR+3N63K+3iTmYHtKcEbhgS6w== dependencies: - "@aws-sdk/types" "3.398.0" + "@aws-sdk/types" "3.973.1" lodash "^4.17.21" tslib "^2.5.0" -"@aws-amplify/storage@6.9.6": - version "6.9.6" - resolved "https://registry.yarnpkg.com/@aws-amplify/storage/-/storage-6.9.6.tgz#ba351d105ea4549bbb8d506acbe18a90a224cc6d" - integrity sha512-bCpiToPwPgpgvH15T9ezI3uZCk/u+6JA0l5fqJDw3LUbU/UVXD7/P2pP7pFdES12NpAYkVQOUAjVlXk3VZ2+Dw== +"@aws-amplify/storage@6.13.2": + version "6.13.2" + resolved "https://registry.yarnpkg.com/@aws-amplify/storage/-/storage-6.13.2.tgz#947c250d593ccf242351ec8a4204a2450203494e" + integrity sha512-XMhFXrEYD/x/cd5qvTnMa/xhbpJjZZyva2ea0wmLedLqY1glWyhKPmSi2PAfhhpkWcvA50XnQ/g9KaZsog5hww== dependencies: - "@aws-sdk/types" "3.398.0" + "@aws-sdk/types" "3.973.1" "@smithy/md5-js" "2.0.7" buffer "4.9.2" crc-32 "1.2.2" - fast-xml-parser "^4.4.1" + fast-xml-parser "^5.3.6" tslib "^2.5.0" "@aws-crypto/crc32@5.2.0": @@ -183,480 +168,400 @@ "@smithy/util-utf8" "^2.0.0" tslib "^2.6.2" -"@aws-sdk/client-firehose@3.621.0": - version "3.621.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-firehose/-/client-firehose-3.621.0.tgz#2bfb5bc59808dde055ccc18fcb89f6322326729a" - integrity sha512-XAjAkXdb35PDvBYph609Fxn4g00HYH/U6N4+KjF9gLQrdTU+wkjf3D9YD02DZNbApJVcu4eIxWh/8M25YkW02A== +"@aws-sdk/client-firehose@3.982.0": + version "3.982.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-firehose/-/client-firehose-3.982.0.tgz#422dd4705412c402e1758e346b7225a916c189bc" + integrity sha512-Qur2Siqep+gRReTjlKXcdpyX/MUnzm5OgNNudDPxzpmzdnc3ZKlUwGlbEoS1VA5cFS6N4zg6WfZqlwcXg//TSg== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.621.0" - "@aws-sdk/client-sts" "3.621.0" - "@aws-sdk/core" "3.621.0" - "@aws-sdk/credential-provider-node" "3.621.0" - "@aws-sdk/middleware-host-header" "3.620.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.620.0" - "@aws-sdk/middleware-user-agent" "3.620.0" - "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.614.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.614.0" - "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.3.1" - "@smithy/fetch-http-handler" "^3.2.4" - "@smithy/hash-node" "^3.0.3" - "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.5" - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-retry" "^3.0.13" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.1.11" - "@smithy/types" "^3.3.0" - "@smithy/url-parser" "^3.0.3" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.13" - "@smithy/util-defaults-mode-node" "^3.0.13" - "@smithy/util-endpoints" "^2.0.5" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-retry" "^3.0.3" - "@smithy/util-utf8" "^3.0.0" + "@aws-sdk/core" "^3.973.6" + "@aws-sdk/credential-provider-node" "^3.972.5" + "@aws-sdk/middleware-host-header" "^3.972.3" + "@aws-sdk/middleware-logger" "^3.972.3" + "@aws-sdk/middleware-recursion-detection" "^3.972.3" + "@aws-sdk/middleware-user-agent" "^3.972.6" + "@aws-sdk/region-config-resolver" "^3.972.3" + "@aws-sdk/types" "^3.973.1" + "@aws-sdk/util-endpoints" "3.982.0" + "@aws-sdk/util-user-agent-browser" "^3.972.3" + "@aws-sdk/util-user-agent-node" "^3.972.4" + "@smithy/config-resolver" "^4.4.6" + "@smithy/core" "^3.22.0" + "@smithy/fetch-http-handler" "^5.3.9" + "@smithy/hash-node" "^4.2.8" + "@smithy/invalid-dependency" "^4.2.8" + "@smithy/middleware-content-length" "^4.2.8" + "@smithy/middleware-endpoint" "^4.4.12" + "@smithy/middleware-retry" "^4.4.29" + "@smithy/middleware-serde" "^4.2.9" + "@smithy/middleware-stack" "^4.2.8" + "@smithy/node-config-provider" "^4.3.8" + "@smithy/node-http-handler" "^4.4.8" + "@smithy/protocol-http" "^5.3.8" + "@smithy/smithy-client" "^4.11.1" + "@smithy/types" "^4.12.0" + "@smithy/url-parser" "^4.2.8" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-body-length-browser" "^4.2.0" + "@smithy/util-body-length-node" "^4.2.1" + "@smithy/util-defaults-mode-browser" "^4.3.28" + "@smithy/util-defaults-mode-node" "^4.2.31" + "@smithy/util-endpoints" "^3.2.8" + "@smithy/util-middleware" "^4.2.8" + "@smithy/util-retry" "^4.2.8" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/client-kinesis@3.621.0": - version "3.621.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-kinesis/-/client-kinesis-3.621.0.tgz#3af1e18622638d20cd0fa3df5182978cb130ab86" - integrity sha512-53Omt/beFmTQPjQNpMuPMk5nMzYVsXCRiO+MeqygZEKYG1fWw/UGluCWVbi7WjClOHacsW8lQcsqIRvkPDFNag== +"@aws-sdk/client-kinesis@3.982.0": + version "3.982.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-kinesis/-/client-kinesis-3.982.0.tgz#0b56013f8543a7617827399234ca81396621ddaf" + integrity sha512-Gh3xyumdz3IRj91HIBR48TohQyA3VSn/blDcGXzl4dwQKXgM0ISdHgyniNo2GQNhORJF3d01MSMx72s5NNQxUA== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.621.0" - "@aws-sdk/client-sts" "3.621.0" - "@aws-sdk/core" "3.621.0" - "@aws-sdk/credential-provider-node" "3.621.0" - "@aws-sdk/middleware-host-header" "3.620.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.620.0" - "@aws-sdk/middleware-user-agent" "3.620.0" - "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.614.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.614.0" - "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.3.1" - "@smithy/eventstream-serde-browser" "^3.0.5" - "@smithy/eventstream-serde-config-resolver" "^3.0.3" - "@smithy/eventstream-serde-node" "^3.0.4" - "@smithy/fetch-http-handler" "^3.2.4" - "@smithy/hash-node" "^3.0.3" - "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.5" - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-retry" "^3.0.13" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.1.11" - "@smithy/types" "^3.3.0" - "@smithy/url-parser" "^3.0.3" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.13" - "@smithy/util-defaults-mode-node" "^3.0.13" - "@smithy/util-endpoints" "^2.0.5" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-retry" "^3.0.3" - "@smithy/util-utf8" "^3.0.0" - "@smithy/util-waiter" "^3.1.2" + "@aws-sdk/core" "^3.973.6" + "@aws-sdk/credential-provider-node" "^3.972.5" + "@aws-sdk/middleware-host-header" "^3.972.3" + "@aws-sdk/middleware-logger" "^3.972.3" + "@aws-sdk/middleware-recursion-detection" "^3.972.3" + "@aws-sdk/middleware-user-agent" "^3.972.6" + "@aws-sdk/region-config-resolver" "^3.972.3" + "@aws-sdk/types" "^3.973.1" + "@aws-sdk/util-endpoints" "3.982.0" + "@aws-sdk/util-user-agent-browser" "^3.972.3" + "@aws-sdk/util-user-agent-node" "^3.972.4" + "@smithy/config-resolver" "^4.4.6" + "@smithy/core" "^3.22.0" + "@smithy/eventstream-serde-browser" "^4.2.8" + "@smithy/eventstream-serde-config-resolver" "^4.3.8" + "@smithy/eventstream-serde-node" "^4.2.8" + "@smithy/fetch-http-handler" "^5.3.9" + "@smithy/hash-node" "^4.2.8" + "@smithy/invalid-dependency" "^4.2.8" + "@smithy/middleware-content-length" "^4.2.8" + "@smithy/middleware-endpoint" "^4.4.12" + "@smithy/middleware-retry" "^4.4.29" + "@smithy/middleware-serde" "^4.2.9" + "@smithy/middleware-stack" "^4.2.8" + "@smithy/node-config-provider" "^4.3.8" + "@smithy/node-http-handler" "^4.4.8" + "@smithy/protocol-http" "^5.3.8" + "@smithy/smithy-client" "^4.11.1" + "@smithy/types" "^4.12.0" + "@smithy/url-parser" "^4.2.8" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-body-length-browser" "^4.2.0" + "@smithy/util-body-length-node" "^4.2.1" + "@smithy/util-defaults-mode-browser" "^4.3.28" + "@smithy/util-defaults-mode-node" "^4.2.31" + "@smithy/util-endpoints" "^3.2.8" + "@smithy/util-middleware" "^4.2.8" + "@smithy/util-retry" "^4.2.8" + "@smithy/util-utf8" "^4.2.0" + "@smithy/util-waiter" "^4.2.8" tslib "^2.6.2" -"@aws-sdk/client-personalize-events@3.621.0": - version "3.621.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-personalize-events/-/client-personalize-events-3.621.0.tgz#f061e00d2dc75b1165ace8280879119e78f9a577" - integrity sha512-qkVkqYvOe3WVuVNL/gRITGYFfHJCx2ijGFK7H3hNUJH3P4AwskmouAd1pWf+3cbGedRnj2is7iw7E602LeJIHA== +"@aws-sdk/client-personalize-events@3.982.0": + version "3.982.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-personalize-events/-/client-personalize-events-3.982.0.tgz#04f3c8dbe80d01852ef9a7dd5307e39b7d549f44" + integrity sha512-JllssIZCPxAgYy4gkIM2e/kXxWT0xQzzZd5y9rRStm0bl5MiLAxzX4q9WhGG7glyB++EuhYskiT1N+DzyM5nTw== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.621.0" - "@aws-sdk/client-sts" "3.621.0" - "@aws-sdk/core" "3.621.0" - "@aws-sdk/credential-provider-node" "3.621.0" - "@aws-sdk/middleware-host-header" "3.620.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.620.0" - "@aws-sdk/middleware-user-agent" "3.620.0" - "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.614.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.614.0" - "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.3.1" - "@smithy/fetch-http-handler" "^3.2.4" - "@smithy/hash-node" "^3.0.3" - "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.5" - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-retry" "^3.0.13" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.1.11" - "@smithy/types" "^3.3.0" - "@smithy/url-parser" "^3.0.3" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.13" - "@smithy/util-defaults-mode-node" "^3.0.13" - "@smithy/util-endpoints" "^2.0.5" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-retry" "^3.0.3" - "@smithy/util-utf8" "^3.0.0" + "@aws-sdk/core" "^3.973.6" + "@aws-sdk/credential-provider-node" "^3.972.5" + "@aws-sdk/middleware-host-header" "^3.972.3" + "@aws-sdk/middleware-logger" "^3.972.3" + "@aws-sdk/middleware-recursion-detection" "^3.972.3" + "@aws-sdk/middleware-user-agent" "^3.972.6" + "@aws-sdk/region-config-resolver" "^3.972.3" + "@aws-sdk/types" "^3.973.1" + "@aws-sdk/util-endpoints" "3.982.0" + "@aws-sdk/util-user-agent-browser" "^3.972.3" + "@aws-sdk/util-user-agent-node" "^3.972.4" + "@smithy/config-resolver" "^4.4.6" + "@smithy/core" "^3.22.0" + "@smithy/fetch-http-handler" "^5.3.9" + "@smithy/hash-node" "^4.2.8" + "@smithy/invalid-dependency" "^4.2.8" + "@smithy/middleware-content-length" "^4.2.8" + "@smithy/middleware-endpoint" "^4.4.12" + "@smithy/middleware-retry" "^4.4.29" + "@smithy/middleware-serde" "^4.2.9" + "@smithy/middleware-stack" "^4.2.8" + "@smithy/node-config-provider" "^4.3.8" + "@smithy/node-http-handler" "^4.4.8" + "@smithy/protocol-http" "^5.3.8" + "@smithy/smithy-client" "^4.11.1" + "@smithy/types" "^4.12.0" + "@smithy/url-parser" "^4.2.8" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-body-length-browser" "^4.2.0" + "@smithy/util-body-length-node" "^4.2.1" + "@smithy/util-defaults-mode-browser" "^4.3.28" + "@smithy/util-defaults-mode-node" "^4.2.31" + "@smithy/util-endpoints" "^3.2.8" + "@smithy/util-middleware" "^4.2.8" + "@smithy/util-retry" "^4.2.8" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/client-sso-oidc@3.621.0": - version "3.621.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.621.0.tgz#3fa3d468fbebbd93a5f75c1d51b63cc7af3ef17b" - integrity sha512-mMjk3mFUwV2Y68POf1BQMTF+F6qxt5tPu6daEUCNGC9Cenk3h2YXQQoS4/eSyYzuBiYk3vx49VgleRvdvkg8rg== +"@aws-sdk/core@^3.973.20", "@aws-sdk/core@^3.973.6": + version "3.973.20" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.973.20.tgz#787e2509d7ed7f4a6775197431f4eec905885d79" + integrity sha512-i3GuX+lowD892F3IuJf8o6AbyDupMTdyTxQrCJGcn71ni5hTZ82L4nQhcdumxZ7XPJRJJVHS/CR3uYOIIs0PVA== + dependencies: + "@aws-sdk/types" "^3.973.6" + "@aws-sdk/xml-builder" "^3.972.11" + "@smithy/core" "^3.23.11" + "@smithy/node-config-provider" "^4.3.12" + "@smithy/property-provider" "^4.2.12" + "@smithy/protocol-http" "^5.3.12" + "@smithy/signature-v4" "^5.3.12" + "@smithy/smithy-client" "^4.12.5" + "@smithy/types" "^4.13.1" + "@smithy/util-base64" "^4.3.2" + "@smithy/util-middleware" "^4.2.12" + "@smithy/util-utf8" "^4.2.2" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-env@^3.972.18": + version "3.972.18" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.18.tgz#19e5d90001d6bfc9028caa46df8ac952620c14ad" + integrity sha512-X0B8AlQY507i5DwjLByeU2Af4ARsl9Vr84koDcXCbAkplmU+1xBFWxEPrWRAoh56waBne/yJqEloSwvRf4x6XA== + dependencies: + "@aws-sdk/core" "^3.973.20" + "@aws-sdk/types" "^3.973.6" + "@smithy/property-provider" "^4.2.12" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-http@^3.972.20": + version "3.972.20" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.20.tgz#8d5d56d3b72b406553b5c4151fce0e339bf32f7f" + integrity sha512-ey9Lelj001+oOfrbKmS6R2CJAiXX7QKY4Vj9VJv6L2eE6/VjD8DocHIoYqztTm70xDLR4E1jYPTKfIui+eRNDA== + dependencies: + "@aws-sdk/core" "^3.973.20" + "@aws-sdk/types" "^3.973.6" + "@smithy/fetch-http-handler" "^5.3.15" + "@smithy/node-http-handler" "^4.4.16" + "@smithy/property-provider" "^4.2.12" + "@smithy/protocol-http" "^5.3.12" + "@smithy/smithy-client" "^4.12.5" + "@smithy/types" "^4.13.1" + "@smithy/util-stream" "^4.5.19" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@^3.972.20": + version "3.972.20" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.20.tgz#6fea1cf189233d08288fea923be560956a20071a" + integrity sha512-5flXSnKHMloObNF+9N0cupKegnH1Z37cdVlpETVgx8/rAhCe+VNlkcZH3HDg2SDn9bI765S+rhNPXGDJJPfbtA== + dependencies: + "@aws-sdk/core" "^3.973.20" + "@aws-sdk/credential-provider-env" "^3.972.18" + "@aws-sdk/credential-provider-http" "^3.972.20" + "@aws-sdk/credential-provider-login" "^3.972.20" + "@aws-sdk/credential-provider-process" "^3.972.18" + "@aws-sdk/credential-provider-sso" "^3.972.20" + "@aws-sdk/credential-provider-web-identity" "^3.972.20" + "@aws-sdk/nested-clients" "^3.996.10" + "@aws-sdk/types" "^3.973.6" + "@smithy/credential-provider-imds" "^4.2.12" + "@smithy/property-provider" "^4.2.12" + "@smithy/shared-ini-file-loader" "^4.4.7" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-login@^3.972.20": + version "3.972.20" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.20.tgz#4ccffe3a08f73fc0e81f7df55df261eb5bd0af8e" + integrity sha512-gEWo54nfqp2jABMu6HNsjVC4hDLpg9HC8IKSJnp0kqWtxIJYHTmiLSsIfI4ScQjxEwpB+jOOH8dOLax1+hy/Hw== + dependencies: + "@aws-sdk/core" "^3.973.20" + "@aws-sdk/nested-clients" "^3.996.10" + "@aws-sdk/types" "^3.973.6" + "@smithy/property-provider" "^4.2.12" + "@smithy/protocol-http" "^5.3.12" + "@smithy/shared-ini-file-loader" "^4.4.7" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@^3.972.5": + version "3.972.21" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.21.tgz#cd0d6581b7d5409031b1ae542de82900d82a78ce" + integrity sha512-hah8if3/B/Q+LBYN5FukyQ1Mym6PLPDsBOBsIgNEYD6wLyZg0UmUF/OKIVC3nX9XH8TfTPuITK+7N/jenVACWA== + dependencies: + "@aws-sdk/credential-provider-env" "^3.972.18" + "@aws-sdk/credential-provider-http" "^3.972.20" + "@aws-sdk/credential-provider-ini" "^3.972.20" + "@aws-sdk/credential-provider-process" "^3.972.18" + "@aws-sdk/credential-provider-sso" "^3.972.20" + "@aws-sdk/credential-provider-web-identity" "^3.972.20" + "@aws-sdk/types" "^3.973.6" + "@smithy/credential-provider-imds" "^4.2.12" + "@smithy/property-provider" "^4.2.12" + "@smithy/shared-ini-file-loader" "^4.4.7" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-process@^3.972.18": + version "3.972.18" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.18.tgz#7566df534c9619fa41571b0ac4815251a943d982" + integrity sha512-Tpl7SRaPoOLT32jbTWchPsn52hYYgJ0kpiFgnwk8pxTANQdUymVSZkzFvv1+oOgZm1CrbQUP9MBeoMZ9IzLZjA== + dependencies: + "@aws-sdk/core" "^3.973.20" + "@aws-sdk/types" "^3.973.6" + "@smithy/property-provider" "^4.2.12" + "@smithy/shared-ini-file-loader" "^4.4.7" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@^3.972.20": + version "3.972.20" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.20.tgz#4871228de15d5ab049590d47be465c553ecabef6" + integrity sha512-p+R+PYR5Z7Gjqf/6pvbCnzEHcqPCpLzR7Yf127HjJ6EAb4hUcD+qsNRnuww1sB/RmSeCLxyay8FMyqREw4p1RA== + dependencies: + "@aws-sdk/core" "^3.973.20" + "@aws-sdk/nested-clients" "^3.996.10" + "@aws-sdk/token-providers" "3.1009.0" + "@aws-sdk/types" "^3.973.6" + "@smithy/property-provider" "^4.2.12" + "@smithy/shared-ini-file-loader" "^4.4.7" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-web-identity@^3.972.20": + version "3.972.20" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.20.tgz#978211994eb074aabc4244cec067f24b6888bc23" + integrity sha512-rWCmh8o7QY4CsUj63qopzMzkDq/yPpkrpb+CnjBEFSOg/02T/we7sSTVg4QsDiVS9uwZ8VyONhq98qt+pIh3KA== + dependencies: + "@aws-sdk/core" "^3.973.20" + "@aws-sdk/nested-clients" "^3.996.10" + "@aws-sdk/types" "^3.973.6" + "@smithy/property-provider" "^4.2.12" + "@smithy/shared-ini-file-loader" "^4.4.7" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@aws-sdk/middleware-host-header@^3.972.3", "@aws-sdk/middleware-host-header@^3.972.8": + version "3.972.8" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.8.tgz#72186e96500b49b38fb5482d6b7bf95e5b985281" + integrity sha512-wAr2REfKsqoKQ+OkNqvOShnBoh+nkPurDKW7uAeVSu6kUECnWlSJiPvnoqxGlfousEY/v9LfS9sNc46hjSYDIQ== + dependencies: + "@aws-sdk/types" "^3.973.6" + "@smithy/protocol-http" "^5.3.12" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@aws-sdk/middleware-logger@^3.972.3", "@aws-sdk/middleware-logger@^3.972.8": + version "3.972.8" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.972.8.tgz#7fee4223afcb6f7828dbdf4ea745ce15027cf384" + integrity sha512-CWl5UCM57WUFaFi5kB7IBY1UmOeLvNZAZ2/OZ5l20ldiJ3TiIz1pC65gYj8X0BCPWkeR1E32mpsCk1L1I4n+lA== + dependencies: + "@aws-sdk/types" "^3.973.6" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@aws-sdk/middleware-recursion-detection@^3.972.3", "@aws-sdk/middleware-recursion-detection@^3.972.8": + version "3.972.8" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.8.tgz#072f3f0960a666c7f5756661f9340f5544c2633a" + integrity sha512-BnnvYs2ZEpdlmZ2PNlV2ZyQ8j8AEkMTjN79y/YA475ER1ByFYrkVR85qmhni8oeTaJcDqbx364wDpitDAA/wCA== + dependencies: + "@aws-sdk/types" "^3.973.6" + "@aws/lambda-invoke-store" "^0.2.2" + "@smithy/protocol-http" "^5.3.12" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@aws-sdk/middleware-user-agent@^3.972.21", "@aws-sdk/middleware-user-agent@^3.972.6": + version "3.972.21" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.21.tgz#f174814c5446dc772f839945eee535a27b2972ab" + integrity sha512-62XRl1GDYPpkt7cx1AX1SPy9wgNE9Iw/NPuurJu4lmhCWS7sGKO+kS53TQ8eRmIxy3skmvNInnk0ZbWrU5Dpyg== + dependencies: + "@aws-sdk/core" "^3.973.20" + "@aws-sdk/types" "^3.973.6" + "@aws-sdk/util-endpoints" "^3.996.5" + "@smithy/core" "^3.23.11" + "@smithy/protocol-http" "^5.3.12" + "@smithy/types" "^4.13.1" + "@smithy/util-retry" "^4.2.12" + tslib "^2.6.2" + +"@aws-sdk/nested-clients@^3.996.10": + version "3.996.10" + resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.996.10.tgz#aed5c630f70b61f1524a230820d62ef6a0c66f0c" + integrity sha512-SlDol5Z+C7Ivnc2rKGqiqfSUmUZzY1qHfVs9myt/nxVwswgfpjdKahyTzLTx802Zfq0NFRs7AejwKzzzl5Co2w== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.621.0" - "@aws-sdk/credential-provider-node" "3.621.0" - "@aws-sdk/middleware-host-header" "3.620.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.620.0" - "@aws-sdk/middleware-user-agent" "3.620.0" - "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.614.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.614.0" - "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.3.1" - "@smithy/fetch-http-handler" "^3.2.4" - "@smithy/hash-node" "^3.0.3" - "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.5" - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-retry" "^3.0.13" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.1.11" - "@smithy/types" "^3.3.0" - "@smithy/url-parser" "^3.0.3" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.13" - "@smithy/util-defaults-mode-node" "^3.0.13" - "@smithy/util-endpoints" "^2.0.5" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-retry" "^3.0.3" - "@smithy/util-utf8" "^3.0.0" + "@aws-sdk/core" "^3.973.20" + "@aws-sdk/middleware-host-header" "^3.972.8" + "@aws-sdk/middleware-logger" "^3.972.8" + "@aws-sdk/middleware-recursion-detection" "^3.972.8" + "@aws-sdk/middleware-user-agent" "^3.972.21" + "@aws-sdk/region-config-resolver" "^3.972.8" + "@aws-sdk/types" "^3.973.6" + "@aws-sdk/util-endpoints" "^3.996.5" + "@aws-sdk/util-user-agent-browser" "^3.972.8" + "@aws-sdk/util-user-agent-node" "^3.973.7" + "@smithy/config-resolver" "^4.4.11" + "@smithy/core" "^3.23.11" + "@smithy/fetch-http-handler" "^5.3.15" + "@smithy/hash-node" "^4.2.12" + "@smithy/invalid-dependency" "^4.2.12" + "@smithy/middleware-content-length" "^4.2.12" + "@smithy/middleware-endpoint" "^4.4.25" + "@smithy/middleware-retry" "^4.4.42" + "@smithy/middleware-serde" "^4.2.14" + "@smithy/middleware-stack" "^4.2.12" + "@smithy/node-config-provider" "^4.3.12" + "@smithy/node-http-handler" "^4.4.16" + "@smithy/protocol-http" "^5.3.12" + "@smithy/smithy-client" "^4.12.5" + "@smithy/types" "^4.13.1" + "@smithy/url-parser" "^4.2.12" + "@smithy/util-base64" "^4.3.2" + "@smithy/util-body-length-browser" "^4.2.2" + "@smithy/util-body-length-node" "^4.2.3" + "@smithy/util-defaults-mode-browser" "^4.3.41" + "@smithy/util-defaults-mode-node" "^4.2.44" + "@smithy/util-endpoints" "^3.3.3" + "@smithy/util-middleware" "^4.2.12" + "@smithy/util-retry" "^4.2.12" + "@smithy/util-utf8" "^4.2.2" tslib "^2.6.2" -"@aws-sdk/client-sso@3.621.0": - version "3.621.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.621.0.tgz#c0eefeb9adcbc6bb7c91c32070404c8c91846825" - integrity sha512-xpKfikN4u0BaUYZA9FGUMkkDmfoIP0Q03+A86WjqDWhcOoqNA1DkHsE4kZ+r064ifkPUfcNuUvlkVTEoBZoFjA== +"@aws-sdk/region-config-resolver@^3.972.3", "@aws-sdk/region-config-resolver@^3.972.8": + version "3.972.8" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.8.tgz#761475f0b06fab0bbba954477e66b51d2f780f50" + integrity sha512-1eD4uhTDeambO/PNIDVG19A6+v4NdD7xzwLHDutHsUqz0B+i661MwQB2eYO4/crcCvCiQG4SRm1k81k54FEIvw== dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.621.0" - "@aws-sdk/middleware-host-header" "3.620.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.620.0" - "@aws-sdk/middleware-user-agent" "3.620.0" - "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.614.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.614.0" - "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.3.1" - "@smithy/fetch-http-handler" "^3.2.4" - "@smithy/hash-node" "^3.0.3" - "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.5" - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-retry" "^3.0.13" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.1.11" - "@smithy/types" "^3.3.0" - "@smithy/url-parser" "^3.0.3" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.13" - "@smithy/util-defaults-mode-node" "^3.0.13" - "@smithy/util-endpoints" "^2.0.5" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-retry" "^3.0.3" - "@smithy/util-utf8" "^3.0.0" + "@aws-sdk/types" "^3.973.6" + "@smithy/config-resolver" "^4.4.11" + "@smithy/node-config-provider" "^4.3.12" + "@smithy/types" "^4.13.1" tslib "^2.6.2" -"@aws-sdk/client-sts@3.621.0": - version "3.621.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.621.0.tgz#2994f601790893901704c5df56c837e89f279952" - integrity sha512-707uiuReSt+nAx6d0c21xLjLm2lxeKc7padxjv92CIrIocnQSlJPxSCM7r5zBhwiahJA6MNQwmTl2xznU67KgA== +"@aws-sdk/token-providers@3.1009.0": + version "3.1009.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.1009.0.tgz#4a54604e4389b0f8038748c647db5e9b6da9a9a7" + integrity sha512-KCPLuTqN9u0Rr38Arln78fRG9KXpzsPWmof+PZzfAHMMQq2QED6YjQrkrfiH7PDefLWEposY1o4/eGwrmKA4JA== dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.621.0" - "@aws-sdk/core" "3.621.0" - "@aws-sdk/credential-provider-node" "3.621.0" - "@aws-sdk/middleware-host-header" "3.620.0" - "@aws-sdk/middleware-logger" "3.609.0" - "@aws-sdk/middleware-recursion-detection" "3.620.0" - "@aws-sdk/middleware-user-agent" "3.620.0" - "@aws-sdk/region-config-resolver" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.614.0" - "@aws-sdk/util-user-agent-browser" "3.609.0" - "@aws-sdk/util-user-agent-node" "3.614.0" - "@smithy/config-resolver" "^3.0.5" - "@smithy/core" "^2.3.1" - "@smithy/fetch-http-handler" "^3.2.4" - "@smithy/hash-node" "^3.0.3" - "@smithy/invalid-dependency" "^3.0.3" - "@smithy/middleware-content-length" "^3.0.5" - "@smithy/middleware-endpoint" "^3.1.0" - "@smithy/middleware-retry" "^3.0.13" - "@smithy/middleware-serde" "^3.0.3" - "@smithy/middleware-stack" "^3.0.3" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.1.11" - "@smithy/types" "^3.3.0" - "@smithy/url-parser" "^3.0.3" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.13" - "@smithy/util-defaults-mode-node" "^3.0.13" - "@smithy/util-endpoints" "^2.0.5" - "@smithy/util-middleware" "^3.0.3" - "@smithy/util-retry" "^3.0.3" - "@smithy/util-utf8" "^3.0.0" + "@aws-sdk/core" "^3.973.20" + "@aws-sdk/nested-clients" "^3.996.10" + "@aws-sdk/types" "^3.973.6" + "@smithy/property-provider" "^4.2.12" + "@smithy/shared-ini-file-loader" "^4.4.7" + "@smithy/types" "^4.13.1" tslib "^2.6.2" -"@aws-sdk/core@3.621.0": - version "3.621.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.621.0.tgz#e38c56c3ce0c819ca1185eaabcb98412429aaca3" - integrity sha512-CtOwWmDdEiINkGXD93iGfXjN0WmCp9l45cDWHHGa8lRgEDyhuL7bwd/pH5aSzj0j8SiQBG2k0S7DHbd5RaqvbQ== +"@aws-sdk/types@3.973.1": + version "3.973.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.973.1.tgz#1b2992ec6c8380c3e74c9bd2c74703e9a807d6e0" + integrity sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg== dependencies: - "@smithy/core" "^2.3.1" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/protocol-http" "^4.1.0" - "@smithy/signature-v4" "^4.1.0" - "@smithy/smithy-client" "^3.1.11" - "@smithy/types" "^3.3.0" - "@smithy/util-middleware" "^3.0.3" - fast-xml-parser "4.4.1" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-env@3.620.1": - version "3.620.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz#d4692c49a65ebc11dae3f7f8b053fee9268a953c" - integrity sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-http@3.621.0": - version "3.621.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.621.0.tgz#5f944bf548f203d842cf71a5792f73c205544627" - integrity sha512-/jc2tEsdkT1QQAI5Dvoci50DbSxtJrevemwFsm0B73pwCcOQZ5ZwwSdVqGsPutzYzUVx3bcXg3LRL7jLACqRIg== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/fetch-http-handler" "^3.2.4" - "@smithy/node-http-handler" "^3.1.4" - "@smithy/property-provider" "^3.1.3" - "@smithy/protocol-http" "^4.1.0" - "@smithy/smithy-client" "^3.1.11" - "@smithy/types" "^3.3.0" - "@smithy/util-stream" "^3.1.3" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-ini@3.621.0": - version "3.621.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.621.0.tgz#bda2365f88fee40e3ae067b08bf484106c339222" - integrity sha512-0EWVnSc+JQn5HLnF5Xv405M8n4zfdx9gyGdpnCmAmFqEDHA8LmBdxJdpUk1Ovp/I5oPANhjojxabIW5f1uU0RA== - dependencies: - "@aws-sdk/credential-provider-env" "3.620.1" - "@aws-sdk/credential-provider-http" "3.621.0" - "@aws-sdk/credential-provider-process" "3.620.1" - "@aws-sdk/credential-provider-sso" "3.621.0" - "@aws-sdk/credential-provider-web-identity" "3.621.0" - "@aws-sdk/types" "3.609.0" - "@smithy/credential-provider-imds" "^3.2.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-node@3.621.0": - version "3.621.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.621.0.tgz#9cc5052760a9f9d70d70f12ddbdbf0d59bf13a47" - integrity sha512-4JqpccUgz5Snanpt2+53hbOBbJQrSFq7E1sAAbgY6BKVQUsW5qyXqnjvSF32kDeKa5JpBl3bBWLZl04IadcPHw== - dependencies: - "@aws-sdk/credential-provider-env" "3.620.1" - "@aws-sdk/credential-provider-http" "3.621.0" - "@aws-sdk/credential-provider-ini" "3.621.0" - "@aws-sdk/credential-provider-process" "3.620.1" - "@aws-sdk/credential-provider-sso" "3.621.0" - "@aws-sdk/credential-provider-web-identity" "3.621.0" - "@aws-sdk/types" "3.609.0" - "@smithy/credential-provider-imds" "^3.2.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-process@3.620.1": - version "3.620.1" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz#10387cf85400420bb4bbda9cc56937dcc6d6d0ee" - integrity sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-sso@3.621.0": - version "3.621.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.621.0.tgz#710f413708cb372f9f94e8eb9726cf263ffd83e3" - integrity sha512-Kza0jcFeA/GEL6xJlzR2KFf1PfZKMFnxfGzJzl5yN7EjoGdMijl34KaRyVnfRjnCWcsUpBWKNIDk9WZVMY9yiw== - dependencies: - "@aws-sdk/client-sso" "3.621.0" - "@aws-sdk/token-providers" "3.614.0" - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-web-identity@3.621.0": - version "3.621.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz#b25878c0a05dad60cd5f91e7e5a31a145c2f14be" - integrity sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-host-header@3.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz#b561d419a08a984ba364c193376b482ff5224d74" - integrity sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.1.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-logger@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz#ed44d201f091b8bac908cbf14724c7a4d492553f" - integrity sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-recursion-detection@3.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz#f8270dfff843fd756be971e5673f89c6a24c6513" - integrity sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/protocol-http" "^4.1.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-user-agent@3.620.0": - version "3.620.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.620.0.tgz#1fe3104f04f576a942cf0469bfbd73c38eef3d9e" - integrity sha512-bvS6etn+KsuL32ubY5D3xNof1qkenpbJXf/ugGXbg0n98DvDFQ/F+SMLxHgbnER5dsKYchNnhmtI6/FC3HFu/A== - dependencies: - "@aws-sdk/types" "3.609.0" - "@aws-sdk/util-endpoints" "3.614.0" - "@smithy/protocol-http" "^4.1.0" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/region-config-resolver@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz#9cebb31a5bcfea2a41891fff7f28d0164cde179a" - integrity sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/types" "^3.3.0" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.3" - tslib "^2.6.2" - -"@aws-sdk/token-providers@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz#88da04f6d4ce916b0b0f6e045676d04201fb47fd" - integrity sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw== - dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/property-provider" "^3.1.3" - "@smithy/shared-ini-file-loader" "^3.1.4" - "@smithy/types" "^3.3.0" - tslib "^2.6.2" - -"@aws-sdk/types@3.387.0": - version "3.387.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.387.0.tgz#15a968344956b2587dbab1224718d72329e050f4" - integrity sha512-YTjFabNwjTF+6yl88f0/tWff018qmmgMmjlw45s6sdVKueWxdxV68U7gepNLF2nhaQPZa6FDOBoA51NaviVs0Q== - dependencies: - "@smithy/types" "^2.1.0" - tslib "^2.5.0" - -"@aws-sdk/types@3.398.0": - version "3.398.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.398.0.tgz#8ce02559536670f9188cddfce32e9dd12b4fe965" - integrity sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ== - dependencies: - "@smithy/types" "^2.2.2" - tslib "^2.5.0" - -"@aws-sdk/types@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.609.0.tgz#06b39d799c9f197a7b43670243e8e78a3bf7d6a5" - integrity sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q== - dependencies: - "@smithy/types" "^3.3.0" + "@smithy/types" "^4.12.0" tslib "^2.6.2" "@aws-sdk/types@^3.222.0": @@ -667,14 +572,34 @@ "@smithy/types" "^4.5.0" tslib "^2.6.2" -"@aws-sdk/util-endpoints@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.614.0.tgz#6564b0ffd7dc3728221e9f9821f5aab1cc58468e" - integrity sha512-wK2cdrXHH4oz4IomV/yrGkftU9A+ITB6nFL+rxxyO78is2ifHJpFdV4aqk4LSkXYPi6CXWNru/Dqc7yiKXgJPw== +"@aws-sdk/types@^3.973.1", "@aws-sdk/types@^3.973.6": + version "3.973.6" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.973.6.tgz#1964a7c01b5cb18befa445998ad1d02f86c5432d" + integrity sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw== dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/types" "^3.3.0" - "@smithy/util-endpoints" "^2.0.5" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" + +"@aws-sdk/util-endpoints@3.982.0": + version "3.982.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.982.0.tgz#65674c566a8aa2d35b27dcd4132873e75f58dc76" + integrity sha512-M27u8FJP7O0Of9hMWX5dipp//8iglmV9jr7R8SR8RveU+Z50/8TqH68Tu6wUWBGMfXjzbVwn1INIAO5lZrlxXQ== + dependencies: + "@aws-sdk/types" "^3.973.1" + "@smithy/types" "^4.12.0" + "@smithy/url-parser" "^4.2.8" + "@smithy/util-endpoints" "^3.2.8" + tslib "^2.6.2" + +"@aws-sdk/util-endpoints@^3.996.5": + version "3.996.5" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.996.5.tgz#6b12e80869ae6e84075bc24c2a4e6273ea87dfc2" + integrity sha512-Uh93L5sXFNbyR5sEPMzUU8tJ++Ku97EY4udmC01nB8Zu+xfBPwpIwJ6F7snqQeq8h2pf+8SGN5/NoytfKgYPIw== + dependencies: + "@aws-sdk/types" "^3.973.6" + "@smithy/types" "^4.13.1" + "@smithy/url-parser" "^4.2.12" + "@smithy/util-endpoints" "^3.3.3" tslib "^2.6.2" "@aws-sdk/util-locate-window@^3.0.0": @@ -684,27 +609,43 @@ dependencies: tslib "^2.6.2" -"@aws-sdk/util-user-agent-browser@3.609.0": - version "3.609.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz#aa15421b2e32ae8bc589dac2bd6e8969832ce588" - integrity sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA== +"@aws-sdk/util-user-agent-browser@^3.972.3", "@aws-sdk/util-user-agent-browser@^3.972.8": + version "3.972.8" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.8.tgz#1044845c97c898cd68fc3f9c773494a6a98cdf80" + integrity sha512-B3KGXJviV2u6Cdw2SDY2aDhoJkVfY/Q/Trwk2CMSkikE1Oi6gRzxhvhIfiRpHfmIsAhV4EA54TVEX8K6CbHbkA== dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/types" "^3.3.0" + "@aws-sdk/types" "^3.973.6" + "@smithy/types" "^4.13.1" bowser "^2.11.0" tslib "^2.6.2" -"@aws-sdk/util-user-agent-node@3.614.0": - version "3.614.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz#1e3f49a80f841a3f21647baed2adce01aac5beb5" - integrity sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA== +"@aws-sdk/util-user-agent-node@^3.972.4", "@aws-sdk/util-user-agent-node@^3.973.7": + version "3.973.7" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.973.7.tgz#dd54931e559b031a504a9a2712c10adf5c89c7c2" + integrity sha512-Hz6EZMUAEzqUd7e+vZ9LE7mn+5gMbxltXy18v+YSFY+9LBJz15wkNZvw5JqfX3z0FS9n3bgUtz3L5rAsfh4YlA== dependencies: - "@aws-sdk/types" "3.609.0" - "@smithy/node-config-provider" "^3.1.4" - "@smithy/types" "^3.3.0" + "@aws-sdk/middleware-user-agent" "^3.972.21" + "@aws-sdk/types" "^3.973.6" + "@smithy/node-config-provider" "^4.3.12" + "@smithy/types" "^4.13.1" + "@smithy/util-config-provider" "^4.2.2" tslib "^2.6.2" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.22.13": +"@aws-sdk/xml-builder@^3.972.11": + version "3.972.11" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.972.11.tgz#8cba4b756dc8e75a7ceac6e028b3bce917fe55e7" + integrity sha512-iitV/gZKQMvY9d7ovmyFnFuTHbBAtrmLnvaSb/3X8vOKyevwtpmEtyc8AdhVWZe0pI/1GsHxlEvQeOePFzy7KQ== + dependencies: + "@smithy/types" "^4.13.1" + fast-xml-parser "5.4.1" + tslib "^2.6.2" + +"@aws/lambda-invoke-store@^0.2.2": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.4.tgz#802f6a50f6b6589063ef63ba8acdee86fcb9f395" + integrity sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ== + +"@babel/code-frame@^7.0.0": version "7.22.13" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== @@ -712,41 +653,51 @@ "@babel/highlight" "^7.22.13" chalk "^2.4.2" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.3.tgz#3febd552541e62b5e883a25eb3effd7c7379db11" - integrity sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ== - -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.22.0", "@babel/core@^7.22.9", "@babel/core@^7.23.2", "@babel/core@^7.7.5": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.3.tgz#5ec09c8803b91f51cc887dedc2654a35852849c9" - integrity sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew== +"@babel/code-frame@^7.28.6", "@babel/code-frame@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.0.tgz#7cd7a59f15b3cc0dcd803038f7792712a7d0b15c" + integrity sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw== dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.3" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.2" - "@babel/parser" "^7.23.3" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.3" - "@babel/types" "^7.23.3" + "@babel/helper-validator-identifier" "^7.28.5" + js-tokens "^4.0.0" + picocolors "^1.1.1" + +"@babel/compat-data@^7.28.6", "@babel/compat-data@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.29.0.tgz#00d03e8c0ac24dd9be942c5370990cbe1f17d88d" + integrity sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg== + +"@babel/core@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.29.0.tgz#5286ad785df7f79d656e88ce86e650d16ca5f322" + integrity sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA== + dependencies: + "@babel/code-frame" "^7.29.0" + "@babel/generator" "^7.29.0" + "@babel/helper-compilation-targets" "^7.28.6" + "@babel/helper-module-transforms" "^7.28.6" + "@babel/helpers" "^7.28.6" + "@babel/parser" "^7.29.0" + "@babel/template" "^7.28.6" + "@babel/traverse" "^7.29.0" + "@babel/types" "^7.29.0" + "@jridgewell/remapping" "^2.3.5" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.12.11", "@babel/generator@^7.22.9", "@babel/generator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.3.tgz#86e6e83d95903fbe7613f448613b8b319f330a8e" - integrity sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg== +"@babel/generator@^7.29.0": + version "7.29.1" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.1.tgz#d09876290111abbb00ef962a7b83a5307fba0d50" + integrity sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw== dependencies: - "@babel/types" "^7.23.3" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" + "@babel/parser" "^7.29.0" + "@babel/types" "^7.29.0" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" + jsesc "^3.0.2" "@babel/helper-annotate-as-pure@^7.22.5": version "7.22.5" @@ -755,40 +706,38 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" - integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== +"@babel/helper-annotate-as-pure@^7.27.1", "@babel/helper-annotate-as-pure@^7.27.3": + version "7.27.3" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz#f31fd86b915fc4daf1f3ac6976c59be7084ed9c5" + integrity sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg== dependencies: - "@babel/types" "^7.22.15" + "@babel/types" "^7.27.3" -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== +"@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz#32c4a3f41f12ed1532179b108a4d746e105c2b25" + integrity sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA== dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" + "@babel/compat-data" "^7.28.6" + "@babel/helper-validator-option" "^7.27.1" + browserslist "^4.24.0" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" - integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== +"@babel/helper-create-class-features-plugin@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz#611ff5482da9ef0db6291bcd24303400bca170fb" + integrity sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.15" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-member-expression-to-functions" "^7.28.5" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/helper-replace-supers" "^7.28.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/traverse" "^7.28.6" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": +"@babel/helper-create-regexp-features-plugin@^7.18.6": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== @@ -797,145 +746,140 @@ regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz#a71c10f7146d809f4a256c373f462d9bba8cf6ba" - integrity sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug== +"@babel/helper-create-regexp-features-plugin@^7.27.1", "@babel/helper-create-regexp-features-plugin@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz#7c1ddd64b2065c7f78034b25b43346a7e19ed997" + integrity sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw== dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" + "@babel/helper-annotate-as-pure" "^7.27.3" + regexpu-core "^6.3.1" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.6.7": + version "0.6.7" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.7.tgz#8d01cba97de419115ad3497573a476db15dc6c6a" + integrity sha512-6Fqi8MtQ/PweQ9xvux65emkLQ83uB+qAVtfHkC9UodyHMIZdxNI01HjLCLUtybElp2KY2XNE0nOgyP1E1vXw9w== + dependencies: + "@babel/helper-compilation-targets" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" + debug "^4.4.3" lodash.debounce "^4.0.8" - resolve "^1.14.2" + resolve "^1.22.11" -"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== +"@babel/helper-globals@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" + integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== -"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== +"@babel/helper-member-expression-to-functions@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz#f3e07a10be37ed7a63461c63e6929575945a6150" + integrity sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg== dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.28.5" + "@babel/types" "^7.28.5" -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== +"@babel/helper-module-imports@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz#60632cbd6ffb70b22823187201116762a03e2d5c" + integrity sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw== dependencies: - "@babel/types" "^7.22.5" + "@babel/traverse" "^7.28.6" + "@babel/types" "^7.28.6" -"@babel/helper-member-expression-to-functions@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" - integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== +"@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz#9312d9d9e56edc35aeb6e95c25d4106b50b9eb1e" + integrity sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA== dependencies: - "@babel/types" "^7.23.0" + "@babel/helper-module-imports" "^7.28.6" + "@babel/helper-validator-identifier" "^7.28.5" + "@babel/traverse" "^7.28.6" -"@babel/helper-module-imports@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== +"@babel/helper-optimise-call-expression@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz#c65221b61a643f3e62705e5dd2b5f115e35f9200" + integrity sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw== dependencies: - "@babel/types" "^7.22.15" + "@babel/types" "^7.27.1" -"@babel/helper-module-transforms@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" - integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== -"@babel/helper-remap-async-to-generator@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" - integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-wrap-function" "^7.22.20" +"@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz#6f13ea251b68c8532e985fd532f28741a8af9ac8" + integrity sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug== -"@babel/helper-replace-supers@^7.22.20", "@babel/helper-replace-supers@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" - integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== +"@babel/helper-remap-async-to-generator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz#4601d5c7ce2eb2aea58328d43725523fcd362ce6" + integrity sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-member-expression-to-functions" "^7.22.15" - "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-wrap-function" "^7.27.1" + "@babel/traverse" "^7.27.1" -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== +"@babel/helper-replace-supers@^7.27.1", "@babel/helper-replace-supers@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz#94aa9a1d7423a00aead3f204f78834ce7d53fe44" + integrity sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg== dependencies: - "@babel/types" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.28.5" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/traverse" "^7.28.6" -"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== +"@babel/helper-skip-transparent-expression-wrappers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz#62bb91b3abba8c7f1fec0252d9dbea11b3ee7a56" + integrity sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg== dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" "@babel/helper-string-parser@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== + "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== +"@babel/helper-validator-identifier@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== -"@babel/helper-wrap-function@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" - integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== - dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.15" - "@babel/types" "^7.22.19" +"@babel/helper-validator-option@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" + integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== -"@babel/helpers@^7.23.2": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.2.tgz#2832549a6e37d484286e15ba36a5330483cac767" - integrity sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ== +"@babel/helper-wrap-function@^7.27.1": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz#4e349ff9222dab69a93a019cc296cdd8442e279a" + integrity sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ== dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.2" - "@babel/types" "^7.23.0" + "@babel/template" "^7.28.6" + "@babel/traverse" "^7.28.6" + "@babel/types" "^7.28.6" + +"@babel/helpers@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.6.tgz#fca903a313ae675617936e8998b814c415cbf5d7" + integrity sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw== + dependencies: + "@babel/template" "^7.28.6" + "@babel/types" "^7.28.6" "@babel/highlight@^7.22.13": version "7.22.20" @@ -946,204 +890,89 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.22.7", "@babel/parser@^7.23.3": +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7": version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.3.tgz#0ce0be31a4ca4f1884b5786057cadcb6c3be58f9" integrity sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" - integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== +"@babel/parser@^7.28.6", "@babel/parser@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.0.tgz#669ef345add7d057e92b7ed15f0bac07611831b6" + integrity sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/types" "^7.29.0" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" - integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz#fbde57974707bbfa0376d34d425ff4fa6c732421" + integrity sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.23.3" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.28.5" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz#20c60d4639d18f7da8602548512e9d3a4c8d7098" - integrity sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w== +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz#43f70a6d7efd52370eefbdf55ae03d91b293856d" + integrity sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-proposal-class-properties@^7.13.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" - integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz#beb623bd573b8b6f3047bd04c32506adc3e58a72" + integrity sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" - integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz#e134a5479eb2ba9c02714e8c1ebf1ec9076124fd" + integrity sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/plugin-transform-optional-chaining" "^7.27.1" -"@babel/plugin-proposal-optional-chaining@^7.13.12": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" - integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz#0e8289cec28baaf05d54fd08d81ae3676065f69f" + integrity sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/traverse" "^7.28.6" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== +"@babel/plugin-syntax-import-assertions@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz#ae9bc1923a6ba527b70104dd2191b0cd872c8507" + integrity sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== +"@babel/plugin-syntax-import-attributes@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz#b71d5914665f60124e133696f17cd7669062c503" + integrity sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== +"@babel/plugin-syntax-jsx@^7.27.1", "@babel/plugin-syntax-jsx@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz#f8ca28bbd84883b5fea0e447c635b81ba73997ee" + integrity sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== +"@babel/plugin-syntax-typescript@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz#c7b2ddf1d0a811145b1de800d1abd146af92e3a2" + integrity sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-flow@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz#084564e0f3cc21ea6c70c44cff984a1c0509729a" - integrity sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-assertions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" - integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-attributes@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" - integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-meta@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.22.5", "@babel/plugin-syntax-jsx@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" - integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-typescript@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" - integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" @@ -1153,540 +982,523 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" - integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== +"@babel/plugin-transform-arrow-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz#6e2061067ba3ab0266d834a9f94811196f2aba9a" + integrity sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-async-generator-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.3.tgz#9df2627bad7f434ed13eef3e61b2b65cafd4885b" - integrity sha512-59GsVNavGxAXCDDbakWSMJhajASb4kBCqDjqJsv+p5nKdbz7istmZ3HrX3L2LuiI80+zsOADCvooqQH3qGCucQ== +"@babel/plugin-transform-async-generator-functions@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz#63ed829820298f0bf143d5a4a68fb8c06ffd742f" + integrity sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.20" - "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-remap-async-to-generator" "^7.27.1" + "@babel/traverse" "^7.29.0" -"@babel/plugin-transform-async-to-generator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" - integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== +"@babel/plugin-transform-async-to-generator@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz#bd97b42237b2d1bc90d74bcb486c39be5b4d7e77" + integrity sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g== dependencies: - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/helper-module-imports" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-remap-async-to-generator" "^7.27.1" -"@babel/plugin-transform-block-scoped-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" - integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== +"@babel/plugin-transform-block-scoped-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz#558a9d6e24cf72802dd3b62a4b51e0d62c0f57f9" + integrity sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-block-scoping@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.3.tgz#e99a3ff08f58edd28a8ed82481df76925a4ffca7" - integrity sha512-QPZxHrThbQia7UdvfpaRRlq/J9ciz1J4go0k+lPBXbgaNeY7IQrBj/9ceWjvMMI07/ZBzHl/F0R/2K0qH7jCVw== +"@babel/plugin-transform-block-scoping@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz#e1ef5633448c24e76346125c2534eeb359699a99" + integrity sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-class-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" - integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== +"@babel/plugin-transform-class-properties@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz#d274a4478b6e782d9ea987fda09bdb6d28d66b72" + integrity sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-class-static-block@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.3.tgz#56f2371c7e5bf6ff964d84c5dc4d4db5536b5159" - integrity sha512-PENDVxdr7ZxKPyi5Ffc0LjXdnJyrJxyqF5T5YjlVg4a0VFfQHW0r8iAtRiDXkfHlu1wwcvdtnndGYIeJLSuRMQ== +"@babel/plugin-transform-class-static-block@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz#1257491e8259c6d125ac4d9a6f39f9d2bf3dba70" + integrity sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-classes@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.3.tgz#73380c632c095b03e8503c24fd38f95ad41ffacb" - integrity sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w== +"@babel/plugin-transform-classes@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz#8f6fb79ba3703978e701ce2a97e373aae7dda4b7" + integrity sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - "@babel/helper-split-export-declaration" "^7.22.6" - globals "^11.1.0" + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-compilation-targets" "^7.28.6" + "@babel/helper-globals" "^7.28.0" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-replace-supers" "^7.28.6" + "@babel/traverse" "^7.28.6" -"@babel/plugin-transform-computed-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" - integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== +"@babel/plugin-transform-computed-properties@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz#936824fc71c26cb5c433485776d79c8e7b0202d2" + integrity sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.15" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/template" "^7.28.6" -"@babel/plugin-transform-destructuring@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" - integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== +"@babel/plugin-transform-destructuring@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz#b8402764df96179a2070bb7b501a1586cf8ad7a7" + integrity sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.28.5" -"@babel/plugin-transform-dotall-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" - integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== +"@babel/plugin-transform-dotall-regex@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz#def31ed84e0fb6e25c71e53c124e7b76a4ab8e61" + integrity sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-duplicate-keys@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" - integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== +"@babel/plugin-transform-duplicate-keys@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz#f1fbf628ece18e12e7b32b175940e68358f546d1" + integrity sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-dynamic-import@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.3.tgz#82625924da9ed5fb11a428efb02e43bc9a3ab13e" - integrity sha512-vTG+cTGxPFou12Rj7ll+eD5yWeNl5/8xvQvF08y5Gv3v4mZQoyFf8/n9zg4q5vvCWt5jmgymfzMAldO7orBn7A== +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz#8014b8a6cfd0e7b92762724443bf0d2400f26df1" + integrity sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/helper-create-regexp-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-exponentiation-operator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" - integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== +"@babel/plugin-transform-dynamic-import@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz#4c78f35552ac0e06aa1f6e3c573d67695e8af5a4" + integrity sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-export-namespace-from@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.3.tgz#dcd066d995f6ac6077e5a4ccb68322a01e23ac49" - integrity sha512-yCLhW34wpJWRdTxxWtFZASJisihrfyMOTOQexhVzA78jlU+dH7Dw+zQgcPepQ5F3C6bAIiblZZ+qBggJdHiBAg== +"@babel/plugin-transform-explicit-resource-management@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.6.tgz#dd6788f982c8b77e86779d1d029591e39d9d8be7" + integrity sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/plugin-transform-destructuring" "^7.28.5" -"@babel/plugin-transform-flow-strip-types@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.23.3.tgz#cfa7ca159cc3306fab526fc67091556b51af26ff" - integrity sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q== +"@babel/plugin-transform-exponentiation-operator@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz#5e477eb7eafaf2ab5537a04aaafcf37e2d7f1091" + integrity sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-flow" "^7.23.3" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-for-of@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz#afe115ff0fbce735e02868d41489093c63e15559" - integrity sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw== +"@babel/plugin-transform-export-namespace-from@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz#71ca69d3471edd6daa711cf4dfc3400415df9c23" + integrity sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-function-name@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" - integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== +"@babel/plugin-transform-for-of@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz#bc24f7080e9ff721b63a70ac7b2564ca15b6c40a" + integrity sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw== dependencies: - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" -"@babel/plugin-transform-json-strings@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.3.tgz#489724ab7d3918a4329afb4172b2fd2cf3c8d245" - integrity sha512-H9Ej2OiISIZowZHaBwF0tsJOih1PftXJtE8EWqlEIwpc7LMTGq0rPOrywKLQ4nefzx8/HMR0D3JGXoMHYvhi0A== +"@babel/plugin-transform-function-name@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz#4d0bf307720e4dce6d7c30fcb1fd6ca77bdeb3a7" + integrity sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/helper-compilation-targets" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.27.1" -"@babel/plugin-transform-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" - integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== +"@babel/plugin-transform-json-strings@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz#4c8c15b2dc49e285d110a4cf3dac52fd2dfc3038" + integrity sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-logical-assignment-operators@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.3.tgz#3a406d6083feb9487083bca6d2334a3c9b6c4808" - integrity sha512-+pD5ZbxofyOygEp+zZAfujY2ShNCXRpDRIPOiBmTO693hhyOEteZgl876Xs9SAHPQpcV0vz8LvA/T+w8AzyX8A== +"@babel/plugin-transform-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz#baaefa4d10a1d4206f9dcdda50d7d5827bb70b24" + integrity sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-member-expression-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" - integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== +"@babel/plugin-transform-logical-assignment-operators@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz#53028a3d77e33c50ef30a8fce5ca17065936e605" + integrity sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-modules-amd@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" - integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== +"@babel/plugin-transform-member-expression-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz#37b88ba594d852418e99536f5612f795f23aeaf9" + integrity sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" - integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== +"@babel/plugin-transform-modules-amd@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz#a4145f9d87c2291fe2d05f994b65dba4e3e7196f" + integrity sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-systemjs@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz#fa7e62248931cb15b9404f8052581c302dd9de81" - integrity sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ== +"@babel/plugin-transform-modules-commonjs@^7.27.1", "@babel/plugin-transform-modules-commonjs@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz#c0232e0dfe66a734cc4ad0d5e75fc3321b6fdef1" + integrity sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA== dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-module-transforms" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-modules-umd@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" - integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== +"@babel/plugin-transform-modules-systemjs@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz#e458a95a17807c415924106a3ff188a3b8dee964" + integrity sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-module-transforms" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-validator-identifier" "^7.28.5" + "@babel/traverse" "^7.29.0" -"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== +"@babel/plugin-transform-modules-umd@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz#63f2cf4f6dc15debc12f694e44714863d34cd334" + integrity sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-new-target@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" - integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== +"@babel/plugin-transform-named-capturing-groups-regex@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz#a26cd51e09c4718588fc4cce1c5d1c0152102d6a" + integrity sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-nullish-coalescing-operator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.3.tgz#8a613d514b521b640344ed7c56afeff52f9413f8" - integrity sha512-xzg24Lnld4DYIdysyf07zJ1P+iIfJpxtVFOzX4g+bsJ3Ng5Le7rXx9KwqKzuyaUeRnt+I1EICwQITqc0E2PmpA== +"@babel/plugin-transform-new-target@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz#259c43939728cad1706ac17351b7e6a7bea1abeb" + integrity sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-numeric-separator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.3.tgz#2f8da42b75ba89e5cfcd677afd0856d52c0c2e68" - integrity sha512-s9GO7fIBi/BLsZ0v3Rftr6Oe4t0ctJ8h4CCXfPoEJwmvAPMyNrfkOOJzm6b9PX9YXcCJWWQd/sBF/N26eBiMVw== +"@babel/plugin-transform-nullish-coalescing-operator@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz#9bc62096e90ab7a887f3ca9c469f6adec5679757" + integrity sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-object-rest-spread@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.3.tgz#509373753b5f7202fe1940e92fd075bd7874955f" - integrity sha512-VxHt0ANkDmu8TANdE9Kc0rndo/ccsmfe2Cx2y5sI4hu3AukHQ5wAu4cM7j3ba8B9548ijVyclBU+nuDQftZsog== +"@babel/plugin-transform-numeric-separator@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz#1310b0292762e7a4a335df5f580c3320ee7d9e9f" + integrity sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w== dependencies: - "@babel/compat-data" "^7.23.3" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-object-super@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" - integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== +"@babel/plugin-transform-object-rest-spread@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz#fdd4bc2d72480db6ca42aed5c051f148d7b067f7" + integrity sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-compilation-targets" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/plugin-transform-destructuring" "^7.28.5" + "@babel/plugin-transform-parameters" "^7.27.7" + "@babel/traverse" "^7.28.6" -"@babel/plugin-transform-optional-catch-binding@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.3.tgz#362c0b545ee9e5b0fa9d9e6fe77acf9d4c480027" - integrity sha512-LxYSb0iLjUamfm7f1D7GpiS4j0UAC8AOiehnsGAP8BEsIX8EOi3qV6bbctw8M7ZvLtcoZfZX5Z7rN9PlWk0m5A== +"@babel/plugin-transform-object-super@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz#1c932cd27bf3874c43a5cac4f43ebf970c9871b5" + integrity sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" -"@babel/plugin-transform-optional-chaining@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.3.tgz#92fc83f54aa3adc34288933fa27e54c13113f4be" - integrity sha512-zvL8vIfIUgMccIAK1lxjvNv572JHFJIKb4MWBz5OGdBQA0fB0Xluix5rmOby48exiJc987neOmP/m9Fnpkz3Tg== +"@babel/plugin-transform-optional-catch-binding@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz#75107be14c78385978201a49c86414a150a20b4c" + integrity sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-parameters@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" - integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== +"@babel/plugin-transform-optional-chaining@^7.27.1", "@babel/plugin-transform-optional-chaining@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz#926cf150bd421fc8362753e911b4a1b1ce4356cd" + integrity sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" -"@babel/plugin-transform-private-methods@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" - integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== +"@babel/plugin-transform-parameters@^7.27.7": + version "7.27.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz#1fd2febb7c74e7d21cf3b05f7aebc907940af53a" + integrity sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-private-property-in-object@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.3.tgz#5cd34a2ce6f2d008cc8f91d8dcc29e2c41466da6" - integrity sha512-a5m2oLNFyje2e/rGKjVfAELTVI5mbA0FeZpBnkOWWV7eSmKQ+T/XW0Vf+29ScLzSxX+rnsarvU0oie/4m6hkxA== +"@babel/plugin-transform-private-methods@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz#c76fbfef3b86c775db7f7c106fff544610bdb411" + integrity sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-property-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" - integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== +"@babel/plugin-transform-private-property-in-object@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz#4fafef1e13129d79f1d75ac180c52aafefdb2811" + integrity sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-create-class-features-plugin" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-react-display-name@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz#70529f034dd1e561045ad3c8152a267f0d7b6200" - integrity sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw== +"@babel/plugin-transform-property-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz#07eafd618800591e88073a0af1b940d9a42c6424" + integrity sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-react-jsx-development@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" - integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== +"@babel/plugin-transform-react-display-name@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz#6f20a7295fea7df42eb42fed8f896813f5b934de" + integrity sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA== dependencies: - "@babel/plugin-transform-react-jsx" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-react-jsx@^7.22.15", "@babel/plugin-transform-react-jsx@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz#7e6266d88705d7c49f11c98db8b9464531289cd6" - integrity sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA== +"@babel/plugin-transform-react-jsx-development@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz#47ff95940e20a3a70e68ad3d4fcb657b647f6c98" + integrity sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-jsx" "^7.22.5" - "@babel/types" "^7.22.15" + "@babel/plugin-transform-react-jsx" "^7.27.1" -"@babel/plugin-transform-react-pure-annotations@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz#fabedbdb8ee40edf5da96f3ecfc6958e3783b93c" - integrity sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ== +"@babel/plugin-transform-react-jsx@^7.27.1": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.28.6.tgz#f51cb70a90b9529fbb71ee1f75ea27b7078eed62" + integrity sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-module-imports" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/plugin-syntax-jsx" "^7.28.6" + "@babel/types" "^7.28.6" -"@babel/plugin-transform-regenerator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" - integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== +"@babel/plugin-transform-react-pure-annotations@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz#339f1ce355eae242e0649f232b1c68907c02e879" + integrity sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - regenerator-transform "^0.15.2" + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-reserved-words@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" - integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== +"@babel/plugin-transform-regenerator@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz#dec237cec1b93330876d6da9992c4abd42c9d18b" + integrity sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-shorthand-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" - integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== +"@babel/plugin-transform-regexp-modifiers@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz#7ef0163bd8b4a610481b2509c58cf217f065290b" + integrity sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-spread@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" - integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== +"@babel/plugin-transform-reserved-words@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz#40fba4878ccbd1c56605a4479a3a891ac0274bb4" + integrity sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-sticky-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" - integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== +"@babel/plugin-transform-shorthand-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz#532abdacdec87bfee1e0ef8e2fcdee543fe32b90" + integrity sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-template-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" - integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== +"@babel/plugin-transform-spread@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz#40a2b423f6db7b70f043ad027a58bcb44a9757b6" + integrity sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" -"@babel/plugin-transform-typeof-symbol@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" - integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== +"@babel/plugin-transform-sticky-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz#18984935d9d2296843a491d78a014939f7dcd280" + integrity sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-typescript@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.3.tgz#ce806e6cb485d468c48c4f717696719678ab0138" - integrity sha512-ogV0yWnq38CFwH20l2Afz0dfKuZBx9o/Y2Rmh5vuSS0YD1hswgEgTfyTzuSrT2q9btmHRSqYoSfwFUVaC1M1Jw== +"@babel/plugin-transform-template-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz#1a0eb35d8bb3e6efc06c9fd40eb0bcef548328b8" + integrity sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-typescript" "^7.23.3" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-unicode-escapes@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" - integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== +"@babel/plugin-transform-typeof-symbol@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz#70e966bb492e03509cf37eafa6dcc3051f844369" + integrity sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-unicode-property-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" - integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== +"@babel/plugin-transform-typescript@^7.28.5": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz#1e93d96da8adbefdfdade1d4956f73afa201a158" + integrity sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-create-class-features-plugin" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/plugin-syntax-typescript" "^7.28.6" -"@babel/plugin-transform-unicode-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" - integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== +"@babel/plugin-transform-unicode-escapes@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz#3e3143f8438aef842de28816ece58780190cf806" + integrity sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-unicode-sets-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" - integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== +"@babel/plugin-transform-unicode-property-regex@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz#63a7a6c21a0e75dae9b1861454111ea5caa22821" + integrity sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/preset-env@^7.22.9", "@babel/preset-env@^7.23.2": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.3.tgz#d299e0140a7650684b95c62be2db0ef8c975143e" - integrity sha512-ovzGc2uuyNfNAs/jyjIGxS8arOHS5FENZaNn4rtE7UdKMMkqHCvboHfcuhWLZNX5cB44QfcGNWjaevxMzzMf+Q== +"@babel/plugin-transform-unicode-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz#25948f5c395db15f609028e370667ed8bae9af97" + integrity sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw== dependencies: - "@babel/compat-data" "^7.23.3" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.3" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-unicode-sets-regex@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz#924912914e5df9fe615ec472f88ff4788ce04d4e" + integrity sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.28.6" + +"@babel/preset-env@^7.29.2": + version "7.29.2" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.29.2.tgz#5a173f22c7d8df362af1c9fe31facd320de4a86c" + integrity sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw== + dependencies: + "@babel/compat-data" "^7.29.0" + "@babel/helper-compilation-targets" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-validator-option" "^7.27.1" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.28.5" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.27.1" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.27.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.27.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.28.6" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.23.3" - "@babel/plugin-syntax-import-attributes" "^7.23.3" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-syntax-import-assertions" "^7.28.6" + "@babel/plugin-syntax-import-attributes" "^7.28.6" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.23.3" - "@babel/plugin-transform-async-generator-functions" "^7.23.3" - "@babel/plugin-transform-async-to-generator" "^7.23.3" - "@babel/plugin-transform-block-scoped-functions" "^7.23.3" - "@babel/plugin-transform-block-scoping" "^7.23.3" - "@babel/plugin-transform-class-properties" "^7.23.3" - "@babel/plugin-transform-class-static-block" "^7.23.3" - "@babel/plugin-transform-classes" "^7.23.3" - "@babel/plugin-transform-computed-properties" "^7.23.3" - "@babel/plugin-transform-destructuring" "^7.23.3" - "@babel/plugin-transform-dotall-regex" "^7.23.3" - "@babel/plugin-transform-duplicate-keys" "^7.23.3" - "@babel/plugin-transform-dynamic-import" "^7.23.3" - "@babel/plugin-transform-exponentiation-operator" "^7.23.3" - "@babel/plugin-transform-export-namespace-from" "^7.23.3" - "@babel/plugin-transform-for-of" "^7.23.3" - "@babel/plugin-transform-function-name" "^7.23.3" - "@babel/plugin-transform-json-strings" "^7.23.3" - "@babel/plugin-transform-literals" "^7.23.3" - "@babel/plugin-transform-logical-assignment-operators" "^7.23.3" - "@babel/plugin-transform-member-expression-literals" "^7.23.3" - "@babel/plugin-transform-modules-amd" "^7.23.3" - "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-modules-systemjs" "^7.23.3" - "@babel/plugin-transform-modules-umd" "^7.23.3" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.23.3" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.3" - "@babel/plugin-transform-numeric-separator" "^7.23.3" - "@babel/plugin-transform-object-rest-spread" "^7.23.3" - "@babel/plugin-transform-object-super" "^7.23.3" - "@babel/plugin-transform-optional-catch-binding" "^7.23.3" - "@babel/plugin-transform-optional-chaining" "^7.23.3" - "@babel/plugin-transform-parameters" "^7.23.3" - "@babel/plugin-transform-private-methods" "^7.23.3" - "@babel/plugin-transform-private-property-in-object" "^7.23.3" - "@babel/plugin-transform-property-literals" "^7.23.3" - "@babel/plugin-transform-regenerator" "^7.23.3" - "@babel/plugin-transform-reserved-words" "^7.23.3" - "@babel/plugin-transform-shorthand-properties" "^7.23.3" - "@babel/plugin-transform-spread" "^7.23.3" - "@babel/plugin-transform-sticky-regex" "^7.23.3" - "@babel/plugin-transform-template-literals" "^7.23.3" - "@babel/plugin-transform-typeof-symbol" "^7.23.3" - "@babel/plugin-transform-unicode-escapes" "^7.23.3" - "@babel/plugin-transform-unicode-property-regex" "^7.23.3" - "@babel/plugin-transform-unicode-regex" "^7.23.3" - "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" + "@babel/plugin-transform-arrow-functions" "^7.27.1" + "@babel/plugin-transform-async-generator-functions" "^7.29.0" + "@babel/plugin-transform-async-to-generator" "^7.28.6" + "@babel/plugin-transform-block-scoped-functions" "^7.27.1" + "@babel/plugin-transform-block-scoping" "^7.28.6" + "@babel/plugin-transform-class-properties" "^7.28.6" + "@babel/plugin-transform-class-static-block" "^7.28.6" + "@babel/plugin-transform-classes" "^7.28.6" + "@babel/plugin-transform-computed-properties" "^7.28.6" + "@babel/plugin-transform-destructuring" "^7.28.5" + "@babel/plugin-transform-dotall-regex" "^7.28.6" + "@babel/plugin-transform-duplicate-keys" "^7.27.1" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.29.0" + "@babel/plugin-transform-dynamic-import" "^7.27.1" + "@babel/plugin-transform-explicit-resource-management" "^7.28.6" + "@babel/plugin-transform-exponentiation-operator" "^7.28.6" + "@babel/plugin-transform-export-namespace-from" "^7.27.1" + "@babel/plugin-transform-for-of" "^7.27.1" + "@babel/plugin-transform-function-name" "^7.27.1" + "@babel/plugin-transform-json-strings" "^7.28.6" + "@babel/plugin-transform-literals" "^7.27.1" + "@babel/plugin-transform-logical-assignment-operators" "^7.28.6" + "@babel/plugin-transform-member-expression-literals" "^7.27.1" + "@babel/plugin-transform-modules-amd" "^7.27.1" + "@babel/plugin-transform-modules-commonjs" "^7.28.6" + "@babel/plugin-transform-modules-systemjs" "^7.29.0" + "@babel/plugin-transform-modules-umd" "^7.27.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.29.0" + "@babel/plugin-transform-new-target" "^7.27.1" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.28.6" + "@babel/plugin-transform-numeric-separator" "^7.28.6" + "@babel/plugin-transform-object-rest-spread" "^7.28.6" + "@babel/plugin-transform-object-super" "^7.27.1" + "@babel/plugin-transform-optional-catch-binding" "^7.28.6" + "@babel/plugin-transform-optional-chaining" "^7.28.6" + "@babel/plugin-transform-parameters" "^7.27.7" + "@babel/plugin-transform-private-methods" "^7.28.6" + "@babel/plugin-transform-private-property-in-object" "^7.28.6" + "@babel/plugin-transform-property-literals" "^7.27.1" + "@babel/plugin-transform-regenerator" "^7.29.0" + "@babel/plugin-transform-regexp-modifiers" "^7.28.6" + "@babel/plugin-transform-reserved-words" "^7.27.1" + "@babel/plugin-transform-shorthand-properties" "^7.27.1" + "@babel/plugin-transform-spread" "^7.28.6" + "@babel/plugin-transform-sticky-regex" "^7.27.1" + "@babel/plugin-transform-template-literals" "^7.27.1" + "@babel/plugin-transform-typeof-symbol" "^7.27.1" + "@babel/plugin-transform-unicode-escapes" "^7.27.1" + "@babel/plugin-transform-unicode-property-regex" "^7.28.6" + "@babel/plugin-transform-unicode-regex" "^7.27.1" + "@babel/plugin-transform-unicode-sets-regex" "^7.28.6" "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.6" - babel-plugin-polyfill-corejs3 "^0.8.5" - babel-plugin-polyfill-regenerator "^0.5.3" - core-js-compat "^3.31.0" + babel-plugin-polyfill-corejs2 "^0.4.15" + babel-plugin-polyfill-corejs3 "^0.14.0" + babel-plugin-polyfill-regenerator "^0.6.6" + core-js-compat "^3.48.0" semver "^6.3.1" -"@babel/preset-flow@^7.13.13", "@babel/preset-flow@^7.22.5": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.23.3.tgz#8084e08b9ccec287bd077ab288b286fab96ffab1" - integrity sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-transform-flow-strip-types" "^7.23.3" - "@babel/preset-modules@0.1.6-no-external-plugins": version "0.1.6-no-external-plugins" resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" @@ -1696,85 +1508,62 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@^7.22.15", "@babel/preset-react@^7.22.5": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.23.3.tgz#f73ca07e7590f977db07eb54dbe46538cc015709" - integrity sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w== +"@babel/preset-react@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.28.5.tgz#6fcc0400fa79698433d653092c3919bb4b0878d9" + integrity sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-transform-react-display-name" "^7.23.3" - "@babel/plugin-transform-react-jsx" "^7.22.15" - "@babel/plugin-transform-react-jsx-development" "^7.22.5" - "@babel/plugin-transform-react-pure-annotations" "^7.23.3" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-option" "^7.27.1" + "@babel/plugin-transform-react-display-name" "^7.28.0" + "@babel/plugin-transform-react-jsx" "^7.27.1" + "@babel/plugin-transform-react-jsx-development" "^7.27.1" + "@babel/plugin-transform-react-pure-annotations" "^7.27.1" -"@babel/preset-typescript@^7.13.0", "@babel/preset-typescript@^7.23.2": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz#14534b34ed5b6d435aa05f1ae1c5e7adcc01d913" - integrity sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ== +"@babel/preset-typescript@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz#540359efa3028236958466342967522fd8f2a60c" + integrity sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-syntax-jsx" "^7.23.3" - "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-typescript" "^7.23.3" - -"@babel/register@^7.13.16": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.22.15.tgz#c2c294a361d59f5fa7bcc8b97ef7319c32ecaec7" - integrity sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg== - dependencies: - clone-deep "^4.0.1" - find-cache-dir "^2.0.0" - make-dir "^2.1.0" - pirates "^4.0.5" - source-map-support "^0.5.16" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-option" "^7.27.1" + "@babel/plugin-syntax-jsx" "^7.27.1" + "@babel/plugin-transform-modules-commonjs" "^7.27.1" + "@babel/plugin-transform-typescript" "^7.28.5" "@babel/regjsgen@^0.8.0": version "0.8.0" resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.17.8", "@babel/runtime@^7.23.1", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885" - integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== - dependencies: - regenerator-runtime "^0.14.0" - "@babel/runtime@^7.21.0": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.4.tgz#36fa1d2b36db873d25ec631dcc4923fdc1cf2e2e" - integrity sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg== - dependencies: - regenerator-runtime "^0.14.0" + version "7.29.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.29.2.tgz#9a6e2d05f4b6692e1801cd4fb176ad823930ed5e" + integrity sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g== -"@babel/template@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== +"@babel/template@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.28.6.tgz#0e7e56ecedb78aeef66ce7972b082fce76a23e57" + integrity sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" + "@babel/code-frame" "^7.28.6" + "@babel/parser" "^7.28.6" + "@babel/types" "^7.28.6" -"@babel/traverse@^7.1.6", "@babel/traverse@^7.22.8", "@babel/traverse@^7.23.2", "@babel/traverse@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.3.tgz#26ee5f252e725aa7aca3474aa5b324eaf7908b5b" - integrity sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ== +"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.5", "@babel/traverse@^7.28.6", "@babel/traverse@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.29.0.tgz#f323d05001440253eead3c9c858adbe00b90310a" + integrity sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.3" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.3" - "@babel/types" "^7.23.3" - debug "^4.1.0" - globals "^11.1.0" + "@babel/code-frame" "^7.29.0" + "@babel/generator" "^7.29.0" + "@babel/helper-globals" "^7.28.0" + "@babel/parser" "^7.29.0" + "@babel/template" "^7.28.6" + "@babel/types" "^7.29.0" + debug "^4.3.1" -"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.3", "@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.4.4": version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.3.tgz#d5ea892c07f2ec371ac704420f4dcdb07b5f9598" integrity sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw== @@ -1783,150 +1572,23 @@ "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" -"@base2/pretty-print-object@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz#371ba8be66d556812dc7fb169ebc3c08378f69d4" - integrity sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA== +"@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.5", "@babel/types@^7.28.6", "@babel/types@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.0.tgz#9f5b1e838c446e72cf3cd4b918152b8c605e37c7" + integrity sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A== + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== +"@csstools/selector-resolve-nested@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@csstools/selector-resolve-nested/-/selector-resolve-nested-4.0.0.tgz#ccc38c2cdc14c3ddd1d94647803facef654d47e2" + integrity sha512-9vAPxmp+Dx3wQBIUwc1v7Mdisw1kbbaGqXUM8QLTgWg7SoPGYtXBsMXvsFs/0Bn5yoFhcktzxNZGNaUt0VjgjA== -"@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== - -"@csstools/selector-specificity@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz#798622546b63847e82389e473fd67f2707d82247" - integrity sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g== - -"@discoveryjs/json-ext@^0.5.3": - version "0.5.7" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" - integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== - -"@emotion/use-insertion-effect-with-fallbacks@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz#08de79f54eb3406f9daaf77c76e35313da963963" - integrity sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw== - -"@esbuild/android-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" - integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== - -"@esbuild/android-arm@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" - integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== - -"@esbuild/android-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" - integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== - -"@esbuild/darwin-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" - integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== - -"@esbuild/darwin-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" - integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== - -"@esbuild/freebsd-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" - integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== - -"@esbuild/freebsd-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" - integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== - -"@esbuild/linux-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" - integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== - -"@esbuild/linux-arm@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" - integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== - -"@esbuild/linux-ia32@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" - integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== - -"@esbuild/linux-loong64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" - integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== - -"@esbuild/linux-mips64el@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" - integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== - -"@esbuild/linux-ppc64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" - integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== - -"@esbuild/linux-riscv64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" - integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== - -"@esbuild/linux-s390x@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" - integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== - -"@esbuild/linux-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" - integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== - -"@esbuild/netbsd-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" - integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== - -"@esbuild/openbsd-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" - integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== - -"@esbuild/sunos-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" - integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== - -"@esbuild/win32-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" - integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== - -"@esbuild/win32-ia32@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" - integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== - -"@esbuild/win32-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" - integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== - -"@fal-works/esbuild-plugin-global-externals@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@fal-works/esbuild-plugin-global-externals/-/esbuild-plugin-global-externals-2.1.2.tgz#c05ed35ad82df8e6ac616c68b92c2282bd083ba4" - integrity sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ== +"@csstools/selector-specificity@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-6.0.0.tgz#ef28e27c1ded1d8e5c54879a9399e7055aed1920" + integrity sha512-4sSgl78OtOXEX/2d++8A83zHNTgwCJMaR24FvsYL7Uf/VS8HZk9PTwR51elTbGqMuwH3szLvvOXEaVnqn0Z3zA== "@floating-ui/core@^1.4.2": version "1.5.0" @@ -1955,10 +1617,12 @@ resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.1.6.tgz#22958c042e10b67463997bd6ea7115fe28cbcaf9" integrity sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A== -"@hookform/resolvers@^3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@hookform/resolvers/-/resolvers-3.3.2.tgz#5c40f06fe8137390b071d961c66d27ee8f76f3bc" - integrity sha512-Tw+GGPnBp+5DOsSg4ek3LCPgkBOuOgS5DsDV7qsWNH9LZc433kgsWICjlsh2J9p04H2K66hsXPPb9qn9ILdUtA== +"@hookform/resolvers@^5.2.2": + version "5.2.2" + resolved "https://registry.yarnpkg.com/@hookform/resolvers/-/resolvers-5.2.2.tgz#5ac16cd89501ca31671e6e9f0f5c5d762a99aa12" + integrity sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA== + dependencies: + "@standard-schema/utils" "^0.3.0" "@isaacs/cliui@^8.0.2": version "8.0.2" @@ -1972,118 +1636,53 @@ wrap-ansi "^8.1.0" wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" + integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" + "@jridgewell/sourcemap-codec" "^1.5.0" + "@jridgewell/trace-mapping" "^0.3.24" -"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== +"@jridgewell/remapping@^2.3.5": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1" + integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== dependencies: - "@sinclair/typebox" "^0.27.8" - -"@jest/transform@^29.3.1": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" - integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== - dependencies: - "@babel/core" "^7.11.6" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^2.0.0" - fast-json-stable-stringify "^2.1.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - write-file-atomic "^4.0.2" - -"@jest/types@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" - integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^16.0.0" - chalk "^4.0.0" - -"@jest/types@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" - integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== - dependencies: - "@jest/schemas" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.1.0": version "3.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - "@jridgewell/source-map@^0.3.3": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" - integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== + version "0.3.11" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.11.tgz#b21835cbd36db656b857c2ad02ebd413cc13a9ba" + integrity sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": +"@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.20" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" - integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== +"@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== + +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.28": + version "0.3.31" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" + integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@juggle/resize-observer@^3.3.1": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60" - integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA== - "@lezer/common@^1.0.0": version "1.1.1" resolved "https://registry.yarnpkg.com/@lezer/common/-/common-1.1.1.tgz#4a06a0e1b9214d7eb2ea4a9354d47a63044cee49" @@ -2126,14 +1725,6 @@ resolved "https://registry.yarnpkg.com/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.5.2.tgz#28f643fbc0bec30b07fbe95b137879b6b4d1c9c5" integrity sha512-zrBczSbXKxEyK2ijtbRdICDygRqWSRPpZMN5dD1T8VMEW5RIhIbwFWw2phDRXuBQdVDpSjalCIUMWMV2h3JaZA== -"@mdx-js/react@^2.1.5": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-2.3.0.tgz#4208bd6d70f0d0831def28ef28c26149b03180b3" - integrity sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g== - dependencies: - "@types/mdx" "^2.0.0" - "@types/react" ">=16" - "@mischnic/json-sourcemap@^0.1.0": version "0.1.1" resolved "https://registry.yarnpkg.com/@mischnic/json-sourcemap/-/json-sourcemap-0.1.1.tgz#0ef9b015a8f575dd9a8720d9a6b4dbc988425906" @@ -2173,36 +1764,6 @@ resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.2.tgz#0f164b726869f71da3c594171df5ebc1c4b0a407" integrity sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ== -"@ndelangen/get-tarball@^3.0.7": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@ndelangen/get-tarball/-/get-tarball-3.0.9.tgz#727ff4454e65f34707e742a59e5e6b1f525d8964" - integrity sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA== - dependencies: - gunzip-maybe "^1.4.2" - pump "^3.0.0" - tar-fs "^2.1.1" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - "@parcel/bundler-default@2.8.3": version "2.8.3" resolved "https://registry.yarnpkg.com/@parcel/bundler-default/-/bundler-default-2.8.3.tgz#d64739dbc2dbd59d6629861bf77a8083aced5229" @@ -2843,816 +2404,456 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@pmmmwh/react-refresh-webpack-plugin@^0.5.5": - version "0.5.11" - resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz#7c2268cedaa0644d677e8c4f377bc8fb304f714a" - integrity sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ== - dependencies: - ansi-html-community "^0.0.8" - common-path-prefix "^3.0.0" - core-js-pure "^3.23.3" - error-stack-parser "^2.0.6" - find-up "^5.0.0" - html-entities "^2.1.0" - loader-utils "^2.0.4" - schema-utils "^3.0.0" - source-map "^0.7.3" - "@radix-ui/colors@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@radix-ui/colors/-/colors-3.0.0.tgz#e8a591a303c44e503bd1212cacf40a09511165e0" integrity sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg== -"@radix-ui/number@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@radix-ui/number/-/number-1.0.1.tgz#644161a3557f46ed38a042acf4a770e826021674" - integrity sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/number@1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@radix-ui/number/-/number-1.1.1.tgz#7b2c9225fbf1b126539551f5985769d0048d9090" integrity sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g== -"@radix-ui/primitive@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.0.0.tgz#e1d8ef30b10ea10e69c76e896f608d9276352253" - integrity sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA== - dependencies: - "@babel/runtime" "^7.13.10" +"@radix-ui/primitive@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.3.tgz#e2dbc13bdc5e4168f4334f75832d7bdd3e2de5ba" + integrity sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg== -"@radix-ui/primitive@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.0.1.tgz#e46f9958b35d10e9f6dc71c497305c22e3e55dbd" - integrity sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw== +"@radix-ui/react-alert-dialog@^1.1.15": + version "1.1.15" + resolved "https://registry.yarnpkg.com/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.15.tgz#fa751d0fdd9aa2a90961c9901dba18e638dd4b41" + integrity sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw== dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/primitive@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.2.tgz#83f415c4425f21e3d27914c12b3272a32e3dae65" - integrity sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA== - -"@radix-ui/react-alert-dialog@^1.1.11": - version "1.1.11" - resolved "https://registry.yarnpkg.com/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.11.tgz#a4f7af5e315fed338e97499aa89d96716db8c14d" - integrity sha512-4KfkwrFnAw3Y5Jeoq6G+JYSKW0JfIS3uDdFC/79Jw9AsMayZMizSSMxk1gkrolYXsa/WzbbDfOA7/D8N5D+l1g== - dependencies: - "@radix-ui/primitive" "1.1.2" + "@radix-ui/primitive" "1.1.3" "@radix-ui/react-compose-refs" "1.1.2" "@radix-ui/react-context" "1.1.2" - "@radix-ui/react-dialog" "1.1.11" - "@radix-ui/react-primitive" "2.1.0" - "@radix-ui/react-slot" "1.2.0" + "@radix-ui/react-dialog" "1.1.15" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-slot" "1.2.3" -"@radix-ui/react-arrow@1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz#c24f7968996ed934d57fe6cde5d6ec7266e1d25d" - integrity sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-primitive" "1.0.3" - -"@radix-ui/react-arrow@1.1.4": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.4.tgz#08e263c692b3a56a3f1c4bdc8405b7f73f070963" - integrity sha512-qz+fxrqgNxG0dYew5l7qR3c7wdgRu1XVUHGnGYX7rg5HM4p9SWaRmJwfgR3J0SgyUKayLmzQIun+N6rWRgiRKw== - dependencies: - "@radix-ui/react-primitive" "2.1.0" - -"@radix-ui/react-avatar@^1.1.7": +"@radix-ui/react-arrow@1.1.7": version "1.1.7" - resolved "https://registry.yarnpkg.com/@radix-ui/react-avatar/-/react-avatar-1.1.7.tgz#6a1334db6292f7e7a977a831dca6cbbb10a3f938" - integrity sha512-V7ODUt4mUoJTe3VUxZw6nfURxaPALVqmDQh501YmaQsk3D8AZQrOPRnfKn4H7JGDLBc0KqLhT94H79nV88ppNg== + resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz#e14a2657c81d961598c5e72b73dd6098acc04f09" + integrity sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w== dependencies: - "@radix-ui/react-context" "1.1.2" - "@radix-ui/react-primitive" "2.1.0" + "@radix-ui/react-primitive" "2.1.3" + +"@radix-ui/react-avatar@^1.1.11": + version "1.1.11" + resolved "https://registry.yarnpkg.com/@radix-ui/react-avatar/-/react-avatar-1.1.11.tgz#3e24b70d636a12e2806abb2b4ce4b15df395f9c9" + integrity sha512-0Qk603AHGV28BOBO34p7IgD5m+V5Sg/YovfayABkoDDBM5d3NCx0Mp4gGrjzLGes1jV5eNOE1r3itqOR33VC6Q== + dependencies: + "@radix-ui/react-context" "1.1.3" + "@radix-ui/react-primitive" "2.1.4" "@radix-ui/react-use-callback-ref" "1.1.1" "@radix-ui/react-use-is-hydrated" "0.1.0" "@radix-ui/react-use-layout-effect" "1.1.1" -"@radix-ui/react-checkbox@^1.2.3": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@radix-ui/react-checkbox/-/react-checkbox-1.2.3.tgz#808a4116f7ee6236b99cd62d6d7dc03b9cc9a04e" - integrity sha512-pHVzDYsnaDmBlAuwim45y3soIN8H4R7KbkSVirGhXO+R/kO2OLCe0eucUEbddaTcdMHHdzcIGHtZSMSQlA+apw== +"@radix-ui/react-checkbox@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-checkbox/-/react-checkbox-1.3.3.tgz#db45ca8a6d5c056a92f74edbb564acee05318b79" + integrity sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw== dependencies: - "@radix-ui/primitive" "1.1.2" + "@radix-ui/primitive" "1.1.3" "@radix-ui/react-compose-refs" "1.1.2" "@radix-ui/react-context" "1.1.2" - "@radix-ui/react-presence" "1.1.4" - "@radix-ui/react-primitive" "2.1.0" + "@radix-ui/react-presence" "1.1.5" + "@radix-ui/react-primitive" "2.1.3" "@radix-ui/react-use-controllable-state" "1.2.2" "@radix-ui/react-use-previous" "1.1.1" "@radix-ui/react-use-size" "1.1.1" -"@radix-ui/react-collection@1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.0.3.tgz#9595a66e09026187524a36c6e7e9c7d286469159" - integrity sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-slot" "1.0.2" - -"@radix-ui/react-collection@1.1.4": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.1.4.tgz#45fb4215ca26a84bd61b9b1337105e4d4e01b686" - integrity sha512-cv4vSf7HttqXilDnAnvINd53OTl1/bjUYVZrkFnA7nwmY9Ob2POUy0WY0sfqBAe1s5FyKsyceQlqiEGPYNTadg== +"@radix-ui/react-collection@1.1.7": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.1.7.tgz#d05c25ca9ac4695cc19ba91f42f686e3ea2d9aec" + integrity sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw== dependencies: "@radix-ui/react-compose-refs" "1.1.2" "@radix-ui/react-context" "1.1.2" - "@radix-ui/react-primitive" "2.1.0" - "@radix-ui/react-slot" "1.2.0" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-slot" "1.2.3" -"@radix-ui/react-compose-refs@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz#37595b1f16ec7f228d698590e78eeed18ff218ae" - integrity sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-compose-refs@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz#7ed868b66946aa6030e580b1ffca386dd4d21989" - integrity sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-compose-refs@1.1.2": +"@radix-ui/react-compose-refs@1.1.2", "@radix-ui/react-compose-refs@^1.1.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz#a2c4c47af6337048ee78ff6dc0d090b390d2bb30" integrity sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg== -"@radix-ui/react-context-menu@^2.2.12": - version "2.2.12" - resolved "https://registry.yarnpkg.com/@radix-ui/react-context-menu/-/react-context-menu-2.2.12.tgz#23741b9ec6819316979d71058958074d2aaf6c67" - integrity sha512-5UFKuTMX8F2/KjHvyqu9IYT8bEtDSCJwwIx1PghBo4jh9S6jJVsceq9xIjqsOVcxsynGwV5eaqPE3n/Cu+DrSA== +"@radix-ui/react-context-menu@^2.2.16": + version "2.2.16" + resolved "https://registry.yarnpkg.com/@radix-ui/react-context-menu/-/react-context-menu-2.2.16.tgz#e7bf94a457b68af08f24ad696949144530faab50" + integrity sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww== dependencies: - "@radix-ui/primitive" "1.1.2" + "@radix-ui/primitive" "1.1.3" "@radix-ui/react-context" "1.1.2" - "@radix-ui/react-menu" "2.1.12" - "@radix-ui/react-primitive" "2.1.0" + "@radix-ui/react-menu" "2.1.16" + "@radix-ui/react-primitive" "2.1.3" "@radix-ui/react-use-callback-ref" "1.1.1" "@radix-ui/react-use-controllable-state" "1.2.2" -"@radix-ui/react-context@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.0.0.tgz#f38e30c5859a9fb5e9aa9a9da452ee3ed9e0aee0" - integrity sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-context@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.0.1.tgz#fe46e67c96b240de59187dcb7a1a50ce3e2ec00c" - integrity sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-context@1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.2.tgz#61628ef269a433382c364f6f1e3788a6dc213a36" integrity sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA== -"@radix-ui/react-dialog@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-dialog/-/react-dialog-1.0.0.tgz#997e97cb183bc90bd888b26b8e23a355ac9fe5f0" - integrity sha512-Yn9YU+QlHYLWwV1XfKiqnGVpWYWk6MeBVM6x/bcoyPvxgjQGoeT35482viLPctTMWoMw0PoHgqfSox7Ig+957Q== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.0" - "@radix-ui/react-compose-refs" "1.0.0" - "@radix-ui/react-context" "1.0.0" - "@radix-ui/react-dismissable-layer" "1.0.0" - "@radix-ui/react-focus-guards" "1.0.0" - "@radix-ui/react-focus-scope" "1.0.0" - "@radix-ui/react-id" "1.0.0" - "@radix-ui/react-portal" "1.0.0" - "@radix-ui/react-presence" "1.0.0" - "@radix-ui/react-primitive" "1.0.0" - "@radix-ui/react-slot" "1.0.0" - "@radix-ui/react-use-controllable-state" "1.0.0" - aria-hidden "^1.1.1" - react-remove-scroll "2.5.4" +"@radix-ui/react-context@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.3.tgz#81286f643b310d040eaac13b18e223130861d839" + integrity sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw== -"@radix-ui/react-dialog@1.1.11", "@radix-ui/react-dialog@^1.1.11": - version "1.1.11" - resolved "https://registry.yarnpkg.com/@radix-ui/react-dialog/-/react-dialog-1.1.11.tgz#1144609cbc9f8b36bcc288beb880f6b72cbd85ee" - integrity sha512-yI7S1ipkP5/+99qhSI6nthfo/tR6bL6Zgxi/+1UO6qPa6UeM6nlafWcQ65vB4rU2XjgjMfMhI3k9Y5MztA62VQ== +"@radix-ui/react-dialog@1.1.15", "@radix-ui/react-dialog@^1.1.15", "@radix-ui/react-dialog@^1.1.6": + version "1.1.15" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz#1de3d7a7e9a17a9874d29c07f5940a18a119b632" + integrity sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw== dependencies: - "@radix-ui/primitive" "1.1.2" + "@radix-ui/primitive" "1.1.3" "@radix-ui/react-compose-refs" "1.1.2" "@radix-ui/react-context" "1.1.2" - "@radix-ui/react-dismissable-layer" "1.1.7" - "@radix-ui/react-focus-guards" "1.1.2" - "@radix-ui/react-focus-scope" "1.1.4" + "@radix-ui/react-dismissable-layer" "1.1.11" + "@radix-ui/react-focus-guards" "1.1.3" + "@radix-ui/react-focus-scope" "1.1.7" "@radix-ui/react-id" "1.1.1" - "@radix-ui/react-portal" "1.1.6" - "@radix-ui/react-presence" "1.1.4" - "@radix-ui/react-primitive" "2.1.0" - "@radix-ui/react-slot" "1.2.0" + "@radix-ui/react-portal" "1.1.9" + "@radix-ui/react-presence" "1.1.5" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-slot" "1.2.3" "@radix-ui/react-use-controllable-state" "1.2.2" aria-hidden "^1.2.4" react-remove-scroll "^2.6.3" -"@radix-ui/react-direction@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.0.1.tgz#9cb61bf2ccf568f3421422d182637b7f47596c9b" - integrity sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-direction@1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.1.1.tgz#39e5a5769e676c753204b792fbe6cf508e550a14" integrity sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw== -"@radix-ui/react-dismissable-layer@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.0.tgz#35b7826fa262fd84370faef310e627161dffa76b" - integrity sha512-n7kDRfx+LB1zLueRDvZ1Pd0bxdJWDUZNQ/GWoxDn2prnuJKRdxsjulejX/ePkOsLi2tTm6P24mDqlMSgQpsT6g== +"@radix-ui/react-dismissable-layer@1.1.11": + version "1.1.11" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz#e33ab6f6bdaa00f8f7327c408d9f631376b88b37" + integrity sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.0" - "@radix-ui/react-compose-refs" "1.0.0" - "@radix-ui/react-primitive" "1.0.0" - "@radix-ui/react-use-callback-ref" "1.0.0" - "@radix-ui/react-use-escape-keydown" "1.0.0" - -"@radix-ui/react-dismissable-layer@1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.4.tgz#883a48f5f938fa679427aa17fcba70c5494c6978" - integrity sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-callback-ref" "1.0.1" - "@radix-ui/react-use-escape-keydown" "1.0.3" - -"@radix-ui/react-dismissable-layer@1.1.7": - version "1.1.7" - resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.7.tgz#80b5c23a0d29cfe56850399210c603376c27091f" - integrity sha512-j5+WBUdhccJsmH5/H0K6RncjDtoALSEr6jbkaZu+bjw6hOPOhHycr6vEUujl+HBK8kjUfWcoCJXxP6e4lUlMZw== - dependencies: - "@radix-ui/primitive" "1.1.2" + "@radix-ui/primitive" "1.1.3" "@radix-ui/react-compose-refs" "1.1.2" - "@radix-ui/react-primitive" "2.1.0" + "@radix-ui/react-primitive" "2.1.3" "@radix-ui/react-use-callback-ref" "1.1.1" "@radix-ui/react-use-escape-keydown" "1.1.1" -"@radix-ui/react-dropdown-menu@^2.1.12": - version "2.1.12" - resolved "https://registry.yarnpkg.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.12.tgz#18c71e1588c5bd436e8d32d0464b6237c0647e4b" - integrity sha512-VJoMs+BWWE7YhzEQyVwvF9n22Eiyr83HotCVrMQzla/OwRovXCgah7AcaEr4hMNj4gJxSdtIbcHGvmJXOoJVHA== +"@radix-ui/react-dropdown-menu@^2.1.16": + version "2.1.16" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz#5ee045c62bad8122347981c479d92b1ff24c7254" + integrity sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw== dependencies: - "@radix-ui/primitive" "1.1.2" + "@radix-ui/primitive" "1.1.3" "@radix-ui/react-compose-refs" "1.1.2" "@radix-ui/react-context" "1.1.2" "@radix-ui/react-id" "1.1.1" - "@radix-ui/react-menu" "2.1.12" - "@radix-ui/react-primitive" "2.1.0" + "@radix-ui/react-menu" "2.1.16" + "@radix-ui/react-primitive" "2.1.3" "@radix-ui/react-use-controllable-state" "1.2.2" -"@radix-ui/react-focus-guards@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.0.tgz#339c1c69c41628c1a5e655f15f7020bf11aa01fa" - integrity sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ== - dependencies: - "@babel/runtime" "^7.13.10" +"@radix-ui/react-focus-guards@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz#2a5669e464ad5fde9f86d22f7fdc17781a4dfa7f" + integrity sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw== -"@radix-ui/react-focus-guards@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz#1ea7e32092216b946397866199d892f71f7f98ad" - integrity sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-focus-guards@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.2.tgz#4ec9a7e50925f7fb661394460045b46212a33bed" - integrity sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA== - -"@radix-ui/react-focus-scope@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.0.tgz#95a0c1188276dc8933b1eac5f1cdb6471e01ade5" - integrity sha512-C4SWtsULLGf/2L4oGeIHlvWQx7Rf+7cX/vKOAD2dXW0A1b5QXwi3wWeaEgW+wn+SEVrraMUk05vLU9fZZz5HbQ== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-compose-refs" "1.0.0" - "@radix-ui/react-primitive" "1.0.0" - "@radix-ui/react-use-callback-ref" "1.0.0" - -"@radix-ui/react-focus-scope@1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.3.tgz#9c2e8d4ed1189a1d419ee61edd5c1828726472f9" - integrity sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-callback-ref" "1.0.1" - -"@radix-ui/react-focus-scope@1.1.4": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.4.tgz#dbe9ed31b36ff9aadadf4b59aa733a4e91799d15" - integrity sha512-r2annK27lIW5w9Ho5NyQgqs0MmgZSTIKXWpVCJaLC1q2kZrZkcqnmHkCHMEmv8XLvsLlurKMPT+kbKkRkm/xVA== +"@radix-ui/react-focus-scope@1.1.7": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz#dfe76fc103537d80bf42723a183773fd07bfb58d" + integrity sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw== dependencies: "@radix-ui/react-compose-refs" "1.1.2" - "@radix-ui/react-primitive" "2.1.0" + "@radix-ui/react-primitive" "2.1.3" "@radix-ui/react-use-callback-ref" "1.1.1" -"@radix-ui/react-id@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.0.0.tgz#8d43224910741870a45a8c9d092f25887bb6d11e" - integrity sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-layout-effect" "1.0.0" - -"@radix-ui/react-id@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.0.1.tgz#73cdc181f650e4df24f0b6a5b7aa426b912c88c0" - integrity sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-layout-effect" "1.0.1" - -"@radix-ui/react-id@1.1.1": +"@radix-ui/react-id@1.1.1", "@radix-ui/react-id@^1.1.0": version "1.1.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.1.1.tgz#1404002e79a03fe062b7e3864aa01e24bd1471f7" integrity sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg== dependencies: "@radix-ui/react-use-layout-effect" "1.1.1" -"@radix-ui/react-label@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-label/-/react-label-2.1.4.tgz#e89607486b82381f2d28ce1ce022e7fb5f5a158c" - integrity sha512-wy3dqizZnZVV4ja0FNnUhIWNwWdoldXrneEyUcVtLYDAt8ovGS4ridtMAOGgXBBIfggL4BOveVWsjXDORdGEQg== +"@radix-ui/react-label@^2.1.8": + version "2.1.8" + resolved "https://registry.yarnpkg.com/@radix-ui/react-label/-/react-label-2.1.8.tgz#d93b7c063ef2ea034df143a2464bfc0548e4b7e5" + integrity sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A== dependencies: - "@radix-ui/react-primitive" "2.1.0" + "@radix-ui/react-primitive" "2.1.4" -"@radix-ui/react-menu@2.1.12": - version "2.1.12" - resolved "https://registry.yarnpkg.com/@radix-ui/react-menu/-/react-menu-2.1.12.tgz#011eb9c0dfc58a01bc8d7eea04ed62450a0b6563" - integrity sha512-+qYq6LfbiGo97Zz9fioX83HCiIYYFNs8zAsVCMQrIakoNYylIzWuoD/anAD3UzvvR6cnswmfRFJFq/zYYq/k7Q== +"@radix-ui/react-menu@2.1.16": + version "2.1.16" + resolved "https://registry.yarnpkg.com/@radix-ui/react-menu/-/react-menu-2.1.16.tgz#528a5a973c3a7413d3d49eb9ccd229aa52402911" + integrity sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg== dependencies: - "@radix-ui/primitive" "1.1.2" - "@radix-ui/react-collection" "1.1.4" + "@radix-ui/primitive" "1.1.3" + "@radix-ui/react-collection" "1.1.7" "@radix-ui/react-compose-refs" "1.1.2" "@radix-ui/react-context" "1.1.2" "@radix-ui/react-direction" "1.1.1" - "@radix-ui/react-dismissable-layer" "1.1.7" - "@radix-ui/react-focus-guards" "1.1.2" - "@radix-ui/react-focus-scope" "1.1.4" + "@radix-ui/react-dismissable-layer" "1.1.11" + "@radix-ui/react-focus-guards" "1.1.3" + "@radix-ui/react-focus-scope" "1.1.7" "@radix-ui/react-id" "1.1.1" - "@radix-ui/react-popper" "1.2.4" - "@radix-ui/react-portal" "1.1.6" - "@radix-ui/react-presence" "1.1.4" - "@radix-ui/react-primitive" "2.1.0" - "@radix-ui/react-roving-focus" "1.1.7" - "@radix-ui/react-slot" "1.2.0" + "@radix-ui/react-popper" "1.2.8" + "@radix-ui/react-portal" "1.1.9" + "@radix-ui/react-presence" "1.1.5" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-roving-focus" "1.1.11" + "@radix-ui/react-slot" "1.2.3" "@radix-ui/react-use-callback-ref" "1.1.1" aria-hidden "^1.2.4" react-remove-scroll "^2.6.3" -"@radix-ui/react-popover@^1.1.11": - version "1.1.11" - resolved "https://registry.yarnpkg.com/@radix-ui/react-popover/-/react-popover-1.1.11.tgz#141efda5a03a103c7f229c74da3443d70add4d11" - integrity sha512-yFMfZkVA5G3GJnBgb2PxrrcLKm1ZLWXrbYVgdyTl//0TYEIHS9LJbnyz7WWcZ0qCq7hIlJZpRtxeSeIG5T5oJw== +"@radix-ui/react-popover@^1.1.15": + version "1.1.15" + resolved "https://registry.yarnpkg.com/@radix-ui/react-popover/-/react-popover-1.1.15.tgz#9c852f93990a687ebdc949b2c3de1f37cdc4c5d5" + integrity sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA== dependencies: - "@radix-ui/primitive" "1.1.2" + "@radix-ui/primitive" "1.1.3" "@radix-ui/react-compose-refs" "1.1.2" "@radix-ui/react-context" "1.1.2" - "@radix-ui/react-dismissable-layer" "1.1.7" - "@radix-ui/react-focus-guards" "1.1.2" - "@radix-ui/react-focus-scope" "1.1.4" + "@radix-ui/react-dismissable-layer" "1.1.11" + "@radix-ui/react-focus-guards" "1.1.3" + "@radix-ui/react-focus-scope" "1.1.7" "@radix-ui/react-id" "1.1.1" - "@radix-ui/react-popper" "1.2.4" - "@radix-ui/react-portal" "1.1.6" - "@radix-ui/react-presence" "1.1.4" - "@radix-ui/react-primitive" "2.1.0" - "@radix-ui/react-slot" "1.2.0" + "@radix-ui/react-popper" "1.2.8" + "@radix-ui/react-portal" "1.1.9" + "@radix-ui/react-presence" "1.1.5" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-slot" "1.2.3" "@radix-ui/react-use-controllable-state" "1.2.2" aria-hidden "^1.2.4" react-remove-scroll "^2.6.3" -"@radix-ui/react-popper@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.1.2.tgz#4c0b96fcd188dc1f334e02dba2d538973ad842e9" - integrity sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg== - dependencies: - "@babel/runtime" "^7.13.10" - "@floating-ui/react-dom" "^2.0.0" - "@radix-ui/react-arrow" "1.0.3" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-callback-ref" "1.0.1" - "@radix-ui/react-use-layout-effect" "1.0.1" - "@radix-ui/react-use-rect" "1.0.1" - "@radix-ui/react-use-size" "1.0.1" - "@radix-ui/rect" "1.0.1" - -"@radix-ui/react-popper@1.2.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.4.tgz#8fd6d954fca9e5d1341c7d9153cc88e05d5ed84e" - integrity sha512-3p2Rgm/a1cK0r/UVkx5F/K9v/EplfjAeIFCGOPYPO4lZ0jtg4iSQXt/YGTSLWaf4x7NG6Z4+uKFcylcTZjeqDA== +"@radix-ui/react-popper@1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.8.tgz#a79f39cdd2b09ab9fb50bf95250918422c4d9602" + integrity sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw== dependencies: "@floating-ui/react-dom" "^2.0.0" - "@radix-ui/react-arrow" "1.1.4" + "@radix-ui/react-arrow" "1.1.7" "@radix-ui/react-compose-refs" "1.1.2" "@radix-ui/react-context" "1.1.2" - "@radix-ui/react-primitive" "2.1.0" + "@radix-ui/react-primitive" "2.1.3" "@radix-ui/react-use-callback-ref" "1.1.1" "@radix-ui/react-use-layout-effect" "1.1.1" "@radix-ui/react-use-rect" "1.1.1" "@radix-ui/react-use-size" "1.1.1" "@radix-ui/rect" "1.1.1" -"@radix-ui/react-portal@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.0.0.tgz#7220b66743394fabb50c55cb32381395cc4a276b" - integrity sha512-a8qyFO/Xb99d8wQdu4o7qnigNjTPG123uADNecz0eX4usnQEj7o+cG4ZX4zkqq98NYekT7UoEQIjxBNWIFuqTA== +"@radix-ui/react-portal@1.1.9": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.9.tgz#14c3649fe48ec474ac51ed9f2b9f5da4d91c4472" + integrity sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-primitive" "1.0.0" - -"@radix-ui/react-portal@1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.0.3.tgz#ffb961244c8ed1b46f039e6c215a6c4d9989bda1" - integrity sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-primitive" "1.0.3" - -"@radix-ui/react-portal@1.1.6": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.6.tgz#4202e1bb34afdac612e4e982eca8efd36cbc611f" - integrity sha512-XmsIl2z1n/TsYFLIdYam2rmFwf9OC/Sh2avkbmVMDuBZIe7hSpM0cYnWPAo7nHOVx8zTuwDZGByfcqLdnzp3Vw== - dependencies: - "@radix-ui/react-primitive" "2.1.0" + "@radix-ui/react-primitive" "2.1.3" "@radix-ui/react-use-layout-effect" "1.1.1" -"@radix-ui/react-presence@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.0.0.tgz#814fe46df11f9a468808a6010e3f3ca7e0b2e84a" - integrity sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-compose-refs" "1.0.0" - "@radix-ui/react-use-layout-effect" "1.0.0" - -"@radix-ui/react-presence@1.1.4": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.4.tgz#253ac0ad4946c5b4a9c66878335f5cf07c967ced" - integrity sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA== +"@radix-ui/react-presence@1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.5.tgz#5d8f28ac316c32f078afce2996839250c10693db" + integrity sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ== dependencies: "@radix-ui/react-compose-refs" "1.1.2" "@radix-ui/react-use-layout-effect" "1.1.1" -"@radix-ui/react-primitive@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz#376cd72b0fcd5e0e04d252ed33eb1b1f025af2b0" - integrity sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ== +"@radix-ui/react-primitive@2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz#db9b8bcff49e01be510ad79893fb0e4cda50f1bc" + integrity sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-slot" "1.0.0" + "@radix-ui/react-slot" "1.2.3" -"@radix-ui/react-primitive@1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz#d49ea0f3f0b2fe3ab1cb5667eb03e8b843b914d0" - integrity sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g== +"@radix-ui/react-primitive@2.1.4", "@radix-ui/react-primitive@^2.0.2": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz#2626ea309ebd63bf5767d3e7fc4081f81b993df0" + integrity sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-slot" "1.0.2" + "@radix-ui/react-slot" "1.2.4" -"@radix-ui/react-primitive@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.1.0.tgz#9233e17a22d0010195086f8b5eb1808ebbca8437" - integrity sha512-/J/FhLdK0zVcILOwt5g+dH4KnkonCtkVJsa2G6JmvbbtZfBEI1gMsO3QMjseL4F/SwfAMt1Vc/0XKYKq+xJ1sw== +"@radix-ui/react-radio-group@^1.3.8": + version "1.3.8" + resolved "https://registry.yarnpkg.com/@radix-ui/react-radio-group/-/react-radio-group-1.3.8.tgz#93f102b5b948d602c2f2adb1bc5c347cbaf64bd9" + integrity sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ== dependencies: - "@radix-ui/react-slot" "1.2.0" - -"@radix-ui/react-radio-group@^1.3.4": - version "1.3.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-radio-group/-/react-radio-group-1.3.4.tgz#4af1216b4171fc93eeca4998088b161ae744101e" - integrity sha512-N4J9QFdW5zcJNxxY/zwTXBN4Uc5VEuRM7ZLjNfnWoKmNvgrPtNNw4P8zY532O3qL6aPkaNO+gY9y6bfzmH4U1g== - dependencies: - "@radix-ui/primitive" "1.1.2" + "@radix-ui/primitive" "1.1.3" "@radix-ui/react-compose-refs" "1.1.2" "@radix-ui/react-context" "1.1.2" "@radix-ui/react-direction" "1.1.1" - "@radix-ui/react-presence" "1.1.4" - "@radix-ui/react-primitive" "2.1.0" - "@radix-ui/react-roving-focus" "1.1.7" + "@radix-ui/react-presence" "1.1.5" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-roving-focus" "1.1.11" "@radix-ui/react-use-controllable-state" "1.2.2" "@radix-ui/react-use-previous" "1.1.1" "@radix-ui/react-use-size" "1.1.1" -"@radix-ui/react-roving-focus@1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz#e90c4a6a5f6ac09d3b8c1f5b5e81aab2f0db1974" - integrity sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ== +"@radix-ui/react-roving-focus@1.1.11": + version "1.1.11" + resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz#ef54384b7361afc6480dcf9907ef2fedb5080fd9" + integrity sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-collection" "1.0.3" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-direction" "1.0.1" - "@radix-ui/react-id" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-callback-ref" "1.0.1" - "@radix-ui/react-use-controllable-state" "1.0.1" - -"@radix-ui/react-roving-focus@1.1.7": - version "1.1.7" - resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.7.tgz#02077705ab0c712d2d9692459a7194c5a4e5236d" - integrity sha512-C6oAg451/fQT3EGbWHbCQjYTtbyjNO1uzQgMzwyivcHT3GKNEmu1q3UuREhN+HzHAVtv3ivMVK08QlC+PkYw9Q== - dependencies: - "@radix-ui/primitive" "1.1.2" - "@radix-ui/react-collection" "1.1.4" + "@radix-ui/primitive" "1.1.3" + "@radix-ui/react-collection" "1.1.7" "@radix-ui/react-compose-refs" "1.1.2" "@radix-ui/react-context" "1.1.2" "@radix-ui/react-direction" "1.1.1" "@radix-ui/react-id" "1.1.1" - "@radix-ui/react-primitive" "2.1.0" + "@radix-ui/react-primitive" "2.1.3" "@radix-ui/react-use-callback-ref" "1.1.1" "@radix-ui/react-use-controllable-state" "1.2.2" -"@radix-ui/react-select@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@radix-ui/react-select/-/react-select-1.2.2.tgz#caa981fa0d672cf3c1b2a5240135524e69b32181" - integrity sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/number" "1.0.1" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-collection" "1.0.3" - "@radix-ui/react-compose-refs" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-direction" "1.0.1" - "@radix-ui/react-dismissable-layer" "1.0.4" - "@radix-ui/react-focus-guards" "1.0.1" - "@radix-ui/react-focus-scope" "1.0.3" - "@radix-ui/react-id" "1.0.1" - "@radix-ui/react-popper" "1.1.2" - "@radix-ui/react-portal" "1.0.3" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-slot" "1.0.2" - "@radix-ui/react-use-callback-ref" "1.0.1" - "@radix-ui/react-use-controllable-state" "1.0.1" - "@radix-ui/react-use-layout-effect" "1.0.1" - "@radix-ui/react-use-previous" "1.0.1" - "@radix-ui/react-visually-hidden" "1.0.3" - aria-hidden "^1.1.1" - react-remove-scroll "2.5.5" - -"@radix-ui/react-select@^2.2.2": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@radix-ui/react-select/-/react-select-2.2.2.tgz#96759b9dcf4e80f6f39c1ad706718f1b2928ba21" - integrity sha512-HjkVHtBkuq+r3zUAZ/CvNWUGKPfuicGDbgtZgiQuFmNcV5F+Tgy24ep2nsAW2nFgvhGPJVqeBZa6KyVN0EyrBA== +"@radix-ui/react-select@^2.2.6": + version "2.2.6" + resolved "https://registry.yarnpkg.com/@radix-ui/react-select/-/react-select-2.2.6.tgz#022cf8dab16bf05d0d1b4df9e53e4bea1b744fd9" + integrity sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ== dependencies: "@radix-ui/number" "1.1.1" - "@radix-ui/primitive" "1.1.2" - "@radix-ui/react-collection" "1.1.4" + "@radix-ui/primitive" "1.1.3" + "@radix-ui/react-collection" "1.1.7" "@radix-ui/react-compose-refs" "1.1.2" "@radix-ui/react-context" "1.1.2" "@radix-ui/react-direction" "1.1.1" - "@radix-ui/react-dismissable-layer" "1.1.7" - "@radix-ui/react-focus-guards" "1.1.2" - "@radix-ui/react-focus-scope" "1.1.4" + "@radix-ui/react-dismissable-layer" "1.1.11" + "@radix-ui/react-focus-guards" "1.1.3" + "@radix-ui/react-focus-scope" "1.1.7" "@radix-ui/react-id" "1.1.1" - "@radix-ui/react-popper" "1.2.4" - "@radix-ui/react-portal" "1.1.6" - "@radix-ui/react-primitive" "2.1.0" - "@radix-ui/react-slot" "1.2.0" + "@radix-ui/react-popper" "1.2.8" + "@radix-ui/react-portal" "1.1.9" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-slot" "1.2.3" "@radix-ui/react-use-callback-ref" "1.1.1" "@radix-ui/react-use-controllable-state" "1.2.2" "@radix-ui/react-use-layout-effect" "1.1.1" "@radix-ui/react-use-previous" "1.1.1" - "@radix-ui/react-visually-hidden" "1.2.0" + "@radix-ui/react-visually-hidden" "1.2.3" aria-hidden "^1.2.4" react-remove-scroll "^2.6.3" -"@radix-ui/react-separator@1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@radix-ui/react-separator/-/react-separator-1.0.3.tgz#be5a931a543d5726336b112f465f58585c04c8aa" - integrity sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw== +"@radix-ui/react-separator@^1.1.8": + version "1.1.8" + resolved "https://registry.yarnpkg.com/@radix-ui/react-separator/-/react-separator-1.1.8.tgz#24f871fbf9630af316d0c14cbc7519a6e33aa11e" + integrity sha512-sDvqVY4itsKwwSMEe0jtKgfTh+72Sy3gPmQpjqcQneqQ4PFmr/1I0YA+2/puilhggCe2gJcx5EBAYFkWkdpa5g== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-primitive" "2.1.4" -"@radix-ui/react-separator@^1.1.4": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-separator/-/react-separator-1.1.4.tgz#86663cc4f89c2f66cae91629501c05126a5cf8ec" - integrity sha512-2fTm6PSiUm8YPq9W0E4reYuv01EE3aFSzt8edBiXqPHshF8N9+Kymt/k0/R+F3dkY5lQyB/zPtrP82phskLi7w== - dependencies: - "@radix-ui/react-primitive" "2.1.0" - -"@radix-ui/react-slider@^1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@radix-ui/react-slider/-/react-slider-1.3.2.tgz#0849ba97f841a03b1be6a3ec5622575aa356f098" - integrity sha512-oQnqfgSiYkxZ1MrF6672jw2/zZvpB+PJsrIc3Zm1zof1JHf/kj7WhmROw7JahLfOwYQ5/+Ip0rFORgF1tjSiaQ== +"@radix-ui/react-slider@^1.3.6": + version "1.3.6" + resolved "https://registry.yarnpkg.com/@radix-ui/react-slider/-/react-slider-1.3.6.tgz#409453110b8f34ca00972750b80cd792f0b23a8c" + integrity sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw== dependencies: "@radix-ui/number" "1.1.1" - "@radix-ui/primitive" "1.1.2" - "@radix-ui/react-collection" "1.1.4" + "@radix-ui/primitive" "1.1.3" + "@radix-ui/react-collection" "1.1.7" "@radix-ui/react-compose-refs" "1.1.2" "@radix-ui/react-context" "1.1.2" "@radix-ui/react-direction" "1.1.1" - "@radix-ui/react-primitive" "2.1.0" + "@radix-ui/react-primitive" "2.1.3" "@radix-ui/react-use-controllable-state" "1.2.2" "@radix-ui/react-use-layout-effect" "1.1.1" "@radix-ui/react-use-previous" "1.1.1" "@radix-ui/react-use-size" "1.1.1" -"@radix-ui/react-slot@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.0.0.tgz#7fa805b99891dea1e862d8f8fbe07f4d6d0fd698" - integrity sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-compose-refs" "1.0.0" - -"@radix-ui/react-slot@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.0.2.tgz#a9ff4423eade67f501ffb32ec22064bc9d3099ab" - integrity sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-compose-refs" "1.0.1" - -"@radix-ui/react-slot@1.2.0", "@radix-ui/react-slot@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.2.0.tgz#57727fc186ddb40724ccfbe294e1a351d92462ba" - integrity sha512-ujc+V6r0HNDviYqIK3rW4ffgYiZ8g5DEHrGJVk4x7kTlLXRDILnKX9vAUYeIsLOoDpDJ0ujpqMkjH4w2ofuo6w== +"@radix-ui/react-slot@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.2.3.tgz#502d6e354fc847d4169c3bc5f189de777f68cfe1" + integrity sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A== dependencies: "@radix-ui/react-compose-refs" "1.1.2" -"@radix-ui/react-switch@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@radix-ui/react-switch/-/react-switch-1.2.2.tgz#aee51a72b93b49d625e201e32c43deb7957e4641" - integrity sha512-7Z8n6L+ifMIIYZ83f28qWSceUpkXuslI2FJ34+kDMTiyj91ENdpdQ7VCidrzj5JfwfZTeano/BnGBbu/jqa5rQ== +"@radix-ui/react-slot@1.2.4", "@radix-ui/react-slot@^1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.2.4.tgz#63c0ba05fdf90cc49076b94029c852d7bac1fb83" + integrity sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA== dependencies: - "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.2" + +"@radix-ui/react-switch@^1.2.6": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@radix-ui/react-switch/-/react-switch-1.2.6.tgz#ff79acb831f0d5ea9216cfcc5b939912571358e3" + integrity sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ== + dependencies: + "@radix-ui/primitive" "1.1.3" "@radix-ui/react-compose-refs" "1.1.2" "@radix-ui/react-context" "1.1.2" - "@radix-ui/react-primitive" "2.1.0" + "@radix-ui/react-primitive" "2.1.3" "@radix-ui/react-use-controllable-state" "1.2.2" "@radix-ui/react-use-previous" "1.1.1" "@radix-ui/react-use-size" "1.1.1" -"@radix-ui/react-tabs@^1.1.9": - version "1.1.9" - resolved "https://registry.yarnpkg.com/@radix-ui/react-tabs/-/react-tabs-1.1.9.tgz#4170432717f32d2e75de3a9853ad0a557ccc1346" - integrity sha512-KIjtwciYvquiW/wAFkELZCVnaNLBsYNhTNcvl+zfMAbMhRkcvNuCLXDDd22L0j7tagpzVh/QwbFpwAATg7ILPw== +"@radix-ui/react-tabs@^1.1.13": + version "1.1.13" + resolved "https://registry.yarnpkg.com/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz#3537ce379d7e7ff4eeb6b67a0973e139c2ac1f15" + integrity sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A== dependencies: - "@radix-ui/primitive" "1.1.2" + "@radix-ui/primitive" "1.1.3" "@radix-ui/react-context" "1.1.2" "@radix-ui/react-direction" "1.1.1" "@radix-ui/react-id" "1.1.1" - "@radix-ui/react-presence" "1.1.4" - "@radix-ui/react-primitive" "2.1.0" - "@radix-ui/react-roving-focus" "1.1.7" + "@radix-ui/react-presence" "1.1.5" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-roving-focus" "1.1.11" "@radix-ui/react-use-controllable-state" "1.2.2" -"@radix-ui/react-toast@^1.2.11": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@radix-ui/react-toast/-/react-toast-1.2.11.tgz#24b54f11a149e2bfa96c91490ea417671e5194f2" - integrity sha512-Ed2mlOmT+tktOsu2NZBK1bCSHh/uqULu1vWOkpQTVq53EoOuZUZw7FInQoDB3uil5wZc2oe0XN9a7uVZB7/6AQ== +"@radix-ui/react-toast@^1.2.15": + version "1.2.15" + resolved "https://registry.yarnpkg.com/@radix-ui/react-toast/-/react-toast-1.2.15.tgz#746cf9a81297ddbfba214e5c81245ea3f706f876" + integrity sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g== dependencies: - "@radix-ui/primitive" "1.1.2" - "@radix-ui/react-collection" "1.1.4" + "@radix-ui/primitive" "1.1.3" + "@radix-ui/react-collection" "1.1.7" "@radix-ui/react-compose-refs" "1.1.2" "@radix-ui/react-context" "1.1.2" - "@radix-ui/react-dismissable-layer" "1.1.7" - "@radix-ui/react-portal" "1.1.6" - "@radix-ui/react-presence" "1.1.4" - "@radix-ui/react-primitive" "2.1.0" + "@radix-ui/react-dismissable-layer" "1.1.11" + "@radix-ui/react-portal" "1.1.9" + "@radix-ui/react-presence" "1.1.5" + "@radix-ui/react-primitive" "2.1.3" "@radix-ui/react-use-callback-ref" "1.1.1" "@radix-ui/react-use-controllable-state" "1.2.2" "@radix-ui/react-use-layout-effect" "1.1.1" - "@radix-ui/react-visually-hidden" "1.2.0" + "@radix-ui/react-visually-hidden" "1.2.3" -"@radix-ui/react-toggle-group@1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-toggle-group/-/react-toggle-group-1.0.4.tgz#f5b5c8c477831b013bec3580c55e20a68179d6ec" - integrity sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A== +"@radix-ui/react-toggle-group@^1.1.11": + version "1.1.11" + resolved "https://registry.yarnpkg.com/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.11.tgz#e513d6ffdb07509b400ab5b26f2523747c0d51c1" + integrity sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-direction" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-roving-focus" "1.0.4" - "@radix-ui/react-toggle" "1.0.3" - "@radix-ui/react-use-controllable-state" "1.0.1" - -"@radix-ui/react-toggle-group@^1.1.7": - version "1.1.7" - resolved "https://registry.yarnpkg.com/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.7.tgz#0eaca9e4f8fbf2536f01e33a6211eac4d6cfb83e" - integrity sha512-GRaPJhxrRSOqAcmcX3MwRL/SZACkoYdmoY9/sg7Bd5DhBYsB2t4co0NxTvVW8H7jUmieQDQwRtUlZ5Ta8UbgJA== - dependencies: - "@radix-ui/primitive" "1.1.2" + "@radix-ui/primitive" "1.1.3" "@radix-ui/react-context" "1.1.2" "@radix-ui/react-direction" "1.1.1" - "@radix-ui/react-primitive" "2.1.0" - "@radix-ui/react-roving-focus" "1.1.7" - "@radix-ui/react-toggle" "1.1.6" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-roving-focus" "1.1.11" + "@radix-ui/react-toggle" "1.1.10" "@radix-ui/react-use-controllable-state" "1.2.2" -"@radix-ui/react-toggle@1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@radix-ui/react-toggle/-/react-toggle-1.0.3.tgz#aecb2945630d1dc5c512997556c57aba894e539e" - integrity sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg== +"@radix-ui/react-toggle@1.1.10", "@radix-ui/react-toggle@^1.1.10": + version "1.1.10" + resolved "https://registry.yarnpkg.com/@radix-ui/react-toggle/-/react-toggle-1.1.10.tgz#b04ba0f9609599df666fce5b2f38109a197f08cf" + integrity sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-use-controllable-state" "1.0.1" - -"@radix-ui/react-toggle@1.1.6", "@radix-ui/react-toggle@^1.1.6": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@radix-ui/react-toggle/-/react-toggle-1.1.6.tgz#8d993d88d2abcd327fd18a6126adb2e6e0848a3c" - integrity sha512-3SeJxKeO3TO1zVw1Nl++Cp0krYk6zHDHMCUXXVkosIzl6Nxcvb07EerQpyD2wXQSJ5RZajrYAmPaydU8Hk1IyQ== - dependencies: - "@radix-ui/primitive" "1.1.2" - "@radix-ui/react-primitive" "2.1.0" + "@radix-ui/primitive" "1.1.3" + "@radix-ui/react-primitive" "2.1.3" "@radix-ui/react-use-controllable-state" "1.2.2" -"@radix-ui/react-toolbar@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-toolbar/-/react-toolbar-1.0.4.tgz#3211a105567fa016e89921b5b514877f833de559" - integrity sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q== +"@radix-ui/react-tooltip@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz#3f50267e25bccfc9e20bb3036bfd9ab4c2c30c2c" + integrity sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.1" - "@radix-ui/react-context" "1.0.1" - "@radix-ui/react-direction" "1.0.1" - "@radix-ui/react-primitive" "1.0.3" - "@radix-ui/react-roving-focus" "1.0.4" - "@radix-ui/react-separator" "1.0.3" - "@radix-ui/react-toggle-group" "1.0.4" - -"@radix-ui/react-tooltip@^1.2.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-tooltip/-/react-tooltip-1.2.4.tgz#d9111cfccb47891cf19e6e025b7583f3ceadb4bc" - integrity sha512-DyW8VVeeMSSLFvAmnVnCwvI3H+1tpJFHT50r+tdOoMse9XqYDBCcyux8u3G2y+LOpt7fPQ6KKH0mhs+ce1+Z5w== - dependencies: - "@radix-ui/primitive" "1.1.2" + "@radix-ui/primitive" "1.1.3" "@radix-ui/react-compose-refs" "1.1.2" "@radix-ui/react-context" "1.1.2" - "@radix-ui/react-dismissable-layer" "1.1.7" + "@radix-ui/react-dismissable-layer" "1.1.11" "@radix-ui/react-id" "1.1.1" - "@radix-ui/react-popper" "1.2.4" - "@radix-ui/react-portal" "1.1.6" - "@radix-ui/react-presence" "1.1.4" - "@radix-ui/react-primitive" "2.1.0" - "@radix-ui/react-slot" "1.2.0" + "@radix-ui/react-popper" "1.2.8" + "@radix-ui/react-portal" "1.1.9" + "@radix-ui/react-presence" "1.1.5" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-slot" "1.2.3" "@radix-ui/react-use-controllable-state" "1.2.2" - "@radix-ui/react-visually-hidden" "1.2.0" - -"@radix-ui/react-use-callback-ref@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz#9e7b8b6b4946fe3cbe8f748c82a2cce54e7b6a90" - integrity sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-use-callback-ref@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz#f4bb1f27f2023c984e6534317ebc411fc181107a" - integrity sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ== - dependencies: - "@babel/runtime" "^7.13.10" + "@radix-ui/react-visually-hidden" "1.2.3" "@radix-ui/react-use-callback-ref@1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz#62a4dba8b3255fdc5cc7787faeac1c6e4cc58d40" integrity sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg== -"@radix-ui/react-use-controllable-state@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.0.tgz#a64deaafbbc52d5d407afaa22d493d687c538b7f" - integrity sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-callback-ref" "1.0.0" - -"@radix-ui/react-use-controllable-state@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz#ecd2ced34e6330caf89a82854aa2f77e07440286" - integrity sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-callback-ref" "1.0.1" - "@radix-ui/react-use-controllable-state@1.2.2": version "1.2.2" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz#905793405de57d61a439f4afebbb17d0645f3190" @@ -3668,22 +2869,6 @@ dependencies: "@radix-ui/react-use-layout-effect" "1.1.1" -"@radix-ui/react-use-escape-keydown@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.0.tgz#aef375db4736b9de38a5a679f6f49b45a060e5d1" - integrity sha512-JwfBCUIfhXRxKExgIqGa4CQsiMemo1Xt0W/B4ei3fpzpvPENKpMKQ8mZSB6Acj3ebrAEgi2xiQvcI1PAAodvyg== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-callback-ref" "1.0.0" - -"@radix-ui/react-use-escape-keydown@1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz#217b840c250541609c66f67ed7bab2b733620755" - integrity sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-callback-ref" "1.0.1" - "@radix-ui/react-use-escape-keydown@1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz#b3fed9bbea366a118f40427ac40500aa1423cc29" @@ -3698,45 +2883,16 @@ dependencies: use-sync-external-store "^1.5.0" -"@radix-ui/react-use-layout-effect@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz#2fc19e97223a81de64cd3ba1dc42ceffd82374dc" - integrity sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ== - dependencies: - "@babel/runtime" "^7.13.10" - -"@radix-ui/react-use-layout-effect@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz#be8c7bc809b0c8934acf6657b577daf948a75399" - integrity sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-layout-effect@1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz#0c4230a9eed49d4589c967e2d9c0d9d60a23971e" integrity sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ== -"@radix-ui/react-use-previous@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz#b595c087b07317a4f143696c6a01de43b0d0ec66" - integrity sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-previous@1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz#1a1ad5568973d24051ed0af687766f6c7cb9b5b5" integrity sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ== -"@radix-ui/react-use-rect@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz#fde50b3bb9fd08f4a1cd204572e5943c244fcec2" - integrity sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/rect" "1.0.1" - "@radix-ui/react-use-rect@1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz#01443ca8ed071d33023c1113e5173b5ed8769152" @@ -3744,14 +2900,6 @@ dependencies: "@radix-ui/rect" "1.1.1" -"@radix-ui/react-use-size@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz#1c5f5fea940a7d7ade77694bb98116fb49f870b2" - integrity sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g== - dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-use-layout-effect" "1.0.1" - "@radix-ui/react-use-size@1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz#6de276ffbc389a537ffe4316f5b0f24129405b37" @@ -3759,165 +2907,137 @@ dependencies: "@radix-ui/react-use-layout-effect" "1.1.1" -"@radix-ui/react-visually-hidden@1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz#51aed9dd0fe5abcad7dee2a234ad36106a6984ac" - integrity sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA== +"@radix-ui/react-visually-hidden@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz#a8c38c8607735dc9f05c32f87ab0f9c2b109efbf" + integrity sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug== dependencies: - "@babel/runtime" "^7.13.10" - "@radix-ui/react-primitive" "1.0.3" - -"@radix-ui/react-visually-hidden@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.0.tgz#7692a590b4789bebf7e02d73e6d1390704a97920" - integrity sha512-rQj0aAWOpCdCMRbI6pLQm8r7S2BM3YhTa0SzOYD55k+hJA8oo9J+H+9wLM9oMlZWOX/wJWPTzfDfmZkf7LvCfg== - dependencies: - "@radix-ui/react-primitive" "2.1.0" - -"@radix-ui/rect@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.0.1.tgz#bf8e7d947671996da2e30f4904ece343bc4a883f" - integrity sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ== - dependencies: - "@babel/runtime" "^7.13.10" + "@radix-ui/react-primitive" "2.1.3" "@radix-ui/rect@1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.1.1.tgz#78244efe12930c56fd255d7923865857c41ac8cb" integrity sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw== -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - -"@smithy/abort-controller@^3.1.9": - version "3.1.9" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.1.9.tgz#47d323f754136a489e972d7fd465d534d72fcbff" - integrity sha512-yiW0WI30zj8ZKoSYNx90no7ugVn3khlyH/z5W8qtKBtVE6awRALbhSG+2SAHA1r6bO/6M9utxYKVZ3PCJ1rWxw== +"@smithy/abort-controller@^4.2.12": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-4.2.12.tgz#80c86416f232b0b4e79cef530877ef87d626ac42" + integrity sha512-xolrFw6b+2iYGl6EcOL7IJY71vvyZ0DJ3mcKtpykqPe2uscwtzDZJa1uVQXyP7w9Dd+kGwYnPbMsJrGISKiY/Q== dependencies: - "@smithy/types" "^3.7.2" + "@smithy/types" "^4.13.1" tslib "^2.6.2" -"@smithy/config-resolver@^3.0.13", "@smithy/config-resolver@^3.0.5": - version "3.0.13" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.13.tgz#653643a77a33d0f5907a5e7582353886b07ba752" - integrity sha512-Gr/qwzyPaTL1tZcq8WQyHhTZREER5R1Wytmz4WnVGL4onA3dNk6Btll55c8Vr58pLdvWZmtG8oZxJTw3t3q7Jg== +"@smithy/config-resolver@^4.4.11", "@smithy/config-resolver@^4.4.6": + version "4.4.11" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-4.4.11.tgz#bcf2324ec9472c4737442510d09c49ddfa1ee718" + integrity sha512-YxFiiG4YDAtX7WMN7RuhHZLeTmRRAOyCbr+zB8e3AQzHPnUhS8zXjB1+cniPVQI3xbWsQPM0X2aaIkO/ME0ymw== dependencies: - "@smithy/node-config-provider" "^3.1.12" - "@smithy/types" "^3.7.2" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.11" + "@smithy/node-config-provider" "^4.3.12" + "@smithy/types" "^4.13.1" + "@smithy/util-config-provider" "^4.2.2" + "@smithy/util-endpoints" "^3.3.3" + "@smithy/util-middleware" "^4.2.12" tslib "^2.6.2" -"@smithy/core@^2.3.1", "@smithy/core@^2.5.7": - version "2.5.7" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.5.7.tgz#b545649071905f064cb0407102f3b9159246f8d9" - integrity sha512-8olpW6mKCa0v+ibCjoCzgZHQx1SQmZuW/WkrdZo73wiTprTH6qhmskT60QLFdT9DRa5mXxjz89kQPZ7ZSsoqqg== +"@smithy/core@^3.22.0", "@smithy/core@^3.23.11": + version "3.23.11" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.23.11.tgz#78204c2ccd65736c6e8a6d9a51b2821e13d61164" + integrity sha512-952rGf7hBRnhUIaeLp6q4MptKW8sPFe5VvkoZ5qIzFAtx6c/QZ/54FS3yootsyUSf9gJX/NBqEBNdNR7jMIlpQ== dependencies: - "@smithy/middleware-serde" "^3.0.11" - "@smithy/protocol-http" "^4.1.8" - "@smithy/types" "^3.7.2" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-middleware" "^3.0.11" - "@smithy/util-stream" "^3.3.4" - "@smithy/util-utf8" "^3.0.0" + "@smithy/protocol-http" "^5.3.12" + "@smithy/types" "^4.13.1" + "@smithy/url-parser" "^4.2.12" + "@smithy/util-base64" "^4.3.2" + "@smithy/util-body-length-browser" "^4.2.2" + "@smithy/util-middleware" "^4.2.12" + "@smithy/util-stream" "^4.5.19" + "@smithy/util-utf8" "^4.2.2" + "@smithy/uuid" "^1.1.2" tslib "^2.6.2" -"@smithy/credential-provider-imds@^3.2.0", "@smithy/credential-provider-imds@^3.2.8": - version "3.2.8" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.8.tgz#27ed2747074c86a7d627a98e56f324a65cba88de" - integrity sha512-ZCY2yD0BY+K9iMXkkbnjo+08T2h8/34oHd0Jmh6BZUSZwaaGlGCyBT/3wnS7u7Xl33/EEfN4B6nQr3Gx5bYxgw== +"@smithy/credential-provider-imds@^4.2.12": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.12.tgz#fa2e52116cac7eaf5625e0bfd399a4927b598f66" + integrity sha512-cr2lR792vNZcYMriSIj+Um3x9KWrjcu98kn234xA6reOAFMmbRpQMOv8KPgEmLLtx3eldU6c5wALKFqNOhugmg== dependencies: - "@smithy/node-config-provider" "^3.1.12" - "@smithy/property-provider" "^3.1.11" - "@smithy/types" "^3.7.2" - "@smithy/url-parser" "^3.0.11" + "@smithy/node-config-provider" "^4.3.12" + "@smithy/property-provider" "^4.2.12" + "@smithy/types" "^4.13.1" + "@smithy/url-parser" "^4.2.12" tslib "^2.6.2" -"@smithy/eventstream-codec@^3.1.10": - version "3.1.10" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-3.1.10.tgz#0c1a3457e7a23b71cd71525ceb668f8569a84dad" - integrity sha512-323B8YckSbUH0nMIpXn7HZsAVKHYHFUODa8gG9cHo0ySvA1fr5iWaNT+iIL0UCqUzG6QPHA3BSsBtRQou4mMqQ== +"@smithy/eventstream-codec@^4.2.12": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-4.2.12.tgz#8cd62d08709344fb8b35fd17870fdf1435de61a3" + integrity sha512-FE3bZdEl62ojmy8x4FHqxq2+BuOHlcxiH5vaZ6aqHJr3AIZzwF5jfx8dEiU/X0a8RboyNDjmXjlbr8AdEyLgiA== dependencies: "@aws-crypto/crc32" "5.2.0" - "@smithy/types" "^3.7.2" - "@smithy/util-hex-encoding" "^3.0.0" + "@smithy/types" "^4.13.1" + "@smithy/util-hex-encoding" "^4.2.2" tslib "^2.6.2" -"@smithy/eventstream-serde-browser@^3.0.5": - version "3.0.14" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.14.tgz#0c3584c7cde2e210aacdfbbd2b57c1d7e2ca3b95" - integrity sha512-kbrt0vjOIihW3V7Cqj1SXQvAI5BR8SnyQYsandva0AOR307cXAc+IhPngxIPslxTLfxwDpNu0HzCAq6g42kCPg== +"@smithy/eventstream-serde-browser@^4.2.8": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.12.tgz#3ceb8743750edaf5d6e42cd1a2327e048f85ba4e" + integrity sha512-XUSuMxlTxV5pp4VpqZf6Sa3vT/Q75FVkLSpSSE3KkWBvAQWeuWt1msTv8fJfgA4/jcJhrbrbMzN1AC/hvPmm5A== dependencies: - "@smithy/eventstream-serde-universal" "^3.0.13" - "@smithy/types" "^3.7.2" + "@smithy/eventstream-serde-universal" "^4.2.12" + "@smithy/types" "^4.13.1" tslib "^2.6.2" -"@smithy/eventstream-serde-config-resolver@^3.0.3": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.11.tgz#5edceba836debea165ea93145231036f6286d67c" - integrity sha512-P2pnEp4n75O+QHjyO7cbw/vsw5l93K/8EWyjNCAAybYwUmj3M+hjSQZ9P5TVdUgEG08ueMAP5R4FkuSkElZ5tQ== +"@smithy/eventstream-serde-config-resolver@^4.3.8": + version "4.3.12" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.12.tgz#a29164bc5480d935ece9dbdca0f79924259e519a" + integrity sha512-7epsAZ3QvfHkngz6RXQYseyZYHlmWXSTPOfPmXkiS+zA6TBNo1awUaMFL9vxyXlGdoELmCZyZe1nQE+imbmV+Q== dependencies: - "@smithy/types" "^3.7.2" + "@smithy/types" "^4.13.1" tslib "^2.6.2" -"@smithy/eventstream-serde-node@^3.0.4": - version "3.0.13" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.13.tgz#5aebd7b553becee277e411a2b69f6af8c9d7b3a6" - integrity sha512-zqy/9iwbj8Wysmvi7Lq7XFLeDgjRpTbCfwBhJa8WbrylTAHiAu6oQTwdY7iu2lxigbc9YYr9vPv5SzYny5tCXQ== +"@smithy/eventstream-serde-node@^4.2.8": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.12.tgz#2cc06a1ea1108f679d376aab81e95a6f69877b4a" + integrity sha512-D1pFuExo31854eAvg89KMn9Oab/wEeJR6Buy32B49A9Ogdtx5fwZPqBHUlDzaCDpycTFk2+fSQgX689Qsk7UGA== dependencies: - "@smithy/eventstream-serde-universal" "^3.0.13" - "@smithy/types" "^3.7.2" + "@smithy/eventstream-serde-universal" "^4.2.12" + "@smithy/types" "^4.13.1" tslib "^2.6.2" -"@smithy/eventstream-serde-universal@^3.0.13": - version "3.0.13" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.13.tgz#609c922ea14a0a3eed23a28ac110344c935704eb" - integrity sha512-L1Ib66+gg9uTnqp/18Gz4MDpJPKRE44geOjOQ2SVc0eiaO5l255ADziATZgjQjqumC7yPtp1XnjHlF1srcwjKw== +"@smithy/eventstream-serde-universal@^4.2.12": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.12.tgz#a3640d1e7c3e348168360035661db8d21b51e078" + integrity sha512-+yNuTiyBACxOJUTvbsNsSOfH9G9oKbaJE1lNL3YHpGcuucl6rPZMi3nrpehpVOVR2E07YqFFmtwpImtpzlouHQ== dependencies: - "@smithy/eventstream-codec" "^3.1.10" - "@smithy/types" "^3.7.2" + "@smithy/eventstream-codec" "^4.2.12" + "@smithy/types" "^4.13.1" tslib "^2.6.2" -"@smithy/fetch-http-handler@^3.2.4": - version "3.2.9" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.9.tgz#8d5199c162a37caa37a8b6848eefa9ca58221a0b" - integrity sha512-hYNVQOqhFQ6vOpenifFME546f0GfJn2OiQ3M0FDmuUu8V/Uiwy2wej7ZXxFBNqdx0R5DZAqWM1l6VRhGz8oE6A== +"@smithy/fetch-http-handler@^5.3.15", "@smithy/fetch-http-handler@^5.3.9": + version "5.3.15" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.15.tgz#acf69a8b3bab0396d2782fc901bad0b957c8c6a2" + integrity sha512-T4jFU5N/yiIfrtrsb9uOQn7RdELdM/7HbyLNr6uO/mpkj1ctiVs7CihVr51w4LyQlXWDpXFn4BElf1WmQvZu/A== dependencies: - "@smithy/protocol-http" "^4.1.4" - "@smithy/querystring-builder" "^3.0.7" - "@smithy/types" "^3.5.0" - "@smithy/util-base64" "^3.0.0" + "@smithy/protocol-http" "^5.3.12" + "@smithy/querystring-builder" "^4.2.12" + "@smithy/types" "^4.13.1" + "@smithy/util-base64" "^4.3.2" tslib "^2.6.2" -"@smithy/fetch-http-handler@^4.1.3": - version "4.1.3" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-4.1.3.tgz#fc590dea2470d32559ae298306f1277729d24aa9" - integrity sha512-6SxNltSncI8s689nvnzZQc/dPXcpHQ34KUj6gR/HBroytKOd/isMG3gJF/zBE1TBmTT18TXyzhg3O3SOOqGEhA== +"@smithy/hash-node@^4.2.12", "@smithy/hash-node@^4.2.8": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-4.2.12.tgz#0ee7f6a1d2958c313ee24b07159dcb9547792441" + integrity sha512-QhBYbGrbxTkZ43QoTPrK72DoYviDeg6YKDrHTMJbbC+A0sml3kSjzFtXP7BtbyJnXojLfTQldGdUR0RGD8dA3w== dependencies: - "@smithy/protocol-http" "^4.1.8" - "@smithy/querystring-builder" "^3.0.11" - "@smithy/types" "^3.7.2" - "@smithy/util-base64" "^3.0.0" + "@smithy/types" "^4.13.1" + "@smithy/util-buffer-from" "^4.2.2" + "@smithy/util-utf8" "^4.2.2" tslib "^2.6.2" -"@smithy/hash-node@^3.0.3": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-3.0.11.tgz#99e09ead3fc99c8cd7ca0f254ea0e35714f2a0d3" - integrity sha512-emP23rwYyZhQBvklqTtwetkQlqbNYirDiEEwXl2v0GYWMnCzxst7ZaRAnWuy28njp5kAH54lvkdG37MblZzaHA== +"@smithy/invalid-dependency@^4.2.12", "@smithy/invalid-dependency@^4.2.8": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-4.2.12.tgz#1a28c13fb33684b91848d4d6ec5104a1c1413e7f" + integrity sha512-/4F1zb7Z8LOu1PalTdESFHR0RbPwHd3FcaG1sI3UEIriQTWakysgJr65lc1jj6QY5ye7aFsisajotH6UhWfm/g== dependencies: - "@smithy/types" "^3.7.2" - "@smithy/util-buffer-from" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/invalid-dependency@^3.0.3": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-3.0.11.tgz#8144d7b0af9d34ab5f672e1f674f97f8740bb9ae" - integrity sha512-NuQmVPEJjUX6c+UELyVz8kUx8Q539EDeNwbRyu4IIF8MeV7hUtq1FB3SHVyki2u++5XLMFqngeMKk7ccspnNyQ== - dependencies: - "@smithy/types" "^3.7.2" + "@smithy/types" "^4.13.1" tslib "^2.6.2" "@smithy/is-array-buffer@^2.2.0": @@ -3934,6 +3054,13 @@ dependencies: tslib "^2.6.2" +"@smithy/is-array-buffer@^4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-4.2.2.tgz#c401ce54b12a16529eb1c938a0b6c2247cb763b8" + integrity sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow== + dependencies: + tslib "^2.6.2" + "@smithy/md5-js@2.0.7": version "2.0.7" resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-2.0.7.tgz#4dea27b20b065857f953c74dbaa050003f48a374" @@ -3943,170 +3070,179 @@ "@smithy/util-utf8" "^2.0.0" tslib "^2.5.0" -"@smithy/middleware-content-length@^3.0.5": - version "3.0.13" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.13.tgz#6e08fe52739ac8fb3996088e0f8837e4b2ea187f" - integrity sha512-zfMhzojhFpIX3P5ug7jxTjfUcIPcGjcQYzB9t+rv0g1TX7B0QdwONW+ATouaLoD7h7LOw/ZlXfkq4xJ/g2TrIw== +"@smithy/middleware-content-length@^4.2.12", "@smithy/middleware-content-length@^4.2.8": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-4.2.12.tgz#dec97ea1444b12e734156b764e9953b2b37c70fd" + integrity sha512-YE58Yz+cvFInWI/wOTrB+DbvUVz/pLn5mC5MvOV4fdRUc6qGwygyngcucRQjAhiCEbmfLOXX0gntSIcgMvAjmA== dependencies: - "@smithy/protocol-http" "^4.1.8" - "@smithy/types" "^3.7.2" + "@smithy/protocol-http" "^5.3.12" + "@smithy/types" "^4.13.1" tslib "^2.6.2" -"@smithy/middleware-endpoint@^3.1.0", "@smithy/middleware-endpoint@^3.2.8": - version "3.2.8" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.8.tgz#6ca5de80543ba0f0d40e15dc3f9d0f14d192e06e" - integrity sha512-OEJZKVUEhMOqMs3ktrTWp7UvvluMJEvD5XgQwRePSbDg1VvBaL8pX8mwPltFn6wk1GySbcVwwyldL8S+iqnrEQ== +"@smithy/middleware-endpoint@^4.4.12", "@smithy/middleware-endpoint@^4.4.25": + version "4.4.25" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.25.tgz#f064b77eac2a6124cc1e1dc875ad4d6be5a1c4a7" + integrity sha512-dqjLwZs2eBxIUG6Qtw8/YZ4DvzHGIf0DA18wrgtfP6a50UIO7e2nY0FPdcbv5tVJKqWCCU5BmGMOUwT7Puan+A== dependencies: - "@smithy/core" "^2.5.7" - "@smithy/middleware-serde" "^3.0.11" - "@smithy/node-config-provider" "^3.1.12" - "@smithy/shared-ini-file-loader" "^3.1.12" - "@smithy/types" "^3.7.2" - "@smithy/url-parser" "^3.0.11" - "@smithy/util-middleware" "^3.0.11" + "@smithy/core" "^3.23.11" + "@smithy/middleware-serde" "^4.2.14" + "@smithy/node-config-provider" "^4.3.12" + "@smithy/shared-ini-file-loader" "^4.4.7" + "@smithy/types" "^4.13.1" + "@smithy/url-parser" "^4.2.12" + "@smithy/util-middleware" "^4.2.12" tslib "^2.6.2" -"@smithy/middleware-retry@^3.0.13": - version "3.0.34" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.34.tgz#136c89fc22d70819fdefc51b0d24952cf98883f1" - integrity sha512-yVRr/AAtPZlUvwEkrq7S3x7Z8/xCd97m2hLDaqdz6ucP2RKHsBjEqaUA2ebNv2SsZoPEi+ZD0dZbOB1u37tGCA== +"@smithy/middleware-retry@^4.4.29", "@smithy/middleware-retry@^4.4.42": + version "4.4.42" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.4.42.tgz#9bc00a2291b10356bd358203c4e1d645012e4901" + integrity sha512-vbwyqHRIpIZutNXZpLAozakzamcINaRCpEy1MYmK6xBeW3xN+TyPRA123GjXnuxZIjc9848MRRCugVMTXxC4Eg== dependencies: - "@smithy/node-config-provider" "^3.1.12" - "@smithy/protocol-http" "^4.1.8" - "@smithy/service-error-classification" "^3.0.11" - "@smithy/smithy-client" "^3.7.0" - "@smithy/types" "^3.7.2" - "@smithy/util-middleware" "^3.0.11" - "@smithy/util-retry" "^3.0.11" - tslib "^2.6.2" - uuid "^9.0.1" - -"@smithy/middleware-serde@^3.0.11", "@smithy/middleware-serde@^3.0.3": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.11.tgz#c7d54e0add4f83e05c6878a011fc664e21022f12" - integrity sha512-KzPAeySp/fOoQA82TpnwItvX8BBURecpx6ZMu75EZDkAcnPtO6vf7q4aH5QHs/F1s3/snQaSFbbUMcFFZ086Mw== - dependencies: - "@smithy/types" "^3.7.2" + "@smithy/node-config-provider" "^4.3.12" + "@smithy/protocol-http" "^5.3.12" + "@smithy/service-error-classification" "^4.2.12" + "@smithy/smithy-client" "^4.12.5" + "@smithy/types" "^4.13.1" + "@smithy/util-middleware" "^4.2.12" + "@smithy/util-retry" "^4.2.12" + "@smithy/uuid" "^1.1.2" tslib "^2.6.2" -"@smithy/middleware-stack@^3.0.11", "@smithy/middleware-stack@^3.0.3": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.11.tgz#453af2096924e4064d9da4e053cfdf65d9a36acc" - integrity sha512-1HGo9a6/ikgOMrTrWL/WiN9N8GSVYpuRQO5kjstAq4CvV59bjqnh7TbdXGQ4vxLD3xlSjfBjq5t1SOELePsLnA== +"@smithy/middleware-serde@^4.2.14", "@smithy/middleware-serde@^4.2.9": + version "4.2.14" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.2.14.tgz#dde882c475349196c6d1e845a71aadb9c3dcab0c" + integrity sha512-+CcaLoLa5apzSRtloOyG7lQvkUw2ZDml3hRh4QiG9WyEPfW5Ke/3tPOPiPjUneuT59Tpn8+c3RVaUvvkkwqZwg== dependencies: - "@smithy/types" "^3.7.2" + "@smithy/core" "^3.23.11" + "@smithy/protocol-http" "^5.3.12" + "@smithy/types" "^4.13.1" tslib "^2.6.2" -"@smithy/node-config-provider@^3.1.12", "@smithy/node-config-provider@^3.1.4": - version "3.1.12" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.12.tgz#1b1d674fc83f943dc7b3017e37f16f374e878a6c" - integrity sha512-O9LVEu5J/u/FuNlZs+L7Ikn3lz7VB9hb0GtPT9MQeiBmtK8RSY3ULmsZgXhe6VAlgTw0YO+paQx4p8xdbs43vQ== +"@smithy/middleware-stack@^4.2.12", "@smithy/middleware-stack@^4.2.8": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-4.2.12.tgz#96b43b2fab0d4a6723f813f76b72418b0fdb6ba0" + integrity sha512-kruC5gRHwsCOuyCd4ouQxYjgRAym2uDlCvQ5acuMtRrcdfg7mFBg6blaxcJ09STpt3ziEkis6bhg1uwrWU7txw== dependencies: - "@smithy/property-provider" "^3.1.11" - "@smithy/shared-ini-file-loader" "^3.1.12" - "@smithy/types" "^3.7.2" + "@smithy/types" "^4.13.1" tslib "^2.6.2" -"@smithy/node-http-handler@^3.1.4", "@smithy/node-http-handler@^3.3.3": - version "3.3.3" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.3.3.tgz#94dbb3f15342b656ceba2b26e14aa741cace8919" - integrity sha512-BrpZOaZ4RCbcJ2igiSNG16S+kgAc65l/2hmxWdmhyoGWHTLlzQzr06PXavJp9OBlPEG/sHlqdxjWmjzV66+BSQ== +"@smithy/node-config-provider@^4.3.12", "@smithy/node-config-provider@^4.3.8": + version "4.3.12" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-4.3.12.tgz#bb722da6e2a130ae585754fa7bc8d909f9f5d702" + integrity sha512-tr2oKX2xMcO+rBOjobSwVAkV05SIfUKz8iI53rzxEmgW3GOOPOv0UioSDk+J8OpRQnpnhsO3Af6IEBabQBVmiw== dependencies: - "@smithy/abort-controller" "^3.1.9" - "@smithy/protocol-http" "^4.1.8" - "@smithy/querystring-builder" "^3.0.11" - "@smithy/types" "^3.7.2" + "@smithy/property-provider" "^4.2.12" + "@smithy/shared-ini-file-loader" "^4.4.7" + "@smithy/types" "^4.13.1" tslib "^2.6.2" -"@smithy/property-provider@^3.1.11", "@smithy/property-provider@^3.1.3": - version "3.1.11" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.1.11.tgz#161cf1c2a2ada361e417382c57f5ba6fbca8acad" - integrity sha512-I/+TMc4XTQ3QAjXfOcUWbSS073oOEAxgx4aZy8jHaf8JQnRkq2SZWw8+PfDtBvLUjcGMdxl+YwtzWe6i5uhL/A== +"@smithy/node-http-handler@^4.4.16", "@smithy/node-http-handler@^4.4.8": + version "4.4.16" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.4.16.tgz#bb9de91f546c22b312820acabc081debe0417dff" + integrity sha512-ULC8UCS/HivdCB3jhi+kLFYe4B5gxH2gi9vHBfEIiRrT2jfKiZNiETJSlzRtE6B26XbBHjPtc8iZKSNqMol9bw== dependencies: - "@smithy/types" "^3.7.2" + "@smithy/abort-controller" "^4.2.12" + "@smithy/protocol-http" "^5.3.12" + "@smithy/querystring-builder" "^4.2.12" + "@smithy/types" "^4.13.1" tslib "^2.6.2" -"@smithy/protocol-http@^4.1.0", "@smithy/protocol-http@^4.1.4", "@smithy/protocol-http@^4.1.8": - version "4.1.8" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.1.8.tgz#0461758671335f65e8ff3fc0885ab7ed253819c9" - integrity sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw== +"@smithy/property-provider@^4.2.12": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-4.2.12.tgz#e9f8e5ce125413973b16e39c87cf4acd41324e21" + integrity sha512-jqve46eYU1v7pZ5BM+fmkbq3DerkSluPr5EhvOcHxygxzD05ByDRppRwRPPpFrsFo5yDtCYLKu+kreHKVrvc7A== dependencies: - "@smithy/types" "^3.7.2" + "@smithy/types" "^4.13.1" tslib "^2.6.2" -"@smithy/querystring-builder@^3.0.11", "@smithy/querystring-builder@^3.0.7": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.11.tgz#2ed04adbe725671824c5613d0d6f9376d791a909" - integrity sha512-u+5HV/9uJaeLj5XTb6+IEF/dokWWkEqJ0XiaRRogyREmKGUgZnNecLucADLdauWFKUNbQfulHFEZEdjwEBjXRg== +"@smithy/protocol-http@^5.3.12", "@smithy/protocol-http@^5.3.8": + version "5.3.12" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-5.3.12.tgz#c913053e7dfbac6cdd7f374f0b4f5aa7c518d0e1" + integrity sha512-fit0GZK9I1xoRlR4jXmbLhoN0OdEpa96ul8M65XdmXnxXkuMxM0Y8HDT0Fh0Xb4I85MBvBClOzgSrV1X2s1Hxw== dependencies: - "@smithy/types" "^3.7.2" - "@smithy/util-uri-escape" "^3.0.0" + "@smithy/types" "^4.13.1" tslib "^2.6.2" -"@smithy/querystring-parser@^3.0.11": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.11.tgz#9d3177ea19ce8462f18d9712b395239e1ca1f969" - integrity sha512-Je3kFvCsFMnso1ilPwA7GtlbPaTixa3WwC+K21kmMZHsBEOZYQaqxcMqeFFoU7/slFjKDIpiiPydvdJm8Q/MCw== +"@smithy/querystring-builder@^4.2.12": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-4.2.12.tgz#20a0266b151a4b58409f901e1463257a72835c16" + integrity sha512-6wTZjGABQufekycfDGMEB84BgtdOE/rCVTov+EDXQ8NHKTUNIp/j27IliwP7tjIU9LR+sSzyGBOXjeEtVgzCHg== dependencies: - "@smithy/types" "^3.7.2" + "@smithy/types" "^4.13.1" + "@smithy/util-uri-escape" "^4.2.2" tslib "^2.6.2" -"@smithy/service-error-classification@^3.0.11": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-3.0.11.tgz#d3d7fc0aacd2e60d022507367e55c7939e5bcb8a" - integrity sha512-QnYDPkyewrJzCyaeI2Rmp7pDwbUETe+hU8ADkXmgNusO1bgHBH7ovXJiYmba8t0fNfJx75fE8dlM6SEmZxheog== +"@smithy/querystring-parser@^4.2.12": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-4.2.12.tgz#918cb609b2d606ab81f2727bfde0265d2ebb2758" + integrity sha512-P2OdvrgiAKpkPNKlKUtWbNZKB1XjPxM086NeVhK+W+wI46pIKdWBe5QyXvhUm3MEcyS/rkLvY8rZzyUdmyDZBw== dependencies: - "@smithy/types" "^3.7.2" - -"@smithy/shared-ini-file-loader@^3.1.12", "@smithy/shared-ini-file-loader@^3.1.4": - version "3.1.12" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.12.tgz#d98b1b663eb18935ce2cbc79024631d34f54042a" - integrity sha512-1xKSGI+U9KKdbG2qDvIR9dGrw3CNx+baqJfyr0igKEpjbHL5stsqAesYBzHChYHlelWtb87VnLWlhvfCz13H8Q== - dependencies: - "@smithy/types" "^3.7.2" + "@smithy/types" "^4.13.1" tslib "^2.6.2" -"@smithy/signature-v4@^4.1.0": - version "4.2.4" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-4.2.4.tgz#3501d3d09fd82768867bfc00a7be4bad62f62f4d" - integrity sha512-5JWeMQYg81TgU4cG+OexAWdvDTs5JDdbEZx+Qr1iPbvo91QFGzjy0IkXAKaXUHqmKUJgSHK0ZxnCkgZpzkeNTA== +"@smithy/service-error-classification@^4.2.12": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.2.12.tgz#795e9484207acf63817a9e9cf67e90b42e720840" + integrity sha512-LlP29oSQN0Tw0b6D0Xo6BIikBswuIiGYbRACy5ujw/JgWSzTdYj46U83ssf6Ux0GyNJVivs2uReU8pt7Eu9okQ== dependencies: - "@smithy/is-array-buffer" "^3.0.0" - "@smithy/protocol-http" "^4.1.8" - "@smithy/types" "^3.7.2" - "@smithy/util-hex-encoding" "^3.0.0" - "@smithy/util-middleware" "^3.0.11" - "@smithy/util-uri-escape" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" + "@smithy/types" "^4.13.1" + +"@smithy/shared-ini-file-loader@^4.4.7": + version "4.4.7" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.7.tgz#18cc5a21f871509fafbe535a7bf44bde5a500727" + integrity sha512-HrOKWsUb+otTeo1HxVWeEb99t5ER1XrBi/xka2Wv6NVmTbuCUC1dvlrksdvxFtODLBjsC+PHK+fuy2x/7Ynyiw== + dependencies: + "@smithy/types" "^4.13.1" tslib "^2.6.2" -"@smithy/smithy-client@^3.1.11", "@smithy/smithy-client@^3.7.0": - version "3.7.0" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.7.0.tgz#8cfaa7b68b7af15e588b96aa14e5dce393f85839" - integrity sha512-9wYrjAZFlqWhgVo3C4y/9kpc68jgiSsKUnsFPzr/MSiRL93+QRDafGTfhhKAb2wsr69Ru87WTiqSfQusSmWipA== +"@smithy/signature-v4@^5.3.12": + version "5.3.12" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-5.3.12.tgz#b61ce40a94bdd91dfdd8f5f2136631c8eb67f253" + integrity sha512-B/FBwO3MVOL00DaRSXfXfa/TRXRheagt/q5A2NM13u7q+sHS59EOVGQNfG7DkmVtdQm5m3vOosoKAXSqn/OEgw== dependencies: - "@smithy/core" "^2.5.7" - "@smithy/middleware-endpoint" "^3.2.8" - "@smithy/middleware-stack" "^3.0.11" - "@smithy/protocol-http" "^4.1.8" - "@smithy/types" "^3.7.2" - "@smithy/util-stream" "^3.3.4" + "@smithy/is-array-buffer" "^4.2.2" + "@smithy/protocol-http" "^5.3.12" + "@smithy/types" "^4.13.1" + "@smithy/util-hex-encoding" "^4.2.2" + "@smithy/util-middleware" "^4.2.12" + "@smithy/util-uri-escape" "^4.2.2" + "@smithy/util-utf8" "^4.2.2" tslib "^2.6.2" -"@smithy/types@^2.1.0", "@smithy/types@^2.2.2", "@smithy/types@^2.3.1": +"@smithy/smithy-client@^4.11.1", "@smithy/smithy-client@^4.12.5": + version "4.12.5" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.12.5.tgz#2128204f2ca735956356dab89106370c66902902" + integrity sha512-UqwYawyqSr/aog8mnLnfbPurS0gi4G7IYDcD28cUIBhsvWs1+rQcL2IwkUQ+QZ7dibaoRzhNF99fAQ9AUcO00w== + dependencies: + "@smithy/core" "^3.23.11" + "@smithy/middleware-endpoint" "^4.4.25" + "@smithy/middleware-stack" "^4.2.12" + "@smithy/protocol-http" "^5.3.12" + "@smithy/types" "^4.13.1" + "@smithy/util-stream" "^4.5.19" + tslib "^2.6.2" + +"@smithy/types@^2.3.1": version "2.12.0" resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.12.0.tgz#c44845f8ba07e5e8c88eda5aed7e6a0c462da041" integrity sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw== dependencies: tslib "^2.6.2" -"@smithy/types@^3.3.0", "@smithy/types@^3.5.0", "@smithy/types@^3.7.2": +"@smithy/types@^3.3.0": version "3.7.2" resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.7.2.tgz#05cb14840ada6f966de1bf9a9c7dd86027343e10" integrity sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg== dependencies: tslib "^2.6.2" +"@smithy/types@^4.12.0", "@smithy/types@^4.13.1": + version "4.13.1" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.13.1.tgz#8aaf15bb0f42b4e7c93c87018a3678a06d74691d" + integrity sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g== + dependencies: + tslib "^2.6.2" + "@smithy/types@^4.5.0": version "4.5.0" resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.5.0.tgz#850e334662a1ef1286c35814940c80880400a370" @@ -4114,13 +3250,13 @@ dependencies: tslib "^2.6.2" -"@smithy/url-parser@^3.0.11", "@smithy/url-parser@^3.0.3": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.11.tgz#e5f5ffabfb6230159167cf4cc970705fca6b8b2d" - integrity sha512-TmlqXkSk8ZPhfc+SQutjmFr5FjC0av3GZP4B/10caK1SbRwe/v+Wzu/R6xEKxoNqL+8nY18s1byiy6HqPG37Aw== +"@smithy/url-parser@^4.2.12", "@smithy/url-parser@^4.2.8": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-4.2.12.tgz#e940557bf0b8e9a25538a421970f64bd827f456f" + integrity sha512-wOPKPEpso+doCZGIlr+e1lVI6+9VAKfL4kZWFgzVgGWY2hZxshNKod4l2LXS3PRC9otH/JRSjtEHqQ/7eLciRA== dependencies: - "@smithy/querystring-parser" "^3.0.11" - "@smithy/types" "^3.7.2" + "@smithy/querystring-parser" "^4.2.12" + "@smithy/types" "^4.13.1" tslib "^2.6.2" "@smithy/util-base64@^3.0.0": @@ -4132,17 +3268,26 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" -"@smithy/util-body-length-browser@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz#86ec2f6256310b4845a2f064e2f571c1ca164ded" - integrity sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ== +"@smithy/util-base64@^4.3.0", "@smithy/util-base64@^4.3.2": + version "4.3.2" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-4.3.2.tgz#be02bcb29a87be744356467ea25ffa413e695cea" + integrity sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ== + dependencies: + "@smithy/util-buffer-from" "^4.2.2" + "@smithy/util-utf8" "^4.2.2" + tslib "^2.6.2" + +"@smithy/util-body-length-browser@^4.2.0", "@smithy/util-body-length-browser@^4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.2.tgz#c4404277d22039872abdb80e7800f9a63f263862" + integrity sha512-JKCrLNOup3OOgmzeaKQwi4ZCTWlYR5H4Gm1r2uTMVBXoemo1UEghk5vtMi1xSu2ymgKVGW631e2fp9/R610ZjQ== dependencies: tslib "^2.6.2" -"@smithy/util-body-length-node@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz#99a291bae40d8932166907fe981d6a1f54298a6d" - integrity sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA== +"@smithy/util-body-length-node@^4.2.1", "@smithy/util-body-length-node@^4.2.3": + version "4.2.3" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-4.2.3.tgz#f923ca530defb86a9ac3ca2d3066bcca7b304fbc" + integrity sha512-ZkJGvqBzMHVHE7r/hcuCxlTY8pQr1kMtdsVPs7ex4mMU+EAbcXppfo5NmyxMYi2XU49eqaz56j2gsk4dHHPG/g== dependencies: tslib "^2.6.2" @@ -4162,44 +3307,51 @@ "@smithy/is-array-buffer" "^3.0.0" tslib "^2.6.2" -"@smithy/util-config-provider@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz#62c6b73b22a430e84888a8f8da4b6029dd5b8efe" - integrity sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ== +"@smithy/util-buffer-from@^4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-4.2.2.tgz#2c6b7857757dfd88f6cd2d36016179a40ccc913b" + integrity sha512-FDXD7cvUoFWwN6vtQfEta540Y/YBe5JneK3SoZg9bThSoOAC/eGeYEua6RkBgKjGa/sz6Y+DuBZj3+YEY21y4Q== + dependencies: + "@smithy/is-array-buffer" "^4.2.2" + tslib "^2.6.2" + +"@smithy/util-config-provider@^4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-4.2.2.tgz#52ebf9d8942838d18bc5fb1520de1e8699d7aad6" + integrity sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ== dependencies: tslib "^2.6.2" -"@smithy/util-defaults-mode-browser@^3.0.13": - version "3.0.34" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.34.tgz#885312529599cf24b09335cb20439c838e452f9f" - integrity sha512-FumjjF631lR521cX+svMLBj3SwSDh9VdtyynTYDAiBDEf8YPP5xORNXKQ9j0105o5+ARAGnOOP/RqSl40uXddA== +"@smithy/util-defaults-mode-browser@^4.3.28", "@smithy/util-defaults-mode-browser@^4.3.41": + version "4.3.41" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.41.tgz#6e06d22acefe998d2ece72c5a313fbd47e78ee08" + integrity sha512-M1w1Ux0rSVvBOxIIiqbxvZvhnjQ+VUjJrugtORE90BbadSTH+jsQL279KRL3Hv0w69rE7EuYkV/4Lepz/NBW9g== dependencies: - "@smithy/property-provider" "^3.1.11" - "@smithy/smithy-client" "^3.7.0" - "@smithy/types" "^3.7.2" - bowser "^2.11.0" + "@smithy/property-provider" "^4.2.12" + "@smithy/smithy-client" "^4.12.5" + "@smithy/types" "^4.13.1" tslib "^2.6.2" -"@smithy/util-defaults-mode-node@^3.0.13": - version "3.0.34" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.34.tgz#5eb0d97231a34e137980abfb08ea5e3a8f2156f7" - integrity sha512-vN6aHfzW9dVVzkI0wcZoUXvfjkl4CSbM9nE//08lmUMyf00S75uuCpTrqF9uD4bD9eldIXlt53colrlwKAT8Gw== +"@smithy/util-defaults-mode-node@^4.2.31", "@smithy/util-defaults-mode-node@^4.2.44": + version "4.2.44" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.44.tgz#aa215b6397af2ca70da3d431d725da6a3734e6a1" + integrity sha512-YPze3/lD1KmWuZsl9JlfhcgGLX7AXhSoaCDtiPntUjNW5/YY0lOHjkcgxyE9x/h5vvS1fzDifMGjzqnNlNiqOQ== dependencies: - "@smithy/config-resolver" "^3.0.13" - "@smithy/credential-provider-imds" "^3.2.8" - "@smithy/node-config-provider" "^3.1.12" - "@smithy/property-provider" "^3.1.11" - "@smithy/smithy-client" "^3.7.0" - "@smithy/types" "^3.7.2" + "@smithy/config-resolver" "^4.4.11" + "@smithy/credential-provider-imds" "^4.2.12" + "@smithy/node-config-provider" "^4.3.12" + "@smithy/property-provider" "^4.2.12" + "@smithy/smithy-client" "^4.12.5" + "@smithy/types" "^4.13.1" tslib "^2.6.2" -"@smithy/util-endpoints@^2.0.5": - version "2.1.7" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.1.7.tgz#a088ebfab946a7219dd4763bfced82709894b82d" - integrity sha512-tSfcqKcN/Oo2STEYCABVuKgJ76nyyr6skGl9t15hs+YaiU06sgMkN7QYjo0BbVw+KT26zok3IzbdSOksQ4YzVw== +"@smithy/util-endpoints@^3.2.8", "@smithy/util-endpoints@^3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-3.3.3.tgz#0119f15bcac30b3b9af1d3cc0a8477e7199d0185" + integrity sha512-VACQVe50j0HZPjpwWcjyT51KUQ4AnsvEaQ2lKHOSL4mNLD0G9BjEniQ+yCt1qqfKfiAHRAts26ud7hBjamrwig== dependencies: - "@smithy/node-config-provider" "^3.1.12" - "@smithy/types" "^3.7.2" + "@smithy/node-config-provider" "^4.3.12" + "@smithy/types" "^4.13.1" tslib "^2.6.2" "@smithy/util-hex-encoding@2.0.0": @@ -4209,48 +3361,48 @@ dependencies: tslib "^2.5.0" -"@smithy/util-hex-encoding@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz#32938b33d5bf2a15796cd3f178a55b4155c535e6" - integrity sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ== +"@smithy/util-hex-encoding@^4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.2.tgz#4abf3335dd1eb884041d8589ca7628d81a6fd1d3" + integrity sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg== dependencies: tslib "^2.6.2" -"@smithy/util-middleware@^3.0.11", "@smithy/util-middleware@^3.0.3": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.11.tgz#2ab5c17266b42c225e62befcffb048afa682b5bf" - integrity sha512-dWpyc1e1R6VoXrwLoLDd57U1z6CwNSdkM69Ie4+6uYh2GC7Vg51Qtan7ITzczuVpqezdDTKJGJB95fFvvjU/ow== +"@smithy/util-middleware@^4.2.12", "@smithy/util-middleware@^4.2.8": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-4.2.12.tgz#d6cb837c2390375e2b6957e7f917350ca4bd8757" + integrity sha512-Er805uFUOvgc0l8nv0e0su0VFISoxhJ/AwOn3gL2NWNY2LUEldP5WtVcRYSQBcjg0y9NfG8JYrCJaYDpupBHJQ== dependencies: - "@smithy/types" "^3.7.2" + "@smithy/types" "^4.13.1" tslib "^2.6.2" -"@smithy/util-retry@^3.0.11", "@smithy/util-retry@^3.0.3": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-3.0.11.tgz#d267e5ccb290165cee69732547fea17b695a7425" - integrity sha512-hJUC6W7A3DQgaee3Hp9ZFcOxVDZzmBIRBPlUAk8/fSOEl7pE/aX7Dci0JycNOnm9Mfr0KV2XjIlUOcGWXQUdVQ== +"@smithy/util-retry@^4.2.12", "@smithy/util-retry@^4.2.8": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.2.12.tgz#be4805afee530f95b00a6ba771e18cb4c324f822" + integrity sha512-1zopLDUEOwumjcHdJ1mwBHddubYF8GMQvstVCLC54Y46rqoHwlIU+8ZzUeaBcD+WCJHyDGSeZ2ml9YSe9aqcoQ== dependencies: - "@smithy/service-error-classification" "^3.0.11" - "@smithy/types" "^3.7.2" + "@smithy/service-error-classification" "^4.2.12" + "@smithy/types" "^4.13.1" tslib "^2.6.2" -"@smithy/util-stream@^3.1.3", "@smithy/util-stream@^3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.3.4.tgz#c506ac41310ebcceb0c3f0ba20755e4fe0a90b8d" - integrity sha512-SGhGBG/KupieJvJSZp/rfHHka8BFgj56eek9px4pp7lZbOF+fRiVr4U7A3y3zJD8uGhxq32C5D96HxsTC9BckQ== +"@smithy/util-stream@^4.5.19": + version "4.5.19" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.5.19.tgz#cb424e62e7a7a97c2839213efced47f1112efb7e" + integrity sha512-v4sa+3xTweL1CLO2UP0p7tvIMH/Rq1X4KKOxd568mpe6LSLMQCnDHs4uv7m3ukpl3HvcN2JH6jiCS0SNRXKP/w== dependencies: - "@smithy/fetch-http-handler" "^4.1.3" - "@smithy/node-http-handler" "^3.3.3" - "@smithy/types" "^3.7.2" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-buffer-from" "^3.0.0" - "@smithy/util-hex-encoding" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" + "@smithy/fetch-http-handler" "^5.3.15" + "@smithy/node-http-handler" "^4.4.16" + "@smithy/types" "^4.13.1" + "@smithy/util-base64" "^4.3.2" + "@smithy/util-buffer-from" "^4.2.2" + "@smithy/util-hex-encoding" "^4.2.2" + "@smithy/util-utf8" "^4.2.2" tslib "^2.6.2" -"@smithy/util-uri-escape@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz#e43358a78bf45d50bb736770077f0f09195b6f54" - integrity sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg== +"@smithy/util-uri-escape@^4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-4.2.2.tgz#48e40206e7fe9daefc8d44bb43a1ab17e76abf4a" + integrity sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw== dependencies: tslib "^2.6.2" @@ -4278,909 +3430,59 @@ "@smithy/util-buffer-from" "^3.0.0" tslib "^2.6.2" -"@smithy/util-waiter@^3.1.2": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-3.2.0.tgz#1e52f870e77d2e5572025f7606053e6ff00df93d" - integrity sha512-PpjSboaDUE6yl+1qlg3Si57++e84oXdWGbuFUSAciXsVfEZJJJupR2Nb0QuXHiunt2vGR+1PTizOMvnUPaG2Qg== +"@smithy/util-utf8@^4.2.0", "@smithy/util-utf8@^4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-4.2.2.tgz#21db686982e6f3393ac262e49143b42370130f13" + integrity sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw== dependencies: - "@smithy/abort-controller" "^3.1.9" - "@smithy/types" "^3.7.2" + "@smithy/util-buffer-from" "^4.2.2" tslib "^2.6.2" -"@storybook/addon-actions@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-7.5.3.tgz#e0d0d819488d1d19918b23469b3ea6610fee5f07" - integrity sha512-v3yL6Eq/jCiXfA24JjRdbEQUuorms6tmrywaKcd1tAy4Ftgof0KHB4tTcTyiajrI5bh6PVJoRBkE8IDqmNAHkA== +"@smithy/util-waiter@^4.2.8": + version "4.2.13" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-4.2.13.tgz#fea123340d650825a0ae3cc6c4525337806811ca" + integrity sha512-2zdZ9DTHngRtcYxJK1GUDxruNr53kv5W2Lupe0LMU+Imr6ohQg8M2T14MNkj1Y0wS3FFwpgpGQyvuaMF7CiTmQ== dependencies: - "@storybook/client-logger" "7.5.3" - "@storybook/components" "7.5.3" - "@storybook/core-events" "7.5.3" - "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.5.3" - "@storybook/preview-api" "7.5.3" - "@storybook/theming" "7.5.3" - "@storybook/types" "7.5.3" - dequal "^2.0.2" - lodash "^4.17.21" - polished "^4.2.2" - prop-types "^15.7.2" - react-inspector "^6.0.0" - telejson "^7.2.0" - ts-dedent "^2.0.0" - uuid "^9.0.0" + "@smithy/abort-controller" "^4.2.12" + "@smithy/types" "^4.13.1" + tslib "^2.6.2" -"@storybook/addon-backgrounds@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/addon-backgrounds/-/addon-backgrounds-7.5.3.tgz#a6aa9df791220cff6290e7f93e04c546063f5407" - integrity sha512-UCOVd4UNIL5FRiwi9nyiWFocn/7ewwS6bIWnq66AaHg/sv92YwsPmgQJn0DMBGDOvUAWpiHdVsZNOTX6nvw4gA== +"@smithy/uuid@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@smithy/uuid/-/uuid-1.1.2.tgz#b6e97c7158615e4a3c775e809c00d8c269b5a12e" + integrity sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g== dependencies: - "@storybook/client-logger" "7.5.3" - "@storybook/components" "7.5.3" - "@storybook/core-events" "7.5.3" - "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.5.3" - "@storybook/preview-api" "7.5.3" - "@storybook/theming" "7.5.3" - "@storybook/types" "7.5.3" - memoizerific "^1.11.3" - ts-dedent "^2.0.0" + tslib "^2.6.2" -"@storybook/addon-controls@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-7.5.3.tgz#03ce5a31603b360fe906cefb3fe4945ef7188e62" - integrity sha512-KEuU4X5Xr6cJI9xrzOUVGEmUf1iHPfK7cj0GACKv0GElsdIsQryv+OZ7gRnvmNax/e2hm2t9cJcFxB24/p6rVg== - dependencies: - "@storybook/blocks" "7.5.3" - "@storybook/client-logger" "7.5.3" - "@storybook/components" "7.5.3" - "@storybook/core-common" "7.5.3" - "@storybook/core-events" "7.5.3" - "@storybook/manager-api" "7.5.3" - "@storybook/node-logger" "7.5.3" - "@storybook/preview-api" "7.5.3" - "@storybook/theming" "7.5.3" - "@storybook/types" "7.5.3" - lodash "^4.17.21" - ts-dedent "^2.0.0" - -"@storybook/addon-docs@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-7.5.3.tgz#36c28c9a54b28e3b4b1450e821d65e07be6da45b" - integrity sha512-JVQ6iCXKESij/SbE4Wq47dkSSgBRulvA8SUf8NWL5m9qpiHrg0lPSERHfoTLiB5uC/JwF0OKIlhxoWl+zCmtYg== - dependencies: - "@jest/transform" "^29.3.1" - "@mdx-js/react" "^2.1.5" - "@storybook/blocks" "7.5.3" - "@storybook/client-logger" "7.5.3" - "@storybook/components" "7.5.3" - "@storybook/csf-plugin" "7.5.3" - "@storybook/csf-tools" "7.5.3" - "@storybook/global" "^5.0.0" - "@storybook/mdx2-csf" "^1.0.0" - "@storybook/node-logger" "7.5.3" - "@storybook/postinstall" "7.5.3" - "@storybook/preview-api" "7.5.3" - "@storybook/react-dom-shim" "7.5.3" - "@storybook/theming" "7.5.3" - "@storybook/types" "7.5.3" - fs-extra "^11.1.0" - remark-external-links "^8.0.0" - remark-slug "^6.0.0" - ts-dedent "^2.0.0" - -"@storybook/addon-essentials@^7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/addon-essentials/-/addon-essentials-7.5.3.tgz#e6e3ea266181b42e15b4c57fc303adc238c102a4" - integrity sha512-PYj6swEI4nEzIbOTyHJB8u3K8ABYKoaW8XB5emMwsnrzB/TN7auHVhze2bQ/+ax5wyPKZpArPjxbWlSHtSws+A== - dependencies: - "@storybook/addon-actions" "7.5.3" - "@storybook/addon-backgrounds" "7.5.3" - "@storybook/addon-controls" "7.5.3" - "@storybook/addon-docs" "7.5.3" - "@storybook/addon-highlight" "7.5.3" - "@storybook/addon-measure" "7.5.3" - "@storybook/addon-outline" "7.5.3" - "@storybook/addon-toolbars" "7.5.3" - "@storybook/addon-viewport" "7.5.3" - "@storybook/core-common" "7.5.3" - "@storybook/manager-api" "7.5.3" - "@storybook/node-logger" "7.5.3" - "@storybook/preview-api" "7.5.3" - ts-dedent "^2.0.0" - -"@storybook/addon-highlight@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/addon-highlight/-/addon-highlight-7.5.3.tgz#ff1041aa1e9d76100ce6fb0b11e0d30078f858f7" - integrity sha512-jb+aNRhj+tFK7EqqTlNCjGkTrkWqWHGdD1ubgnj29v8XhRuCR9YboPS+306KYwBEkuF4kNCHZofLiEBPf6nCJg== - dependencies: - "@storybook/core-events" "7.5.3" - "@storybook/global" "^5.0.0" - "@storybook/preview-api" "7.5.3" - -"@storybook/addon-interactions@^7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/addon-interactions/-/addon-interactions-7.5.3.tgz#5aef96b3fa24aaafb88c0fc501f6a7e8cfa2a342" - integrity sha512-gD3cU8sYSM/mdbA9ooYIb4c689JkDsJbZ17vfYJ5RjNkSmqKehybdpZOfkj27sVIyFtmscSi75t+pzK4Pv4rZw== - dependencies: - "@storybook/client-logger" "7.5.3" - "@storybook/components" "7.5.3" - "@storybook/core-common" "7.5.3" - "@storybook/core-events" "7.5.3" - "@storybook/global" "^5.0.0" - "@storybook/instrumenter" "7.5.3" - "@storybook/manager-api" "7.5.3" - "@storybook/preview-api" "7.5.3" - "@storybook/theming" "7.5.3" - "@storybook/types" "7.5.3" - jest-mock "^27.0.6" - polished "^4.2.2" - ts-dedent "^2.2.0" - -"@storybook/addon-links@^7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-7.5.3.tgz#4ed55c932db0b25197a16c30723307f6d20d7141" - integrity sha512-NcigW0HX8AllZ/KJ4u1KMiK30QvjqtC+zApI6Yc3tTaa6+BldbLv06fEgHgMY0yC8R+Ly9mUN7S1HiU7LQ7Qxg== - dependencies: - "@storybook/client-logger" "7.5.3" - "@storybook/core-events" "7.5.3" - "@storybook/csf" "^0.1.0" - "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.5.3" - "@storybook/preview-api" "7.5.3" - "@storybook/router" "7.5.3" - "@storybook/types" "7.5.3" - prop-types "^15.7.2" - ts-dedent "^2.0.0" - -"@storybook/addon-measure@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/addon-measure/-/addon-measure-7.5.3.tgz#9cfc34d88807afba6bc36990aef26be8ca8f8567" - integrity sha512-fun9BqUTGXgcMpcbX9wUowGDkjCL8oKasZbjp/MvGM3vPTM6HQdwzHTLJGPBnmJ1xK92NhwFRs0BrQX6uF1yrg== - dependencies: - "@storybook/client-logger" "7.5.3" - "@storybook/components" "7.5.3" - "@storybook/core-events" "7.5.3" - "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.5.3" - "@storybook/preview-api" "7.5.3" - "@storybook/types" "7.5.3" - tiny-invariant "^1.3.1" - -"@storybook/addon-onboarding@^1.0.8": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@storybook/addon-onboarding/-/addon-onboarding-1.0.8.tgz#075cbfe1dcca7be4b637c551b16a25f5578c5374" - integrity sha512-3WwCocUuTibHWO89uzAbeONEn6x9NkmxA0mOU4rYPhEsMQ4NDNDD1GXcievZmpwt5VviFgw5FRx8+BxPn54YmQ== - dependencies: - "@storybook/telemetry" "^7.1.0-alpha.32" - react-confetti "^6.1.0" - -"@storybook/addon-outline@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/addon-outline/-/addon-outline-7.5.3.tgz#8b42758349ab07b5d39bf7e1b9cb2f83e173824a" - integrity sha512-c9vCi1SCGrtWr8qaOu/1GNWlrlrpl2lg4F9r+xtYf/KopenI3jSMz0YeTfmepZGAl+6Yc2Ywhm60jgpQ6SKciA== - dependencies: - "@storybook/client-logger" "7.5.3" - "@storybook/components" "7.5.3" - "@storybook/core-events" "7.5.3" - "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.5.3" - "@storybook/preview-api" "7.5.3" - "@storybook/types" "7.5.3" - ts-dedent "^2.0.0" - -"@storybook/addon-styling-webpack@^0.0.5": - version "0.0.5" - resolved "https://registry.yarnpkg.com/@storybook/addon-styling-webpack/-/addon-styling-webpack-0.0.5.tgz#714c713cf8c57ed1f674ebc80bc16cb41b9bdf1b" - integrity sha512-8XdE3w+W7qxMeqnK/FDFipFN9XaVKUJFcHyM2ZBlhAAxVWMbTcifqw5lzqeK8jSAA/TUtpUp37gT2Bw/3k6slQ== - dependencies: - "@storybook/node-logger" "^7.0.12" - -"@storybook/addon-toolbars@7.5.3", "@storybook/addon-toolbars@^7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/addon-toolbars/-/addon-toolbars-7.5.3.tgz#754e818935f08f05d4e06aefafe40a1080c4d575" - integrity sha512-KdLr4sGMJzhtjNTNE2ocfu58yOHHUyZ/cI3BTp7a0gq9YbUpHmC3XTNr26/yOYYrdjkiMD26XusJUjXe+/V2xw== - dependencies: - "@storybook/client-logger" "7.5.3" - "@storybook/components" "7.5.3" - "@storybook/manager-api" "7.5.3" - "@storybook/preview-api" "7.5.3" - "@storybook/theming" "7.5.3" - -"@storybook/addon-viewport@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-7.5.3.tgz#05fb97114d0186977e25a5a448dea5fba66042ce" - integrity sha512-gT2XX0NNBrzSs1nrxadl6LnvcwgN7z2R0LzTK8/hxvx4D0EnXrV3feXLzjewr8ZYjzfEeSpO+W+bQTVNm3fNsg== - dependencies: - "@storybook/client-logger" "7.5.3" - "@storybook/components" "7.5.3" - "@storybook/core-events" "7.5.3" - "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.5.3" - "@storybook/preview-api" "7.5.3" - "@storybook/theming" "7.5.3" - memoizerific "^1.11.3" - prop-types "^15.7.2" - -"@storybook/blocks@7.5.3", "@storybook/blocks@^7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/blocks/-/blocks-7.5.3.tgz#be754f60a91e95b8c72cbeadf9c5c7e7ab78920f" - integrity sha512-Z8yF820v78clQWkwG5OA5qugbQn7rtutq9XCsd03NDB+IEfDaTFQAZG8gs62ZX2ZaXAJsqJSr/mL9oURzXto2A== - dependencies: - "@storybook/channels" "7.5.3" - "@storybook/client-logger" "7.5.3" - "@storybook/components" "7.5.3" - "@storybook/core-events" "7.5.3" - "@storybook/csf" "^0.1.0" - "@storybook/docs-tools" "7.5.3" - "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.5.3" - "@storybook/preview-api" "7.5.3" - "@storybook/theming" "7.5.3" - "@storybook/types" "7.5.3" - "@types/lodash" "^4.14.167" - color-convert "^2.0.1" - dequal "^2.0.2" - lodash "^4.17.21" - markdown-to-jsx "^7.1.8" - memoizerific "^1.11.3" - polished "^4.2.2" - react-colorful "^5.1.2" - telejson "^7.2.0" - tocbot "^4.20.1" - ts-dedent "^2.0.0" - util-deprecate "^1.0.2" - -"@storybook/builder-manager@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/builder-manager/-/builder-manager-7.5.3.tgz#dc667fd6d450988bc33c246686822a87c1b95558" - integrity sha512-uf4Vyj8ofHaq94m065SMvFKak1XrrxgI83VZAxc2QjiPcbRwcVOZd+wcKFdZydqqA6FlBDdJrU+k9INA4Qkfcw== - dependencies: - "@fal-works/esbuild-plugin-global-externals" "^2.1.2" - "@storybook/core-common" "7.5.3" - "@storybook/manager" "7.5.3" - "@storybook/node-logger" "7.5.3" - "@types/ejs" "^3.1.1" - "@types/find-cache-dir" "^3.2.1" - "@yarnpkg/esbuild-plugin-pnp" "^3.0.0-rc.10" - browser-assert "^1.2.1" - ejs "^3.1.8" - esbuild "^0.18.0" - esbuild-plugin-alias "^0.2.1" - express "^4.17.3" - find-cache-dir "^3.0.0" - fs-extra "^11.1.0" - process "^0.11.10" - util "^0.12.4" - -"@storybook/builder-webpack5@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/builder-webpack5/-/builder-webpack5-7.5.3.tgz#7f392cae845c9c3c7de6e04045c531f8f70048e1" - integrity sha512-a2kHXFT61AV1+OPNTqXCsYk7Wk4XSqjAOQkSxWc1HK+kyMT+lahO4U06slji6XAVuXc/KY+naNUoaOfpB1hKVw== - dependencies: - "@babel/core" "^7.22.0" - "@storybook/channels" "7.5.3" - "@storybook/client-logger" "7.5.3" - "@storybook/core-common" "7.5.3" - "@storybook/core-events" "7.5.3" - "@storybook/core-webpack" "7.5.3" - "@storybook/node-logger" "7.5.3" - "@storybook/preview" "7.5.3" - "@storybook/preview-api" "7.5.3" - "@swc/core" "^1.3.82" - "@types/node" "^18.0.0" - "@types/semver" "^7.3.4" - babel-loader "^9.0.0" - babel-plugin-named-exports-order "^0.0.2" - browser-assert "^1.2.1" - case-sensitive-paths-webpack-plugin "^2.4.0" - constants-browserify "^1.0.0" - css-loader "^6.7.1" - express "^4.17.3" - fork-ts-checker-webpack-plugin "^8.0.0" - fs-extra "^11.1.0" - html-webpack-plugin "^5.5.0" - path-browserify "^1.0.1" - process "^0.11.10" - semver "^7.3.7" - style-loader "^3.3.1" - swc-loader "^0.2.3" - terser-webpack-plugin "^5.3.1" - ts-dedent "^2.0.0" - url "^0.11.0" - util "^0.12.4" - util-deprecate "^1.0.2" - webpack "5" - webpack-dev-middleware "^6.1.1" - webpack-hot-middleware "^2.25.1" - webpack-virtual-modules "^0.5.0" - -"@storybook/channels@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-7.5.3.tgz#cbd178b0778f3484b970d0fd0edd294db6969e0f" - integrity sha512-dhWuV2o2lmxH0RKuzND8jxYzvSQTSmpE13P0IT/k8+I1up/rSNYOBQJT6SalakcNWXFAMXguo/8E7ApmnKKcEw== - dependencies: - "@storybook/client-logger" "7.5.3" - "@storybook/core-events" "7.5.3" - "@storybook/global" "^5.0.0" - qs "^6.10.0" - telejson "^7.2.0" - tiny-invariant "^1.3.1" - -"@storybook/cli@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/cli/-/cli-7.5.3.tgz#127ae3bcad169bf8c3eb3e1e6c9d587ad5f57e81" - integrity sha512-XysHSnknZTAcTbQ0bQsbfv5J8ifHpOBsmXjk1HCA05E9WGGrn9JrQRCfpDUQJ6O6UWq0bpMqzP8gFLWXFE7hug== - dependencies: - "@babel/core" "^7.22.9" - "@babel/preset-env" "^7.22.9" - "@babel/types" "^7.22.5" - "@ndelangen/get-tarball" "^3.0.7" - "@storybook/codemod" "7.5.3" - "@storybook/core-common" "7.5.3" - "@storybook/core-events" "7.5.3" - "@storybook/core-server" "7.5.3" - "@storybook/csf-tools" "7.5.3" - "@storybook/node-logger" "7.5.3" - "@storybook/telemetry" "7.5.3" - "@storybook/types" "7.5.3" - "@types/semver" "^7.3.4" - "@yarnpkg/fslib" "2.10.3" - "@yarnpkg/libzip" "2.3.0" - chalk "^4.1.0" - commander "^6.2.1" - cross-spawn "^7.0.3" - detect-indent "^6.1.0" - envinfo "^7.7.3" - execa "^5.0.0" - express "^4.17.3" - find-up "^5.0.0" - fs-extra "^11.1.0" - get-npm-tarball-url "^2.0.3" - get-port "^5.1.1" - giget "^1.0.0" - globby "^11.0.2" - jscodeshift "^0.14.0" - leven "^3.1.0" - ora "^5.4.1" - prettier "^2.8.0" - prompts "^2.4.0" - puppeteer-core "^2.1.1" - read-pkg-up "^7.0.1" - semver "^7.3.7" - simple-update-notifier "^2.0.0" - strip-json-comments "^3.0.1" - tempy "^1.0.1" - ts-dedent "^2.0.0" - util-deprecate "^1.0.2" - -"@storybook/client-logger@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-7.5.3.tgz#5a33a8a1785dbe6beff60654bc8947724c0cd62e" - integrity sha512-vUFYALypjix5FoJ5M/XUP6KmyTnQJNW1poHdW7WXUVSg+lBM6E5eAtjTm0hdxNNDH8KSrdy24nCLra5h0X0BWg== - dependencies: - "@storybook/global" "^5.0.0" - -"@storybook/codemod@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/codemod/-/codemod-7.5.3.tgz#8a294b8d12f304a2a9db902848977147394d451c" - integrity sha512-gzycFdqnF4drUjfzMTrLNHqi2jkw1lDeACUzQdug5uWxynZKAvMTHAgU0q9wvoYRR9Xhq8PhfKtXtYCCj2Er4Q== - dependencies: - "@babel/core" "^7.22.9" - "@babel/preset-env" "^7.22.9" - "@babel/types" "^7.22.5" - "@storybook/csf" "^0.1.0" - "@storybook/csf-tools" "7.5.3" - "@storybook/node-logger" "7.5.3" - "@storybook/types" "7.5.3" - "@types/cross-spawn" "^6.0.2" - cross-spawn "^7.0.3" - globby "^11.0.2" - jscodeshift "^0.14.0" - lodash "^4.17.21" - prettier "^2.8.0" - recast "^0.23.1" - -"@storybook/components@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-7.5.3.tgz#3fa282252e02973ead9f537f5ae3b5aeee5be4c4" - integrity sha512-M3+cjvEsDGLUx8RvK5wyF6/13LNlUnKbMgiDE8Sxk/v/WPpyhOAIh/B8VmrU1psahS61Jd4MTkFmLf1cWau1vw== - dependencies: - "@radix-ui/react-select" "^1.2.2" - "@radix-ui/react-toolbar" "^1.0.4" - "@storybook/client-logger" "7.5.3" - "@storybook/csf" "^0.1.0" - "@storybook/global" "^5.0.0" - "@storybook/theming" "7.5.3" - "@storybook/types" "7.5.3" - memoizerific "^1.11.3" - use-resize-observer "^9.1.0" - util-deprecate "^1.0.2" - -"@storybook/core-client@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/core-client/-/core-client-7.5.3.tgz#81e2d5343401f9caab9eaed28b649073937d5190" - integrity sha512-sIviDytbhos02TVXxU8XLymzty7IAtLs5e16hv49JSdBp47iBajRaNBmBj/l+sgTH+3M+R6gP8yGFMsZSCnU2g== - dependencies: - "@storybook/client-logger" "7.5.3" - "@storybook/preview-api" "7.5.3" - -"@storybook/core-common@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-7.5.3.tgz#baaf4cb8e2e29ebd74626ee8cd5971f337ac4e23" - integrity sha512-WGMwjtVUxUzFwQz7Mgs0gLuNebIGNV55dCdZgurx2/y6QOkJ2v8D0b3iL+xKMV4B5Nwoc2DsM418Y+Hy3UQd+w== - dependencies: - "@storybook/core-events" "7.5.3" - "@storybook/node-logger" "7.5.3" - "@storybook/types" "7.5.3" - "@types/find-cache-dir" "^3.2.1" - "@types/node" "^18.0.0" - "@types/node-fetch" "^2.6.4" - "@types/pretty-hrtime" "^1.0.0" - chalk "^4.1.0" - esbuild "^0.18.0" - esbuild-register "^3.5.0" - file-system-cache "2.3.0" - find-cache-dir "^3.0.0" - find-up "^5.0.0" - fs-extra "^11.1.0" - glob "^10.0.0" - handlebars "^4.7.7" - lazy-universal-dotenv "^4.0.0" - node-fetch "^2.0.0" - picomatch "^2.3.0" - pkg-dir "^5.0.0" - pretty-hrtime "^1.0.3" - resolve-from "^5.0.0" - ts-dedent "^2.0.0" - -"@storybook/core-events@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.5.3.tgz#210089576844569a914cc0cd1e07119bac6eb0e4" - integrity sha512-DFOpyQ22JD5C1oeOFzL8wlqSWZzrqgDfDbUGP8xdO4wJu+FVTxnnWN6ZYLdTPB1u27DOhd7TzjQMfLDHLu7kbQ== - dependencies: - ts-dedent "^2.0.0" - -"@storybook/core-server@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-7.5.3.tgz#23ea0757d6ffc0e9acc269b58efd7f75f5d781f6" - integrity sha512-Gmq1w7ulN/VIeTDboNcb6GNM+S8T0SqhJUqeoHzn0vLGnzxeuYRJ0V3ZJhGZiJfSmCNqYAjC8QUBf6uU1gLipw== - dependencies: - "@aw-web-design/x-default-browser" "1.4.126" - "@discoveryjs/json-ext" "^0.5.3" - "@storybook/builder-manager" "7.5.3" - "@storybook/channels" "7.5.3" - "@storybook/core-common" "7.5.3" - "@storybook/core-events" "7.5.3" - "@storybook/csf" "^0.1.0" - "@storybook/csf-tools" "7.5.3" - "@storybook/docs-mdx" "^0.1.0" - "@storybook/global" "^5.0.0" - "@storybook/manager" "7.5.3" - "@storybook/node-logger" "7.5.3" - "@storybook/preview-api" "7.5.3" - "@storybook/telemetry" "7.5.3" - "@storybook/types" "7.5.3" - "@types/detect-port" "^1.3.0" - "@types/node" "^18.0.0" - "@types/pretty-hrtime" "^1.0.0" - "@types/semver" "^7.3.4" - better-opn "^3.0.2" - chalk "^4.1.0" - cli-table3 "^0.6.1" - compression "^1.7.4" - detect-port "^1.3.0" - express "^4.17.3" - fs-extra "^11.1.0" - globby "^11.0.2" - ip "^2.0.0" - lodash "^4.17.21" - open "^8.4.0" - pretty-hrtime "^1.0.3" - prompts "^2.4.0" - read-pkg-up "^7.0.1" - semver "^7.3.7" - telejson "^7.2.0" - tiny-invariant "^1.3.1" - ts-dedent "^2.0.0" - util "^0.12.4" - util-deprecate "^1.0.2" - watchpack "^2.2.0" - ws "^8.2.3" - -"@storybook/core-webpack@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/core-webpack/-/core-webpack-7.5.3.tgz#40da9419c71d6e0134a4309cf0ed6f034baf5bdd" - integrity sha512-dhC94VeLwyPtZ2gvEND6J4alMaiFDsK8lJCYPNAahUr56f3nRDyVibE7prd94sAlfrdind1g5slP9VMP8cX+uQ== - dependencies: - "@storybook/core-common" "7.5.3" - "@storybook/node-logger" "7.5.3" - "@storybook/types" "7.5.3" - "@types/node" "^18.0.0" - ts-dedent "^2.0.0" - -"@storybook/csf-plugin@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-7.5.3.tgz#803197a2042323323528014878e9f9f0cc50c193" - integrity sha512-yQ3S/IOT08Y7XTnlc3SPkrJKZ6Xld6liAlHn+ddjge4oZa0hUqwYLb+piXUhFMfL6Ij65cj4hu3vMbw89azIhg== - dependencies: - "@storybook/csf-tools" "7.5.3" - unplugin "^1.3.1" - -"@storybook/csf-tools@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-7.5.3.tgz#1b2a393b3402a4c2fdfb2eb4eb90c63463c106ae" - integrity sha512-676C3ISn7FQJKjb3DBWXhjGN2OQEv4s71dx+5D0TlmswDCOOGS8dYFjP8wVx51+mAIE8CROAw7vLHLtVKU7SwQ== - dependencies: - "@babel/generator" "^7.22.9" - "@babel/parser" "^7.22.7" - "@babel/traverse" "^7.22.8" - "@babel/types" "^7.22.5" - "@storybook/csf" "^0.1.0" - "@storybook/types" "7.5.3" - fs-extra "^11.1.0" - recast "^0.23.1" - ts-dedent "^2.0.0" - -"@storybook/csf@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.1.1.tgz#abccc8c3e49aed0a6a7e87beb0d1c262b1921c06" - integrity sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg== - dependencies: - type-fest "^2.19.0" - -"@storybook/docs-mdx@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@storybook/docs-mdx/-/docs-mdx-0.1.0.tgz#33ba0e39d1461caf048b57db354b2cc410705316" - integrity sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg== - -"@storybook/docs-tools@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/docs-tools/-/docs-tools-7.5.3.tgz#1d1aec4a7546d70a2273ad99814a1dbecb8e80f7" - integrity sha512-f20EUQlwamcSPrOFn42fj9gpkZIDNCZkC3N19yGzLYiE4UMyaYQgRl18oLvqd3M6aBm6UW6SCoIIgeaOViBSqg== - dependencies: - "@storybook/core-common" "7.5.3" - "@storybook/preview-api" "7.5.3" - "@storybook/types" "7.5.3" - "@types/doctrine" "^0.0.3" - doctrine "^3.0.0" - lodash "^4.17.21" - -"@storybook/global@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@storybook/global/-/global-5.0.0.tgz#b793d34b94f572c1d7d9e0f44fac4e0dbc9572ed" - integrity sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ== - -"@storybook/instrumenter@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/instrumenter/-/instrumenter-7.5.3.tgz#de875ba10db3b5a06a1acbc27a8b1f8fb1d875ff" - integrity sha512-p6b+/6ohTCKxWn00bXT8KBqVjXUOxeILnJtLlG83USLQCpI+XVkpmK57HYuydqEwy/1XjG+4S4ntPk9VVz3u7w== - dependencies: - "@storybook/channels" "7.5.3" - "@storybook/client-logger" "7.5.3" - "@storybook/core-events" "7.5.3" - "@storybook/global" "^5.0.0" - "@storybook/preview-api" "7.5.3" - -"@storybook/manager-api@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-7.5.3.tgz#6e9e791a8996631dc77f3a0cecc34ce4f4869647" - integrity sha512-d8mVLr/5BEG4bAS2ZeqYTy/aX4jPEpZHdcLaWoB4mAM+PAL9wcWsirUyApKtDVYLITJf/hd8bb2Dm2ok6E45gA== - dependencies: - "@storybook/channels" "7.5.3" - "@storybook/client-logger" "7.5.3" - "@storybook/core-events" "7.5.3" - "@storybook/csf" "^0.1.0" - "@storybook/global" "^5.0.0" - "@storybook/router" "7.5.3" - "@storybook/theming" "7.5.3" - "@storybook/types" "7.5.3" - dequal "^2.0.2" - lodash "^4.17.21" - memoizerific "^1.11.3" - semver "^7.3.7" - store2 "^2.14.2" - telejson "^7.2.0" - ts-dedent "^2.0.0" - -"@storybook/manager@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/manager/-/manager-7.5.3.tgz#e185fc056546c19d255cdc26b6f2698e04d3f8ab" - integrity sha512-3ZZrHYcXWAQXpDQZBvKyScGgQaAaBc63i+KC2mXqzTdXuJhVDUiylvqLRprBnrEprgePQLFrxGC2JSHUwH7dqg== - -"@storybook/mdx2-csf@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@storybook/mdx2-csf/-/mdx2-csf-1.1.0.tgz#97f6df04d0bf616991cc1005a073ac004a7281e5" - integrity sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw== - -"@storybook/node-logger@7.5.3", "@storybook/node-logger@^7.0.12": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-7.5.3.tgz#23133787f5b3427cef7301e10c6caf9132969fc1" - integrity sha512-7ZZDw/q3hakBj1FngsBjaHNIBguYAWojp7R1fFTvwkeunCi21EUzZjRBcqp10kB6BP3/NLX32bIQknsCWD76rQ== - -"@storybook/postinstall@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/postinstall/-/postinstall-7.5.3.tgz#66b9add9e315646dde2289d77c87118c3c8596a6" - integrity sha512-r+H3xGMu2A9yOSsygc3bDFhku8wpOZF3SqO19B7eAML12viHwUtYfyGL74svw4TMcKukyQ+KPn5QsSG+4bjZMg== - -"@storybook/preset-react-webpack@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/preset-react-webpack/-/preset-react-webpack-7.5.3.tgz#43139d09b719dfe5624a841bfe8e57ed064fa697" - integrity sha512-/3Zsh97KpMLsx3lkkQ9LAlEVWwBGbAJTwE+ueVxVnAJgwiDCVe95IN7sVpKuwN/PVStnMRwDADUvZPfmw4m3Sg== - dependencies: - "@babel/preset-flow" "^7.22.5" - "@babel/preset-react" "^7.22.5" - "@pmmmwh/react-refresh-webpack-plugin" "^0.5.5" - "@storybook/core-webpack" "7.5.3" - "@storybook/docs-tools" "7.5.3" - "@storybook/node-logger" "7.5.3" - "@storybook/react" "7.5.3" - "@storybook/react-docgen-typescript-plugin" "1.0.6--canary.9.0c3f3b7.0" - "@types/node" "^18.0.0" - "@types/semver" "^7.3.4" - babel-plugin-add-react-displayname "^0.0.5" - babel-plugin-react-docgen "^4.2.1" - fs-extra "^11.1.0" - react-refresh "^0.11.0" - semver "^7.3.7" - webpack "5" - -"@storybook/preview-api@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-7.5.3.tgz#eaf70f9b6888d0dac42ce39a296afd6acacf6156" - integrity sha512-LNmEf7oBRnZ1wG3bQ+P+TO29+NN5pSDJiAA6FabZBrtIVm+psc2lxBCDQvFYyAFzQSlt60toGKNW8+RfFNdR5Q== - dependencies: - "@storybook/channels" "7.5.3" - "@storybook/client-logger" "7.5.3" - "@storybook/core-events" "7.5.3" - "@storybook/csf" "^0.1.0" - "@storybook/global" "^5.0.0" - "@storybook/types" "7.5.3" - "@types/qs" "^6.9.5" - dequal "^2.0.2" - lodash "^4.17.21" - memoizerific "^1.11.3" - qs "^6.10.0" - synchronous-promise "^2.0.15" - ts-dedent "^2.0.0" - util-deprecate "^1.0.2" - -"@storybook/preview@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/preview/-/preview-7.5.3.tgz#9abe434ea9fb280a7d2141b72be2958f7eb9cc5b" - integrity sha512-Hf90NlLaSrdMZXPOHDCMPjTywVrQKK0e5CtzqWx/ZQz91JDINxJD+sGj2wZU+wuBtQcTtlsXc9OewlJ+9ETwIw== - -"@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0": - version "1.0.6--canary.9.0c3f3b7.0" - resolved "https://registry.yarnpkg.com/@storybook/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-1.0.6--canary.9.0c3f3b7.0.tgz#7f10f3c641f32e4513a8b6ffb5036933e7059534" - integrity sha512-KUqXC3oa9JuQ0kZJLBhVdS4lOneKTOopnNBK4tUAgoxWQ3u/IjzdueZjFr7gyBrXMoU6duutk3RQR9u8ZpYJ4Q== - dependencies: - debug "^4.1.1" - endent "^2.0.1" - find-cache-dir "^3.3.1" - flat-cache "^3.0.4" - micromatch "^4.0.2" - react-docgen-typescript "^2.2.2" - tslib "^2.0.0" - -"@storybook/react-dom-shim@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-7.5.3.tgz#54fc7bda589be5f630738fd08d2a37d5bb7815fa" - integrity sha512-9aNcKdhoP36jMrcXgfzE9jVg/SpqPpWnUJM70upYoZXytG2wQSPtawLHHyC6kycvTzwncyfF3rwUnOFBB8zmig== - -"@storybook/react-webpack5@^7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/react-webpack5/-/react-webpack5-7.5.3.tgz#dfef70b203a803c77ee777eb79b6ee986d6c7009" - integrity sha512-+sjYMrvmpvztdDkRE1/EkcNNxTTdDdBoXUGrGyE0ig6qEwSewRld0H8ng1jlNQ8treocy7036TXJF+qHZEz/FQ== - dependencies: - "@storybook/builder-webpack5" "7.5.3" - "@storybook/preset-react-webpack" "7.5.3" - "@storybook/react" "7.5.3" - "@types/node" "^18.0.0" - -"@storybook/react@7.5.3", "@storybook/react@^7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/react/-/react-7.5.3.tgz#fe01ff2057826bdf55b0852deea7e76859757c01" - integrity sha512-dZILdM36xMFDjdmmy421G5X+sOIncB2qF3IPTooniG1i1Z6v/dVNo57ovdID9lDTNa+AWr2fLB9hANiISMqmjQ== - dependencies: - "@storybook/client-logger" "7.5.3" - "@storybook/core-client" "7.5.3" - "@storybook/docs-tools" "7.5.3" - "@storybook/global" "^5.0.0" - "@storybook/preview-api" "7.5.3" - "@storybook/react-dom-shim" "7.5.3" - "@storybook/types" "7.5.3" - "@types/escodegen" "^0.0.6" - "@types/estree" "^0.0.51" - "@types/node" "^18.0.0" - acorn "^7.4.1" - acorn-jsx "^5.3.1" - acorn-walk "^7.2.0" - escodegen "^2.1.0" - html-tags "^3.1.0" - lodash "^4.17.21" - prop-types "^15.7.2" - react-element-to-jsx-string "^15.0.0" - ts-dedent "^2.0.0" - type-fest "~2.19" - util-deprecate "^1.0.2" - -"@storybook/router@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/router/-/router-7.5.3.tgz#e024ad96bc4bbf7250239921a251e828729e4747" - integrity sha512-/iNYCFore7R5n6eFHbBYoB0P2/sybTVpA+uXTNUd3UEt7Ro6CEslTaFTEiH2RVQwOkceBp/NpyWon74xZuXhMg== - dependencies: - "@storybook/client-logger" "7.5.3" - memoizerific "^1.11.3" - qs "^6.10.0" - -"@storybook/telemetry@7.5.3", "@storybook/telemetry@^7.1.0-alpha.32": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/telemetry/-/telemetry-7.5.3.tgz#67d77c5cb33360c6f483a7cc89897fea160ca446" - integrity sha512-X6alII3o0jCb5xALuw+qcWmvyrbhlkmPeNZ6ZQXknOfB4DkwponFdWN5y6W7yGvr01xa5QBepJRV79isl97d8g== - dependencies: - "@storybook/client-logger" "7.5.3" - "@storybook/core-common" "7.5.3" - "@storybook/csf-tools" "7.5.3" - chalk "^4.1.0" - detect-package-manager "^2.0.1" - fetch-retry "^5.0.2" - fs-extra "^11.1.0" - read-pkg-up "^7.0.1" - -"@storybook/testing-library@^0.2.2": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@storybook/testing-library/-/testing-library-0.2.2.tgz#c8e089cc8d7354f6066fdb580fae3eedf568aa7c" - integrity sha512-L8sXFJUHmrlyU2BsWWZGuAjv39Jl1uAqUHdxmN42JY15M4+XCMjGlArdCCjDe1wpTSW6USYISA9axjZojgtvnw== - dependencies: - "@testing-library/dom" "^9.0.0" - "@testing-library/user-event" "^14.4.0" - ts-dedent "^2.2.0" - -"@storybook/theming@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-7.5.3.tgz#bbcf547c8b3ec1e59e641c58155a44781d5f310d" - integrity sha512-Cjmthe1MAk0z4RKCZ7m72gAD8YD0zTAH97z5ryM1Qv84QXjiCQ143fGOmYz1xEQdNFpOThPcwW6FEccLHTkVcg== - dependencies: - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" - "@storybook/client-logger" "7.5.3" - "@storybook/global" "^5.0.0" - memoizerific "^1.11.3" - -"@storybook/types@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.5.3.tgz#be956805dafc09fa9a7a3dd4e0e5097ef08e4fd4" - integrity sha512-iu5W0Kdd6nysN5CPkY4GRl+0BpxRTdSfBIJak7mb6xCIHSB5t1tw4BOuqMQ5EgpikRY3MWJ4gY647QkWBX3MNQ== - dependencies: - "@storybook/channels" "7.5.3" - "@types/babel__core" "^7.0.0" - "@types/express" "^4.7.0" - file-system-cache "2.3.0" - -"@swc/core-darwin-arm64@1.3.96": - version "1.3.96" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.96.tgz#7c1c4245ce3f160a5b36a48ed071e3061a839e1d" - integrity sha512-8hzgXYVd85hfPh6mJ9yrG26rhgzCmcLO0h1TIl8U31hwmTbfZLzRitFQ/kqMJNbIBCwmNH1RU2QcJnL3d7f69A== - -"@swc/core-darwin-x64@1.3.96": - version "1.3.96" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.96.tgz#4720ff897ca3f22fe77d0be688968161480c80f0" - integrity sha512-mFp9GFfuPg+43vlAdQZl0WZpZSE8sEzqL7sr/7Reul5McUHP0BaLsEzwjvD035ESfkY8GBZdLpMinblIbFNljQ== - -"@swc/core-linux-arm-gnueabihf@1.3.96": - version "1.3.96" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.96.tgz#2c238ae00b13918ac058b132a31dc57dbcf94e39" - integrity sha512-8UEKkYJP4c8YzYIY/LlbSo8z5Obj4hqcv/fUTHiEePiGsOddgGf7AWjh56u7IoN/0uEmEro59nc1ChFXqXSGyg== - -"@swc/core-linux-arm64-gnu@1.3.96": - version "1.3.96" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.96.tgz#be2e84506b9761b561fb9a341e587f8594a8e55d" - integrity sha512-c/IiJ0s1y3Ymm2BTpyC/xr6gOvoqAVETrivVXHq68xgNms95luSpbYQ28rqaZC8bQC8M5zdXpSc0T8DJu8RJGw== - -"@swc/core-linux-arm64-musl@1.3.96": - version "1.3.96" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.96.tgz#22c9ce17bd923ae358760e668ca33c90210c2ae5" - integrity sha512-i5/UTUwmJLri7zhtF6SAo/4QDQJDH2fhYJaBIUhrICmIkRO/ltURmpejqxsM/ye9Jqv5zG7VszMC0v/GYn/7BQ== - -"@swc/core-linux-x64-gnu@1.3.96": - version "1.3.96" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.96.tgz#c17c072e338341c0ac3507a31ab2a36d16d79c98" - integrity sha512-USdaZu8lTIkm4Yf9cogct/j5eqtdZqTgcTib4I+NloUW0E/hySou3eSyp3V2UAA1qyuC72ld1otXuyKBna0YKQ== - -"@swc/core-linux-x64-musl@1.3.96": - version "1.3.96" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.96.tgz#eb74594a48b4e9cabdce7f5525b3b946f8d6dd16" - integrity sha512-QYErutd+G2SNaCinUVobfL7jWWjGTI0QEoQ6hqTp7PxCJS/dmKmj3C5ZkvxRYcq7XcZt7ovrYCTwPTHzt6lZBg== - -"@swc/core-win32-arm64-msvc@1.3.96": - version "1.3.96" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.96.tgz#6f7c0d20d80534b0676dc6761904288c16e93857" - integrity sha512-hjGvvAduA3Un2cZ9iNP4xvTXOO4jL3G9iakhFsgVhpkU73SGmK7+LN8ZVBEu4oq2SUcHO6caWvnZ881cxGuSpg== - -"@swc/core-win32-ia32-msvc@1.3.96": - version "1.3.96" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.96.tgz#47bb24ef2e4c81407a6786649246983cc69e7854" - integrity sha512-Far2hVFiwr+7VPCM2GxSmbh3ikTpM3pDombE+d69hkedvYHYZxtTF+2LTKl/sXtpbUnsoq7yV/32c9R/xaaWfw== - -"@swc/core-win32-x64-msvc@1.3.96": - version "1.3.96" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.96.tgz#c796e3df7afe2875d227c74add16a7d09c77d8bd" - integrity sha512-4VbSAniIu0ikLf5mBX81FsljnfqjoVGleEkCQv4+zRlyZtO3FHoDPkeLVoy6WRlj7tyrRcfUJ4mDdPkbfTO14g== - -"@swc/core@^1.3.82": - version "1.3.96" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.96.tgz#f04d58b227ceed2fee6617ce2cdddf21d0803f96" - integrity sha512-zwE3TLgoZwJfQygdv2SdCK9mRLYluwDOM53I+dT6Z5ZvrgVENmY3txvWDvduzkV+/8IuvrRbVezMpxcojadRdQ== - dependencies: - "@swc/counter" "^0.1.1" - "@swc/types" "^0.1.5" - optionalDependencies: - "@swc/core-darwin-arm64" "1.3.96" - "@swc/core-darwin-x64" "1.3.96" - "@swc/core-linux-arm-gnueabihf" "1.3.96" - "@swc/core-linux-arm64-gnu" "1.3.96" - "@swc/core-linux-arm64-musl" "1.3.96" - "@swc/core-linux-x64-gnu" "1.3.96" - "@swc/core-linux-x64-musl" "1.3.96" - "@swc/core-win32-arm64-msvc" "1.3.96" - "@swc/core-win32-ia32-msvc" "1.3.96" - "@swc/core-win32-x64-msvc" "1.3.96" - -"@swc/counter@^0.1.1": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.2.tgz#bf06d0770e47c6f1102270b744e17b934586985e" - integrity sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw== +"@standard-schema/utils@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@standard-schema/utils/-/utils-0.3.0.tgz#3d5e608f16c2390c10528e98e59aef6bf73cae7b" + integrity sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g== "@swc/helpers@^0.4.12": - version "0.4.36" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.36.tgz#fcfff76ed52c214f357e8e9d3f37b568908072d9" - integrity sha512-5lxnyLEYFskErRPenYItLRSge5DjrJngYKdVjRSrWfza9G6KkgHEXi0vUZiyUeMU5JfXH1YnvXZzSp8ul88o2Q== + version "0.4.37" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.37.tgz#36c6083077fd8003e50661d2ed8a65b05b9fe86f" + integrity sha512-O4U8DmGtYvuWDrqmkAqhmA+sV8D3eJzvKSUgg5L5eaCCPdywZBLc97UgJT/fQaCkQ5onJzJWNojgErJk1bThaw== dependencies: - legacy-swc-helpers "npm:@swc/helpers@=0.4.14" + "@swc/legacy-helpers" "npm:@swc/helpers@=0.4.14" tslib "^2.4.0" -"@swc/types@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.5.tgz#043b731d4f56a79b4897a3de1af35e75d56bc63a" - integrity sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw== - -"@testing-library/dom@^9.0.0": - version "9.3.3" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.3.3.tgz#108c23a5b0ef51121c26ae92eb3179416b0434f5" - integrity sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw== +"@swc/legacy-helpers@npm:@swc/helpers@=0.4.14": + version "0.4.14" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74" + integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw== dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/runtime" "^7.12.5" - "@types/aria-query" "^5.0.1" - aria-query "5.1.3" - chalk "^4.1.0" - dom-accessibility-api "^0.5.9" - lz-string "^1.5.0" - pretty-format "^27.0.2" - -"@testing-library/user-event@^14.4.0": - version "14.5.1" - resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.5.1.tgz#27337d72046d5236b32fd977edee3f74c71d332f" - integrity sha512-UCcUKrUYGj7ClomOo2SpNVvx4/fkd/2BbIHDCle8A0ax+P3bU7yJwDBDrS6ZwdTMARWTGODX1hEsCcO+7beJjg== - -"@trysound/sax@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" - integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== - -"@types/aria-query@^5.0.1": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" - integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== + tslib "^2.4.0" "@types/aws-lambda@^8.10.134": version "8.10.152" resolved "https://registry.yarnpkg.com/@types/aws-lambda/-/aws-lambda-8.10.152.tgz#f68424a8175f0a54a2a941e65b76c3f51f3bd89d" integrity sha512-soT/c2gYBnT5ygwiHPmd9a1bftj462NWVk2tKCc1PYHSIacB2UwbTS2zYG4jzag1mRDuzg/OjtxQjQ2NKRB6Rw== -"@types/babel__core@^7", "@types/babel__core@^7.0.0": - version "7.20.4" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.4.tgz#26a87347e6c6f753b3668398e34496d6d9ac6ac0" - integrity sha512-mLnSC22IC4vcWiuObSRjrLd9XcBTGf59vUSoq2jkQDJ/QQ8PMI9rSuzE+aEV8karUMbskw07bKYoUJCKTUaygg== +"@types/babel__core@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== dependencies: "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" @@ -5195,10 +3497,10 @@ dependencies: "@babel/types" "^7.0.0" -"@types/babel__preset-env@^7": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@types/babel__preset-env/-/babel__preset-env-7.9.5.tgz#5140297928cdfc518a0736397b1f2caf11dbed1e" - integrity sha512-MM0iouN2V5gX13rLEdshGVkgm+Ro+qIYHvSEQz9EzjmHfTore9WEXkqH31hne/Q/6CI29XlulNeWL8vjghMZ3w== +"@types/babel__preset-env@^7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@types/babel__preset-env/-/babel__preset-env-7.10.0.tgz#6db5aebb012af5da345c3508c79af41a803a0ef1" + integrity sha512-LS8hRb/8TQir2f8W9/s5enDtrRS2F/6fsdkVw5ePHp6Q8SrSJHOGtWnP93ryaYMmg2du03vOsiGrl5mllz4uDA== "@types/babel__template@*": version "7.4.4" @@ -5215,569 +3517,73 @@ dependencies: "@babel/types" "^7.20.7" -"@types/body-parser@*": - version "1.19.5" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" - integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/connect@*": - version "3.4.38" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" - integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== - dependencies: - "@types/node" "*" - -"@types/cross-spawn@^6.0.2": - version "6.0.5" - resolved "https://registry.yarnpkg.com/@types/cross-spawn/-/cross-spawn-6.0.5.tgz#1f9a5311e0e54d6f88017ba6d564a958d1aa359f" - integrity sha512-wsIMP68FvGXk+RaWhraz6Xp4v7sl4qwzHAmtPaJEN2NRTXXI9LtFawUpeTsBNL/pd6QoLStdytCaAyiK7AEd/Q== - dependencies: - "@types/node" "*" - -"@types/detect-port@^1.3.0": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/detect-port/-/detect-port-1.3.5.tgz#deecde143245989dee0e82115f3caba5ee0ea747" - integrity sha512-Rf3/lB9WkDfIL9eEKaSYKc+1L/rNVYBjThk22JTqQw0YozXarX8YljFAz+HCoC6h4B4KwCMsBPZHaFezwT4BNA== - -"@types/doctrine@^0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@types/doctrine/-/doctrine-0.0.3.tgz#e892d293c92c9c1d3f9af72c15a554fbc7e0895a" - integrity sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA== - -"@types/ejs@^3.1.1": - version "3.1.5" - resolved "https://registry.yarnpkg.com/@types/ejs/-/ejs-3.1.5.tgz#49d738257cc73bafe45c13cb8ff240683b4d5117" - integrity sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg== - -"@types/emscripten@^1.39.6": - version "1.39.10" - resolved "https://registry.yarnpkg.com/@types/emscripten/-/emscripten-1.39.10.tgz#da6e58a6171b46a41d3694f812d845d515c77e18" - integrity sha512-TB/6hBkYQJxsZHSqyeuO1Jt0AB/bW6G7rHt9g7lML7SOF6lbgcHvw/Lr+69iqN0qxgXLhWKScAon73JNnptuDw== - -"@types/escodegen@^0.0.6": - version "0.0.6" - resolved "https://registry.yarnpkg.com/@types/escodegen/-/escodegen-0.0.6.tgz#5230a9ce796e042cda6f086dbf19f22ea330659c" - integrity sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig== - -"@types/eslint-scope@^3.7.3": - version "3.7.7" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" - integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.44.7" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.7.tgz#430b3cc96db70c81f405e6a08aebdb13869198f5" - integrity sha512-f5ORu2hcBbKei97U73mf+l9t4zTGl74IqZ0GQk4oVea/VS8tQZYkUveSYojk+frraAVYId0V2WC9O4PTNru2FQ== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@^1.0.0": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== - -"@types/estree@^0.0.51": - version "0.0.51" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== - -"@types/express-serve-static-core@^4.17.33": - version "4.17.41" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz#5077defa630c2e8d28aa9ffc2c01c157c305bef6" - integrity sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express@^4.7.0": - version "4.17.21" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" - integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/find-cache-dir@^3.2.1": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@types/find-cache-dir/-/find-cache-dir-3.2.1.tgz#7b959a4b9643a1e6a1a5fe49032693cc36773501" - integrity sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw== - -"@types/graceful-fs@^4.1.3": - version "4.1.9" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" - integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== - dependencies: - "@types/node" "*" - -"@types/html-minifier-terser@^6.0.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" - integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== - -"@types/http-errors@*": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" - integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" - integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== - -"@types/istanbul-lib-report@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" - integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" - integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@^7.0.15": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== -"@types/lodash@^4.14.167": - version "4.14.201" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.201.tgz#76f47cb63124e806824b6c18463daf3e1d480239" - integrity sha512-y9euML0cim1JrykNxADLfaG0FgD1g/yTHwUs/Jg9ZIU7WKj2/4IW9Lbb1WZbvck78W/lfGXFfe+u2EGfIJXdLQ== - -"@types/mdx@^2.0.0": - version "2.0.10" - resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.10.tgz#0d7b57fb1d83e27656156e4ee0dfba96532930e4" - integrity sha512-Rllzc5KHk0Al5/WANwgSPl1/CwjqCy+AZrGd78zuK+jO9aDM6ffblZ+zIjgPNAaEBmlO0RYDvLNh7wD0zKVgEg== - -"@types/mime-types@^2.1.0": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@types/mime-types/-/mime-types-2.1.4.tgz#93a1933e24fed4fb9e4adc5963a63efcbb3317a2" - integrity sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w== - -"@types/mime@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.4.tgz#2198ac274de6017b44d941e00261d5bc6a0e0a45" - integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== - -"@types/mime@^1": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" - integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== - -"@types/node-fetch@^2.6.4": - version "2.6.9" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.9.tgz#15f529d247f1ede1824f7e7acdaa192d5f28071e" - integrity sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA== - dependencies: - "@types/node" "*" - form-data "^4.0.0" - -"@types/node@*": - version "20.9.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.9.0.tgz#bfcdc230583aeb891cf51e73cfdaacdd8deae298" - integrity sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw== - dependencies: - undici-types "~5.26.4" - -"@types/node@^18.0.0": - version "18.18.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.18.9.tgz#5527ea1832db3bba8eb8023ce8497b7d3f299592" - integrity sha512-0f5klcuImLnG4Qreu9hPj/rEfFq6YRc5n2mAjSsH+ec/mJL+3voBH0+8T7o8RpFjH7ovc+TRsL/c7OYIQsPTfQ== - dependencies: - undici-types "~5.26.4" - -"@types/normalize-package-data@^2.4.0": - version "2.4.4" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" - integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== - -"@types/parse-json@^4.0.0": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" - integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== - -"@types/pretty-hrtime@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@types/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#ee1bd8c9f7a01b3445786aad0ef23aba5f511a44" - integrity sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA== - -"@types/prop-types@*", "@types/prop-types@^15": +"@types/prop-types@*": version "15.7.10" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.10.tgz#892afc9332c4d62a5ea7e897fe48ed2085bbb08a" integrity sha512-mxSnDQxPqsZxmeShFH+uwQ4kO4gcJcGahjjMFeLbKE95IAZiiZyiEepGZjtXJ7hN/yfu0bu9xN2ajcU0JcxX6A== -"@types/qs@*", "@types/qs@^6.9.5": - version "6.9.10" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.10.tgz#0af26845b5067e1c9a622658a51f60a3934d51e8" - integrity sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw== +"@types/prop-types@^15.7.15": + version "15.7.15" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.15.tgz#e6e5a86d602beaca71ce5163fadf5f95d70931c7" + integrity sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw== -"@types/range-parser@*": - version "1.2.7" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" - integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== - -"@types/react-dom@17": - version "17.0.23" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.23.tgz#55b98df6b27595c8ca84e04e5b5df0f86bca7d24" - integrity sha512-lnJAZfMEDxfvELeeT24w4rnUYwpzUzQAOTfJQbWYnLcx8AEfz+fXJDCbowIBqNK/Bi4D6j8ovT8Qsda2OtDApA== +"@types/react-dom@18.3.1": + version "18.3.1" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.1.tgz#1e4654c08a9cdcfb6594c780ac59b55aad42fe07" + integrity sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ== dependencies: - "@types/react" "^17" + "@types/react" "*" -"@types/react@17", "@types/react@^17": - version "17.0.70" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.70.tgz#35301a9cb94ba1a65dc306b7ce169a2c4fda1986" - integrity sha512-yqYMK49/cnqw+T8R9/C+RNjRddYmPDGI5lKHi3bOYceQCBAh8X2ngSbZP0gnVeyvHr0T7wEgIIGKT1usNol08w== +"@types/react@*": + version "19.2.14" + resolved "https://registry.yarnpkg.com/@types/react/-/react-19.2.14.tgz#39604929b5e3957e3a6fa0001dafb17c7af70bad" + integrity sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w== + dependencies: + csstype "^3.2.2" + +"@types/react@18.3.1": + version "18.3.1" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.1.tgz#fed43985caa834a2084d002e4771e15dfcbdbe8e" + integrity sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw== dependencies: "@types/prop-types" "*" - "@types/scheduler" "*" csstype "^3.0.2" -"@types/react@>=16": - version "18.2.37" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.37.tgz#0f03af69e463c0f19a356c2660dbca5d19c44cae" - integrity sha512-RGAYMi2bhRgEXT3f4B92WTohopH6bIXw05FuGlmJEnv/omEn190+QYEIYxIAuIBdKgboYYdVved2p1AxZVQnaw== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/scheduler@*": - version "0.16.6" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.6.tgz#eb26db6780c513de59bee0b869ef289ad3068711" - integrity sha512-Vlktnchmkylvc9SnwwwozTv04L/e1NykF5vgoQ0XTmI8DD+wxfjQuHuvHS3p0r2jz2x2ghPs2h1FVeDirIteWA== - -"@types/semver@^7.3.4": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.5.tgz#deed5ab7019756c9c90ea86139106b0346223f35" - integrity sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg== - -"@types/send@*": - version "0.17.4" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" - integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/serve-static@*": - version "1.15.5" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.5.tgz#15e67500ec40789a1e8c9defc2d32a896f05b033" - integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== - dependencies: - "@types/http-errors" "*" - "@types/mime" "*" - "@types/node" "*" - -"@types/unist@^2.0.0": - version "2.0.10" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.10.tgz#04ffa7f406ab628f7f7e97ca23e290cd8ab15efc" - integrity sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA== +"@types/relateurl@^0.2.33": + version "0.2.33" + resolved "https://registry.yarnpkg.com/@types/relateurl/-/relateurl-0.2.33.tgz#fa174c30100d91e88d7b0ba60cefd7e8c532516f" + integrity sha512-bTQCKsVbIdzLqZhLkF5fcJQreE4y1ro4DIyVrlDNSCJRRwHhB8Z+4zXXa8jN6eDvc2HbRsEYgbvrnGvi54EpSw== "@types/uuid@^9.0.0": version "9.0.8" resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba" integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA== -"@types/yargs-parser@*": - version "21.0.3" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" - integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== - -"@types/yargs@^16.0.0": - version "16.0.8" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.8.tgz#0d57a5a491d85ae75d372a32e657b1779b86c65d" - integrity sha512-1GwLEkmFafeb/HbE6pC7tFlgYSQ4Iqh2qlWCq8xN+Qfaiaxr2PcLfuhfRFRYqI6XJyeFoLYyKnhFbNsst9FMtQ== - dependencies: - "@types/yargs-parser" "*" - -"@types/yargs@^17.0.8": - version "17.0.31" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.31.tgz#8fd0089803fd55d8a285895a18b88cb71a99683c" - integrity sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg== - dependencies: - "@types/yargs-parser" "*" - -"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" - integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - -"@webassemblyjs/floating-point-hex-parser@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" - integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== - -"@webassemblyjs/helper-api-error@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" - integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== - -"@webassemblyjs/helper-buffer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" - integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== - -"@webassemblyjs/helper-numbers@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" - integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" - integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== - -"@webassemblyjs/helper-wasm-section@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" - integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - -"@webassemblyjs/ieee754@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" - integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" - integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" - integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== - -"@webassemblyjs/wasm-edit@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" - integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/helper-wasm-section" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-opt" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - "@webassemblyjs/wast-printer" "1.11.6" - -"@webassemblyjs/wasm-gen@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" - integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wasm-opt@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" - integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - -"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" - integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wast-printer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" - integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@xtuc/long" "4.2.2" - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -"@yarnpkg/esbuild-plugin-pnp@^3.0.0-rc.10": - version "3.0.0-rc.15" - resolved "https://registry.yarnpkg.com/@yarnpkg/esbuild-plugin-pnp/-/esbuild-plugin-pnp-3.0.0-rc.15.tgz#4e40e7d2eb28825c9a35ab9d04c363931d7c0e67" - integrity sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA== - dependencies: - tslib "^2.4.0" - -"@yarnpkg/fslib@2.10.3": - version "2.10.3" - resolved "https://registry.yarnpkg.com/@yarnpkg/fslib/-/fslib-2.10.3.tgz#a8c9893df5d183cf6362680b9f1c6d7504dd5717" - integrity sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A== - dependencies: - "@yarnpkg/libzip" "^2.3.0" - tslib "^1.13.0" - -"@yarnpkg/libzip@2.3.0", "@yarnpkg/libzip@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@yarnpkg/libzip/-/libzip-2.3.0.tgz#fe1e762e47669f6e2c960fc118436608d834e3be" - integrity sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg== - dependencies: - "@types/emscripten" "^1.39.6" - tslib "^1.13.0" - abortcontroller-polyfill@^1.1.9: - version "1.7.5" - resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" - integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ== + version "1.7.8" + resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.8.tgz#fe8d4370403f02e2aa37e3d2b0b178bae9d83f49" + integrity sha512-9f1iZ2uWh92VcrU9Y8x+LdM4DLj75VE0MJB8zuF1iUnroEptStw+DQ8EQPMUdfe5k+PkB1uUfDQfWbhstH8LrQ== -accepts@~1.3.5, accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== - -acorn-jsx@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^7.4.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.10.0, acorn@^8.7.1, acorn@^8.8.2: - version "8.11.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" - integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== - -address@^1.0.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" - integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== - -agent-base@5: - version "5.1.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" - integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g== - -agent-base@^7.0.2: - version "7.1.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" - integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== - dependencies: - debug "^4.3.4" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== - dependencies: - ajv "^8.0.0" - -ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv-keywords@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" - integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== - dependencies: - fast-deep-equal "^3.1.3" - -ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.0, ajv@^8.9.0: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-html-community@0.0.8, ansi-html-community@^0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" - integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== +acorn@^8.15.0: + version "8.16.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.16.0.tgz#4ce79c89be40afe7afe8f3adb902a1f1ce9ac08a" + integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" + integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -5792,48 +3598,16 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - ansi-styles@^6.1.0: version "6.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== -anymatch@^3.0.3, anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -app-root-dir@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/app-root-dir/-/app-root-dir-1.0.2.tgz#38187ec2dea7577fff033ffcb12172692ff6e118" - integrity sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-hidden@^1.1.1: - version "1.2.3" - resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.3.tgz#14aeb7fb692bbb72d69bebfa47279c1fd725e954" - integrity sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ== - dependencies: - tslib "^2.0.0" - aria-hidden@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.4.tgz#b78e383fdbc04d05762c78b4a25a501e736c4522" @@ -5841,173 +3615,48 @@ aria-hidden@^1.2.4: dependencies: tslib "^2.0.0" -aria-query@5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" - integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== +aws-amplify@^6.16.3: + version "6.16.3" + resolved "https://registry.yarnpkg.com/aws-amplify/-/aws-amplify-6.16.3.tgz#09a12b06e6320fce7d7b1d3bcc5b2192e51c6484" + integrity sha512-yWuvctncVzSI5K40k2LiZTTKu6p1O7YpbmFfbM9luAFssUj2P2DmgJgs2IQ0ArpJTi++QrAT5L4F60qxTpGTIA== dependencies: - deep-equal "^2.0.5" - -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== - dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -assert@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" - integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== - dependencies: - call-bind "^1.0.2" - is-nan "^1.3.2" - object-is "^1.1.5" - object.assign "^4.1.4" - util "^0.12.5" - -ast-types@0.15.2: - version "0.15.2" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.15.2.tgz#39ae4809393c4b16df751ee563411423e85fb49d" - integrity sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg== - dependencies: - tslib "^2.0.1" - -ast-types@^0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.14.2.tgz#600b882df8583e3cd4f2df5fa20fa83759d4bdfd" - integrity sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA== - dependencies: - tslib "^2.0.1" - -ast-types@^0.16.1: - version "0.16.1" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.16.1.tgz#7a9da1617c9081bc121faafe91711b4c8bb81da2" - integrity sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg== - dependencies: - tslib "^2.0.1" - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -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== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - -aws-amplify@^6.15.6: - version "6.15.6" - resolved "https://registry.yarnpkg.com/aws-amplify/-/aws-amplify-6.15.6.tgz#d4c11090beeab70529177166596545015ec40b2a" - integrity sha512-beQ7afqfb/I2888GQVQ4olhQeEiJpFyqfZ8aSwpwz16CpfS918VvnUyqtwJ5jY4G3hxA5VLk7n1FL28TwQB2Mw== - dependencies: - "@aws-amplify/analytics" "7.0.87" - "@aws-amplify/api" "6.3.18" - "@aws-amplify/auth" "6.15.1" - "@aws-amplify/core" "6.13.2" - "@aws-amplify/datastore" "5.0.89" - "@aws-amplify/notifications" "2.0.87" - "@aws-amplify/storage" "6.9.6" + "@aws-amplify/analytics" "7.0.93" + "@aws-amplify/api" "6.3.24" + "@aws-amplify/auth" "6.19.1" + "@aws-amplify/core" "6.16.1" + "@aws-amplify/datastore" "5.1.5" + "@aws-amplify/notifications" "2.0.93" + "@aws-amplify/storage" "6.13.2" tslib "^2.5.0" -babel-core@^7.0.0-bridge.0: - version "7.0.0-bridge.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" - integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== - -babel-loader@^9.0.0: - version "9.1.3" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.1.3.tgz#3d0e01b4e69760cc694ee306fe16d358aa1c6f9a" - integrity sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw== +babel-plugin-polyfill-corejs2@^0.4.15: + version "0.4.16" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.16.tgz#a1321145f6cde738b0a412616b6bcf77f143ab36" + integrity sha512-xaVwwSfebXf0ooE11BJovZYKhFjIvQo7TsyVpETuIeH2JHv0k/T6Y5j22pPTvqYqmpkxdlPAJlyJ0tfOJAoMxw== dependencies: - find-cache-dir "^4.0.0" - schema-utils "^4.0.0" - -babel-plugin-add-react-displayname@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz#339d4cddb7b65fd62d1df9db9fe04de134122bd5" - integrity sha512-LY3+Y0XVDYcShHHorshrDbt4KFWL4bSeniCtl4SYZbask+Syngk1uMPCeN9+nSiZo6zX5s0RTq/J9Pnaaf/KHw== - -babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" - -babel-plugin-named-exports-order@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/babel-plugin-named-exports-order/-/babel-plugin-named-exports-order-0.0.2.tgz#ae14909521cf9606094a2048239d69847540cb09" - integrity sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw== - -babel-plugin-polyfill-corejs2@^0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz#b2df0251d8e99f229a8e60fc4efa9a68b41c8313" - integrity sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.3" + "@babel/compat-data" "^7.28.6" + "@babel/helper-define-polyfill-provider" "^0.6.7" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.8.5: - version "0.8.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz#25c2d20002da91fe328ff89095c85a391d6856cf" - integrity sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ== +babel-plugin-polyfill-corejs3@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.1.tgz#75fb533a1c23c0a976f189cba1d035199705b8ad" + integrity sha512-ENp89vM9Pw4kv/koBb5N2f9bDZsR0hpf3BdPMOg/pkS3pwO4dzNnQZVXtBbeyAadgm865DmQG2jMMLqmZXvuCw== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.3" - core-js-compat "^3.33.1" + "@babel/helper-define-polyfill-provider" "^0.6.7" + core-js-compat "^3.48.0" -babel-plugin-polyfill-regenerator@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz#d4c49e4b44614607c13fb769bcd85c72bb26a4a5" - integrity sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw== +babel-plugin-polyfill-regenerator@^0.6.6: + version "0.6.7" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.7.tgz#eca723d67ef87b798881ad00546db1b6dd72e1ef" + integrity sha512-OTYbUlSwXhNgr4g6efMZgsO8//jA61P7ZbRX3iTT53VON8l+WQS8IAUEVo4a4cWknrg2W8Cj4gQhRYNCJ8GkAA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.3" - -babel-plugin-react-docgen@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/babel-plugin-react-docgen/-/babel-plugin-react-docgen-4.2.1.tgz#7cc8e2f94e8dc057a06e953162f0810e4e72257b" - integrity sha512-UQ0NmGHj/HAqi5Bew8WvNfCk8wSsmdgNd8ZdMjBCICtyCJCq9LiqgqvjCYe570/Wg7AQArSq1VQ60Dd/CHN7mQ== - dependencies: - ast-types "^0.14.2" - lodash "^4.17.15" - react-docgen "^5.0.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + "@babel/helper-define-polyfill-provider" "^0.6.7" base-x@^3.0.8: - version "3.0.9" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + version "3.0.11" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.11.tgz#40d80e2a1aeacba29792ccc6c5354806421287ff" + integrity sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA== dependencies: safe-buffer "^5.0.1" @@ -6016,54 +3665,10 @@ base64-js@^1.0.2, base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -better-opn@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/better-opn/-/better-opn-3.0.2.tgz#f96f35deaaf8f34144a4102651babcf00d1d8817" - integrity sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ== - dependencies: - open "^8.0.4" - -big-integer@^1.6.44: - version "1.6.51" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" - integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bl@^4.0.3, bl@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" +baseline-browser-mapping@^2.9.0: + version "2.10.8" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.8.tgz#23d1cea1a85b181c2b8660b6cfe626dc2fb15630" + integrity sha512-PCLz/LXGBsNTErbtB6i5u4eLpHeMfi93aUv5duMmj6caNu6IphS4q6UevDnL36sZQv9lrP11dbPKGMaXPwMKfQ== boolbase@^1.0.0: version "1.0.0" @@ -6075,68 +3680,23 @@ bowser@^2.11.0: resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.12.1.tgz#f9ad78d7aebc472feb63dd9635e3ce2337e0e2c1" integrity sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw== -bplist-parser@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" - integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== - dependencies: - big-integer "^1.6.44" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2, braces@~3.0.2: +braces@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" -browser-assert@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/browser-assert/-/browser-assert-1.2.1.tgz#9aaa5a2a8c74685c2ae05bfe46efd606f068c200" - integrity sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ== - -browserify-zlib@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" - integrity sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ== +browserslist@^4.24.0, browserslist@^4.28.1, browserslist@^4.6.6: + version "4.28.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95" + integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA== dependencies: - pako "~0.2.0" - -browserslist@^4.14.5, browserslist@^4.21.9, browserslist@^4.22.1, browserslist@^4.6.6: - version "4.22.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619" - integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== - dependencies: - caniuse-lite "^1.0.30001541" - electron-to-chromium "^1.4.535" - node-releases "^2.0.13" - update-browserslist-db "^1.0.13" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.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== + baseline-browser-mapping "^2.9.0" + caniuse-lite "^1.0.30001759" + electron-to-chromium "^1.5.263" + node-releases "^2.0.27" + update-browserslist-db "^1.2.0" buffer-from@^1.0.0: version "1.1.2" @@ -6160,70 +3720,15 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -c8@^7.6.0: - version "7.14.0" - resolved "https://registry.yarnpkg.com/c8/-/c8-7.14.0.tgz#f368184c73b125a80565e9ab2396ff0be4d732f3" - integrity sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@istanbuljs/schema" "^0.1.3" - find-up "^5.0.0" - foreground-child "^2.0.0" - istanbul-lib-coverage "^3.2.0" - istanbul-lib-report "^3.0.0" - istanbul-reports "^3.1.4" - rimraf "^3.0.2" - test-exclude "^6.0.0" - v8-to-istanbul "^9.0.0" - yargs "^16.2.0" - yargs-parser "^20.2.9" - -call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== - dependencies: - function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camel-case@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" - integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== - dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" - -camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -caniuse-lite@^1.0.30001541: - version "1.0.30001562" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001562.tgz#9d16c5fd7e9c592c4cd5e304bc0f75b0008b2759" - integrity sha512-kfte3Hym//51EdX4239i+Rmp20EsLIYGdPkERegTgU19hQWCRhsRFGKHTliUlsry53tv17K7n077Kqa0WJU4ng== - -case-sensitive-paths-webpack-plugin@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" - integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== +caniuse-lite@^1.0.30001759: + version "1.0.30001779" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001779.tgz#75e4941d406928ba00c8d7a3ddda0b2cb90d7474" + integrity sha512-U5og2PN7V4DMgF50YPNtnZJGWVLFjjsN3zb6uMT5VGYIewieDj1upwfuVNXf4Kor+89c3iCRJnSzMD5LmTvsfA== chalk@^2.4.2: version "2.4.2" @@ -6234,7 +3739,7 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: +chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -6242,41 +3747,11 @@ chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - chrome-trace-event@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== -ci-info@^3.2.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" - integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== - class-variance-authority@^0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/class-variance-authority/-/class-variance-authority-0.7.1.tgz#4008a798a0e4553a781a57ac5177c9fb5d043787" @@ -6284,84 +3759,25 @@ class-variance-authority@^0.7.1: dependencies: clsx "^2.1.1" -clean-css@^5.2.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224" - integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww== - dependencies: - source-map "~0.6.0" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.5.0: - version "2.9.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.1.tgz#9c0b9dad69a6d47cbb4333c14319b060ed395a35" - integrity sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ== - -cli-table3@^0.6.1: - version "0.6.3" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" - integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== - dependencies: - string-width "^4.2.0" - optionalDependencies: - "@colors/colors" "1.5.0" - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - clone@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== -clsx@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.0.0.tgz#12658f3fd98fafe62075595a5c30e43d18f3d00b" - integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q== - clsx@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== -cmdk@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/cmdk/-/cmdk-0.2.0.tgz#53c52d56d8776c8bb8ced1055b5054100c388f7c" - integrity sha512-JQpKvEOb86SnvMZbYaFKYhvzFntWBeSZdyii0rZPhKJj9uwJBxu4DaVYDrRN7r3mPop56oPhRw+JYWTKs66TYw== +cmdk@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/cmdk/-/cmdk-1.1.1.tgz#b8524272699ccaa37aaf07f36850b376bf3d58e5" + integrity sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg== dependencies: - "@radix-ui/react-dialog" "1.0.0" - command-score "0.1.2" + "@radix-ui/react-compose-refs" "^1.1.1" + "@radix-ui/react-dialog" "^1.1.6" + "@radix-ui/react-id" "^1.1.0" + "@radix-ui/react-primitive" "^2.0.2" color-convert@^1.9.0: version "1.9.3" @@ -6387,191 +3803,43 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^2.0.10, colorette@^2.0.20: - version "2.0.20" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -command-score@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/command-score/-/command-score-0.1.2.tgz#b986ad7e8c0beba17552a56636c44ae38363d381" - integrity sha512-VtDvQpIJBvBatnONUsPzXYFVKQQAhuf3XTNOAsdBxCNO/QCtUUd8LSgjn0GVarBkCad6aJCZfXgrjYbl/KRr7w== - -commander@^2.19.0, commander@^2.20.0: +commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== - commander@^7.0.0, commander@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== -commander@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - -common-path-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" - integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concat-stream@^1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ== - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - convert-source-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -core-js-compat@^3.31.0, core-js-compat@^3.33.1: - version "3.33.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.2.tgz#3ea4563bfd015ad4e4b52442865b02c62aba5085" - integrity sha512-axfo+wxFVxnqf8RvxTzoAlzW4gRoacrHeoFlc9n0x50+7BEyZL/Rt3hicaED1/CEd7I6tPCPVUYcJwCMO5XUYw== +core-js-compat@^3.48.0: + version "3.48.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.48.0.tgz#7efbe1fc1cbad44008190462217cc5558adaeaa6" + integrity sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q== dependencies: - browserslist "^4.22.1" + browserslist "^4.28.1" -core-js-pure@^3.23.3: - version "3.33.2" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.33.2.tgz#644830db2507ef84d068a70980ccd99c275f5fa6" - integrity sha512-a8zeCdyVk7uF2elKIGz67AjcXOxjRbwOLz8SbklEso1V+2DoW4OkAMZN9S9GBgvZIaqQi/OemFX4OiSoQEmg1Q== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" - integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -cosmiconfig@^8.0.0, cosmiconfig@^8.2.0: - version "8.3.6" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" - integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== +cosmiconfig@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.1.tgz#df110631a8547b5d1a98915271986f06e3011379" + integrity sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ== dependencies: + env-paths "^2.2.1" import-fresh "^3.3.0" js-yaml "^4.1.0" parse-json "^5.2.0" - path-type "^4.0.0" crc-32@1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== -cross-spawn@^7.0.0, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - -css-loader@^6.7.1: - version "6.8.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.8.1.tgz#0f8f52699f60f5e679eab4ec0fcd68b8e8a50a88" - integrity sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g== - dependencies: - icss-utils "^5.1.0" - postcss "^8.4.21" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.3" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.2.0" - semver "^7.3.8" - css-select@^4.1.3: version "4.3.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" @@ -6592,9 +3860,9 @@ css-tree@^1.1.2, css-tree@^1.1.3: source-map "^0.6.1" css-what@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + version "6.2.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.2.2.tgz#cdcc8f9b6977719fdfbd1de7aec24abf756b9dea" + integrity sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA== cssesc@^3.0.0: version "3.0.0" @@ -6613,6 +3881,11 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== +csstype@^3.2.2: + version "3.2.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.2.3.tgz#ec48c0f3e993e50648c86da559e2610995cf989a" + integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ== + date-fns@^2.30.0: version "2.30.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" @@ -6620,187 +3893,35 @@ date-fns@^2.30.0: dependencies: "@babel/runtime" "^7.21.0" -debug@2.6.9, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.4: +debug@^4.1.0: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== - -deep-equal@^2.0.5: - version "2.2.3" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.3.tgz#af89dafb23a396c7da3e862abc0be27cf51d56e1" - integrity sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== +debug@^4.3.1, debug@^4.4.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.5" - es-get-iterator "^1.1.3" - get-intrinsic "^1.2.2" - is-arguments "^1.1.1" - is-array-buffer "^3.0.2" - is-date-object "^1.0.5" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - isarray "^2.0.5" - object-is "^1.1.5" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - side-channel "^1.0.4" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.13" - -deepmerge@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -default-browser-id@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c" - integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA== - dependencies: - bplist-parser "^0.2.0" - untildify "^4.0.0" - -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== - dependencies: - clone "^1.0.2" - -define-data-property@^1.0.1, define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== - dependencies: - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -defu@^6.1.2: - version "6.1.3" - resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.3.tgz#6d7f56bc61668e844f9f593ace66fd67ef1205fd" - integrity sha512-Vy2wmG3NTkmHNg/kzpuvHhkqeIx3ODWqasgCRbKtbXEN0G+HpEEv9BtJLp7ZG1CZloFaC41Ah3ZFbq7aqCqMeQ== - -del@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" - integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== - dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" - rimraf "^3.0.2" - slash "^3.0.0" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -dequal@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-indent@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" - integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== + ms "^2.1.3" detect-libc@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== +detect-libc@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.2.tgz#689c5dcdc1900ef5583a4cb9f6d7b473742074ad" + integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== + detect-node-es@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== -detect-package-manager@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/detect-package-manager/-/detect-package-manager-2.0.1.tgz#6b182e3ae5e1826752bfef1de9a7b828cffa50d8" - integrity sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A== - dependencies: - execa "^5.1.1" - -detect-port@^1.3.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.5.1.tgz#451ca9b6eaf20451acb0799b8ab40dff7718727b" - integrity sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ== - dependencies: - address "^1.0.1" - debug "4" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-accessibility-api@^0.5.9: - version "0.5.16" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" - integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== - -dom-converter@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== - dependencies: - utila "~0.4" - dom-serializer@^1.0.1: version "1.4.1" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" @@ -6815,14 +3936,14 @@ domelementtype@^2.0.1, domelementtype@^2.2.0: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== -domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.2.2, domhandler@^4.3.1: +domhandler@^4.2.0, domhandler@^4.2.2, domhandler@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== dependencies: domelementtype "^2.2.0" -domutils@^2.5.2, domutils@^2.8.0: +domutils@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== @@ -6831,100 +3952,26 @@ domutils@^2.5.2, domutils@^2.8.0: domelementtype "^2.2.0" domhandler "^4.2.0" -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -dotenv-expand@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-10.0.0.tgz#12605d00fb0af6d0a592e6558585784032e4ef37" - integrity sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A== - dotenv-expand@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== -dotenv@^16.0.0: - version "16.3.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" - integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== - dotenv@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-7.0.0.tgz#a2be3cd52736673206e8a85fb5210eea29628e7c" integrity sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g== -duplexify@^3.5.0, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -ejs@^3.1.8: - version "3.1.9" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" - integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== - dependencies: - jake "^10.8.5" - -electron-to-chromium@^1.4.535: - version "1.4.583" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.583.tgz#7b0ac4f36388da4b5485788adb92cd7dd0abffc4" - integrity sha512-93y1gcONABZ7uqYe/JWDVQP/Pj/sQSunF0HVAPdlg/pfBnOyBMLlQUxWvkqcljJg1+W6cjvPuYD+r1Th9Tn8mA== +electron-to-chromium@^1.5.263: + version "1.5.313" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.313.tgz#193e9ae2c2ab6915acb41e833068381e4ef0b3e4" + integrity sha512-QBMrTWEf00GXZmJyx2lbYD45jpI3TUFnNIzJ5BBc8piGUDwMPa1GV6HJWTZVvY/eiN3fSopl7NRbgGp9sZ9LTA== emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -endent@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/endent/-/endent-2.1.0.tgz#5aaba698fb569e5e18e69e1ff7a28ff35373cd88" - integrity sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w== - dependencies: - dedent "^0.7.0" - fast-json-parse "^1.0.3" - objectorarray "^1.0.5" - -enhanced-resolve@^5.15.0: - version "5.15.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - entities@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" @@ -6935,10 +3982,10 @@ entities@^3.0.1: resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== -envinfo@^7.7.3: - version "7.11.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.11.0.tgz#c3793f44284a55ff8c82faf1ffd91bc6478ea01f" - integrity sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg== +env-paths@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== error-ex@^1.3.1: version "1.3.2" @@ -6947,300 +3994,44 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -error-stack-parser@^2.0.6: - version "2.1.4" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" - integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== - dependencies: - stackframe "^1.3.4" - -es-get-iterator@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" - integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - is-arguments "^1.1.1" - is-map "^2.0.2" - is-set "^2.0.2" - is-string "^1.0.7" - isarray "^2.0.5" - stop-iteration-iterator "^1.0.0" - -es-module-lexer@^1.2.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz#41ea21b43908fe6a287ffcbe4300f790555331f5" - integrity sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w== - -esbuild-plugin-alias@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/esbuild-plugin-alias/-/esbuild-plugin-alias-0.2.1.tgz#45a86cb941e20e7c2bc68a2bea53562172494fcb" - integrity sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ== - -esbuild-register@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/esbuild-register/-/esbuild-register-3.5.0.tgz#449613fb29ab94325c722f560f800dd946dc8ea8" - integrity sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A== - dependencies: - debug "^4.3.4" - -esbuild@^0.18.0: - version "0.18.20" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" - integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== - optionalDependencies: - "@esbuild/android-arm" "0.18.20" - "@esbuild/android-arm64" "0.18.20" - "@esbuild/android-x64" "0.18.20" - "@esbuild/darwin-arm64" "0.18.20" - "@esbuild/darwin-x64" "0.18.20" - "@esbuild/freebsd-arm64" "0.18.20" - "@esbuild/freebsd-x64" "0.18.20" - "@esbuild/linux-arm" "0.18.20" - "@esbuild/linux-arm64" "0.18.20" - "@esbuild/linux-ia32" "0.18.20" - "@esbuild/linux-loong64" "0.18.20" - "@esbuild/linux-mips64el" "0.18.20" - "@esbuild/linux-ppc64" "0.18.20" - "@esbuild/linux-riscv64" "0.18.20" - "@esbuild/linux-s390x" "0.18.20" - "@esbuild/linux-x64" "0.18.20" - "@esbuild/netbsd-x64" "0.18.20" - "@esbuild/openbsd-x64" "0.18.20" - "@esbuild/sunos-x64" "0.18.20" - "@esbuild/win32-arm64" "0.18.20" - "@esbuild/win32-ia32" "0.18.20" - "@esbuild/win32-x64" "0.18.20" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== +escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -escodegen@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionalDependencies: - source-map "~0.6.1" - -eslint-scope@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -estree-to-babel@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/estree-to-babel/-/estree-to-babel-3.2.1.tgz#82e78315275c3ca74475fdc8ac1a5103c8a75bf5" - integrity sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg== - dependencies: - "@babel/traverse" "^7.1.6" - "@babel/types" "^7.2.0" - c8 "^7.6.0" - esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -events@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -execa@^5.0.0, execa@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== +fast-xml-builder@^1.0.0, fast-xml-builder@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fast-xml-builder/-/fast-xml-builder-1.1.3.tgz#283579acba94aecf998a7e1339bc7e037195abc1" + integrity sha512-1o60KoFw2+LWKQu3IdcfcFlGTW4dpqEWmjhYec6H82AYZU2TVBXep6tMl8Z1Y+wM+ZrzCwe3BZ9Vyd9N2rIvmg== dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" + path-expression-matcher "^1.1.3" -express@^4.17.3: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== +fast-xml-parser@5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-5.4.1.tgz#0c81b8ecfb3021e5ad83aa3df904af19a05bc601" + integrity sha512-BQ30U1mKkvXQXXkAGcuyUA/GA26oEB7NzOtsxCDtyu62sjGw5QraKFhx2Em3WQNjPw9PG6MQ9yuIIgkSDfGu5A== dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.1" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" + fast-xml-builder "^1.0.0" + strnum "^2.1.2" -extend@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extract-zip@^1.6.6: - 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== +fast-xml-parser@^5.3.6: + version "5.5.5" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-5.5.5.tgz#cadbcb992d6ac3f7e643d459506a8e1dd8adf5f2" + integrity sha512-NLY+V5NNbdmiEszx9n14mZBseJTC50bRq1VHsaxOmR72JDuZt+5J1Co+dC/4JPnyq+WrIHNM69r0sqf7BMb3Mg== dependencies: - concat-stream "^1.6.2" - debug "^2.6.9" - mkdirp "^0.5.4" - yauzl "^2.10.0" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.2.9: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-parse@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/fast-json-parse/-/fast-json-parse-1.0.3.tgz#43e5c61ee4efa9265633046b770fb682a7577c4d" - integrity sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw== - -fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-xml-parser@4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz#86dbf3f18edf8739326447bcaac31b4ae7f6514f" - integrity sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw== - dependencies: - strnum "^1.0.5" - -fast-xml-parser@^4.4.1: - version "4.5.3" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz#c54d6b35aa0f23dc1ea60b6c884340c006dc6efb" - integrity sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig== - dependencies: - strnum "^1.1.1" - -fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - dependencies: - reusify "^1.0.4" - -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== - dependencies: - bser "2.1.1" - -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-retry@^5.0.2: - version "5.0.6" - resolved "https://registry.yarnpkg.com/fetch-retry/-/fetch-retry-5.0.6.tgz#17d0bc90423405b7a88b74355bf364acd2a7fa56" - integrity sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ== - -file-system-cache@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/file-system-cache/-/file-system-cache-2.3.0.tgz#201feaf4c8cd97b9d0d608e96861bb6005f46fe6" - integrity sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ== - dependencies: - fs-extra "11.1.1" - ramda "0.29.0" - -filelist@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" - integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== - dependencies: - minimatch "^5.0.1" + fast-xml-builder "^1.1.3" + path-expression-matcher "^1.1.3" + strnum "^2.1.2" fill-range@^7.0.1: version "7.0.1" @@ -7249,383 +4040,43 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -find-cache-dir@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - -find-cache-dir@^3.0.0, find-cache-dir@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-cache-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-4.0.0.tgz#a30ee0448f81a3990708f6453633c733e2f6eec2" - integrity sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg== - dependencies: - common-path-prefix "^3.0.0" - pkg-dir "^7.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -find-up@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" - integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== - dependencies: - locate-path "^7.1.0" - path-exists "^5.0.0" - -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== - dependencies: - flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" - -flatted@^3.2.9: - version "3.2.9" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== - -flow-parser@0.*: - version "0.221.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.221.0.tgz#e11d7b7d19fb4ce08c3e54461476af4111a62fd0" - integrity sha512-i+GzdLcKYy5bxhx1N+FIcR1bTqssuVWTJcuytMhwqLAxifz46g4BSNicWXGrtzT0HibJUBIzZOYA3FveJucTPg== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -foreground-child@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" - integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^3.0.2" - -foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - -fork-ts-checker-webpack-plugin@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-8.0.0.tgz#dae45dfe7298aa5d553e2580096ced79b6179504" - integrity sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg== - dependencies: - "@babel/code-frame" "^7.16.7" - chalk "^4.1.2" - chokidar "^3.5.3" - cosmiconfig "^7.0.1" - deepmerge "^4.2.2" - fs-extra "^10.0.0" - memfs "^3.4.1" - minimatch "^3.0.4" - node-abort-controller "^3.0.1" - schema-utils "^3.1.1" - semver "^7.3.5" - tapable "^2.2.1" - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@11.1.1, fs-extra@^11.1.0: - version "11.1.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" - integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs-monkey@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.5.tgz#fe450175f0db0d7ea758102e1d84096acb925788" - integrity sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@^2.3.2, fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== - dependencies: - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" +get-east-asian-width@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz#ce7008fe345edcf5497a6f557cfa54bc318a9ce7" + integrity sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA== get-nonce@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== -get-npm-tarball-url@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/get-npm-tarball-url/-/get-npm-tarball-url-2.1.0.tgz#cbd6bb25884622bc3191c761466c93ac83343213" - integrity sha512-ro+DiMu5DXgRBabqXupW38h7WPZ9+Ad8UjwhvsmmN8w1sU7ab0nzAXvVZ4kqYg57OrqomRtJvepX5/xvFKNtjA== - -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - get-port@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw== -get-port@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" - integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -giget@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/giget/-/giget-1.1.3.tgz#574ed901031eafa732347a7990d84bfa6484c51a" - integrity sha512-zHuCeqtfgqgDwvXlR84UNgnJDuUHQcNI5OqWqFxxuk2BshuKbYhJWdxBsEo4PvKqoGh23lUAIvBNpChMLv7/9Q== - dependencies: - colorette "^2.0.20" - defu "^6.1.2" - https-proxy-agent "^7.0.2" - mri "^1.2.0" - node-fetch-native "^1.4.0" - pathe "^1.1.1" - tar "^6.2.0" - -github-slugger@^1.0.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" - integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - -glob@^10.0.0: - version "10.3.10" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" - -glob@^7.1.3, glob@^7.1.4: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - globals@^13.2.0: - version "13.23.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" - integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" -globby@^11.0.1, globby@^11.0.2: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: - 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== - graphql@15.8.0: version "15.8.0" resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.8.0.tgz#33410e96b012fa3bdb1091cc99a94769db212b38" integrity sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw== -gunzip-maybe@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz#b913564ae3be0eda6f3de36464837a9cd94b98ac" - integrity sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw== - dependencies: - browserify-zlib "^0.1.4" - is-deflate "^1.0.0" - is-gzip "^1.0.0" - peek-stream "^1.1.0" - pumpify "^1.3.3" - through2 "^2.0.3" - -handlebars@^4.7.7: - version "4.7.8" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" - integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.2" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - -has-bigints@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -7636,104 +4087,21 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== - dependencies: - get-intrinsic "^1.2.2" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" -he@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -html-entities@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061" - integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -html-minifier-terser@^6.0.2: - version "6.1.0" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" - integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== - dependencies: - camel-case "^4.1.2" - clean-css "^5.2.2" - commander "^8.3.0" - he "^1.2.0" - param-case "^3.0.4" - relateurl "^0.2.7" - terser "^5.10.0" - -html-tags@^3.1.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" - integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== - -html-webpack-plugin@^5.5.0: - version "5.5.3" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz#72270f4a78e222b5825b296e5e3e1328ad525a3e" - integrity sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg== - dependencies: - "@types/html-minifier-terser" "^6.0.0" - html-minifier-terser "^6.0.2" - lodash "^4.17.21" - pretty-error "^4.0.0" - tapable "^2.0.0" - htmlnano@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/htmlnano/-/htmlnano-2.1.0.tgz#67b31b3cd3fad23f0b610ca628fdb48382209c3c" - integrity sha512-jVGRE0Ep9byMBKEu0Vxgl8dhXYOUk0iNQ2pjsG+BcRB0u0oDF5A9p/iBGMg/PGKYUyMD0OAGu8dVT5Lzj8S58g== + version "2.1.5" + resolved "https://registry.yarnpkg.com/htmlnano/-/htmlnano-2.1.5.tgz#2105ac184699fc19c9d1665b3401502bb6200817" + integrity sha512-IXffzXq1beGQN2rsr03aIPK/rVU1jR2uwHymlAIEf97Tl5WdpG50IsQ5nWGvSGQJ+x6U7S6yac9rRiFgAg4/xQ== dependencies: - cosmiconfig "^8.0.0" + "@types/relateurl" "^0.2.33" + cosmiconfig "^9.0.0" posthtml "^0.16.5" - timsort "^0.3.0" - -htmlparser2@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" htmlparser2@^7.1.1: version "7.2.0" @@ -7745,50 +4113,6 @@ htmlparser2@^7.1.1: domutils "^2.8.0" entities "^3.0.1" -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -https-proxy-agent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b" - integrity sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg== - dependencies: - agent-base "5" - debug "4" - -https-proxy-agent@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz#e2645b846b90e96c6e6f347fb5b2e41f1590b09b" - integrity sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA== - dependencies: - agent-base "^7.0.2" - debug "4" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-utils@^5.0.0, icss-utils@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" - integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== - idb@5.0.6: version "5.0.6" resolved "https://registry.yarnpkg.com/idb/-/idb-5.0.6.tgz#8c94624f5a8a026abe3bef3c7166a5febd1cadc1" @@ -7799,17 +4123,12 @@ ieee754@^1.1.13, ieee754@^1.1.4: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - immer@9.0.6: version "9.0.6" resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.6.tgz#7a96bf2674d06c8143e327cbf73539388ddf1a73" integrity sha512-G95ivKpy+EvVAnAab4fVa4YGYn24J1SpEktnJX7JJ45Bd7xqME/SCplFzYFmTbrkwZbQ4xJK1xMTUYBkN6pWsQ== -import-fresh@^3.2.1, import-fresh@^3.3.0: +import-fresh@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -7817,132 +4136,17 @@ import-fresh@^3.2.1, import-fresh@^3.3.0: parent-module "^1.0.0" resolve-from "^4.0.0" -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -internal-slot@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" - integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== - dependencies: - get-intrinsic "^1.2.2" - hasown "^2.0.0" - side-channel "^1.0.4" - -invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -ip@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105" - integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-absolute-url@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" - integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== - -is-arguments@^1.0.4, is-arguments@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== +is-core-module@^2.16.1: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== dependencies: - has-bigints "^1.0.1" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-callable@^1.1.3: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-core-module@^2.13.0: - version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== - dependencies: - hasown "^2.0.0" - -is-date-object@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-deflate@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-deflate/-/is-deflate-1.0.0.tgz#c862901c3c161fb09dac7cdc7e784f80e98f2f14" - integrity sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ== - -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + hasown "^2.0.2" is-extglob@^2.1.1: version "2.1.1" @@ -7954,207 +4158,29 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: +is-glob@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" -is-gzip@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-gzip/-/is-gzip-1.0.0.tgz#6ca8b07b99c77998025900e555ced8ed80879a83" - integrity sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ== - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - is-json@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-json/-/is-json-2.0.1.tgz#6be166d144828a131d686891b983df62c39491ff" integrity sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA== -is-map@^2.0.1, is-map@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== - -is-nan@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" - integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -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== - -is-plain-object@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-set@^2.0.1, is-set@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.10, is-typed-array@^1.1.3: - version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== - dependencies: - which-typed-array "^1.1.11" - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== - -is-weakset@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@^1.0.0, isarray@~1.0.0: +isarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" - integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== - -istanbul-lib-instrument@^5.0.4: - version "5.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" - integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" - -istanbul-lib-report@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" - integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^4.0.0" - supports-color "^7.1.0" - -istanbul-reports@^3.1.4: - version "3.1.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jackspeak@^2, jackspeak@^2.3.5: +jackspeak@^2: version "2.3.6" resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== @@ -8163,83 +4189,10 @@ jackspeak@^2, jackspeak@^2.3.5: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" -jake@^10.8.5: - version "10.8.7" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" - integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== - dependencies: - async "^3.2.3" - chalk "^4.0.2" - filelist "^1.0.4" - minimatch "^3.1.2" - -jest-haste-map@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" - integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== - dependencies: - "@jest/types" "^29.6.3" - "@types/graceful-fs" "^4.1.3" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - jest-worker "^29.7.0" - micromatch "^4.0.4" - walker "^1.0.8" - optionalDependencies: - fsevents "^2.3.2" - -jest-mock@^27.0.6: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" - integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== - dependencies: - "@jest/types" "^27.5.1" - "@types/node" "*" - -jest-regex-util@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" - integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== - -jest-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" - integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-worker@^27.4.5: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest-worker@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" - integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== - dependencies: - "@types/node" "*" - jest-util "^29.7.0" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jiti@^1.18.2: - version "1.21.0" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" - integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== +jiti@^2.5.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.6.1.tgz#178ef2fc9a1a594248c20627cd820187a4d78d92" + integrity sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ== js-cookie@^3.0.5: version "3.0.5" @@ -8251,14 +4204,6 @@ js-cookie@^3.0.5: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -8266,174 +4211,99 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jscodeshift@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.14.0.tgz#7542e6715d6d2e8bde0b4e883f0ccea358b46881" - integrity sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA== - dependencies: - "@babel/core" "^7.13.16" - "@babel/parser" "^7.13.16" - "@babel/plugin-proposal-class-properties" "^7.13.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8" - "@babel/plugin-proposal-optional-chaining" "^7.13.12" - "@babel/plugin-transform-modules-commonjs" "^7.13.8" - "@babel/preset-flow" "^7.13.13" - "@babel/preset-typescript" "^7.13.0" - "@babel/register" "^7.13.16" - babel-core "^7.0.0-bridge.0" - chalk "^4.1.2" - flow-parser "0.*" - graceful-fs "^4.2.4" - micromatch "^4.0.4" - neo-async "^2.5.0" - node-dir "^0.1.17" - recast "^0.21.0" - temp "^0.8.4" - write-file-atomic "^2.3.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsesc@^3.0.2, jsesc@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: +json-parse-even-better-errors@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json5@^2.1.2, json5@^2.2.0, json5@^2.2.1, json5@^2.2.3: +json5@^2.2.0, json5@^2.2.1, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -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" +lightningcss-android-arm64@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz#f033885116dfefd9c6f54787523e3514b61e1968" + integrity sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg== -keyv@^4.5.3: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" +lightningcss-darwin-arm64@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz#50b71871b01c8199584b649e292547faea7af9b5" + integrity sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ== -kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +lightningcss-darwin-x64@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz#35f3e97332d130b9ca181e11b568ded6aebc6d5e" + integrity sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w== -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +lightningcss-freebsd-x64@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz#9777a76472b64ed6ff94342ad64c7bafd794a575" + integrity sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig== -lazy-universal-dotenv@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/lazy-universal-dotenv/-/lazy-universal-dotenv-4.0.0.tgz#0b220c264e89a042a37181a4928cdd298af73422" - integrity sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg== - dependencies: - app-root-dir "^1.0.2" - dotenv "^16.0.0" - dotenv-expand "^10.0.0" +lightningcss-linux-arm-gnueabihf@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz#13ae652e1ab73b9135d7b7da172f666c410ad53d" + integrity sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw== -"legacy-swc-helpers@npm:@swc/helpers@=0.4.14": - version "0.4.14" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74" - integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw== - dependencies: - tslib "^2.4.0" +lightningcss-linux-arm64-gnu@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz#417858795a94592f680123a1b1f9da8a0e1ef335" + integrity sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ== -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== +lightningcss-linux-arm64-musl@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz#6be36692e810b718040802fd809623cffe732133" + integrity sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg== -lightningcss-darwin-arm64@1.22.1: - version "1.22.1" - resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.22.1.tgz#c03c042335fd7e9e1f45c977b39ff6886b8b064f" - integrity sha512-ldvElu+R0QimNTjsKpaZkUv3zf+uefzLy/R1R19jtgOfSRM+zjUCUgDhfEDRmVqJtMwYsdhMI2aJtJChPC6Osg== +lightningcss-linux-x64-gnu@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz#0b7803af4eb21cfd38dd39fe2abbb53c7dd091f6" + integrity sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA== -lightningcss-darwin-x64@1.22.1: - version "1.22.1" - resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.22.1.tgz#cdd380006a176b7faea83d1d642d9c5d65620f74" - integrity sha512-5p2rnlVTv6Gpw4PlTLq925nTVh+HFh4MpegX8dPDYJae+NFVjQ67gY7O6iHIzQjLipDiYejFF0yHrhjU3XgLBQ== +lightningcss-linux-x64-musl@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz#88dc8ba865ddddb1ac5ef04b0f161804418c163b" + integrity sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg== -lightningcss-freebsd-x64@1.22.1: - version "1.22.1" - resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.22.1.tgz#dd1b19308e3b0f24b6f79da10fd3975e5e02ebda" - integrity sha512-1FaBtcFrZqB2hkFbAxY//Pnp8koThvyB6AhjbdVqKD4/pu13Rl91fKt2N9qyeQPUt3xy7ORUvSO+dPk3J6EjXg== +lightningcss-win32-arm64-msvc@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz#4f30ba3fa5e925f5b79f945e8cc0d176c3b1ab38" + integrity sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw== -lightningcss-linux-arm-gnueabihf@1.22.1: - version "1.22.1" - resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.22.1.tgz#134cf9b41abd44ec53d8bae02c9f6e4f257eb617" - integrity sha512-6rub98tYGfE5I5j0BP8t/2d4BZyu1S7Iz9vUkm0H26snAFHYxLfj3RbQn0xHHIePSetjLnhcg3QlfwUAkD/FYg== - -lightningcss-linux-arm64-gnu@1.22.1: - version "1.22.1" - resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.22.1.tgz#33800723fb3d782c71cc131cf38ca678a0e9d1fa" - integrity sha512-nYO5qGtb/1kkTZu3FeTiM+2B2TAb7m2DkLCTgQIs2bk2o9aEs7I96fwySKcoHWQAiQDGR9sMux9vkV4KQXqPaQ== - -lightningcss-linux-arm64-musl@1.22.1: - version "1.22.1" - resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.22.1.tgz#cff86acaa98a0245add5a333098befc894802137" - integrity sha512-MCV6RuRpzXbunvzwY644iz8cw4oQxvW7oer9xPkdadYqlEyiJJ6wl7FyJOH7Q6ZYH4yjGAUCvxDBxPbnDu9ZVg== - -lightningcss-linux-x64-gnu@1.22.1: - version "1.22.1" - resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.22.1.tgz#3f68602228b49d661db0692548e061456b603ca2" - integrity sha512-RjNgpdM20VUXgV7us/VmlO3Vn2ZRiDnc3/bUxCVvySZWPiVPprpqW/QDWuzkGa+NCUf6saAM5CLsZLSxncXJwg== - -lightningcss-linux-x64-musl@1.22.1: - version "1.22.1" - resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.22.1.tgz#e713e56798f8a50df3e3f285ef102191a01ef951" - integrity sha512-ZgO4C7Rd6Hv/5MnyY2KxOYmIlzk4rplVolDt3NbkNR8DndnyX0Q5IR4acJWNTBICQ21j3zySzKbcJaiJpk/4YA== - -lightningcss-win32-x64-msvc@1.22.1: - version "1.22.1" - resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.22.1.tgz#48b141554bf05cc4338f064b6892dd5dd16185ef" - integrity sha512-4pozV4eyD0MDET41ZLHAeBo+H04Nm2UEYIk5w/ts40231dRFV7E0cjwbnZvSoc1DXFgecAhiC0L16ruv/ZDCpg== +lightningcss-win32-x64-msvc@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz#141aa5605645064928902bb4af045fa7d9f4220a" + integrity sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q== lightningcss@^1.16.1: - version "1.22.1" - resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.22.1.tgz#8108ddecb2e859032bdd99908abd2b37515b1750" - integrity sha512-Fy45PhibiNXkm0cK5FJCbfO8Y6jUpD/YcHf/BtuI+jvYYqSXKF4muk61jjE8YxCR9y+hDYIWSzHTc+bwhDE6rQ== + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.32.0.tgz#b85aae96486dcb1bf49a7c8571221273f4f1e4a9" + integrity sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ== dependencies: - detect-libc "^1.0.3" + detect-libc "^2.0.3" optionalDependencies: - lightningcss-darwin-arm64 "1.22.1" - lightningcss-darwin-x64 "1.22.1" - lightningcss-freebsd-x64 "1.22.1" - lightningcss-linux-arm-gnueabihf "1.22.1" - lightningcss-linux-arm64-gnu "1.22.1" - lightningcss-linux-arm64-musl "1.22.1" - lightningcss-linux-x64-gnu "1.22.1" - lightningcss-linux-x64-musl "1.22.1" - lightningcss-win32-x64-msvc "1.22.1" + lightningcss-android-arm64 "1.32.0" + lightningcss-darwin-arm64 "1.32.0" + lightningcss-darwin-x64 "1.32.0" + lightningcss-freebsd-x64 "1.32.0" + lightningcss-linux-arm-gnueabihf "1.32.0" + lightningcss-linux-arm64-gnu "1.32.0" + lightningcss-linux-arm64-musl "1.32.0" + lightningcss-linux-x64-gnu "1.32.0" + lightningcss-linux-x64-musl "1.32.0" + lightningcss-win32-arm64-msvc "1.32.0" + lightningcss-win32-x64-msvc "1.32.0" lines-and-columns@^1.1.6: version "1.2.4" @@ -8458,81 +4328,23 @@ lmdb@2.5.2: "@lmdb/lmdb-linux-x64" "2.5.2" "@lmdb/lmdb-win32-x64" "2.5.2" -loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== - -loader-utils@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" - integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -locate-path@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" - integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== - dependencies: - p-locate "^6.0.0" - lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== -lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21: +lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: +loose-envify@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -8540,126 +4352,17 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -"lru-cache@^9.1.1 || ^10.0.0": - version "10.0.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.2.tgz#34504678cc3266b09b8dfd6fab4e1515258271b7" - integrity sha512-Yj9mA8fPiVgOUpByoTZO5pNrcl5Yk37FcSHsUINpAsaBIEZIuqcCclDZJCVxqQShDsmYX8QG63svJiTbOATZwg== - dependencies: - semver "^7.3.5" - -lucide-react@^0.468.0: - version "0.468.0" - resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.468.0.tgz#830c1bfd905575ddd23b832baa420c87db166910" - integrity sha512-6koYRhnM2N0GGZIdXzSeiNwguv1gt/FAjZOiPl76roBi3xKEXa4WmfpxgQwTTL4KipXjefrnf3oV4IsYhi4JFA== - -lz-string@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" - integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== - -make-dir@^2.0.0, make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-dir@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" - integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== - dependencies: - semver "^7.5.3" - -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - -map-or-similar@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/map-or-similar/-/map-or-similar-1.5.0.tgz#6de2653174adfb5d9edc33c69d3e92a1b76faf08" - integrity sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg== - -markdown-to-jsx@^7.1.8: - version "7.3.2" - resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.3.2.tgz#f286b4d112dad3028acc1e77dfe1f653b347e131" - integrity sha512-B+28F5ucp83aQm+OxNrPkS8z0tMKaeHiy0lHJs3LqCyDQFtWuenaIrkaVTgAm1pf1AU85LXltva86hlaT17i8Q== - -mdast-util-definitions@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz#c5c1a84db799173b4dcf7643cda999e440c24db2" - integrity sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ== - dependencies: - unist-util-visit "^2.0.0" - -mdast-util-to-string@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz#27055500103f51637bd07d01da01eb1967a43527" - integrity sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A== +lucide-react@^0.577.0: + version "0.577.0" + resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.577.0.tgz#8ae89edd8415f99c6319a38b40d9c513f6fa5062" + integrity sha512-4LjoFv2eEPwYDPg/CUdBJQSDfPyzXCRrVW1X7jrx/trgxnxkHFjnVZINbzvzxjN70dxychOfg+FTYwBiS3pQ5A== mdn-data@2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -memfs@^3.4.1, memfs@^3.4.12: - version "3.6.0" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" - integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== - dependencies: - fs-monkey "^1.0.4" - -memoizerific@^1.11.3: - version "1.11.3" - resolved "https://registry.yarnpkg.com/memoizerific/-/memoizerific-1.11.3.tgz#7c87a4646444c32d75438570905f2dbd1b1a805a" - integrity sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog== - dependencies: - map-or-similar "^1.5.0" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: +micromatch@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -8667,122 +4370,12 @@ micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: braces "^3.0.2" picomatch "^2.3.1" -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@^2.1.25, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mime@^2.0.3: - version "2.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" - integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - -minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^9.0.1: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.2.5, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass@^3.0.0: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": - version "7.0.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== - -minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp-classic@^0.5.2: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - -mkdirp@^0.5.4: - 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" - -mkdirp@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mri@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" - integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3: +ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -8802,39 +4395,16 @@ msgpackr-extract@^3.0.2: "@msgpackr-extract/msgpackr-extract-win32-x64" "3.0.2" msgpackr@^1.5.4: - version "1.10.1" - resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.10.1.tgz#51953bb4ce4f3494f0c4af3f484f01cfbb306555" - integrity sha512-r5VRLv9qouXuLiIBrLpl2d5ZvPt8svdQTl5/vMvE4nzDMyEX4sgW5yWhuBBj5UmgwOTWj8CIdSXn5sAfsHAWIQ== + version "1.11.9" + resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.11.9.tgz#1aa99ed379a066374ac82b62f8ad70723bbd3a59" + integrity sha512-FkoAAyyA6HM8wL882EcEyFZ9s7hVADSwG9xrVx3dxxNQAtgADTrJoEWivID82Iv1zWDsv/OtbrrcZAzGzOMdNw== optionalDependencies: msgpackr-extract "^3.0.2" -nanoid@^3.3.6: - version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -node-abort-controller@^3.0.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" - integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== +nanoid@^3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== node-addon-api@^4.3.0: version "4.3.0" @@ -8846,25 +4416,6 @@ node-addon-api@^7.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.0.0.tgz#8136add2f510997b3b94814f4af1cce0b0e3962e" integrity sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA== -node-dir@^0.1.10, node-dir@^0.1.17: - version "0.1.17" - resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" - integrity sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg== - dependencies: - minimatch "^3.0.2" - -node-fetch-native@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.4.1.tgz#5a336e55b4e1b1e72b9927da09fecd2b374c9be5" - integrity sha512-NsXBU0UgBxo2rQLOeWNZqS3fvflWePMECr8CoSWoSTqCqGbVVsvl9vZu1HfQicYN0g5piV9Gh8RTEvo/uP752w== - -node-fetch@^2.0.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - node-gyp-build-optional-packages@5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.3.tgz#92a89d400352c44ad3975010368072b41ad66c17" @@ -8875,37 +4426,10 @@ node-gyp-build-optional-packages@5.0.7: resolved "https://registry.yarnpkg.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz#5d2632bbde0ab2f6e22f1bbac2199b07244ae0b3" integrity sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w== -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - -normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" +node-releases@^2.0.27: + version "2.0.36" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.36.tgz#99fd6552aaeda9e17c4713b57a63964a2e325e9d" + integrity sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA== nth-check@^2.0.1: version "2.1.1" @@ -8919,172 +4443,10 @@ nullthrows@^1.1.1: resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== -object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-inspect@^1.9.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - -object-is@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -objectorarray@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/objectorarray/-/objectorarray-1.0.5.tgz#2c05248bbefabd8f43ad13b41085951aac5e68a5" - integrity sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg== - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -open@^8.0.4, open@^8.4.0: - version "8.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - ordered-binary@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/ordered-binary/-/ordered-binary-1.4.1.tgz#205cb6efd6c27fa0ef4eced994a023e081cdc911" - integrity sha512-9LtiGlPy982CsgxZvJGNNp2/NnrgEr6EAyN3iIEP3/8vd3YLgAZQHbQ75ZrkfBRGrNg37Dk3U6tuVb+B4Xfslg== - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-limit@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" - integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== - dependencies: - yocto-queue "^1.0.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-locate@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" - integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== - dependencies: - p-limit "^4.0.0" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -pako@~0.2.0: - version "0.2.9" - resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" - integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA== - -param-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" - integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" + version "1.6.1" + resolved "https://registry.yarnpkg.com/ordered-binary/-/ordered-binary-1.6.1.tgz#5ac240ea719d6a0e6d4f0485385d3f9cb1cd4432" + integrity sha512-QkCdPooczexPLiXIrbVOPYkR3VO3T6v2OyKRkR1Xbhpy7/LAVXwahnRCgRp78Oe/Ehf0C/HATAxfSr6eA1oX+w== parcel@2.8.3: version "2.8.3" @@ -9113,7 +4475,7 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-json@^5.0.0, parse-json@^5.2.0: +parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -9123,212 +4485,65 @@ parse-json@^5.0.0, parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -path-browserify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" - integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-exists@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" - integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-expression-matcher@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/path-expression-matcher/-/path-expression-matcher-1.1.3.tgz#8bf7c629dc1b114e42b633c071f06d14625b4e0d" + integrity sha512-qdVgY8KXmVdJZRSS1JdEPOKPdTiEK/pi0RkcT2sw1RhXxohdujUlJFPuS1TSkevZ9vzd3ZlL7ULl1MHGTApKzQ== path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== - dependencies: - lru-cache "^9.1.1 || ^10.0.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pathe@^1.1.1: +picocolors@^1.0.0, picocolors@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a" - integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== -peek-stream@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/peek-stream/-/peek-stream-1.1.3.tgz#3b35d84b7ccbbd262fff31dc10da56856ead6d67" - integrity sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA== - dependencies: - buffer-from "^1.0.0" - duplexify "^3.5.0" - through2 "^2.0.3" - -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== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.0, picomatch@^2.3.1: +picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pirates@^4.0.4, pirates@^4.0.5: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== +postcss-loader@^8.2.1: + version "8.2.1" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-8.2.1.tgz#c3d9b35498af906fe6c25eb62583c06f619f92fc" + integrity sha512-k98jtRzthjj3f76MYTs9JTpRqV1RaaMhEU0Lpw9OTmQZQdppg4B30VZ74BojuBHt3F4KyubHJoXCMUeM8Bqeow== dependencies: - find-up "^3.0.0" + cosmiconfig "^9.0.0" + jiti "^2.5.1" + semver "^7.6.2" -pkg-dir@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== +postcss-nesting@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-14.0.0.tgz#5400139a425da2ca8228bc406e67e0e8d344b137" + integrity sha512-YGFOfVrjxYfeGTS5XctP1WCI5hu8Lr9SmntjfRC+iX5hCihEO+QZl9Ra+pkjqkgoVdDKvb2JccpElcowhZtzpw== dependencies: - find-up "^4.0.0" + "@csstools/selector-resolve-nested" "^4.0.0" + "@csstools/selector-specificity" "^6.0.0" + postcss-selector-parser "^7.1.1" -pkg-dir@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-5.0.0.tgz#a02d6aebe6ba133a928f74aec20bafdfe6b8e760" - integrity sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA== - dependencies: - find-up "^5.0.0" - -pkg-dir@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-7.0.0.tgz#8f0c08d6df4476756c5ff29b3282d0bab7517d11" - integrity sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA== - dependencies: - find-up "^6.3.0" - -polished@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/polished/-/polished-4.2.2.tgz#2529bb7c3198945373c52e34618c8fe7b1aa84d1" - integrity sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ== - dependencies: - "@babel/runtime" "^7.17.8" - -postcss-loader@^7.3.3: - version "7.3.3" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.3.3.tgz#6da03e71a918ef49df1bb4be4c80401df8e249dd" - integrity sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA== - dependencies: - cosmiconfig "^8.2.0" - jiti "^1.18.2" - semver "^7.3.8" - -postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== - -postcss-modules-local-by-default@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz#b08eb4f083050708998ba2c6061b50c2870ca524" - integrity sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA== - dependencies: - icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== - dependencies: - postcss-selector-parser "^6.0.4" - -postcss-modules-values@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" - integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== - dependencies: - icss-utils "^5.0.0" - -postcss-nesting@^12.0.1: - version "12.0.1" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-12.0.1.tgz#abb76d15dfd59a9f7d03b4464f53b60a4d3795c4" - integrity sha512-6LCqCWP9pqwXw/njMvNK0hGY44Fxc4B2EsGbn6xDcxbNRzP8GYoxT7yabVVMLrX3quqOJ9hg2jYMsnkedOf8pA== - dependencies: - "@csstools/selector-specificity" "^3.0.0" - postcss-selector-parser "^6.0.13" - -postcss-selector-parser@^6.0.13, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: - version "6.0.13" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" - integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== +postcss-selector-parser@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz#e75d2e0d843f620e5df69076166f4e16f891cb9f" + integrity sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: +postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.4.21, postcss@^8.4.31: - version "8.4.31" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" - integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== +postcss@^8.5.8: + version "8.5.8" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.8.tgz#6230ecc8fb02e7a0f6982e53990937857e13f399" + integrity sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg== dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" + nanoid "^3.3.11" + picocolors "^1.1.1" + source-map-js "^1.2.1" posthtml-parser@^0.10.1: version "0.10.2" @@ -9352,298 +4567,46 @@ posthtml-render@^3.0.0: is-json "^2.0.1" posthtml@^0.16.4, posthtml@^0.16.5: - version "0.16.6" - resolved "https://registry.yarnpkg.com/posthtml/-/posthtml-0.16.6.tgz#e2fc407f67a64d2fa3567afe770409ffdadafe59" - integrity sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ== + version "0.16.7" + resolved "https://registry.yarnpkg.com/posthtml/-/posthtml-0.16.7.tgz#6010a59633c7190b38cbfee40562accbdb861464" + integrity sha512-7Hc+IvlQ7hlaIfQFZnxlRl0jnpWq2qwibORBhQYIb0QbNtuicc5ZxvKkVT71HJ4Py1wSZ/3VR1r8LfkCtoCzhw== dependencies: posthtml-parser "^0.11.0" posthtml-render "^3.0.0" -prettier@^2.8.0: - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - -pretty-error@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" - integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== - dependencies: - lodash "^4.17.20" - renderkid "^3.0.0" - -pretty-format@^27.0.2: - version "27.5.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== - dependencies: - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^17.0.1" - -pretty-hrtime@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" - integrity sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -progress@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -prompts@^2.4.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -prop-types@^15.7.2: - version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - property-expr@^2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.6.tgz#f77bc00d5928a6c748414ad12882e83f24aec1e8" integrity sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA== -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -proxy-from-env@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - 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: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -puppeteer-core@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-2.1.1.tgz#e9b3fbc1237b4f66e25999832229e9db3e0b90ed" - integrity sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w== - dependencies: - "@types/mime-types" "^2.1.0" - debug "^4.1.0" - extract-zip "^1.6.6" - https-proxy-agent "^4.0.0" - mime "^2.0.3" - mime-types "^2.1.25" - progress "^2.0.1" - proxy-from-env "^1.0.0" - rimraf "^2.6.1" - ws "^6.1.0" - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -qs@^6.10.0, qs@^6.11.2: - version "6.11.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== - dependencies: - side-channel "^1.0.4" - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -ramda@0.29.0: - version "0.29.0" - resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.29.0.tgz#fbbb67a740a754c8a4cbb41e2a6e0eb8507f55fb" - integrity sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -react-colorful@^5.1.2: - version "5.6.1" - resolved "https://registry.yarnpkg.com/react-colorful/-/react-colorful-5.6.1.tgz#7dc2aed2d7c72fac89694e834d179e32f3da563b" - integrity sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw== - -react-confetti@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/react-confetti/-/react-confetti-6.1.0.tgz#03dc4340d955acd10b174dbf301f374a06e29ce6" - integrity sha512-7Ypx4vz0+g8ECVxr88W9zhcQpbeujJAVqL14ZnXJ3I23mOI9/oBVTQ3dkJhUmB0D6XOtCZEM6N0Gm9PMngkORw== - dependencies: - tween-functions "^1.2.0" - react-day-picker@^8.9.1: - version "8.9.1" - resolved "https://registry.yarnpkg.com/react-day-picker/-/react-day-picker-8.9.1.tgz#62dcc2bc1282ac72d057266112d9c8558334e757" - integrity sha512-W0SPApKIsYq+XCtfGeMYDoU0KbsG3wfkYtlw8l+vZp6KoBXGOlhzBUp4tNx1XiwiOZwhfdGOlj7NGSCKGSlg5Q== + version "8.10.1" + resolved "https://registry.yarnpkg.com/react-day-picker/-/react-day-picker-8.10.1.tgz#4762ec298865919b93ec09ba69621580835b8e80" + integrity sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA== -react-docgen-typescript@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz#4611055e569edc071204aadb20e1c93e1ab1659c" - integrity sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg== - -react-docgen@^5.0.0: - version "5.4.3" - resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-5.4.3.tgz#7d297f73b977d0c7611402e5fc2a168acf332b26" - integrity sha512-xlLJyOlnfr8lLEEeaDZ+X2J/KJoe6Nr9AzxnkdQWush5hz2ZSu66w6iLMOScMmxoSHWpWMn+k3v5ZiyCfcWsOA== - dependencies: - "@babel/core" "^7.7.5" - "@babel/generator" "^7.12.11" - "@babel/runtime" "^7.7.6" - ast-types "^0.14.2" - commander "^2.19.0" - doctrine "^3.0.0" - estree-to-babel "^3.1.0" - neo-async "^2.6.1" - node-dir "^0.1.10" - strip-indent "^3.0.0" - -react-dom@^18: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== +react-dom@^18.3.1: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" + integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== dependencies: loose-envify "^1.1.0" - scheduler "^0.23.0" - -react-element-to-jsx-string@^15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/react-element-to-jsx-string/-/react-element-to-jsx-string-15.0.0.tgz#1cafd5b6ad41946ffc8755e254da3fc752a01ac6" - integrity sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ== - dependencies: - "@base2/pretty-print-object" "1.0.1" - is-plain-object "5.0.0" - react-is "18.1.0" + scheduler "^0.23.2" react-error-overlay@6.0.9: version "6.0.9" resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== -react-hook-form@^7.48.2: - version "7.48.2" - resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.48.2.tgz#01150354d2be61412ff56a030b62a119283b9935" - integrity sha512-H0T2InFQb1hX7qKtDIZmvpU1Xfn/bdahWBN1fH19gSe4bBEqTfmlr7H3XWTaVtiK4/tpPaI1F3355GPMZYge+A== - -react-inspector@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/react-inspector/-/react-inspector-6.0.2.tgz#aa3028803550cb6dbd7344816d5c80bf39d07e9d" - integrity sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ== - -react-is@18.1.0: - version "18.1.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.1.0.tgz#61aaed3096d30eacf2a2127118b5b41387d32a67" - integrity sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg== - -react-is@^16.13.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - -react-refresh@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" - integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== +react-hook-form@^7.71.2: + version "7.71.2" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.71.2.tgz#a5f1d2b855be9ecf1af6e74df9b80f54beae7e35" + integrity sha512-1CHvcDYzuRUNOflt4MOq3ZM46AronNJtQ1S7tnX6YN4y72qhgiUItpacZUAQ0TyWYci3yz1X+rXaSxiuEm86PA== react-refresh@^0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.9.0.tgz#71863337adc3e5c2f8a6bfddd12ae3bfe32aafbf" integrity sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ== -react-remove-scroll-bar@^2.3.3: - version "2.3.4" - resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz#53e272d7a5cb8242990c7f144c44d8bd8ab5afd9" - integrity sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A== - dependencies: - react-style-singleton "^2.2.1" - tslib "^2.0.0" - -react-remove-scroll-bar@^2.3.4: - version "2.3.5" - resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.5.tgz#cd2543b3ed7716c7c5b446342d21b0e0b303f47c" - integrity sha512-3cqjOqg6s0XbOjWvmasmqHch+RLxIEk2r/70rzGXuz3iIGQsQheEQyqYCBb5EECoD01Vo2SIbDqW4paLeLTASw== - dependencies: - react-style-singleton "^2.2.1" - tslib "^2.0.0" - react-remove-scroll-bar@^2.3.7: version "2.3.8" resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz#99c20f908ee467b385b68a3469b4a3e750012223" @@ -9652,39 +4615,6 @@ react-remove-scroll-bar@^2.3.7: react-style-singleton "^2.2.2" tslib "^2.0.0" -react-remove-scroll@2.5.4: - version "2.5.4" - resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.5.4.tgz#afe6491acabde26f628f844b67647645488d2ea0" - integrity sha512-xGVKJJr0SJGQVirVFAUZ2k1QLyO6m+2fy0l8Qawbp5Jgrv3DeLalrfMNBFSlmz5kriGGzsVBtGVnf4pTKIhhWA== - dependencies: - react-remove-scroll-bar "^2.3.3" - react-style-singleton "^2.2.1" - tslib "^2.1.0" - use-callback-ref "^1.3.0" - use-sidecar "^1.1.2" - -react-remove-scroll@2.5.5: - version "2.5.5" - resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz#1e31a1260df08887a8a0e46d09271b52b3a37e77" - integrity sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw== - dependencies: - react-remove-scroll-bar "^2.3.3" - react-style-singleton "^2.2.1" - tslib "^2.1.0" - use-callback-ref "^1.3.0" - use-sidecar "^1.1.2" - -react-remove-scroll@^2.5.7: - version "2.5.7" - resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz#15a1fd038e8497f65a695bf26a4a57970cac1ccb" - integrity sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA== - dependencies: - react-remove-scroll-bar "^2.3.4" - react-style-singleton "^2.2.1" - tslib "^2.1.0" - use-callback-ref "^1.3.0" - use-sidecar "^1.1.2" - react-remove-scroll@^2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.6.3.tgz#df02cde56d5f2731e058531f8ffd7f9adec91ac2" @@ -9696,14 +4626,16 @@ react-remove-scroll@^2.6.3: use-callback-ref "^1.3.3" use-sidecar "^1.1.3" -react-style-singleton@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.1.tgz#f99e420492b2d8f34d38308ff660b60d0b1205b4" - integrity sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g== +react-remove-scroll@^2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz#6442da56791117661978ae99cd29be9026fecca0" + integrity sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q== dependencies: - get-nonce "^1.0.0" - invariant "^2.2.4" - tslib "^2.0.0" + react-remove-scroll-bar "^2.3.7" + react-style-singleton "^2.2.3" + tslib "^2.1.0" + use-callback-ref "^1.3.3" + use-sidecar "^1.1.3" react-style-singleton@^2.2.2, react-style-singleton@^2.2.3: version "2.2.3" @@ -9713,82 +4645,13 @@ react-style-singleton@^2.2.2, react-style-singleton@^2.2.3: get-nonce "^1.0.0" tslib "^2.0.0" -react@^18: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== +react@^18.3.1: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" + integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== dependencies: loose-envify "^1.1.0" -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -readable-stream@^2.0.0, readable-stream@^2.2.2, readable-stream@~2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.1.1, readable-stream@^3.4.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -recast@^0.21.0: - version "0.21.5" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.21.5.tgz#e8cd22bb51bcd6130e54f87955d33a2b2e57b495" - integrity sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg== - dependencies: - ast-types "0.15.2" - esprima "~4.0.0" - source-map "~0.6.1" - tslib "^2.0.1" - -recast@^0.23.1: - version "0.23.4" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.4.tgz#ca1bac7bfd3011ea5a28dfecb5df678559fb1ddf" - integrity sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw== - dependencies: - assert "^2.0.0" - ast-types "^0.16.1" - esprima "~4.0.0" - source-map "~0.6.1" - tslib "^2.0.1" - regenerate-unicode-properties@^10.1.0: version "10.1.1" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" @@ -9796,6 +4659,13 @@ regenerate-unicode-properties@^10.1.0: dependencies: regenerate "^1.4.2" +regenerate-unicode-properties@^10.2.2: + version "10.2.2" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz#aa113812ba899b630658c7623466be71e1f86f66" + integrity sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g== + dependencies: + regenerate "^1.4.2" + regenerate@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" @@ -9806,27 +4676,6 @@ regenerator-runtime@^0.13.7: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== -regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== - -regenerator-transform@^0.15.2: - version "0.15.2" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" - integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== - dependencies: - "@babel/runtime" "^7.8.4" - -regexp.prototype.flags@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" - integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - set-function-name "^2.0.0" - regexpu-core@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" @@ -9839,6 +4688,30 @@ regexpu-core@^5.3.1: unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.1.0" +regexpu-core@^6.3.1: + version "6.4.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.4.0.tgz#3580ce0c4faedef599eccb146612436b62a176e5" + integrity sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.2.2" + regjsgen "^0.8.0" + regjsparser "^0.13.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.2.1" + +regjsgen@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" + integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== + +regjsparser@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.13.0.tgz#01f8351335cf7898d43686bc74d2dd71c847ecc0" + integrity sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q== + dependencies: + jsesc "~3.1.0" + regjsparser@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" @@ -9846,112 +4719,20 @@ regjsparser@^0.9.1: dependencies: jsesc "~0.5.0" -relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== - -remark-external-links@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/remark-external-links/-/remark-external-links-8.0.0.tgz#308de69482958b5d1cd3692bc9b725ce0240f345" - integrity sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA== - dependencies: - extend "^3.0.0" - is-absolute-url "^3.0.0" - mdast-util-definitions "^4.0.0" - space-separated-tokens "^1.0.0" - unist-util-visit "^2.0.0" - -remark-slug@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/remark-slug/-/remark-slug-6.1.0.tgz#0503268d5f0c4ecb1f33315c00465ccdd97923ce" - integrity sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ== - dependencies: - github-slugger "^1.0.0" - mdast-util-to-string "^1.0.0" - unist-util-visit "^2.0.0" - -renderkid@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" - integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== - dependencies: - css-select "^4.1.3" - dom-converter "^0.2.0" - htmlparser2 "^6.1.0" - lodash "^4.17.21" - strip-ansi "^6.0.1" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve@^1.10.0, resolve@^1.14.2: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== +resolve@^1.22.11: + version "1.22.11" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" + integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== dependencies: - is-core-module "^2.13.0" + is-core-module "^2.16.1" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^2.6.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rimraf@~2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - rxjs@^7.8.1: version "7.8.2" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" @@ -9959,185 +4740,44 @@ rxjs@^7.8.1: dependencies: tslib "^2.1.0" -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: +safe-buffer@^5.0.1: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sax@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.6.0.tgz#da59637629307b97e7c4cb28e080a7bc38560d5b" + integrity sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA== -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== +scheduler@^0.23.2: + version "0.23.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" + integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== dependencies: loose-envify "^1.1.0" -schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" - integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== - dependencies: - "@types/json-schema" "^7.0.9" - ajv "^8.9.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.1.0" - -"semver@2 || 3 || 4 || 5", semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: +semver@^5.7.0, semver@^5.7.1: version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: +semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" +semver@^7.6.2: + version "7.7.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a" + integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA== -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" +source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== -serialize-javascript@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" - integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== - dependencies: - randombytes "^2.1.0" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -set-function-length@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" - integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== - dependencies: - define-data-property "^1.1.1" - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -set-function-name@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== - dependencies: - define-data-property "^1.0.1" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -simple-update-notifier@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" - integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== - dependencies: - semver "^7.5.3" - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-support@^0.5.16, source-map-support@~0.5.20: +source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -10145,52 +4785,11 @@ source-map-support@^0.5.16, source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - -space-separated-tokens@^1.0.0: - version "1.1.5" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" - integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== - -spdx-correct@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" - integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.16" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" - integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - srcset@4: version "4.0.0" resolved "https://registry.yarnpkg.com/srcset/-/srcset-4.0.0.tgz#336816b665b14cd013ba545b6fe62357f86e65f4" @@ -10201,40 +4800,6 @@ stable@^0.1.8: resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== -stackframe@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" - integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -stop-iteration-iterator@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" - integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== - dependencies: - internal-slot "^1.0.4" - -store2@^2.14.2: - version "2.14.2" - resolved "https://registry.yarnpkg.com/store2/-/store2-2.14.2.tgz#56138d200f9fe5f582ad63bc2704dbc0e4a45068" - integrity sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w== - -storybook@^7.5.3: - version "7.5.3" - resolved "https://registry.yarnpkg.com/storybook/-/storybook-7.5.3.tgz#0003b072736b8b15c3b7205e9775d0c5ec898b4d" - integrity sha512-lkn9hcedNmSNCzbDIrky2LpZJqlpS7Fy1KpGBZmLY34g5Mb0+KnXaUqzY0dxsd7aFm8Oa7Du/emceMYNNL4DMA== - dependencies: - "@storybook/cli" "7.5.3" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -10244,37 +4809,13 @@ stream-shift@^1.0.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== +string-width@8.2.0, string-width@^4.1.0, string-width@^5.0.1, string-width@^5.1.2, string-width@^8: + version "8.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-8.2.0.tgz#bdb6a9bd6d7800db635adae96cdb0443fec56c42" + integrity sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw== dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string-width@^4, string-width@^4.1.0, string-width@^4.2.0, string-width@^5.0.1, string-width@^5.1.2: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" + get-east-asian-width "^1.5.0" + strip-ansi "^7.1.2" "strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" @@ -10283,44 +4824,22 @@ string_decoder@~1.1.1: dependencies: ansi-regex "^5.0.1" -strip-ansi@^6, strip-ansi@^6.0.0, strip-ansi@^6.0.1, strip-ansi@^7.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== +strip-ansi@^6.0.0, strip-ansi@^6.0.1, strip-ansi@^7, strip-ansi@^7.0.1, strip-ansi@^7.1.2, strip-ansi@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.2.0.tgz#d22a269522836a627af8d04b5c3fd2c7fa3e32e3" + integrity sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w== dependencies: - ansi-regex "^5.0.1" + ansi-regex "^6.2.2" -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strnum@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-2.2.0.tgz#8b582b637e4621f62ff714493e0ce30846f903a6" + integrity sha512-Y7Bj8XyJxnPAORMZj/xltsfo55uOiyHcU2tnAVzHUnSJR/KsEX+9RoDeXEnsXtl/CX4fAcrt64gZ13aGaWPeBg== -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - -strip-json-comments@^3.0.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strnum@^1.0.5, strnum@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.1.2.tgz#57bca4fbaa6f271081715dbc9ed7cee5493e28e4" - integrity sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA== - -style-loader@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.1.tgz#057dfa6b3d4d7c7064462830f9113ed417d38575" - integrity sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ== - -style-loader@^3.3.1: - version "3.3.3" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.3.tgz#bba8daac19930169c0c9c96706749a597ae3acff" - integrity sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw== +style-loader@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-4.0.0.tgz#0ea96e468f43c69600011e0589cb05c44f3b17a5" + integrity sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA== supports-color@^5.3.0: version "5.5.0" @@ -10336,184 +4855,54 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== svgo@^2.4.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" - integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== + version "2.8.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.2.tgz#8e99b7ba5ac9ed7e3a446063865f61e03223fe6b" + integrity sha512-TyzE4NVGLUFy+H/Uy4N6c3G0HEeprsVfge6Lmq+0FdQQ/zqoVYB62IsBZORsiL+o96s6ff/V6/3UQo/C0cgCAA== dependencies: - "@trysound/sax" "0.2.0" commander "^7.2.0" css-select "^4.1.3" css-tree "^1.1.3" csso "^4.2.0" picocolors "^1.0.0" + sax "^1.5.0" stable "^0.1.8" -swc-loader@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/swc-loader/-/swc-loader-0.2.3.tgz#6792f1c2e4c9ae9bf9b933b3e010210e270c186d" - integrity sha512-D1p6XXURfSPleZZA/Lipb3A8pZ17fP4NObZvFCDjK/OKljroqDpPmsBdTraWhVBqUNpcWBQY1imWdoPScRlQ7A== - -synchronous-promise@^2.0.15: - version "2.0.17" - resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.17.tgz#38901319632f946c982152586f2caf8ddc25c032" - integrity sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g== - -tailwind-merge@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-2.0.0.tgz#a0f3a8c874ebae5feec5595614d08245a5f88a39" - integrity sha512-WO8qghn9yhsldLSg80au+3/gY9E4hFxIvQ3qOmlpXnqpDKoMruKfi/56BbbMg6fHTQJ9QD3cc79PoWqlaQE4rw== - dependencies: - "@babel/runtime" "^7.23.1" +tailwind-merge@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-3.5.0.tgz#06502f4496ba15151445d97d916a26564d50d1ca" + integrity sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A== tailwindcss-animate@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz#318b692c4c42676cc9e67b19b78775742388bef4" integrity sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA== -tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -tar-fs@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - -tar-stream@^2.1.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" - integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -telejson@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/telejson/-/telejson-7.2.0.tgz#3994f6c9a8f8d7f2dba9be2c7c5bbb447e876f32" - integrity sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ== - dependencies: - memoizerific "^1.11.3" - -temp-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" - integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== - -temp@^0.8.4: - version "0.8.4" - resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.4.tgz#8c97a33a4770072e0a05f919396c7665a7dd59f2" - integrity sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg== - dependencies: - rimraf "~2.6.2" - -tempy@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tempy/-/tempy-1.0.1.tgz#30fe901fd869cfb36ee2bd999805aa72fbb035de" - integrity sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w== - dependencies: - del "^6.0.0" - is-stream "^2.0.0" - temp-dir "^2.0.0" - type-fest "^0.16.0" - unique-string "^2.0.0" - term-size@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== -terser-webpack-plugin@^5.3.1, terser-webpack-plugin@^5.3.7: - version "5.3.9" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" - integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.17" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.16.8" - -terser@^5.10.0, terser@^5.16.8, terser@^5.2.0: - version "5.24.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.24.0.tgz#4ae50302977bca4831ccc7b4fef63a3c04228364" - integrity sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw== +terser@^5.2.0: + version "5.46.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.46.1.tgz#40e4b1e35d5f13130f82793a8b3eeb7ec3a92eee" + integrity sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ== dependencies: "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" + acorn "^8.15.0" commander "^2.20.0" source-map-support "~0.5.20" -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -through2@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -timsort@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" - integrity sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A== - tiny-case@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-case/-/tiny-case-1.0.3.tgz#d980d66bc72b5d5a9ca86fb7c9ffdb9c898ddd03" integrity sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q== -tiny-invariant@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" - integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== - -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -10526,104 +4915,36 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -tocbot@^4.20.1: - version "4.22.0" - resolved "https://registry.yarnpkg.com/tocbot/-/tocbot-4.22.0.tgz#10bb34c011c1baa93d2a0e91d25d820856ba4103" - integrity sha512-YHCs00HCNiHxUhksloa36fTfMEXEWV+vdPn3ARQfmj2u3PcUYIjJkfc+ABUfCF9Eb+LSy/QzuLl256fbsRnpHQ== - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - toposort@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" integrity sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg== -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -ts-dedent@^2.0.0, ts-dedent@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-2.2.0.tgz#39e4bd297cd036292ae2394eb3412be63f563bb5" - integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== - -tslib@^1.13.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: +tslib@^2.0.0, tslib@^2.1.0: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== -tslib@^2.5.0, tslib@^2.6.2: +tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.2: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== -tween-functions@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/tween-functions/-/tween-functions-1.2.0.tgz#1ae3a50e7c60bb3def774eac707acbca73bbc3ff" - integrity sha512-PZBtLYcCLtEcjL14Fzb1gSxPBeL7nWvGhO5ZFPGqziCcr8uvHp0NDmdjBchp6KHL+tExcg0m3NISmKxhU394dA== - -type-fest@^0.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" - integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== - type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type-fest@^2.19.0, type-fest@~2.19: +type-fest@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== - -uglify-js@^3.1.4: - version "3.17.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" - integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== - ulid@^2.3.0: version "2.4.0" resolved "https://registry.yarnpkg.com/ulid/-/ulid-2.4.0.tgz#9d9ee22e63f4390ee1bcd9ad09fca39d8ae0afed" integrity sha512-fIRiVTJNcSRmXKPZtGzFQv9WRrZ3M9eoptl/teFJvjOzmpU+/K/JH6HZ8deBfb5vMEpicJcLn7JmvdknlMq7Zg== -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" @@ -10642,6 +4963,11 @@ unicode-match-property-value-ecmascript@^2.1.0: resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== +unicode-match-property-value-ecmascript@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz#65a7adfad8574c219890e219285ce4c64ed67eaa" + integrity sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg== + unicode-property-aliases-ecmascript@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" @@ -10652,89 +4978,13 @@ uniqolor@1.1.1: resolved "https://registry.yarnpkg.com/uniqolor/-/uniqolor-1.1.1.tgz#ef35e41d930d31b90228a18d82dd151b8106b2f3" integrity sha512-HUwezlXCwm5bzsEXW7AP7ybezH13uWENRgYT+3dOdhJPvpYucSqvIGckMiLn+Uy2j0NVf3fPp43uZ4aun3t4Ww== -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== +update-browserslist-db@^1.2.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz#64d76db58713136acbeb4c49114366cc6cc2e80d" + integrity sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w== dependencies: - crypto-random-string "^2.0.0" - -unist-util-is@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" - integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== - -unist-util-visit-parents@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" - integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^4.0.0" - -unist-util-visit@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" - integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^4.0.0" - unist-util-visit-parents "^3.0.0" - -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" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -unplugin@^1.3.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.5.0.tgz#8938ae84defe62afc7757df9ca05d27160f6c20c" - integrity sha512-9ZdRwbh/4gcm1JTOkp9lAkIDrtOyOxgHmY7cjuwI8L/2RTikMcVG25GsZwNAgRuap3iDw2jeq7eoqtAsz5rW3A== - dependencies: - acorn "^8.10.0" - chokidar "^3.5.3" - webpack-sources "^3.2.3" - webpack-virtual-modules "^0.5.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== - -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -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" - -use-callback-ref@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.0.tgz#772199899b9c9a50526fedc4993fc7fa1f7e32d5" - integrity sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w== - dependencies: - tslib "^2.0.0" + escalade "^3.2.0" + picocolors "^1.1.1" use-callback-ref@^1.3.3: version "1.3.3" @@ -10743,21 +4993,6 @@ use-callback-ref@^1.3.3: dependencies: tslib "^2.0.0" -use-resize-observer@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/use-resize-observer/-/use-resize-observer-9.1.0.tgz#14735235cf3268569c1ea468f8a90c5789fc5c6c" - integrity sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow== - dependencies: - "@juggle/resize-observer" "^3.3.1" - -use-sidecar@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.2.tgz#2f43126ba2d7d7e117aa5855e5d8f0276dfe73c2" - integrity sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw== - dependencies: - detect-node-es "^1.1.0" - tslib "^2.0.0" - use-sidecar@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.3.tgz#10e7fd897d130b896e2c546c63a5e8233d00efdb" @@ -10771,218 +5006,31 @@ use-sync-external-store@^1.5.0: resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz#55122e2a3edd2a6c106174c27485e0fd59bcfca0" integrity sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A== -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: +util-deprecate@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util@^0.12.4, util@^0.12.5: - version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - which-typed-array "^1.1.2" - -utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== - utility-types@^3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b" - integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + version "3.11.0" + resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.11.0.tgz#607c40edb4f258915e901ea7995607fdf319424c" + integrity sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw== uuid@^11.0.0: version "11.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.1.0.tgz#9549028be1753bb934fc96e2bca09bb4105ae912" integrity sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A== -uuid@^9.0.0, uuid@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - v8-compile-cache@^2.0.0: version "2.4.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz#cdada8bec61e15865f05d097c5f4fd30e94dc128" integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== -v8-to-istanbul@^9.0.0: - version "9.1.3" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz#ea456604101cd18005ac2cae3cdd1aa058a6306b" - integrity sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg== - dependencies: - "@jridgewell/trace-mapping" "^0.3.12" - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^2.0.0" - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -walker@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== - dependencies: - makeerror "1.0.12" - -watchpack@^2.2.0, watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" - weak-lru-cache@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz#fdbb6741f36bae9540d12f480ce8254060dccd19" integrity sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw== -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -webpack-dev-middleware@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz#6bbc257ec83ae15522de7a62f995630efde7cc3d" - integrity sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ== - dependencies: - colorette "^2.0.10" - memfs "^3.4.12" - mime-types "^2.1.31" - range-parser "^1.2.1" - schema-utils "^4.0.0" - -webpack-hot-middleware@^2.25.1: - version "2.25.4" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.25.4.tgz#d8bc9e9cb664fc3105c8e83d2b9ed436bee4e193" - integrity sha512-IRmTspuHM06aZh98OhBJtqLpeWFM8FXJS5UYpKYxCJzyFoyWj1w6VGFfomZU7OPA55dMLrQK0pRT1eQ3PACr4w== - dependencies: - ansi-html-community "0.0.8" - html-entities "^2.1.0" - strip-ansi "^6.0.0" - -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack-virtual-modules@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz#362f14738a56dae107937ab98ea7062e8bdd3b6c" - integrity sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw== - -webpack@5: - version "5.89.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.89.0.tgz#56b8bf9a34356e93a6625770006490bf3a7f32dc" - integrity sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.0" - "@webassemblyjs/ast" "^1.11.5" - "@webassemblyjs/wasm-edit" "^1.11.5" - "@webassemblyjs/wasm-parser" "^1.11.5" - acorn "^8.7.1" - acorn-import-assertions "^1.9.0" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.15.0" - es-module-lexer "^1.2.1" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.2.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.7" - watchpack "^2.4.0" - webpack-sources "^3.2.3" - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== - dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" - -which-typed-array@^1.1.11, which-typed-array@^1.1.13, which-typed-array@^1.1.2: - version "1.1.13" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" - integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.4" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== - "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -10992,15 +5040,6 @@ wordwrap@^1.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" @@ -11010,117 +5049,27 @@ wrap-ansi@^8.1.0: string-width "^5.0.1" strip-ansi "^7.0.1" -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@^2.3.0: - version "2.4.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write-file-atomic@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -ws@^6.1.0: - version "6.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" - integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== - dependencies: - async-limiter "~1.0.0" - -ws@^8.2.3: - version "8.14.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" - integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== - -xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - xxhash-wasm@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz#752398c131a4dd407b5132ba62ad372029be6f79" integrity sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA== -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@^20.2.2, yargs-parser@^20.2.9: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -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" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -yocto-queue@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" - integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== - -yup@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/yup/-/yup-1.3.2.tgz#afffc458f1513ed386e6aaf4bcaa4e67a9e270dc" - integrity sha512-6KCM971iQtJ+/KUaHdrhVr2LDkfhBtFPRnsG1P8F4q3uUVQ2RfEM9xekpha9aA4GXWJevjM10eDcPQ1FfWlmaQ== +yup@^1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/yup/-/yup-1.7.1.tgz#4c47c6bb367df08d4bc597f8c4c4f5fc4277f6ab" + integrity sha512-GKHFX2nXul2/4Dtfxhozv701jLQHdf6J34YDh2cEkpqoo8le5Mg6/LrdseVLrFarmFygZTlfIhHx/QKfb/QWXw== dependencies: property-expr "^2.0.5" tiny-case "^1.0.3" toposort "^2.0.2" type-fest "^2.19.0" -zod@^3.22.4: - version "3.22.4" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" - integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== +zod@^4.3.6: + version "4.3.6" + resolved "https://registry.yarnpkg.com/zod/-/zod-4.3.6.tgz#89c56e0aa7d2b05107d894412227087885ab112a" + integrity sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg== diff --git a/postcss.config.js b/postcss.config.js index bb031f4871..a400348bc2 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,25 +1,8 @@ -const or = (...args) => { - const variableNames = args.filter(x => x.startsWith('--')) - const initialValue = args.filter(x => !x.startsWith('--'))[0] - - return variableNames.reduceRight((memo, current) => { - if (memo && current) { - return `var(${current.trim()}, ${memo})` - } else if (current) { - return `var(${current.trim()})` - } else if (memo) { - return memo - } - }, initialValue) -} - - module.exports = { plugins: { 'autoprefixer': {}, 'postcss-import-ext-glob': {}, 'postcss-import': {}, - 'postcss-functions': { functions: { or } }, 'tailwindcss/nesting': 'postcss-nested', tailwindcss: {}, ...(process.env.NODE_ENV === 'production' ? { cssnano: {} } : {}) diff --git a/resources/css/codemirror.lsradix.css b/resources/css/codemirror.lsradix.css index bcf7ec07b4..9913a73a65 100644 --- a/resources/css/codemirror.lsradix.css +++ b/resources/css/codemirror.lsradix.css @@ -8,24 +8,24 @@ lsradix color palette http://ethanschoonover.com/lsradix/img/lsradix-palette.png */ -.lsradix.base03 { color: or(--lx-gray-01, #002b36); } -.dark .lsradix.base03 { color: or(--lx-gray-02, #002b36); } -.lsradix.base02 { color: or(--lx-gray-02, #073642); } -.dark .lsradix.base02 { color: or(--lx-gray-01, #073642); } -.lsradix.base01 { color: or(--lx-gray-03, #586e75); } -.lsradix.base00 { color: or(--lx-gray-04, #657b83); } -.lsradix.base0 { color: or(--lx-gray-09, #839496); } -.lsradix.base1 { color: or(--lx-gray-10, #93a1a1); } -.lsradix.base2 { color: or(--lx-gray-11, #eee8d5); } -.lsradix.base3 { color: or(--lx-gray-11, #fdf6e3); } -.lsradix.solar-yellow { color: or(--rx-yellow-11, #b58900); } -.lsradix.solar-orange { color: or(--rx-orange-11, #cb4b16); } -.lsradix.solar-red { color: or(--rx-red-11, #dc322f); } -.lsradix.solar-magenta { color: or(--rx-pink-11, #d33682); } -.lsradix.solar-violet { color: or(--rx-purple-11, #6c71c4); } -.lsradix.solar-blue { color: or(--rx-blue-11, #268bd2); } -.lsradix.solar-cyan { color: or(--rx-sky-11, #2aa198); } -.lsradix.solar-green { color: or(--rx-grass-11, #859900); } +.lsradix.base03 { color: var(--lx-gray-01, #002b36); } +.dark .lsradix.base03 { color: var(--lx-gray-02, #002b36); } +.lsradix.base02 { color: var(--lx-gray-02, #073642); } +.dark .lsradix.base02 { color: var(--lx-gray-01, #073642); } +.lsradix.base01 { color: var(--lx-gray-03, #586e75); } +.lsradix.base00 { color: var(--lx-gray-04, #657b83); } +.lsradix.base0 { color: var(--lx-gray-09, #839496); } +.lsradix.base1 { color: var(--lx-gray-10, #93a1a1); } +.lsradix.base2 { color: var(--lx-gray-11, #eee8d5); } +.lsradix.base3 { color: var(--lx-gray-11, #fdf6e3); } +.lsradix.solar-yellow { color: var(--rx-yellow-11, #b58900); } +.lsradix.solar-orange { color: var(--rx-orange-11, #cb4b16); } +.lsradix.solar-red { color: var(--rx-red-11, #dc322f); } +.lsradix.solar-magenta { color: var(--rx-pink-11, #d33682); } +.lsradix.solar-violet { color: var(--rx-purple-11, #6c71c4); } +.lsradix.solar-blue { color: var(--rx-blue-11, #268bd2); } +.lsradix.solar-cyan { color: var(--rx-sky-11, #2aa198); } +.lsradix.solar-green { color: var(--rx-grass-11, #859900); } /* Color scheme for code-mirror */ @@ -52,42 +52,42 @@ http://ethanschoonover.com/lsradix/img/lsradix-palette.png text-shadow: none; } -.cm-s-lsradix .cm-header { color: or(--lx-gray-03, #586e75); } -.cm-s-lsradix .cm-quote { color: or(--lx-gray-10, #93a1a1); } +.cm-s-lsradix .cm-header { color: var(--lx-gray-03, #586e75); } +.cm-s-lsradix .cm-quote { color: var(--lx-gray-10, #93a1a1); } -.cm-s-lsradix .cm-keyword { color: or(--rx-orange-11, #cb4b16); } -.cm-s-lsradix .cm-atom { color: or(--rx-pink-11, #d33682); } -.cm-s-lsradix .cm-number { color: or(--rx-pink-11, #d33682); } -.cm-s-lsradix .cm-def { color: or(--rx-sky-11, #2aa198); } +.cm-s-lsradix .cm-keyword { color: var(--rx-orange-11, #cb4b16); } +.cm-s-lsradix .cm-atom { color: var(--rx-pink-11, #d33682); } +.cm-s-lsradix .cm-number { color: var(--rx-pink-11, #d33682); } +.cm-s-lsradix .cm-def { color: var(--rx-sky-11, #2aa198); } -/* .cm-s-lsradix .cm-variable { color: or(--lx-gray-09, #839496); } */ -.cm-s-lsradix .cm-variable { color: or(--lx-gray-12, #839496); } -.cm-s-lsradix .cm-variable-2 { color: or(--rx-yellow-11, #b58900); } -.cm-s-lsradix .cm-variable-3, .cm-s-lsradix .cm-type { color: or(--rx-purple-11, #6c71c4); } +/* .cm-s-lsradix .cm-variable { color: var(--lx-gray-09, #839496); } */ +.cm-s-lsradix .cm-variable { color: var(--lx-gray-12, #839496); } +.cm-s-lsradix .cm-variable-2 { color: var(--rx-yellow-11, #b58900); } +.cm-s-lsradix .cm-variable-3, .cm-s-lsradix .cm-type { color: var(--rx-purple-11, #6c71c4); } -.cm-s-lsradix .cm-property { color: or(--rx-sky-11, #2aa198); } -.cm-s-lsradix .cm-operator { color: or(--rx-purple-11, #6c71c4); } +.cm-s-lsradix .cm-property { color: var(--rx-sky-11, #2aa198); } +.cm-s-lsradix .cm-operator { color: var(--rx-purple-11, #6c71c4); } -.cm-s-lsradix .cm-comment { color: or(--lx-gray-10, #586e75); font-style:italic; } +.cm-s-lsradix .cm-comment { color: var(--lx-gray-10, #586e75); font-style:italic; } -.cm-s-lsradix .cm-string { color: or(--rx-grass-11, #859900); } -.cm-s-lsradix .cm-string-2 { color: or(--rx-yellow-11, #b58900); } +.cm-s-lsradix .cm-string { color: var(--rx-grass-11, #859900); } +.cm-s-lsradix .cm-string-2 { color: var(--rx-yellow-11, #b58900); } -.cm-s-lsradix .cm-meta { color: or(--rx-grass-11, #859900); } -.cm-s-lsradix .cm-qualifier { color: or(--rx-yellow-11, #b58900); } -.cm-s-lsradix .cm-builtin { color: or(--rx-pink-11, #d33682); } -.cm-s-lsradix .cm-bracket { color: or(--rx-orange-11, #cb4b16); } -.cm-s-lsradix .CodeMirror-matchingbracket { color: or(--rx-grass-11, #859900); } -.cm-s-lsradix .CodeMirror-nonmatchingbracket { color: or(--rx-red-11, #dc322f); } -.cm-s-lsradix .cm-tag { color: or(--lx-gray-10, #93a1a1); } -.cm-s-lsradix .cm-attribute { color: or(--rx-sky-11, #2aa198); } +.cm-s-lsradix .cm-meta { color: var(--rx-grass-11, #859900); } +.cm-s-lsradix .cm-qualifier { color: var(--rx-yellow-11, #b58900); } +.cm-s-lsradix .cm-builtin { color: var(--rx-pink-11, #d33682); } +.cm-s-lsradix .cm-bracket { color: var(--rx-orange-11, #cb4b16); } +.cm-s-lsradix .CodeMirror-matchingbracket { color: var(--rx-grass-11, #859900); } +.cm-s-lsradix .CodeMirror-nonmatchingbracket { color: var(--rx-red-11, #dc322f); } +.cm-s-lsradix .cm-tag { color: var(--lx-gray-10, #93a1a1); } +.cm-s-lsradix .cm-attribute { color: var(--rx-sky-11, #2aa198); } .cm-s-lsradix .cm-hr { color: transparent; - border-top: 1px solid or(--lx-gray-03, #586e75); + border-top: 1px solid var(--lx-gray-03, #586e75); display: block; } -.cm-s-lsradix .cm-link { color: or(--lx-gray-10, #93a1a1); cursor: pointer; } -.cm-s-lsradix .cm-special { color: or(--rx-purple-11, #6c71c4); } +.cm-s-lsradix .cm-link { color: var(--lx-gray-10, #93a1a1); cursor: pointer; } +.cm-s-lsradix .cm-special { color: var(--rx-purple-11, #6c71c4); } .cm-s-lsradix .cm-em { color: #999; text-decoration: underline; @@ -95,18 +95,18 @@ http://ethanschoonover.com/lsradix/img/lsradix-palette.png } .cm-s-lsradix .cm-error, .cm-s-lsradix .cm-invalidchar { - /* color: or(--lx-gray-03, #586e75); */ - color: or(--lx-gray-10, #586e75); - border-bottom: 1px dotted or(--rx-red-11, #dc322f); + /* color: var(--lx-gray-03, #586e75); */ + color: var(--lx-gray-10, #586e75); + border-bottom: 1px dotted var(--rx-red-11, #dc322f); } -.cm-s-lsradix.cm-s-dark div.CodeMirror-selected { background: or(--lx-gray-06, rgb(4 38 47 / 99%)); } -.cm-s-lsradix.cm-s-dark.CodeMirror ::selection { background: or(--lx-gray-06, rgb(4 38 47 / 99%)); } -.cm-s-lsradix.cm-s-dark .CodeMirror-line::-moz-selection, .cm-s-dark .CodeMirror-line > span::-moz-selection, .cm-s-dark .CodeMirror-line > span > span::-moz-selection { background: or(--lx-gray-06, rgb(4 38 47 / 99%)); } +.cm-s-lsradix.cm-s-dark div.CodeMirror-selected { background: var(--lx-gray-06, rgb(4 38 47 / 99%)); } +.cm-s-lsradix.cm-s-dark.CodeMirror ::selection { background: var(--lx-gray-06, rgb(4 38 47 / 99%)); } +.cm-s-lsradix.cm-s-dark .CodeMirror-line::-moz-selection, .cm-s-dark .CodeMirror-line > span::-moz-selection, .cm-s-dark .CodeMirror-line > span > span::-moz-selection { background: var(--lx-gray-06, rgb(4 38 47 / 99%)); } -.cm-s-lsradix.cm-s-light div.CodeMirror-selected { background: or(--lx-gray-06, #eee8d5); } -.cm-s-lsradix.cm-s-light .CodeMirror-line::selection, .cm-s-light .CodeMirror-line > span::selection, .cm-s-light .CodeMirror-line > span > span::selection { background: or(--lx-gray-06, #eee8d5); } -.cm-s-lsradix.cm-s-light .CodeMirror-line::-moz-selection, .cm-s-light .CodeMirror-line > span::-moz-selection, .cm-s-light .CodeMirror-line > span > span::-moz-selection { background: or(--lx-gray-06, #eee8d5); } +.cm-s-lsradix.cm-s-light div.CodeMirror-selected { background: var(--lx-gray-06, #eee8d5); } +.cm-s-lsradix.cm-s-light .CodeMirror-line::selection, .cm-s-light .CodeMirror-line > span::selection, .cm-s-light .CodeMirror-line > span > span::selection { background: var(--lx-gray-06, #eee8d5); } +.cm-s-lsradix.cm-s-light .CodeMirror-line::-moz-selection, .cm-s-light .CodeMirror-line > span::-moz-selection, .cm-s-light .CodeMirror-line > span > span::-moz-selection { background: var(--lx-gray-06, #eee8d5); } /* Editor styling */ @@ -140,12 +140,12 @@ http://ethanschoonover.com/lsradix/img/lsradix-palette.png .cm-s-lsradix .CodeMirror-linenumber { padding: 0 5px; } -.cm-s-lsradix .CodeMirror-guttermarker-subtle { color: or(--lx-gray-03, #586e75); } +.cm-s-lsradix .CodeMirror-guttermarker-subtle { color: var(--lx-gray-03, #586e75); } .cm-s-lsradix.cm-s-dark .CodeMirror-guttermarker { color: #ddd; } -.cm-s-lsradix.cm-s-light .CodeMirror-guttermarker { color: or(--rx-orange-11, #cb4b16); } +.cm-s-lsradix.cm-s-light .CodeMirror-guttermarker { color: var(--rx-orange-11, #cb4b16); } .cm-s-lsradix .CodeMirror-gutter .CodeMirror-gutter-text { - color: or(--lx-gray-03, #586e75); + color: var(--lx-gray-03, #586e75); } /* Cursor */ @@ -154,8 +154,8 @@ http://ethanschoonover.com/lsradix/img/lsradix-palette.png /* Fat cursor */ .cm-s-lsradix.cm-s-light.cm-fat-cursor .CodeMirror-cursor { background: #77ee77; } .cm-s-lsradix.cm-s-light .cm-animate-fat-cursor { background-color: #77ee77; } -.cm-s-lsradix.cm-s-dark.cm-fat-cursor .CodeMirror-cursor { background: or(--lx-gray-03, #586e75); } -.cm-s-lsradix.cm-s-dark .cm-animate-fat-cursor { background-color: or(--lx-gray-03, #586e75); } +.cm-s-lsradix.cm-s-dark.cm-fat-cursor .CodeMirror-cursor { background: var(--lx-gray-03, #586e75); } +.cm-s-lsradix.cm-s-dark .cm-animate-fat-cursor { background-color: var(--lx-gray-03, #586e75); } /* Active line */ .cm-s-lsradix.cm-s-dark .CodeMirror-activeline-background { diff --git a/resources/fonts/tabler-icons-extension.woff2 b/resources/css/fonts/tabler-icons-extension.woff2 similarity index 100% rename from resources/fonts/tabler-icons-extension.woff2 rename to resources/css/fonts/tabler-icons-extension.woff2 diff --git a/resources/css/fonts/tabler-icons.eot b/resources/css/fonts/tabler-icons.eot new file mode 100644 index 0000000000..3f44ca4213 Binary files /dev/null and b/resources/css/fonts/tabler-icons.eot differ diff --git a/resources/css/fonts/tabler-icons.ttf b/resources/css/fonts/tabler-icons.ttf new file mode 100644 index 0000000000..7855ecca54 Binary files /dev/null and b/resources/css/fonts/tabler-icons.ttf differ diff --git a/resources/css/fonts/tabler-icons.woff b/resources/css/fonts/tabler-icons.woff new file mode 100644 index 0000000000..6c91dbf231 Binary files /dev/null and b/resources/css/fonts/tabler-icons.woff differ diff --git a/resources/css/fonts/tabler-icons.woff2 b/resources/css/fonts/tabler-icons.woff2 new file mode 100644 index 0000000000..84e96250a5 Binary files /dev/null and b/resources/css/fonts/tabler-icons.woff2 differ diff --git a/resources/css/shui.css b/resources/css/shui.css index d24745e02a..c5cfce6047 100644 --- a/resources/css/shui.css +++ b/resources/css/shui.css @@ -452,11 +452,11 @@ kbd.shui-shortcut-key-pressed, } .ui__list-item-highlighted-span { - background-color: or(--lx-accent-06, --color-level-4); + background-color: var(--lx-accent-06, var(--color-level-4)); } .dark .ui__list-item-highlighted-span { - background-color: or(--lx-accent-08-alpha, --color-level-4); + background-color: var(--lx-accent-08-alpha, var(--color-level-4)); } .ui__dropdown-menu-content, div[data-radix-menu-content], diff --git a/resources/css/tabler-extension.css b/resources/css/tabler-extension.css index 29f938784b..26544b8702 100644 --- a/resources/css/tabler-extension.css +++ b/resources/css/tabler-extension.css @@ -8,7 +8,7 @@ @font-face { font-family: 'tabler-icons-extension'; - src: url('../fonts/tabler-icons-extension.woff2?mxgthk') format('woff2'); + src: url('./fonts/tabler-icons-extension.woff2?mxgthk') format('woff2'); font-style: normal; font-weight: 400; } diff --git a/resources/css/tabler-icons.min.css b/resources/css/tabler-icons.min.css new file mode 100644 index 0000000000..bb260598a8 --- /dev/null +++ b/resources/css/tabler-icons.min.css @@ -0,0 +1,4 @@ +/*! + * Tabler Icons 2.47.0 by tabler - https://tabler.io + * License - https://github.com/tabler/tabler-icons/blob/master/LICENSE + */@font-face{font-family:"tabler-icons";font-style:normal;font-weight:400;src:url("./fonts/tabler-icons.eot?v2.47.0");src:url("./fonts/tabler-icons.eot?#iefix-v2.47.0") format("embedded-opentype"),url("./fonts/tabler-icons.woff2?v2.47.0") format("woff2"),url("./fonts/tabler-icons.woff?") format("woff"),url("./fonts/tabler-icons.ttf?v2.47.0") format("truetype")}.ti{font-family:"tabler-icons" !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ti-12-hours:before{content:"\fc53"}.ti-123:before{content:"\f554"}.ti-24-hours:before{content:"\f5e7"}.ti-2fa:before{content:"\eca0"}.ti-360:before{content:"\f62f"}.ti-360-view:before{content:"\f566"}.ti-3d-cube-sphere:before{content:"\ecd7"}.ti-3d-cube-sphere-off:before{content:"\f3b5"}.ti-3d-rotate:before{content:"\f020"}.ti-a-b:before{content:"\ec36"}.ti-a-b-2:before{content:"\f25f"}.ti-a-b-off:before{content:"\f0a6"}.ti-abacus:before{content:"\f05c"}.ti-abacus-off:before{content:"\f3b6"}.ti-abc:before{content:"\f567"}.ti-access-point:before{content:"\ed1b"}.ti-access-point-off:before{content:"\ed1a"}.ti-accessible:before{content:"\eba9"}.ti-accessible-off:before{content:"\f0a7"}.ti-accessible-off-filled:before{content:"\f6ea"}.ti-activity:before{content:"\ed23"}.ti-activity-heartbeat:before{content:"\f0db"}.ti-ad:before{content:"\ea02"}.ti-ad-2:before{content:"\ef1f"}.ti-ad-circle:before{content:"\f79e"}.ti-ad-circle-filled:before{content:"\f7d3"}.ti-ad-circle-off:before{content:"\f79d"}.ti-ad-filled:before{content:"\f6eb"}.ti-ad-off:before{content:"\f3b7"}.ti-address-book:before{content:"\f021"}.ti-address-book-off:before{content:"\f3b8"}.ti-adjustments:before{content:"\ea03"}.ti-adjustments-alt:before{content:"\ec37"}.ti-adjustments-bolt:before{content:"\f7fb"}.ti-adjustments-cancel:before{content:"\f7fc"}.ti-adjustments-check:before{content:"\f7fd"}.ti-adjustments-code:before{content:"\f7fe"}.ti-adjustments-cog:before{content:"\f7ff"}.ti-adjustments-dollar:before{content:"\f800"}.ti-adjustments-down:before{content:"\f801"}.ti-adjustments-exclamation:before{content:"\f802"}.ti-adjustments-filled:before{content:"\f6ec"}.ti-adjustments-heart:before{content:"\f803"}.ti-adjustments-horizontal:before{content:"\ec38"}.ti-adjustments-minus:before{content:"\f804"}.ti-adjustments-off:before{content:"\f0a8"}.ti-adjustments-pause:before{content:"\f805"}.ti-adjustments-pin:before{content:"\f806"}.ti-adjustments-plus:before{content:"\f807"}.ti-adjustments-question:before{content:"\f808"}.ti-adjustments-search:before{content:"\f809"}.ti-adjustments-share:before{content:"\f80a"}.ti-adjustments-star:before{content:"\f80b"}.ti-adjustments-up:before{content:"\f80c"}.ti-adjustments-x:before{content:"\f80d"}.ti-aerial-lift:before{content:"\edfe"}.ti-affiliate:before{content:"\edff"}.ti-affiliate-filled:before{content:"\f6ed"}.ti-air-balloon:before{content:"\f4a6"}.ti-air-conditioning:before{content:"\f3a2"}.ti-air-conditioning-disabled:before{content:"\f542"}.ti-air-traffic-control:before{content:"\fb01"}.ti-alarm:before{content:"\ea04"}.ti-alarm-average:before{content:"\fc9e"}.ti-alarm-filled:before{content:"\f709"}.ti-alarm-minus:before{content:"\f630"}.ti-alarm-minus-filled:before{content:"\f70a"}.ti-alarm-off:before{content:"\f0a9"}.ti-alarm-plus:before{content:"\f631"}.ti-alarm-plus-filled:before{content:"\f70b"}.ti-alarm-snooze:before{content:"\f632"}.ti-alarm-snooze-filled:before{content:"\f70c"}.ti-album:before{content:"\f022"}.ti-album-off:before{content:"\f3b9"}.ti-alert-circle:before{content:"\ea05"}.ti-alert-circle-filled:before{content:"\f6ee"}.ti-alert-circle-off:before{content:"\fc65"}.ti-alert-hexagon:before{content:"\f80e"}.ti-alert-hexagon-filled:before{content:"\fa34"}.ti-alert-hexagon-off:before{content:"\fc66"}.ti-alert-octagon:before{content:"\ecc6"}.ti-alert-octagon-filled:before{content:"\f6ef"}.ti-alert-small:before{content:"\f80f"}.ti-alert-small-off:before{content:"\fc67"}.ti-alert-square:before{content:"\f811"}.ti-alert-square-filled:before{content:"\fa35"}.ti-alert-square-rounded:before{content:"\f810"}.ti-alert-square-rounded-filled:before{content:"\fa36"}.ti-alert-square-rounded-off:before{content:"\fc68"}.ti-alert-triangle:before{content:"\ea06"}.ti-alert-triangle-filled:before{content:"\f6f0"}.ti-alert-triangle-off:before{content:"\fc69"}.ti-alien:before{content:"\ebde"}.ti-alien-filled:before{content:"\f70d"}.ti-align-box-bottom-center:before{content:"\f530"}.ti-align-box-bottom-center-filled:before{content:"\f70e"}.ti-align-box-bottom-left:before{content:"\f531"}.ti-align-box-bottom-left-filled:before{content:"\f70f"}.ti-align-box-bottom-right:before{content:"\f532"}.ti-align-box-bottom-right-filled:before{content:"\f710"}.ti-align-box-center-bottom:before{content:"\facb"}.ti-align-box-center-middle:before{content:"\f79f"}.ti-align-box-center-middle-filled:before{content:"\f7d4"}.ti-align-box-center-stretch:before{content:"\facc"}.ti-align-box-center-top:before{content:"\facd"}.ti-align-box-left-bottom:before{content:"\f533"}.ti-align-box-left-bottom-filled:before{content:"\f711"}.ti-align-box-left-middle:before{content:"\f534"}.ti-align-box-left-middle-filled:before{content:"\f712"}.ti-align-box-left-stretch:before{content:"\face"}.ti-align-box-left-top:before{content:"\f535"}.ti-align-box-left-top-filled:before{content:"\f713"}.ti-align-box-right-bottom:before{content:"\f536"}.ti-align-box-right-bottom-filled:before{content:"\f714"}.ti-align-box-right-middle:before{content:"\f537"}.ti-align-box-right-middle-filled:before{content:"\f7d5"}.ti-align-box-right-stretch:before{content:"\facf"}.ti-align-box-right-top:before{content:"\f538"}.ti-align-box-right-top-filled:before{content:"\f715"}.ti-align-box-top-center:before{content:"\f539"}.ti-align-box-top-center-filled:before{content:"\f716"}.ti-align-box-top-left:before{content:"\f53a"}.ti-align-box-top-left-filled:before{content:"\f717"}.ti-align-box-top-right:before{content:"\f53b"}.ti-align-box-top-right-filled:before{content:"\f718"}.ti-align-center:before{content:"\ea07"}.ti-align-justified:before{content:"\ea08"}.ti-align-left:before{content:"\ea09"}.ti-align-right:before{content:"\ea0a"}.ti-alpha:before{content:"\f543"}.ti-alphabet-cyrillic:before{content:"\f1df"}.ti-alphabet-greek:before{content:"\f1e0"}.ti-alphabet-latin:before{content:"\f1e1"}.ti-alt:before{content:"\fc54"}.ti-ambulance:before{content:"\ebf5"}.ti-ampersand:before{content:"\f229"}.ti-analyze:before{content:"\f3a3"}.ti-analyze-filled:before{content:"\f719"}.ti-analyze-off:before{content:"\f3ba"}.ti-anchor:before{content:"\eb76"}.ti-anchor-off:before{content:"\f0f7"}.ti-angle:before{content:"\ef20"}.ti-ankh:before{content:"\f1cd"}.ti-antenna:before{content:"\f094"}.ti-antenna-bars-1:before{content:"\ecc7"}.ti-antenna-bars-2:before{content:"\ecc8"}.ti-antenna-bars-3:before{content:"\ecc9"}.ti-antenna-bars-4:before{content:"\ecca"}.ti-antenna-bars-5:before{content:"\eccb"}.ti-antenna-bars-off:before{content:"\f0aa"}.ti-antenna-off:before{content:"\f3bb"}.ti-aperture:before{content:"\eb58"}.ti-aperture-off:before{content:"\f3bc"}.ti-api:before{content:"\effd"}.ti-api-app:before{content:"\effc"}.ti-api-app-off:before{content:"\f0ab"}.ti-api-off:before{content:"\f0f8"}.ti-app-window:before{content:"\efe6"}.ti-app-window-filled:before{content:"\f71a"}.ti-apple:before{content:"\ef21"}.ti-apps:before{content:"\ebb6"}.ti-apps-filled:before{content:"\f6f1"}.ti-apps-off:before{content:"\f0ac"}.ti-archery-arrow:before{content:"\fc55"}.ti-archive:before{content:"\ea0b"}.ti-archive-filled:before{content:"\fa82"}.ti-archive-off:before{content:"\f0ad"}.ti-armchair:before{content:"\ef9e"}.ti-armchair-2:before{content:"\efe7"}.ti-armchair-2-off:before{content:"\f3bd"}.ti-armchair-off:before{content:"\f3be"}.ti-arrow-autofit-content:before{content:"\ef31"}.ti-arrow-autofit-content-filled:before{content:"\f6f2"}.ti-arrow-autofit-down:before{content:"\ef32"}.ti-arrow-autofit-height:before{content:"\ef33"}.ti-arrow-autofit-left:before{content:"\ef34"}.ti-arrow-autofit-right:before{content:"\ef35"}.ti-arrow-autofit-up:before{content:"\ef36"}.ti-arrow-autofit-width:before{content:"\ef37"}.ti-arrow-back:before{content:"\ea0c"}.ti-arrow-back-up:before{content:"\eb77"}.ti-arrow-back-up-double:before{content:"\f9ec"}.ti-arrow-badge-down:before{content:"\f60b"}.ti-arrow-badge-down-filled:before{content:"\f7d6"}.ti-arrow-badge-left:before{content:"\f60c"}.ti-arrow-badge-left-filled:before{content:"\f7d7"}.ti-arrow-badge-right:before{content:"\f60d"}.ti-arrow-badge-right-filled:before{content:"\f7d8"}.ti-arrow-badge-up:before{content:"\f60e"}.ti-arrow-badge-up-filled:before{content:"\f7d9"}.ti-arrow-bar-both:before{content:"\fadd"}.ti-arrow-bar-down:before{content:"\ea0d"}.ti-arrow-bar-left:before{content:"\ea0e"}.ti-arrow-bar-right:before{content:"\ea0f"}.ti-arrow-bar-to-down:before{content:"\ec88"}.ti-arrow-bar-to-left:before{content:"\ec89"}.ti-arrow-bar-to-right:before{content:"\ec8a"}.ti-arrow-bar-to-up:before{content:"\ec8b"}.ti-arrow-bar-up:before{content:"\ea10"}.ti-arrow-bear-left:before{content:"\f045"}.ti-arrow-bear-left-2:before{content:"\f044"}.ti-arrow-bear-right:before{content:"\f047"}.ti-arrow-bear-right-2:before{content:"\f046"}.ti-arrow-big-down:before{content:"\edda"}.ti-arrow-big-down-filled:before{content:"\f6c6"}.ti-arrow-big-down-line:before{content:"\efe8"}.ti-arrow-big-down-line-filled:before{content:"\f6c7"}.ti-arrow-big-down-lines:before{content:"\efe9"}.ti-arrow-big-down-lines-filled:before{content:"\f6c8"}.ti-arrow-big-left:before{content:"\eddb"}.ti-arrow-big-left-filled:before{content:"\f6c9"}.ti-arrow-big-left-line:before{content:"\efea"}.ti-arrow-big-left-line-filled:before{content:"\f6ca"}.ti-arrow-big-left-lines:before{content:"\efeb"}.ti-arrow-big-left-lines-filled:before{content:"\f6cb"}.ti-arrow-big-right:before{content:"\eddc"}.ti-arrow-big-right-filled:before{content:"\f6cc"}.ti-arrow-big-right-line:before{content:"\efec"}.ti-arrow-big-right-line-filled:before{content:"\f6cd"}.ti-arrow-big-right-lines:before{content:"\efed"}.ti-arrow-big-right-lines-filled:before{content:"\f6ce"}.ti-arrow-big-up:before{content:"\eddd"}.ti-arrow-big-up-filled:before{content:"\f6cf"}.ti-arrow-big-up-line:before{content:"\efee"}.ti-arrow-big-up-line-filled:before{content:"\f6d0"}.ti-arrow-big-up-lines:before{content:"\efef"}.ti-arrow-big-up-lines-filled:before{content:"\f6d1"}.ti-arrow-bounce:before{content:"\f3a4"}.ti-arrow-capsule:before{content:"\fade"}.ti-arrow-curve-left:before{content:"\f048"}.ti-arrow-curve-right:before{content:"\f049"}.ti-arrow-down:before{content:"\ea16"}.ti-arrow-down-bar:before{content:"\ed98"}.ti-arrow-down-circle:before{content:"\ea11"}.ti-arrow-down-from-arc:before{content:"\fd86"}.ti-arrow-down-left:before{content:"\ea13"}.ti-arrow-down-left-circle:before{content:"\ea12"}.ti-arrow-down-rhombus:before{content:"\f61d"}.ti-arrow-down-right:before{content:"\ea15"}.ti-arrow-down-right-circle:before{content:"\ea14"}.ti-arrow-down-square:before{content:"\ed9a"}.ti-arrow-down-tail:before{content:"\ed9b"}.ti-arrow-down-to-arc:before{content:"\fd87"}.ti-arrow-elbow-left:before{content:"\f9ed"}.ti-arrow-elbow-right:before{content:"\f9ee"}.ti-arrow-fork:before{content:"\f04a"}.ti-arrow-forward:before{content:"\ea17"}.ti-arrow-forward-up:before{content:"\eb78"}.ti-arrow-forward-up-double:before{content:"\f9ef"}.ti-arrow-guide:before{content:"\f22a"}.ti-arrow-iteration:before{content:"\f578"}.ti-arrow-left:before{content:"\ea19"}.ti-arrow-left-bar:before{content:"\ed9c"}.ti-arrow-left-circle:before{content:"\ea18"}.ti-arrow-left-from-arc:before{content:"\fd88"}.ti-arrow-left-rhombus:before{content:"\f61e"}.ti-arrow-left-right:before{content:"\f04b"}.ti-arrow-left-square:before{content:"\ed9d"}.ti-arrow-left-tail:before{content:"\ed9e"}.ti-arrow-left-to-arc:before{content:"\fd89"}.ti-arrow-loop-left:before{content:"\ed9f"}.ti-arrow-loop-left-2:before{content:"\f04c"}.ti-arrow-loop-right:before{content:"\eda0"}.ti-arrow-loop-right-2:before{content:"\f04d"}.ti-arrow-merge:before{content:"\f04e"}.ti-arrow-merge-alt-left:before{content:"\fc9f"}.ti-arrow-merge-alt-right:before{content:"\fca0"}.ti-arrow-merge-both:before{content:"\f23b"}.ti-arrow-merge-left:before{content:"\f23c"}.ti-arrow-merge-right:before{content:"\f23d"}.ti-arrow-move-down:before{content:"\f2ba"}.ti-arrow-move-left:before{content:"\f2bb"}.ti-arrow-move-right:before{content:"\f2bc"}.ti-arrow-move-up:before{content:"\f2bd"}.ti-arrow-narrow-down:before{content:"\ea1a"}.ti-arrow-narrow-left:before{content:"\ea1b"}.ti-arrow-narrow-right:before{content:"\ea1c"}.ti-arrow-narrow-up:before{content:"\ea1d"}.ti-arrow-ramp-left:before{content:"\ed3c"}.ti-arrow-ramp-left-2:before{content:"\f04f"}.ti-arrow-ramp-left-3:before{content:"\f050"}.ti-arrow-ramp-right:before{content:"\ed3d"}.ti-arrow-ramp-right-2:before{content:"\f051"}.ti-arrow-ramp-right-3:before{content:"\f052"}.ti-arrow-right:before{content:"\ea1f"}.ti-arrow-right-bar:before{content:"\eda1"}.ti-arrow-right-circle:before{content:"\ea1e"}.ti-arrow-right-from-arc:before{content:"\fd8a"}.ti-arrow-right-rhombus:before{content:"\f61f"}.ti-arrow-right-square:before{content:"\eda2"}.ti-arrow-right-tail:before{content:"\eda3"}.ti-arrow-right-to-arc:before{content:"\fd8b"}.ti-arrow-rotary-first-left:before{content:"\f053"}.ti-arrow-rotary-first-right:before{content:"\f054"}.ti-arrow-rotary-last-left:before{content:"\f055"}.ti-arrow-rotary-last-right:before{content:"\f056"}.ti-arrow-rotary-left:before{content:"\f057"}.ti-arrow-rotary-right:before{content:"\f058"}.ti-arrow-rotary-straight:before{content:"\f059"}.ti-arrow-roundabout-left:before{content:"\f22b"}.ti-arrow-roundabout-right:before{content:"\f22c"}.ti-arrow-sharp-turn-left:before{content:"\f05a"}.ti-arrow-sharp-turn-right:before{content:"\f05b"}.ti-arrow-up:before{content:"\ea25"}.ti-arrow-up-bar:before{content:"\eda4"}.ti-arrow-up-circle:before{content:"\ea20"}.ti-arrow-up-from-arc:before{content:"\fd8c"}.ti-arrow-up-left:before{content:"\ea22"}.ti-arrow-up-left-circle:before{content:"\ea21"}.ti-arrow-up-rhombus:before{content:"\f620"}.ti-arrow-up-right:before{content:"\ea24"}.ti-arrow-up-right-circle:before{content:"\ea23"}.ti-arrow-up-square:before{content:"\eda6"}.ti-arrow-up-tail:before{content:"\eda7"}.ti-arrow-up-to-arc:before{content:"\fd8d"}.ti-arrow-wave-left-down:before{content:"\eda8"}.ti-arrow-wave-left-up:before{content:"\eda9"}.ti-arrow-wave-right-down:before{content:"\edaa"}.ti-arrow-wave-right-up:before{content:"\edab"}.ti-arrow-zig-zag:before{content:"\f4a7"}.ti-arrows-cross:before{content:"\effe"}.ti-arrows-diagonal:before{content:"\ea27"}.ti-arrows-diagonal-2:before{content:"\ea26"}.ti-arrows-diagonal-minimize:before{content:"\ef39"}.ti-arrows-diagonal-minimize-2:before{content:"\ef38"}.ti-arrows-diff:before{content:"\f296"}.ti-arrows-double-ne-sw:before{content:"\edde"}.ti-arrows-double-nw-se:before{content:"\eddf"}.ti-arrows-double-se-nw:before{content:"\ede0"}.ti-arrows-double-sw-ne:before{content:"\ede1"}.ti-arrows-down:before{content:"\edad"}.ti-arrows-down-up:before{content:"\edac"}.ti-arrows-exchange:before{content:"\f1f4"}.ti-arrows-exchange-2:before{content:"\f1f3"}.ti-arrows-horizontal:before{content:"\eb59"}.ti-arrows-join:before{content:"\edaf"}.ti-arrows-join-2:before{content:"\edae"}.ti-arrows-left:before{content:"\edb1"}.ti-arrows-left-down:before{content:"\ee00"}.ti-arrows-left-right:before{content:"\edb0"}.ti-arrows-maximize:before{content:"\ea28"}.ti-arrows-minimize:before{content:"\ea29"}.ti-arrows-move:before{content:"\f22f"}.ti-arrows-move-horizontal:before{content:"\f22d"}.ti-arrows-move-vertical:before{content:"\f22e"}.ti-arrows-random:before{content:"\f095"}.ti-arrows-right:before{content:"\edb3"}.ti-arrows-right-down:before{content:"\ee01"}.ti-arrows-right-left:before{content:"\edb2"}.ti-arrows-shuffle:before{content:"\f000"}.ti-arrows-shuffle-2:before{content:"\efff"}.ti-arrows-sort:before{content:"\eb5a"}.ti-arrows-split:before{content:"\edb5"}.ti-arrows-split-2:before{content:"\edb4"}.ti-arrows-transfer-down:before{content:"\f2cc"}.ti-arrows-transfer-up:before{content:"\f2cd"}.ti-arrows-up:before{content:"\edb7"}.ti-arrows-up-down:before{content:"\edb6"}.ti-arrows-up-left:before{content:"\ee02"}.ti-arrows-up-right:before{content:"\ee03"}.ti-arrows-vertical:before{content:"\eb5b"}.ti-artboard:before{content:"\ea2a"}.ti-artboard-filled:before{content:"\fa83"}.ti-artboard-off:before{content:"\f0ae"}.ti-article:before{content:"\f1e2"}.ti-article-filled-filled:before{content:"\f7da"}.ti-article-off:before{content:"\f3bf"}.ti-aspect-ratio:before{content:"\ed30"}.ti-aspect-ratio-filled:before{content:"\f7db"}.ti-aspect-ratio-off:before{content:"\f0af"}.ti-assembly:before{content:"\f24d"}.ti-assembly-off:before{content:"\f3c0"}.ti-asset:before{content:"\f1ce"}.ti-asterisk:before{content:"\efd5"}.ti-asterisk-simple:before{content:"\efd4"}.ti-at:before{content:"\ea2b"}.ti-at-off:before{content:"\f0b0"}.ti-atom:before{content:"\eb79"}.ti-atom-2:before{content:"\ebdf"}.ti-atom-2-filled:before{content:"\f71b"}.ti-atom-off:before{content:"\f0f9"}.ti-augmented-reality:before{content:"\f023"}.ti-augmented-reality-2:before{content:"\f37e"}.ti-augmented-reality-off:before{content:"\f3c1"}.ti-automatic-gearbox:before{content:"\fc89"}.ti-avocado:before{content:"\fd8e"}.ti-award:before{content:"\ea2c"}.ti-award-filled:before{content:"\f71c"}.ti-award-off:before{content:"\f0fa"}.ti-axe:before{content:"\ef9f"}.ti-axis-x:before{content:"\ef45"}.ti-axis-y:before{content:"\ef46"}.ti-baby-bottle:before{content:"\f5d2"}.ti-baby-carriage:before{content:"\f05d"}.ti-background:before{content:"\fd2c"}.ti-backhoe:before{content:"\ed86"}.ti-backpack:before{content:"\ef47"}.ti-backpack-off:before{content:"\f3c2"}.ti-backslash:before{content:"\fab9"}.ti-backspace:before{content:"\ea2d"}.ti-backspace-filled:before{content:"\f7dc"}.ti-badge:before{content:"\efc2"}.ti-badge-3d:before{content:"\f555"}.ti-badge-4k:before{content:"\f556"}.ti-badge-8k:before{content:"\f557"}.ti-badge-ad:before{content:"\f558"}.ti-badge-ad-off:before{content:"\fd8f"}.ti-badge-ar:before{content:"\f559"}.ti-badge-cc:before{content:"\f55a"}.ti-badge-filled:before{content:"\f667"}.ti-badge-hd:before{content:"\f55b"}.ti-badge-off:before{content:"\f0fb"}.ti-badge-sd:before{content:"\f55c"}.ti-badge-tm:before{content:"\f55d"}.ti-badge-vo:before{content:"\f55e"}.ti-badge-vr:before{content:"\f55f"}.ti-badge-wc:before{content:"\f560"}.ti-badges:before{content:"\efc3"}.ti-badges-filled:before{content:"\f7dd"}.ti-badges-off:before{content:"\f0fc"}.ti-baguette:before{content:"\f3a5"}.ti-ball-american-football:before{content:"\ee04"}.ti-ball-american-football-off:before{content:"\f3c3"}.ti-ball-baseball:before{content:"\efa0"}.ti-ball-basketball:before{content:"\ec28"}.ti-ball-bowling:before{content:"\ec29"}.ti-ball-football:before{content:"\ee06"}.ti-ball-football-off:before{content:"\ee05"}.ti-ball-tennis:before{content:"\ec2a"}.ti-ball-volleyball:before{content:"\ec2b"}.ti-balloon:before{content:"\ef3a"}.ti-balloon-filled:before{content:"\fa84"}.ti-balloon-off:before{content:"\f0fd"}.ti-ballpen:before{content:"\f06e"}.ti-ballpen-filled:before{content:"\fa85"}.ti-ballpen-off:before{content:"\f0b1"}.ti-ban:before{content:"\ea2e"}.ti-bandage:before{content:"\eb7a"}.ti-bandage-filled:before{content:"\f7de"}.ti-bandage-off:before{content:"\f3c4"}.ti-barbell:before{content:"\eff0"}.ti-barbell-off:before{content:"\f0b2"}.ti-barcode:before{content:"\ebc6"}.ti-barcode-off:before{content:"\f0b3"}.ti-barrel:before{content:"\f0b4"}.ti-barrel-off:before{content:"\f0fe"}.ti-barrier-block:before{content:"\f00e"}.ti-barrier-block-off:before{content:"\f0b5"}.ti-baseline:before{content:"\f024"}.ti-baseline-density-large:before{content:"\f9f0"}.ti-baseline-density-medium:before{content:"\f9f1"}.ti-baseline-density-small:before{content:"\f9f2"}.ti-basket:before{content:"\ebe1"}.ti-basket-bolt:before{content:"\fb43"}.ti-basket-cancel:before{content:"\fb44"}.ti-basket-check:before{content:"\fb45"}.ti-basket-code:before{content:"\fb46"}.ti-basket-cog:before{content:"\fb47"}.ti-basket-discount:before{content:"\fb48"}.ti-basket-dollar:before{content:"\fb49"}.ti-basket-down:before{content:"\fb4a"}.ti-basket-exclamation:before{content:"\fb4b"}.ti-basket-filled:before{content:"\f7df"}.ti-basket-heart:before{content:"\fb4c"}.ti-basket-minus:before{content:"\fb4d"}.ti-basket-off:before{content:"\f0b6"}.ti-basket-pause:before{content:"\fb4e"}.ti-basket-pin:before{content:"\fb4f"}.ti-basket-plus:before{content:"\fb50"}.ti-basket-question:before{content:"\fb51"}.ti-basket-search:before{content:"\fb52"}.ti-basket-share:before{content:"\fb53"}.ti-basket-star:before{content:"\fb54"}.ti-basket-up:before{content:"\fb55"}.ti-basket-x:before{content:"\fb56"}.ti-bat:before{content:"\f284"}.ti-bath:before{content:"\ef48"}.ti-bath-filled:before{content:"\f71d"}.ti-bath-off:before{content:"\f0ff"}.ti-battery:before{content:"\ea34"}.ti-battery-1:before{content:"\ea2f"}.ti-battery-1-filled:before{content:"\f71e"}.ti-battery-2:before{content:"\ea30"}.ti-battery-2-filled:before{content:"\f71f"}.ti-battery-3:before{content:"\ea31"}.ti-battery-3-filled:before{content:"\f720"}.ti-battery-4:before{content:"\ea32"}.ti-battery-4-filled:before{content:"\f721"}.ti-battery-automotive:before{content:"\ee07"}.ti-battery-charging:before{content:"\ea33"}.ti-battery-charging-2:before{content:"\ef3b"}.ti-battery-eco:before{content:"\ef3c"}.ti-battery-filled:before{content:"\f668"}.ti-battery-off:before{content:"\ed1c"}.ti-beach:before{content:"\ef3d"}.ti-beach-off:before{content:"\f0b7"}.ti-bed:before{content:"\eb5c"}.ti-bed-filled:before{content:"\f7e0"}.ti-bed-flat:before{content:"\fca1"}.ti-bed-off:before{content:"\f100"}.ti-beer:before{content:"\efa1"}.ti-beer-filled:before{content:"\f7e1"}.ti-beer-off:before{content:"\f101"}.ti-bell:before{content:"\ea35"}.ti-bell-bolt:before{content:"\f812"}.ti-bell-cancel:before{content:"\f813"}.ti-bell-check:before{content:"\f814"}.ti-bell-code:before{content:"\f815"}.ti-bell-cog:before{content:"\f816"}.ti-bell-dollar:before{content:"\f817"}.ti-bell-down:before{content:"\f818"}.ti-bell-exclamation:before{content:"\f819"}.ti-bell-filled:before{content:"\f669"}.ti-bell-heart:before{content:"\f81a"}.ti-bell-minus:before{content:"\ede2"}.ti-bell-minus-filled:before{content:"\f722"}.ti-bell-off:before{content:"\ece9"}.ti-bell-pause:before{content:"\f81b"}.ti-bell-pin:before{content:"\f81c"}.ti-bell-plus:before{content:"\ede3"}.ti-bell-plus-filled:before{content:"\f723"}.ti-bell-question:before{content:"\f81d"}.ti-bell-ringing:before{content:"\ed07"}.ti-bell-ringing-2:before{content:"\ede4"}.ti-bell-ringing-2-filled:before{content:"\f724"}.ti-bell-ringing-filled:before{content:"\f725"}.ti-bell-school:before{content:"\f05e"}.ti-bell-search:before{content:"\f81e"}.ti-bell-share:before{content:"\f81f"}.ti-bell-star:before{content:"\f820"}.ti-bell-up:before{content:"\f821"}.ti-bell-x:before{content:"\ede5"}.ti-bell-x-filled:before{content:"\f726"}.ti-bell-z:before{content:"\eff1"}.ti-bell-z-filled:before{content:"\f727"}.ti-beta:before{content:"\f544"}.ti-bible:before{content:"\efc4"}.ti-bike:before{content:"\ea36"}.ti-bike-off:before{content:"\f0b8"}.ti-binary:before{content:"\ee08"}.ti-binary-off:before{content:"\f3c5"}.ti-binary-tree:before{content:"\f5d4"}.ti-binary-tree-2:before{content:"\f5d3"}.ti-biohazard:before{content:"\ecb8"}.ti-biohazard-off:before{content:"\f0b9"}.ti-blade:before{content:"\f4bd"}.ti-blade-filled:before{content:"\f7e2"}.ti-bleach:before{content:"\f2f3"}.ti-bleach-chlorine:before{content:"\f2f0"}.ti-bleach-no-chlorine:before{content:"\f2f1"}.ti-bleach-off:before{content:"\f2f2"}.ti-blender:before{content:"\fca2"}.ti-blockquote:before{content:"\ee09"}.ti-bluetooth:before{content:"\ea37"}.ti-bluetooth-connected:before{content:"\ecea"}.ti-bluetooth-off:before{content:"\eceb"}.ti-bluetooth-x:before{content:"\f081"}.ti-blur:before{content:"\ef8c"}.ti-blur-off:before{content:"\f3c6"}.ti-bmp:before{content:"\f3a6"}.ti-body-scan:before{content:"\fca3"}.ti-bold:before{content:"\eb7b"}.ti-bold-off:before{content:"\f0ba"}.ti-bolt:before{content:"\ea38"}.ti-bolt-off:before{content:"\ecec"}.ti-bomb:before{content:"\f59c"}.ti-bomb-filled:before{content:"\fa86"}.ti-bone:before{content:"\edb8"}.ti-bone-off:before{content:"\f0bb"}.ti-bong:before{content:"\f3a7"}.ti-bong-off:before{content:"\f3c7"}.ti-book:before{content:"\ea39"}.ti-book-2:before{content:"\efc5"}.ti-book-download:before{content:"\f070"}.ti-book-filled:before{content:"\fa87"}.ti-book-off:before{content:"\f0bc"}.ti-book-upload:before{content:"\f071"}.ti-bookmark:before{content:"\ea3a"}.ti-bookmark-ai:before{content:"\fc8a"}.ti-bookmark-edit:before{content:"\fa5e"}.ti-bookmark-filled:before{content:"\fa88"}.ti-bookmark-minus:before{content:"\fa5f"}.ti-bookmark-off:before{content:"\eced"}.ti-bookmark-plus:before{content:"\fa60"}.ti-bookmark-question:before{content:"\fa61"}.ti-bookmarks:before{content:"\ed08"}.ti-bookmarks-filled:before{content:"\fb1f"}.ti-bookmarks-off:before{content:"\f0bd"}.ti-books:before{content:"\eff2"}.ti-books-off:before{content:"\f0be"}.ti-border-all:before{content:"\ea3b"}.ti-border-bottom:before{content:"\ea3c"}.ti-border-corner-ios:before{content:"\fd98"}.ti-border-corner-pill:before{content:"\fd62"}.ti-border-corner-rounded:before{content:"\fd63"}.ti-border-corner-square:before{content:"\fd64"}.ti-border-corners:before{content:"\f7a0"}.ti-border-horizontal:before{content:"\ea3d"}.ti-border-inner:before{content:"\ea3e"}.ti-border-left:before{content:"\ea3f"}.ti-border-none:before{content:"\ea40"}.ti-border-outer:before{content:"\ea41"}.ti-border-radius:before{content:"\eb7c"}.ti-border-right:before{content:"\ea42"}.ti-border-sides:before{content:"\f7a1"}.ti-border-style:before{content:"\ee0a"}.ti-border-style-2:before{content:"\ef22"}.ti-border-top:before{content:"\ea43"}.ti-border-vertical:before{content:"\ea44"}.ti-bottle:before{content:"\ef0b"}.ti-bottle-filled:before{content:"\fa89"}.ti-bottle-off:before{content:"\f3c8"}.ti-bounce-left:before{content:"\f59d"}.ti-bounce-left-filled:before{content:"\fb20"}.ti-bounce-right:before{content:"\f59e"}.ti-bounce-right-filled:before{content:"\fb21"}.ti-bow:before{content:"\f096"}.ti-bowl:before{content:"\f4fa"}.ti-bowl-chopsticks:before{content:"\fd90"}.ti-bowl-filled:before{content:"\fb22"}.ti-bowl-spoon:before{content:"\fd91"}.ti-box:before{content:"\ea45"}.ti-box-align-bottom:before{content:"\f2a8"}.ti-box-align-bottom-filled:before{content:"\fa8a"}.ti-box-align-bottom-left:before{content:"\f2ce"}.ti-box-align-bottom-left-filled:before{content:"\fa8b"}.ti-box-align-bottom-right:before{content:"\f2cf"}.ti-box-align-bottom-right-filled:before{content:"\fa8c"}.ti-box-align-left:before{content:"\f2a9"}.ti-box-align-left-filled:before{content:"\fa8d"}.ti-box-align-right:before{content:"\f2aa"}.ti-box-align-right-filled:before{content:"\fa8e"}.ti-box-align-top:before{content:"\f2ab"}.ti-box-align-top-filled:before{content:"\fa8f"}.ti-box-align-top-left:before{content:"\f2d0"}.ti-box-align-top-left-filled:before{content:"\fa90"}.ti-box-align-top-right:before{content:"\f2d1"}.ti-box-align-top-right-filled:before{content:"\fa91"}.ti-box-margin:before{content:"\ee0b"}.ti-box-model:before{content:"\ee0c"}.ti-box-model-2:before{content:"\ef23"}.ti-box-model-2-off:before{content:"\f3c9"}.ti-box-model-off:before{content:"\f3ca"}.ti-box-multiple:before{content:"\ee17"}.ti-box-multiple-0:before{content:"\ee0d"}.ti-box-multiple-1:before{content:"\ee0e"}.ti-box-multiple-2:before{content:"\ee0f"}.ti-box-multiple-3:before{content:"\ee10"}.ti-box-multiple-4:before{content:"\ee11"}.ti-box-multiple-5:before{content:"\ee12"}.ti-box-multiple-6:before{content:"\ee13"}.ti-box-multiple-7:before{content:"\ee14"}.ti-box-multiple-8:before{content:"\ee15"}.ti-box-multiple-9:before{content:"\ee16"}.ti-box-off:before{content:"\f102"}.ti-box-padding:before{content:"\ee18"}.ti-box-seam:before{content:"\f561"}.ti-braces:before{content:"\ebcc"}.ti-braces-off:before{content:"\f0bf"}.ti-brackets:before{content:"\ebcd"}.ti-brackets-angle:before{content:"\fcb2"}.ti-brackets-angle-off:before{content:"\fcb1"}.ti-brackets-contain:before{content:"\f1e5"}.ti-brackets-contain-end:before{content:"\f1e3"}.ti-brackets-contain-start:before{content:"\f1e4"}.ti-brackets-off:before{content:"\f0c0"}.ti-braille:before{content:"\f545"}.ti-brain:before{content:"\f59f"}.ti-brand-4chan:before{content:"\f494"}.ti-brand-abstract:before{content:"\f495"}.ti-brand-adobe:before{content:"\f0dc"}.ti-brand-adonis-js:before{content:"\f496"}.ti-brand-airbnb:before{content:"\ed68"}.ti-brand-airtable:before{content:"\ef6a"}.ti-brand-algolia:before{content:"\f390"}.ti-brand-alipay:before{content:"\f7a2"}.ti-brand-alpine-js:before{content:"\f324"}.ti-brand-amazon:before{content:"\f230"}.ti-brand-amd:before{content:"\f653"}.ti-brand-amigo:before{content:"\f5f9"}.ti-brand-among-us:before{content:"\f205"}.ti-brand-android:before{content:"\ec16"}.ti-brand-angular:before{content:"\ef6b"}.ti-brand-ansible:before{content:"\fa70"}.ti-brand-ao3:before{content:"\f5e8"}.ti-brand-appgallery:before{content:"\f231"}.ti-brand-apple:before{content:"\ec17"}.ti-brand-apple-arcade:before{content:"\ed69"}.ti-brand-apple-filled:before{content:"\fd74"}.ti-brand-apple-podcast:before{content:"\f1e6"}.ti-brand-appstore:before{content:"\ed24"}.ti-brand-asana:before{content:"\edc5"}.ti-brand-auth0:before{content:"\fcb3"}.ti-brand-aws:before{content:"\fa4c"}.ti-brand-azure:before{content:"\fa4d"}.ti-brand-backbone:before{content:"\f325"}.ti-brand-badoo:before{content:"\f206"}.ti-brand-baidu:before{content:"\f5e9"}.ti-brand-bandcamp:before{content:"\f207"}.ti-brand-bandlab:before{content:"\f5fa"}.ti-brand-beats:before{content:"\f208"}.ti-brand-behance:before{content:"\ec6e"}.ti-brand-bilibili:before{content:"\f6d2"}.ti-brand-binance:before{content:"\f5a0"}.ti-brand-bing:before{content:"\edc6"}.ti-brand-bitbucket:before{content:"\edc7"}.ti-brand-blackberry:before{content:"\f568"}.ti-brand-blender:before{content:"\f326"}.ti-brand-blogger:before{content:"\f35a"}.ti-brand-bluesky:before{content:"\fd75"}.ti-brand-booking:before{content:"\edc8"}.ti-brand-bootstrap:before{content:"\ef3e"}.ti-brand-bulma:before{content:"\f327"}.ti-brand-bumble:before{content:"\f5fb"}.ti-brand-bunpo:before{content:"\f4cf"}.ti-brand-c-sharp:before{content:"\f003"}.ti-brand-cake:before{content:"\f7a3"}.ti-brand-cakephp:before{content:"\f7af"}.ti-brand-campaignmonitor:before{content:"\f328"}.ti-brand-carbon:before{content:"\f348"}.ti-brand-cashapp:before{content:"\f391"}.ti-brand-chrome:before{content:"\ec18"}.ti-brand-cinema-4d:before{content:"\fa71"}.ti-brand-citymapper:before{content:"\f5fc"}.ti-brand-cloudflare:before{content:"\fa4e"}.ti-brand-codecov:before{content:"\f329"}.ti-brand-codepen:before{content:"\ec6f"}.ti-brand-codesandbox:before{content:"\ed6a"}.ti-brand-cohost:before{content:"\f5d5"}.ti-brand-coinbase:before{content:"\f209"}.ti-brand-comedy-central:before{content:"\f217"}.ti-brand-coreos:before{content:"\f5fd"}.ti-brand-couchdb:before{content:"\f60f"}.ti-brand-couchsurfing:before{content:"\f392"}.ti-brand-cpp:before{content:"\f5fe"}.ti-brand-craft:before{content:"\fa72"}.ti-brand-crunchbase:before{content:"\f7e3"}.ti-brand-css3:before{content:"\ed6b"}.ti-brand-ctemplar:before{content:"\f4d0"}.ti-brand-cucumber:before{content:"\ef6c"}.ti-brand-cupra:before{content:"\f4d1"}.ti-brand-cypress:before{content:"\f333"}.ti-brand-d3:before{content:"\f24e"}.ti-brand-databricks:before{content:"\fc41"}.ti-brand-days-counter:before{content:"\f4d2"}.ti-brand-dcos:before{content:"\f32a"}.ti-brand-debian:before{content:"\ef57"}.ti-brand-deezer:before{content:"\f78b"}.ti-brand-deliveroo:before{content:"\f4d3"}.ti-brand-deno:before{content:"\f24f"}.ti-brand-denodo:before{content:"\f610"}.ti-brand-deviantart:before{content:"\ecfb"}.ti-brand-digg:before{content:"\fa73"}.ti-brand-dingtalk:before{content:"\f5ea"}.ti-brand-discord:before{content:"\ece3"}.ti-brand-discord-filled:before{content:"\f7e4"}.ti-brand-disney:before{content:"\f20a"}.ti-brand-disqus:before{content:"\edc9"}.ti-brand-django:before{content:"\f349"}.ti-brand-docker:before{content:"\edca"}.ti-brand-doctrine:before{content:"\ef6d"}.ti-brand-dolby-digital:before{content:"\f4d4"}.ti-brand-douban:before{content:"\f5ff"}.ti-brand-dribbble:before{content:"\ec19"}.ti-brand-dribbble-filled:before{content:"\f7e5"}.ti-brand-drops:before{content:"\f4d5"}.ti-brand-drupal:before{content:"\f393"}.ti-brand-edge:before{content:"\ecfc"}.ti-brand-elastic:before{content:"\f611"}.ti-brand-electronic-arts:before{content:"\fa74"}.ti-brand-ember:before{content:"\f497"}.ti-brand-envato:before{content:"\f394"}.ti-brand-etsy:before{content:"\f654"}.ti-brand-evernote:before{content:"\f600"}.ti-brand-facebook:before{content:"\ec1a"}.ti-brand-facebook-filled:before{content:"\f7e6"}.ti-brand-feedly:before{content:"\fa75"}.ti-brand-figma:before{content:"\ec93"}.ti-brand-filezilla:before{content:"\fa76"}.ti-brand-finder:before{content:"\f218"}.ti-brand-firebase:before{content:"\ef6e"}.ti-brand-firefox:before{content:"\ecfd"}.ti-brand-fiverr:before{content:"\f7a4"}.ti-brand-flickr:before{content:"\ecfe"}.ti-brand-flightradar24:before{content:"\f4d6"}.ti-brand-flipboard:before{content:"\f20b"}.ti-brand-flutter:before{content:"\f395"}.ti-brand-fortnite:before{content:"\f260"}.ti-brand-foursquare:before{content:"\ecff"}.ti-brand-framer:before{content:"\ec1b"}.ti-brand-framer-motion:before{content:"\f78c"}.ti-brand-funimation:before{content:"\f655"}.ti-brand-gatsby:before{content:"\f396"}.ti-brand-git:before{content:"\ef6f"}.ti-brand-github:before{content:"\ec1c"}.ti-brand-github-copilot:before{content:"\f4a8"}.ti-brand-github-filled:before{content:"\f7e7"}.ti-brand-gitlab:before{content:"\ec1d"}.ti-brand-gmail:before{content:"\efa2"}.ti-brand-golang:before{content:"\f78d"}.ti-brand-google:before{content:"\ec1f"}.ti-brand-google-analytics:before{content:"\edcb"}.ti-brand-google-big-query:before{content:"\f612"}.ti-brand-google-drive:before{content:"\ec1e"}.ti-brand-google-filled:before{content:"\fd1a"}.ti-brand-google-fit:before{content:"\f297"}.ti-brand-google-home:before{content:"\f601"}.ti-brand-google-maps:before{content:"\fa4f"}.ti-brand-google-one:before{content:"\f232"}.ti-brand-google-photos:before{content:"\f20c"}.ti-brand-google-play:before{content:"\ed25"}.ti-brand-google-podcasts:before{content:"\f656"}.ti-brand-grammarly:before{content:"\f32b"}.ti-brand-graphql:before{content:"\f32c"}.ti-brand-gravatar:before{content:"\edcc"}.ti-brand-grindr:before{content:"\f20d"}.ti-brand-guardian:before{content:"\f4fb"}.ti-brand-gumroad:before{content:"\f5d6"}.ti-brand-hbo:before{content:"\f657"}.ti-brand-headlessui:before{content:"\f32d"}.ti-brand-hexo:before{content:"\fa50"}.ti-brand-hipchat:before{content:"\edcd"}.ti-brand-html5:before{content:"\ed6c"}.ti-brand-inertia:before{content:"\f34a"}.ti-brand-instagram:before{content:"\ec20"}.ti-brand-intercom:before{content:"\f1cf"}.ti-brand-itch:before{content:"\fa22"}.ti-brand-javascript:before{content:"\ef0c"}.ti-brand-juejin:before{content:"\f7b0"}.ti-brand-kako-talk:before{content:"\fd2d"}.ti-brand-kbin:before{content:"\fad0"}.ti-brand-kick:before{content:"\fa23"}.ti-brand-kickstarter:before{content:"\edce"}.ti-brand-kotlin:before{content:"\ed6d"}.ti-brand-laravel:before{content:"\f34b"}.ti-brand-lastfm:before{content:"\f001"}.ti-brand-leetcode:before{content:"\fa51"}.ti-brand-letterboxd:before{content:"\fa24"}.ti-brand-line:before{content:"\f7e8"}.ti-brand-linkedin:before{content:"\ec8c"}.ti-brand-linktree:before{content:"\f1e7"}.ti-brand-linqpad:before{content:"\f562"}.ti-brand-livewire:before{content:"\fd76"}.ti-brand-loom:before{content:"\ef70"}.ti-brand-mailgun:before{content:"\f32e"}.ti-brand-mantine:before{content:"\f32f"}.ti-brand-mastercard:before{content:"\ef49"}.ti-brand-mastodon:before{content:"\f250"}.ti-brand-matrix:before{content:"\f5eb"}.ti-brand-mcdonalds:before{content:"\f251"}.ti-brand-medium:before{content:"\ec70"}.ti-brand-meetup:before{content:"\fc6a"}.ti-brand-mercedes:before{content:"\f072"}.ti-brand-messenger:before{content:"\ec71"}.ti-brand-meta:before{content:"\efb0"}.ti-brand-minecraft:before{content:"\faef"}.ti-brand-miniprogram:before{content:"\f602"}.ti-brand-mixpanel:before{content:"\f397"}.ti-brand-monday:before{content:"\f219"}.ti-brand-mongodb:before{content:"\f613"}.ti-brand-my-oppo:before{content:"\f4d7"}.ti-brand-mysql:before{content:"\f614"}.ti-brand-national-geographic:before{content:"\f603"}.ti-brand-nem:before{content:"\f5a1"}.ti-brand-netbeans:before{content:"\ef71"}.ti-brand-netease-music:before{content:"\f604"}.ti-brand-netflix:before{content:"\edcf"}.ti-brand-nexo:before{content:"\f5a2"}.ti-brand-nextcloud:before{content:"\f4d8"}.ti-brand-nextjs:before{content:"\f0dd"}.ti-brand-nodejs:before{content:"\fae0"}.ti-brand-nord-vpn:before{content:"\f37f"}.ti-brand-notion:before{content:"\ef7b"}.ti-brand-npm:before{content:"\f569"}.ti-brand-nuxt:before{content:"\f0de"}.ti-brand-nytimes:before{content:"\ef8d"}.ti-brand-oauth:before{content:"\fa52"}.ti-brand-office:before{content:"\f398"}.ti-brand-ok-ru:before{content:"\f399"}.ti-brand-onedrive:before{content:"\f5d7"}.ti-brand-onlyfans:before{content:"\f605"}.ti-brand-open-source:before{content:"\edd0"}.ti-brand-openai:before{content:"\f78e"}.ti-brand-openvpn:before{content:"\f39a"}.ti-brand-opera:before{content:"\ec21"}.ti-brand-pagekit:before{content:"\edd1"}.ti-brand-parsinta:before{content:"\fc42"}.ti-brand-patreon:before{content:"\edd2"}.ti-brand-patreon-filled:before{content:"\fcff"}.ti-brand-paypal:before{content:"\ec22"}.ti-brand-paypal-filled:before{content:"\f7e9"}.ti-brand-paypay:before{content:"\f5ec"}.ti-brand-peanut:before{content:"\f39b"}.ti-brand-pepsi:before{content:"\f261"}.ti-brand-php:before{content:"\ef72"}.ti-brand-picsart:before{content:"\f4d9"}.ti-brand-pinterest:before{content:"\ec8d"}.ti-brand-planetscale:before{content:"\f78f"}.ti-brand-pnpm:before{content:"\fd77"}.ti-brand-pocket:before{content:"\ed00"}.ti-brand-polymer:before{content:"\f498"}.ti-brand-powershell:before{content:"\f5ed"}.ti-brand-printables:before{content:"\fd1b"}.ti-brand-prisma:before{content:"\f499"}.ti-brand-producthunt:before{content:"\edd3"}.ti-brand-pushbullet:before{content:"\f330"}.ti-brand-pushover:before{content:"\f20e"}.ti-brand-python:before{content:"\ed01"}.ti-brand-qq:before{content:"\f606"}.ti-brand-radix-ui:before{content:"\f790"}.ti-brand-react:before{content:"\f34c"}.ti-brand-react-native:before{content:"\ef73"}.ti-brand-reason:before{content:"\f49a"}.ti-brand-reddit:before{content:"\ec8e"}.ti-brand-redhat:before{content:"\f331"}.ti-brand-redux:before{content:"\f3a8"}.ti-brand-revolut:before{content:"\f4da"}.ti-brand-rumble:before{content:"\fad1"}.ti-brand-rust:before{content:"\fa53"}.ti-brand-safari:before{content:"\ec23"}.ti-brand-samsungpass:before{content:"\f4db"}.ti-brand-sass:before{content:"\edd4"}.ti-brand-sentry:before{content:"\edd5"}.ti-brand-sharik:before{content:"\f4dc"}.ti-brand-shazam:before{content:"\edd6"}.ti-brand-shopee:before{content:"\f252"}.ti-brand-sketch:before{content:"\ec24"}.ti-brand-skype:before{content:"\ed02"}.ti-brand-slack:before{content:"\ec72"}.ti-brand-snapchat:before{content:"\ec25"}.ti-brand-snapseed:before{content:"\f253"}.ti-brand-snowflake:before{content:"\f615"}.ti-brand-socket-io:before{content:"\f49b"}.ti-brand-solidjs:before{content:"\f5ee"}.ti-brand-soundcloud:before{content:"\ed6e"}.ti-brand-spacehey:before{content:"\f4fc"}.ti-brand-speedtest:before{content:"\fa77"}.ti-brand-spotify:before{content:"\ed03"}.ti-brand-stackoverflow:before{content:"\ef58"}.ti-brand-stackshare:before{content:"\f607"}.ti-brand-steam:before{content:"\ed6f"}.ti-brand-stocktwits:before{content:"\fd78"}.ti-brand-storj:before{content:"\fa54"}.ti-brand-storybook:before{content:"\f332"}.ti-brand-storytel:before{content:"\f608"}.ti-brand-strava:before{content:"\f254"}.ti-brand-stripe:before{content:"\edd7"}.ti-brand-sublime-text:before{content:"\ef74"}.ti-brand-sugarizer:before{content:"\f7a5"}.ti-brand-supabase:before{content:"\f6d3"}.ti-brand-superhuman:before{content:"\f50c"}.ti-brand-supernova:before{content:"\f49c"}.ti-brand-surfshark:before{content:"\f255"}.ti-brand-svelte:before{content:"\f0df"}.ti-brand-swift:before{content:"\fa55"}.ti-brand-symfony:before{content:"\f616"}.ti-brand-tabler:before{content:"\ec8f"}.ti-brand-tailwind:before{content:"\eca1"}.ti-brand-taobao:before{content:"\f5ef"}.ti-brand-teams:before{content:"\fadf"}.ti-brand-ted:before{content:"\f658"}.ti-brand-telegram:before{content:"\ec26"}.ti-brand-terraform:before{content:"\fa56"}.ti-brand-tether:before{content:"\f5a3"}.ti-brand-thingiverse:before{content:"\fd1c"}.ti-brand-threads:before{content:"\fb02"}.ti-brand-threejs:before{content:"\f5f0"}.ti-brand-tidal:before{content:"\ed70"}.ti-brand-tiktok:before{content:"\ec73"}.ti-brand-tiktok-filled:before{content:"\f7ea"}.ti-brand-tinder:before{content:"\ed71"}.ti-brand-topbuzz:before{content:"\f50d"}.ti-brand-torchain:before{content:"\f5a4"}.ti-brand-toyota:before{content:"\f262"}.ti-brand-trello:before{content:"\f39d"}.ti-brand-tripadvisor:before{content:"\f002"}.ti-brand-tumblr:before{content:"\ed04"}.ti-brand-twilio:before{content:"\f617"}.ti-brand-twitch:before{content:"\ed05"}.ti-brand-twitter:before{content:"\ec27"}.ti-brand-twitter-filled:before{content:"\f7eb"}.ti-brand-typescript:before{content:"\f5f1"}.ti-brand-uber:before{content:"\ef75"}.ti-brand-ubuntu:before{content:"\ef59"}.ti-brand-unity:before{content:"\f49d"}.ti-brand-unsplash:before{content:"\edd8"}.ti-brand-upwork:before{content:"\f39e"}.ti-brand-valorant:before{content:"\f39f"}.ti-brand-vercel:before{content:"\ef24"}.ti-brand-vimeo:before{content:"\ed06"}.ti-brand-vinted:before{content:"\f20f"}.ti-brand-visa:before{content:"\f380"}.ti-brand-visual-studio:before{content:"\ef76"}.ti-brand-vite:before{content:"\f5f2"}.ti-brand-vivaldi:before{content:"\f210"}.ti-brand-vk:before{content:"\ed72"}.ti-brand-vlc:before{content:"\fa78"}.ti-brand-volkswagen:before{content:"\f50e"}.ti-brand-vsco:before{content:"\f334"}.ti-brand-vscode:before{content:"\f3a0"}.ti-brand-vue:before{content:"\f0e0"}.ti-brand-walmart:before{content:"\f211"}.ti-brand-waze:before{content:"\f5d8"}.ti-brand-webflow:before{content:"\f2d2"}.ti-brand-wechat:before{content:"\f5f3"}.ti-brand-weibo:before{content:"\f609"}.ti-brand-whatsapp:before{content:"\ec74"}.ti-brand-wikipedia:before{content:"\fa79"}.ti-brand-windows:before{content:"\ecd8"}.ti-brand-windy:before{content:"\f4dd"}.ti-brand-wish:before{content:"\f212"}.ti-brand-wix:before{content:"\f3a1"}.ti-brand-wordpress:before{content:"\f2d3"}.ti-brand-x:before{content:"\fc0f"}.ti-brand-x-filled:before{content:"\fc21"}.ti-brand-xamarin:before{content:"\fa7a"}.ti-brand-xbox:before{content:"\f298"}.ti-brand-xdeep:before{content:"\fc10"}.ti-brand-xing:before{content:"\f21a"}.ti-brand-yahoo:before{content:"\ed73"}.ti-brand-yandex:before{content:"\fae1"}.ti-brand-yarn:before{content:"\fd79"}.ti-brand-yatse:before{content:"\f213"}.ti-brand-ycombinator:before{content:"\edd9"}.ti-brand-youtube:before{content:"\ec90"}.ti-brand-youtube-filled:before{content:"\fc22"}.ti-brand-youtube-kids:before{content:"\f214"}.ti-brand-zalando:before{content:"\f49e"}.ti-brand-zapier:before{content:"\f49f"}.ti-brand-zeit:before{content:"\f335"}.ti-brand-zhihu:before{content:"\f60a"}.ti-brand-zoom:before{content:"\f215"}.ti-brand-zulip:before{content:"\f4de"}.ti-brand-zwift:before{content:"\f216"}.ti-bread:before{content:"\efa3"}.ti-bread-off:before{content:"\f3cb"}.ti-briefcase:before{content:"\ea46"}.ti-briefcase-2:before{content:"\fb03"}.ti-briefcase-filled:before{content:"\fd00"}.ti-briefcase-off:before{content:"\f3cc"}.ti-brightness:before{content:"\eb7f"}.ti-brightness-2:before{content:"\ee19"}.ti-brightness-auto:before{content:"\fd99"}.ti-brightness-down:before{content:"\eb7d"}.ti-brightness-down-filled:before{content:"\fb23"}.ti-brightness-half:before{content:"\ee1a"}.ti-brightness-off:before{content:"\f3cd"}.ti-brightness-up:before{content:"\eb7e"}.ti-brightness-up-filled:before{content:"\fb24"}.ti-broadcast:before{content:"\f1e9"}.ti-broadcast-off:before{content:"\f1e8"}.ti-browser:before{content:"\ebb7"}.ti-browser-check:before{content:"\efd6"}.ti-browser-off:before{content:"\f0c1"}.ti-browser-plus:before{content:"\efd7"}.ti-browser-x:before{content:"\efd8"}.ti-brush:before{content:"\ebb8"}.ti-brush-off:before{content:"\f0c2"}.ti-bucket:before{content:"\ea47"}.ti-bucket-droplet:before{content:"\f56a"}.ti-bucket-off:before{content:"\f103"}.ti-bug:before{content:"\ea48"}.ti-bug-filled:before{content:"\fd01"}.ti-bug-off:before{content:"\f0c3"}.ti-building:before{content:"\ea4f"}.ti-building-arch:before{content:"\ea49"}.ti-building-bank:before{content:"\ebe2"}.ti-building-bridge:before{content:"\ea4b"}.ti-building-bridge-2:before{content:"\ea4a"}.ti-building-broadcast-tower:before{content:"\f4be"}.ti-building-carousel:before{content:"\ed87"}.ti-building-castle:before{content:"\ed88"}.ti-building-church:before{content:"\ea4c"}.ti-building-circus:before{content:"\f4bf"}.ti-building-community:before{content:"\ebf6"}.ti-building-cottage:before{content:"\ee1b"}.ti-building-estate:before{content:"\f5a5"}.ti-building-factory:before{content:"\ee1c"}.ti-building-factory-2:before{content:"\f082"}.ti-building-fortress:before{content:"\ed89"}.ti-building-hospital:before{content:"\ea4d"}.ti-building-lighthouse:before{content:"\ed8a"}.ti-building-monument:before{content:"\ed26"}.ti-building-mosque:before{content:"\fa57"}.ti-building-pavilion:before{content:"\ebf7"}.ti-building-skyscraper:before{content:"\ec39"}.ti-building-stadium:before{content:"\f641"}.ti-building-store:before{content:"\ea4e"}.ti-building-tunnel:before{content:"\f5a6"}.ti-building-warehouse:before{content:"\ebe3"}.ti-building-wind-turbine:before{content:"\f4c0"}.ti-bulb:before{content:"\ea51"}.ti-bulb-filled:before{content:"\f66a"}.ti-bulb-off:before{content:"\ea50"}.ti-bulldozer:before{content:"\ee1d"}.ti-burger:before{content:"\fcb4"}.ti-bus:before{content:"\ebe4"}.ti-bus-off:before{content:"\f3ce"}.ti-bus-stop:before{content:"\f2d4"}.ti-businessplan:before{content:"\ee1e"}.ti-butterfly:before{content:"\efd9"}.ti-cactus:before{content:"\f21b"}.ti-cactus-filled:before{content:"\fb25"}.ti-cactus-off:before{content:"\f3cf"}.ti-cake:before{content:"\f00f"}.ti-cake-off:before{content:"\f104"}.ti-calculator:before{content:"\eb80"}.ti-calculator-filled:before{content:"\fb26"}.ti-calculator-off:before{content:"\f0c4"}.ti-calendar:before{content:"\ea53"}.ti-calendar-bolt:before{content:"\f822"}.ti-calendar-cancel:before{content:"\f823"}.ti-calendar-check:before{content:"\f824"}.ti-calendar-clock:before{content:"\fd2e"}.ti-calendar-code:before{content:"\f825"}.ti-calendar-cog:before{content:"\f826"}.ti-calendar-dollar:before{content:"\f827"}.ti-calendar-dot:before{content:"\fd3e"}.ti-calendar-down:before{content:"\f828"}.ti-calendar-due:before{content:"\f621"}.ti-calendar-event:before{content:"\ea52"}.ti-calendar-exclamation:before{content:"\f829"}.ti-calendar-filled:before{content:"\fb27"}.ti-calendar-heart:before{content:"\f82a"}.ti-calendar-minus:before{content:"\ebb9"}.ti-calendar-month:before{content:"\fd2f"}.ti-calendar-off:before{content:"\ee1f"}.ti-calendar-pause:before{content:"\f82b"}.ti-calendar-pin:before{content:"\f82c"}.ti-calendar-plus:before{content:"\ebba"}.ti-calendar-question:before{content:"\f82d"}.ti-calendar-repeat:before{content:"\fad2"}.ti-calendar-sad:before{content:"\fd1d"}.ti-calendar-search:before{content:"\f82e"}.ti-calendar-share:before{content:"\f82f"}.ti-calendar-smile:before{content:"\fd1e"}.ti-calendar-star:before{content:"\f830"}.ti-calendar-stats:before{content:"\ee20"}.ti-calendar-time:before{content:"\ee21"}.ti-calendar-up:before{content:"\f831"}.ti-calendar-user:before{content:"\fd1f"}.ti-calendar-week:before{content:"\fd30"}.ti-calendar-x:before{content:"\f832"}.ti-camera:before{content:"\ea54"}.ti-camera-bolt:before{content:"\f833"}.ti-camera-cancel:before{content:"\f834"}.ti-camera-check:before{content:"\f835"}.ti-camera-code:before{content:"\f836"}.ti-camera-cog:before{content:"\f837"}.ti-camera-dollar:before{content:"\f838"}.ti-camera-down:before{content:"\f839"}.ti-camera-exclamation:before{content:"\f83a"}.ti-camera-filled:before{content:"\fa37"}.ti-camera-heart:before{content:"\f83b"}.ti-camera-minus:before{content:"\ec3a"}.ti-camera-off:before{content:"\ecee"}.ti-camera-pause:before{content:"\f83c"}.ti-camera-pin:before{content:"\f83d"}.ti-camera-plus:before{content:"\ec3b"}.ti-camera-question:before{content:"\f83e"}.ti-camera-rotate:before{content:"\ee22"}.ti-camera-search:before{content:"\f83f"}.ti-camera-selfie:before{content:"\ee23"}.ti-camera-share:before{content:"\f840"}.ti-camera-star:before{content:"\f841"}.ti-camera-up:before{content:"\f842"}.ti-camera-x:before{content:"\f843"}.ti-camper:before{content:"\fa25"}.ti-campfire:before{content:"\f5a7"}.ti-campfire-filled:before{content:"\fb28"}.ti-candle:before{content:"\efc6"}.ti-candle-filled:before{content:"\fc23"}.ti-candy:before{content:"\ef0d"}.ti-candy-off:before{content:"\f0c5"}.ti-cane:before{content:"\f50f"}.ti-cannabis:before{content:"\f4c1"}.ti-capsule:before{content:"\fae3"}.ti-capsule-filled:before{content:"\fc24"}.ti-capsule-horizontal:before{content:"\fae2"}.ti-capsule-horizontal-filled:before{content:"\fc25"}.ti-capture:before{content:"\ec3c"}.ti-capture-filled:before{content:"\fb29"}.ti-capture-off:before{content:"\f0c6"}.ti-car:before{content:"\ebbb"}.ti-car-crane:before{content:"\ef25"}.ti-car-crash:before{content:"\efa4"}.ti-car-garage:before{content:"\fc77"}.ti-car-off:before{content:"\f0c7"}.ti-car-suv:before{content:"\fc8b"}.ti-car-turbine:before{content:"\f4fd"}.ti-caravan:before{content:"\ec7c"}.ti-cardboards:before{content:"\ed74"}.ti-cardboards-off:before{content:"\f0c8"}.ti-cards:before{content:"\f510"}.ti-cards-filled:before{content:"\fc26"}.ti-caret-down:before{content:"\eb5d"}.ti-caret-down-filled:before{content:"\fb2a"}.ti-caret-left:before{content:"\eb5e"}.ti-caret-left-filled:before{content:"\fb2b"}.ti-caret-left-right:before{content:"\fc43"}.ti-caret-left-right-filled:before{content:"\fd02"}.ti-caret-right:before{content:"\eb5f"}.ti-caret-right-filled:before{content:"\fb2c"}.ti-caret-up:before{content:"\eb60"}.ti-caret-up-down:before{content:"\fc44"}.ti-caret-up-down-filled:before{content:"\fd03"}.ti-caret-up-filled:before{content:"\fb2d"}.ti-carousel-horizontal:before{content:"\f659"}.ti-carousel-horizontal-filled:before{content:"\fa92"}.ti-carousel-vertical:before{content:"\f65a"}.ti-carousel-vertical-filled:before{content:"\fa93"}.ti-carrot:before{content:"\f21c"}.ti-carrot-off:before{content:"\f3d0"}.ti-cash:before{content:"\ea55"}.ti-cash-banknote:before{content:"\ee25"}.ti-cash-banknote-off:before{content:"\ee24"}.ti-cash-off:before{content:"\f105"}.ti-cast:before{content:"\ea56"}.ti-cast-off:before{content:"\f0c9"}.ti-cat:before{content:"\f65b"}.ti-category:before{content:"\f1f6"}.ti-category-2:before{content:"\f1f5"}.ti-category-filled:before{content:"\fb2e"}.ti-category-minus:before{content:"\fd20"}.ti-category-plus:before{content:"\fd21"}.ti-ce:before{content:"\ed75"}.ti-ce-off:before{content:"\f0ca"}.ti-cell:before{content:"\f05f"}.ti-cell-signal-1:before{content:"\f083"}.ti-cell-signal-2:before{content:"\f084"}.ti-cell-signal-3:before{content:"\f085"}.ti-cell-signal-4:before{content:"\f086"}.ti-cell-signal-5:before{content:"\f087"}.ti-cell-signal-off:before{content:"\f088"}.ti-certificate:before{content:"\ed76"}.ti-certificate-2:before{content:"\f073"}.ti-certificate-2-off:before{content:"\f0cb"}.ti-certificate-off:before{content:"\f0cc"}.ti-chair-director:before{content:"\f2d5"}.ti-chalkboard:before{content:"\f34d"}.ti-chalkboard-off:before{content:"\f3d1"}.ti-charging-pile:before{content:"\ee26"}.ti-chart-arcs:before{content:"\ee28"}.ti-chart-arcs-3:before{content:"\ee27"}.ti-chart-area:before{content:"\ea58"}.ti-chart-area-filled:before{content:"\f66b"}.ti-chart-area-line:before{content:"\ea57"}.ti-chart-area-line-filled:before{content:"\f66c"}.ti-chart-arrows:before{content:"\ee2a"}.ti-chart-arrows-vertical:before{content:"\ee29"}.ti-chart-bar:before{content:"\ea59"}.ti-chart-bar-off:before{content:"\f3d2"}.ti-chart-bubble:before{content:"\ec75"}.ti-chart-bubble-filled:before{content:"\f66d"}.ti-chart-candle:before{content:"\ea5a"}.ti-chart-candle-filled:before{content:"\f66e"}.ti-chart-circles:before{content:"\ee2b"}.ti-chart-donut:before{content:"\ea5b"}.ti-chart-donut-2:before{content:"\ee2c"}.ti-chart-donut-3:before{content:"\ee2d"}.ti-chart-donut-4:before{content:"\ee2e"}.ti-chart-donut-filled:before{content:"\f66f"}.ti-chart-dots:before{content:"\ee2f"}.ti-chart-dots-2:before{content:"\f097"}.ti-chart-dots-3:before{content:"\f098"}.ti-chart-dots-filled:before{content:"\fd04"}.ti-chart-grid-dots:before{content:"\f4c2"}.ti-chart-grid-dots-filled:before{content:"\fd05"}.ti-chart-histogram:before{content:"\f65c"}.ti-chart-infographic:before{content:"\ee30"}.ti-chart-line:before{content:"\ea5c"}.ti-chart-pie:before{content:"\ea5d"}.ti-chart-pie-2:before{content:"\ee31"}.ti-chart-pie-3:before{content:"\ee32"}.ti-chart-pie-4:before{content:"\ee33"}.ti-chart-pie-filled:before{content:"\f670"}.ti-chart-pie-off:before{content:"\f3d3"}.ti-chart-ppf:before{content:"\f618"}.ti-chart-radar:before{content:"\ed77"}.ti-chart-sankey:before{content:"\f619"}.ti-chart-scatter:before{content:"\fd93"}.ti-chart-scatter-3d:before{content:"\fd92"}.ti-chart-treemap:before{content:"\f381"}.ti-check:before{content:"\ea5e"}.ti-checkbox:before{content:"\eba6"}.ti-checklist:before{content:"\f074"}.ti-checks:before{content:"\ebaa"}.ti-checkup-list:before{content:"\ef5a"}.ti-cheese:before{content:"\ef26"}.ti-chef-hat:before{content:"\f21d"}.ti-chef-hat-off:before{content:"\f3d4"}.ti-cherry:before{content:"\f511"}.ti-cherry-filled:before{content:"\f728"}.ti-chess:before{content:"\f382"}.ti-chess-bishop:before{content:"\f56b"}.ti-chess-bishop-filled:before{content:"\f729"}.ti-chess-filled:before{content:"\f72a"}.ti-chess-king:before{content:"\f56c"}.ti-chess-king-filled:before{content:"\f72b"}.ti-chess-knight:before{content:"\f56d"}.ti-chess-knight-filled:before{content:"\f72c"}.ti-chess-queen:before{content:"\f56e"}.ti-chess-queen-filled:before{content:"\f72d"}.ti-chess-rook:before{content:"\f56f"}.ti-chess-rook-filled:before{content:"\f72e"}.ti-chevron-compact-down:before{content:"\faf0"}.ti-chevron-compact-left:before{content:"\faf1"}.ti-chevron-compact-right:before{content:"\faf2"}.ti-chevron-compact-up:before{content:"\faf3"}.ti-chevron-down:before{content:"\ea5f"}.ti-chevron-down-left:before{content:"\ed09"}.ti-chevron-down-right:before{content:"\ed0a"}.ti-chevron-left:before{content:"\ea60"}.ti-chevron-left-pipe:before{content:"\fae4"}.ti-chevron-right:before{content:"\ea61"}.ti-chevron-right-pipe:before{content:"\fae5"}.ti-chevron-up:before{content:"\ea62"}.ti-chevron-up-left:before{content:"\ed0b"}.ti-chevron-up-right:before{content:"\ed0c"}.ti-chevrons-down:before{content:"\ea63"}.ti-chevrons-down-left:before{content:"\ed0d"}.ti-chevrons-down-right:before{content:"\ed0e"}.ti-chevrons-left:before{content:"\ea64"}.ti-chevrons-right:before{content:"\ea65"}.ti-chevrons-up:before{content:"\ea66"}.ti-chevrons-up-left:before{content:"\ed0f"}.ti-chevrons-up-right:before{content:"\ed10"}.ti-chisel:before{content:"\f383"}.ti-christmas-ball:before{content:"\fd31"}.ti-christmas-tree:before{content:"\ed78"}.ti-christmas-tree-off:before{content:"\f3d5"}.ti-circle:before{content:"\ea6b"}.ti-circle-0-filled:before{content:"\f72f"}.ti-circle-1-filled:before{content:"\f730"}.ti-circle-2-filled:before{content:"\f731"}.ti-circle-3-filled:before{content:"\f732"}.ti-circle-4-filled:before{content:"\f733"}.ti-circle-5-filled:before{content:"\f734"}.ti-circle-6-filled:before{content:"\f735"}.ti-circle-7-filled:before{content:"\f736"}.ti-circle-8-filled:before{content:"\f737"}.ti-circle-9-filled:before{content:"\f738"}.ti-circle-arrow-down:before{content:"\f6f9"}.ti-circle-arrow-down-filled:before{content:"\f6f4"}.ti-circle-arrow-down-left:before{content:"\f6f6"}.ti-circle-arrow-down-left-filled:before{content:"\f6f5"}.ti-circle-arrow-down-right:before{content:"\f6f8"}.ti-circle-arrow-down-right-filled:before{content:"\f6f7"}.ti-circle-arrow-left:before{content:"\f6fb"}.ti-circle-arrow-left-filled:before{content:"\f6fa"}.ti-circle-arrow-right:before{content:"\f6fd"}.ti-circle-arrow-right-filled:before{content:"\f6fc"}.ti-circle-arrow-up:before{content:"\f703"}.ti-circle-arrow-up-filled:before{content:"\f6fe"}.ti-circle-arrow-up-left:before{content:"\f700"}.ti-circle-arrow-up-left-filled:before{content:"\f6ff"}.ti-circle-arrow-up-right:before{content:"\f702"}.ti-circle-arrow-up-right-filled:before{content:"\f701"}.ti-circle-caret-down:before{content:"\f4a9"}.ti-circle-caret-left:before{content:"\f4aa"}.ti-circle-caret-right:before{content:"\f4ab"}.ti-circle-caret-up:before{content:"\f4ac"}.ti-circle-check:before{content:"\ea67"}.ti-circle-check-filled:before{content:"\f704"}.ti-circle-chevron-down:before{content:"\f622"}.ti-circle-chevron-left:before{content:"\f623"}.ti-circle-chevron-right:before{content:"\f624"}.ti-circle-chevron-up:before{content:"\f625"}.ti-circle-chevrons-down:before{content:"\f642"}.ti-circle-chevrons-left:before{content:"\f643"}.ti-circle-chevrons-right:before{content:"\f644"}.ti-circle-chevrons-up:before{content:"\f645"}.ti-circle-dashed:before{content:"\ed27"}.ti-circle-dashed-number-0:before{content:"\fc6b"}.ti-circle-dashed-number-1:before{content:"\fc6c"}.ti-circle-dashed-number-2:before{content:"\fc6d"}.ti-circle-dashed-number-3:before{content:"\fc6e"}.ti-circle-dashed-number-4:before{content:"\fc6f"}.ti-circle-dashed-number-5:before{content:"\fc70"}.ti-circle-dashed-number-6:before{content:"\fc71"}.ti-circle-dashed-number-7:before{content:"\fc72"}.ti-circle-dashed-number-8:before{content:"\fc73"}.ti-circle-dashed-number-9:before{content:"\fc74"}.ti-circle-dashed-percentage:before{content:"\fd7a"}.ti-circle-dashed-x:before{content:"\fc75"}.ti-circle-dot:before{content:"\efb1"}.ti-circle-dot-filled:before{content:"\f705"}.ti-circle-dotted:before{content:"\ed28"}.ti-circle-filled:before{content:"\f671"}.ti-circle-half:before{content:"\ee3f"}.ti-circle-half-2:before{content:"\eff3"}.ti-circle-half-vertical:before{content:"\ee3e"}.ti-circle-key:before{content:"\f633"}.ti-circle-key-filled:before{content:"\f706"}.ti-circle-letter-a:before{content:"\f441"}.ti-circle-letter-b:before{content:"\f442"}.ti-circle-letter-c:before{content:"\f443"}.ti-circle-letter-d:before{content:"\f444"}.ti-circle-letter-e:before{content:"\f445"}.ti-circle-letter-f:before{content:"\f446"}.ti-circle-letter-g:before{content:"\f447"}.ti-circle-letter-h:before{content:"\f448"}.ti-circle-letter-i:before{content:"\f449"}.ti-circle-letter-j:before{content:"\f44a"}.ti-circle-letter-k:before{content:"\f44b"}.ti-circle-letter-l:before{content:"\f44c"}.ti-circle-letter-m:before{content:"\f44d"}.ti-circle-letter-n:before{content:"\f44e"}.ti-circle-letter-o:before{content:"\f44f"}.ti-circle-letter-p:before{content:"\f450"}.ti-circle-letter-q:before{content:"\f451"}.ti-circle-letter-r:before{content:"\f452"}.ti-circle-letter-s:before{content:"\f453"}.ti-circle-letter-t:before{content:"\f454"}.ti-circle-letter-u:before{content:"\f455"}.ti-circle-letter-v:before{content:"\f4ad"}.ti-circle-letter-w:before{content:"\f456"}.ti-circle-letter-x:before{content:"\f4ae"}.ti-circle-letter-y:before{content:"\f457"}.ti-circle-letter-z:before{content:"\f458"}.ti-circle-minus:before{content:"\ea68"}.ti-circle-minus-2:before{content:"\fc8c"}.ti-circle-number-0:before{content:"\ee34"}.ti-circle-number-1:before{content:"\ee35"}.ti-circle-number-2:before{content:"\ee36"}.ti-circle-number-3:before{content:"\ee37"}.ti-circle-number-4:before{content:"\ee38"}.ti-circle-number-5:before{content:"\ee39"}.ti-circle-number-6:before{content:"\ee3a"}.ti-circle-number-7:before{content:"\ee3b"}.ti-circle-number-8:before{content:"\ee3c"}.ti-circle-number-9:before{content:"\ee3d"}.ti-circle-off:before{content:"\ee40"}.ti-circle-percentage:before{content:"\fd7b"}.ti-circle-plus:before{content:"\ea69"}.ti-circle-plus-2:before{content:"\fc8d"}.ti-circle-rectangle:before{content:"\f010"}.ti-circle-rectangle-off:before{content:"\f0cd"}.ti-circle-square:before{content:"\ece4"}.ti-circle-triangle:before{content:"\f011"}.ti-circle-x:before{content:"\ea6a"}.ti-circle-x-filled:before{content:"\f739"}.ti-circles:before{content:"\ece5"}.ti-circles-filled:before{content:"\f672"}.ti-circles-relation:before{content:"\f4c3"}.ti-circuit-ammeter:before{content:"\f271"}.ti-circuit-battery:before{content:"\f272"}.ti-circuit-bulb:before{content:"\f273"}.ti-circuit-capacitor:before{content:"\f275"}.ti-circuit-capacitor-polarized:before{content:"\f274"}.ti-circuit-cell:before{content:"\f277"}.ti-circuit-cell-plus:before{content:"\f276"}.ti-circuit-changeover:before{content:"\f278"}.ti-circuit-diode:before{content:"\f27a"}.ti-circuit-diode-zener:before{content:"\f279"}.ti-circuit-ground:before{content:"\f27c"}.ti-circuit-ground-digital:before{content:"\f27b"}.ti-circuit-inductor:before{content:"\f27d"}.ti-circuit-motor:before{content:"\f27e"}.ti-circuit-pushbutton:before{content:"\f27f"}.ti-circuit-resistor:before{content:"\f280"}.ti-circuit-switch-closed:before{content:"\f281"}.ti-circuit-switch-open:before{content:"\f282"}.ti-circuit-voltmeter:before{content:"\f283"}.ti-clear-all:before{content:"\ee41"}.ti-clear-formatting:before{content:"\ebe5"}.ti-click:before{content:"\ebbc"}.ti-clipboard:before{content:"\ea6f"}.ti-clipboard-check:before{content:"\ea6c"}.ti-clipboard-copy:before{content:"\f299"}.ti-clipboard-data:before{content:"\f563"}.ti-clipboard-heart:before{content:"\f34e"}.ti-clipboard-list:before{content:"\ea6d"}.ti-clipboard-off:before{content:"\f0ce"}.ti-clipboard-plus:before{content:"\efb2"}.ti-clipboard-smile:before{content:"\fd9a"}.ti-clipboard-text:before{content:"\f089"}.ti-clipboard-typography:before{content:"\f34f"}.ti-clipboard-x:before{content:"\ea6e"}.ti-clock:before{content:"\ea70"}.ti-clock-12:before{content:"\fc56"}.ti-clock-2:before{content:"\f099"}.ti-clock-24:before{content:"\fc57"}.ti-clock-bolt:before{content:"\f844"}.ti-clock-cancel:before{content:"\f546"}.ti-clock-check:before{content:"\f7c1"}.ti-clock-code:before{content:"\f845"}.ti-clock-cog:before{content:"\f7c2"}.ti-clock-dollar:before{content:"\f846"}.ti-clock-down:before{content:"\f7c3"}.ti-clock-edit:before{content:"\f547"}.ti-clock-exclamation:before{content:"\f847"}.ti-clock-filled:before{content:"\f73a"}.ti-clock-heart:before{content:"\f7c4"}.ti-clock-hour-1:before{content:"\f313"}.ti-clock-hour-10:before{content:"\f314"}.ti-clock-hour-11:before{content:"\f315"}.ti-clock-hour-12:before{content:"\f316"}.ti-clock-hour-2:before{content:"\f317"}.ti-clock-hour-3:before{content:"\f318"}.ti-clock-hour-4:before{content:"\f319"}.ti-clock-hour-5:before{content:"\f31a"}.ti-clock-hour-6:before{content:"\f31b"}.ti-clock-hour-7:before{content:"\f31c"}.ti-clock-hour-8:before{content:"\f31d"}.ti-clock-hour-9:before{content:"\f31e"}.ti-clock-minus:before{content:"\f848"}.ti-clock-off:before{content:"\f0cf"}.ti-clock-pause:before{content:"\f548"}.ti-clock-pin:before{content:"\f849"}.ti-clock-play:before{content:"\f549"}.ti-clock-plus:before{content:"\f7c5"}.ti-clock-question:before{content:"\f7c6"}.ti-clock-record:before{content:"\f54a"}.ti-clock-search:before{content:"\f7c7"}.ti-clock-share:before{content:"\f84a"}.ti-clock-shield:before{content:"\f7c8"}.ti-clock-star:before{content:"\f7c9"}.ti-clock-stop:before{content:"\f54b"}.ti-clock-up:before{content:"\f7ca"}.ti-clock-x:before{content:"\f7cb"}.ti-clothes-rack:before{content:"\f285"}.ti-clothes-rack-off:before{content:"\f3d6"}.ti-cloud:before{content:"\ea76"}.ti-cloud-bolt:before{content:"\f84b"}.ti-cloud-cancel:before{content:"\f84c"}.ti-cloud-check:before{content:"\f84d"}.ti-cloud-code:before{content:"\f84e"}.ti-cloud-cog:before{content:"\f84f"}.ti-cloud-computing:before{content:"\f1d0"}.ti-cloud-data-connection:before{content:"\f1d1"}.ti-cloud-dollar:before{content:"\f850"}.ti-cloud-down:before{content:"\f851"}.ti-cloud-download:before{content:"\ea71"}.ti-cloud-exclamation:before{content:"\f852"}.ti-cloud-filled:before{content:"\f673"}.ti-cloud-fog:before{content:"\ecd9"}.ti-cloud-heart:before{content:"\f853"}.ti-cloud-lock:before{content:"\efdb"}.ti-cloud-lock-open:before{content:"\efda"}.ti-cloud-minus:before{content:"\f854"}.ti-cloud-network:before{content:"\fc78"}.ti-cloud-off:before{content:"\ed3e"}.ti-cloud-pause:before{content:"\f855"}.ti-cloud-pin:before{content:"\f856"}.ti-cloud-plus:before{content:"\f857"}.ti-cloud-question:before{content:"\f858"}.ti-cloud-rain:before{content:"\ea72"}.ti-cloud-search:before{content:"\f859"}.ti-cloud-share:before{content:"\f85a"}.ti-cloud-snow:before{content:"\ea73"}.ti-cloud-star:before{content:"\f85b"}.ti-cloud-storm:before{content:"\ea74"}.ti-cloud-up:before{content:"\f85c"}.ti-cloud-upload:before{content:"\ea75"}.ti-cloud-x:before{content:"\f85d"}.ti-clover:before{content:"\f1ea"}.ti-clover-2:before{content:"\f21e"}.ti-clubs:before{content:"\eff4"}.ti-clubs-filled:before{content:"\f674"}.ti-code:before{content:"\ea77"}.ti-code-asterix:before{content:"\f312"}.ti-code-circle:before{content:"\f4ff"}.ti-code-circle-2:before{content:"\f4fe"}.ti-code-dots:before{content:"\f61a"}.ti-code-minus:before{content:"\ee42"}.ti-code-off:before{content:"\f0d0"}.ti-code-plus:before{content:"\ee43"}.ti-coffee:before{content:"\ef0e"}.ti-coffee-off:before{content:"\f106"}.ti-coffin:before{content:"\f579"}.ti-coin:before{content:"\eb82"}.ti-coin-bitcoin:before{content:"\f2be"}.ti-coin-bitcoin-filled:before{content:"\fd06"}.ti-coin-euro:before{content:"\f2bf"}.ti-coin-euro-filled:before{content:"\fd07"}.ti-coin-filled:before{content:"\fd08"}.ti-coin-monero:before{content:"\f4a0"}.ti-coin-monero-filled:before{content:"\fd09"}.ti-coin-off:before{content:"\f0d1"}.ti-coin-pound:before{content:"\f2c0"}.ti-coin-pound-filled:before{content:"\fd0a"}.ti-coin-rupee:before{content:"\f2c1"}.ti-coin-rupee-filled:before{content:"\fd0b"}.ti-coin-taka:before{content:"\fd0d"}.ti-coin-taka-filled:before{content:"\fd0c"}.ti-coin-yen:before{content:"\f2c2"}.ti-coin-yen-filled:before{content:"\fd0e"}.ti-coin-yuan:before{content:"\f2c3"}.ti-coin-yuan-filled:before{content:"\fd0f"}.ti-coins:before{content:"\f65d"}.ti-color-filter:before{content:"\f5a8"}.ti-color-picker:before{content:"\ebe6"}.ti-color-picker-off:before{content:"\f0d2"}.ti-color-swatch:before{content:"\eb61"}.ti-color-swatch-off:before{content:"\f0d3"}.ti-column-insert-left:before{content:"\ee44"}.ti-column-insert-right:before{content:"\ee45"}.ti-column-remove:before{content:"\faf4"}.ti-columns:before{content:"\eb83"}.ti-columns-1:before{content:"\f6d4"}.ti-columns-2:before{content:"\f6d5"}.ti-columns-3:before{content:"\f6d6"}.ti-columns-off:before{content:"\f0d4"}.ti-comet:before{content:"\ec76"}.ti-command:before{content:"\ea78"}.ti-command-off:before{content:"\f3d7"}.ti-compass:before{content:"\ea79"}.ti-compass-filled:before{content:"\fd10"}.ti-compass-off:before{content:"\f0d5"}.ti-components:before{content:"\efa5"}.ti-components-off:before{content:"\f0d6"}.ti-cone:before{content:"\efdd"}.ti-cone-2:before{content:"\efdc"}.ti-cone-off:before{content:"\f3d8"}.ti-cone-plus:before{content:"\fa94"}.ti-confetti:before{content:"\ee46"}.ti-confetti-off:before{content:"\f3d9"}.ti-confucius:before{content:"\f58a"}.ti-container:before{content:"\ee47"}.ti-container-off:before{content:"\f107"}.ti-contrast:before{content:"\ec4e"}.ti-contrast-2:before{content:"\efc7"}.ti-contrast-2-off:before{content:"\f3da"}.ti-contrast-off:before{content:"\f3db"}.ti-cooker:before{content:"\f57a"}.ti-cookie:before{content:"\ef0f"}.ti-cookie-man:before{content:"\f4c4"}.ti-cookie-off:before{content:"\f0d7"}.ti-copy:before{content:"\ea7a"}.ti-copy-check:before{content:"\fd3f"}.ti-copy-minus:before{content:"\fd40"}.ti-copy-off:before{content:"\f0d8"}.ti-copy-plus:before{content:"\fd41"}.ti-copy-x:before{content:"\fd42"}.ti-copyleft:before{content:"\ec3d"}.ti-copyleft-filled:before{content:"\f73b"}.ti-copyleft-off:before{content:"\f0d9"}.ti-copyright:before{content:"\ea7b"}.ti-copyright-filled:before{content:"\f73c"}.ti-copyright-off:before{content:"\f0da"}.ti-corner-down-left:before{content:"\ea7c"}.ti-corner-down-left-double:before{content:"\ee48"}.ti-corner-down-right:before{content:"\ea7d"}.ti-corner-down-right-double:before{content:"\ee49"}.ti-corner-left-down:before{content:"\ea7e"}.ti-corner-left-down-double:before{content:"\ee4a"}.ti-corner-left-up:before{content:"\ea7f"}.ti-corner-left-up-double:before{content:"\ee4b"}.ti-corner-right-down:before{content:"\ea80"}.ti-corner-right-down-double:before{content:"\ee4c"}.ti-corner-right-up:before{content:"\ea81"}.ti-corner-right-up-double:before{content:"\ee4d"}.ti-corner-up-left:before{content:"\ea82"}.ti-corner-up-left-double:before{content:"\ee4e"}.ti-corner-up-right:before{content:"\ea83"}.ti-corner-up-right-double:before{content:"\ee4f"}.ti-cpu:before{content:"\ef8e"}.ti-cpu-2:before{content:"\f075"}.ti-cpu-off:before{content:"\f108"}.ti-crane:before{content:"\ef27"}.ti-crane-off:before{content:"\f109"}.ti-creative-commons:before{content:"\efb3"}.ti-creative-commons-by:before{content:"\f21f"}.ti-creative-commons-nc:before{content:"\f220"}.ti-creative-commons-nd:before{content:"\f221"}.ti-creative-commons-off:before{content:"\f10a"}.ti-creative-commons-sa:before{content:"\f222"}.ti-creative-commons-zero:before{content:"\f223"}.ti-credit-card:before{content:"\ea84"}.ti-credit-card-filled:before{content:"\fd11"}.ti-credit-card-off:before{content:"\ed11"}.ti-credit-card-pay:before{content:"\fd32"}.ti-credit-card-refund:before{content:"\fd33"}.ti-cricket:before{content:"\f09a"}.ti-crop:before{content:"\ea85"}.ti-crop-1-1:before{content:"\fd50"}.ti-crop-16-9:before{content:"\fd51"}.ti-crop-3-2:before{content:"\fd52"}.ti-crop-5-4:before{content:"\fd53"}.ti-crop-7-5:before{content:"\fd54"}.ti-crop-landscape:before{content:"\fd55"}.ti-crop-portrait:before{content:"\fd56"}.ti-cross:before{content:"\ef8f"}.ti-cross-filled:before{content:"\f675"}.ti-cross-off:before{content:"\f10b"}.ti-crosshair:before{content:"\ec3e"}.ti-crown:before{content:"\ed12"}.ti-crown-off:before{content:"\ee50"}.ti-crutches:before{content:"\ef5b"}.ti-crutches-off:before{content:"\f10c"}.ti-crystal-ball:before{content:"\f57b"}.ti-csv:before{content:"\f791"}.ti-cube:before{content:"\fa97"}.ti-cube-off:before{content:"\fa95"}.ti-cube-plus:before{content:"\fa96"}.ti-cube-send:before{content:"\f61b"}.ti-cube-unfolded:before{content:"\f61c"}.ti-cup:before{content:"\ef28"}.ti-cup-off:before{content:"\f10d"}.ti-curling:before{content:"\efc8"}.ti-curly-loop:before{content:"\ecda"}.ti-currency:before{content:"\efa6"}.ti-currency-afghani:before{content:"\f65e"}.ti-currency-bahraini:before{content:"\ee51"}.ti-currency-baht:before{content:"\f08a"}.ti-currency-bitcoin:before{content:"\ebab"}.ti-currency-cent:before{content:"\ee53"}.ti-currency-dinar:before{content:"\ee54"}.ti-currency-dirham:before{content:"\ee55"}.ti-currency-dogecoin:before{content:"\ef4b"}.ti-currency-dollar:before{content:"\eb84"}.ti-currency-dollar-australian:before{content:"\ee56"}.ti-currency-dollar-brunei:before{content:"\f36c"}.ti-currency-dollar-canadian:before{content:"\ee57"}.ti-currency-dollar-guyanese:before{content:"\f36d"}.ti-currency-dollar-off:before{content:"\f3dc"}.ti-currency-dollar-singapore:before{content:"\ee58"}.ti-currency-dollar-zimbabwean:before{content:"\f36e"}.ti-currency-dong:before{content:"\f36f"}.ti-currency-dram:before{content:"\f370"}.ti-currency-ethereum:before{content:"\ee59"}.ti-currency-euro:before{content:"\eb85"}.ti-currency-euro-off:before{content:"\f3dd"}.ti-currency-florin:before{content:"\faf5"}.ti-currency-forint:before{content:"\ee5a"}.ti-currency-frank:before{content:"\ee5b"}.ti-currency-guarani:before{content:"\f371"}.ti-currency-hryvnia:before{content:"\f372"}.ti-currency-iranian-rial:before{content:"\fa58"}.ti-currency-kip:before{content:"\f373"}.ti-currency-krone-czech:before{content:"\ee5c"}.ti-currency-krone-danish:before{content:"\ee5d"}.ti-currency-krone-swedish:before{content:"\ee5e"}.ti-currency-lari:before{content:"\f374"}.ti-currency-leu:before{content:"\ee5f"}.ti-currency-lira:before{content:"\ee60"}.ti-currency-litecoin:before{content:"\ee61"}.ti-currency-lyd:before{content:"\f375"}.ti-currency-manat:before{content:"\f376"}.ti-currency-monero:before{content:"\f377"}.ti-currency-naira:before{content:"\ee62"}.ti-currency-nano:before{content:"\f7a6"}.ti-currency-off:before{content:"\f3de"}.ti-currency-paanga:before{content:"\f378"}.ti-currency-peso:before{content:"\f65f"}.ti-currency-pound:before{content:"\ebac"}.ti-currency-pound-off:before{content:"\f3df"}.ti-currency-quetzal:before{content:"\f379"}.ti-currency-real:before{content:"\ee63"}.ti-currency-renminbi:before{content:"\ee64"}.ti-currency-ripple:before{content:"\ee65"}.ti-currency-riyal:before{content:"\ee66"}.ti-currency-rubel:before{content:"\ee67"}.ti-currency-rufiyaa:before{content:"\f37a"}.ti-currency-rupee:before{content:"\ebad"}.ti-currency-rupee-nepalese:before{content:"\f37b"}.ti-currency-shekel:before{content:"\ee68"}.ti-currency-solana:before{content:"\f4a1"}.ti-currency-som:before{content:"\f37c"}.ti-currency-taka:before{content:"\ee69"}.ti-currency-tenge:before{content:"\f37d"}.ti-currency-tugrik:before{content:"\ee6a"}.ti-currency-won:before{content:"\ee6b"}.ti-currency-xrp:before{content:"\fd34"}.ti-currency-yen:before{content:"\ebae"}.ti-currency-yen-off:before{content:"\f3e0"}.ti-currency-yuan:before{content:"\f29a"}.ti-currency-zloty:before{content:"\ee6c"}.ti-current-location:before{content:"\ecef"}.ti-current-location-off:before{content:"\f10e"}.ti-cursor-off:before{content:"\f10f"}.ti-cursor-text:before{content:"\ee6d"}.ti-cut:before{content:"\ea86"}.ti-cylinder:before{content:"\f54c"}.ti-cylinder-off:before{content:"\fa98"}.ti-cylinder-plus:before{content:"\fa99"}.ti-dashboard:before{content:"\ea87"}.ti-dashboard-off:before{content:"\f3e1"}.ti-database:before{content:"\ea88"}.ti-database-cog:before{content:"\fa10"}.ti-database-dollar:before{content:"\fa11"}.ti-database-edit:before{content:"\fa12"}.ti-database-exclamation:before{content:"\fa13"}.ti-database-export:before{content:"\ee6e"}.ti-database-heart:before{content:"\fa14"}.ti-database-import:before{content:"\ee6f"}.ti-database-leak:before{content:"\fa15"}.ti-database-minus:before{content:"\fa16"}.ti-database-off:before{content:"\ee70"}.ti-database-plus:before{content:"\fa17"}.ti-database-search:before{content:"\fa18"}.ti-database-share:before{content:"\fa19"}.ti-database-smile:before{content:"\fd9b"}.ti-database-star:before{content:"\fa1a"}.ti-database-x:before{content:"\fa1b"}.ti-decimal:before{content:"\fa26"}.ti-deer:before{content:"\f4c5"}.ti-delta:before{content:"\f53c"}.ti-dental:before{content:"\f025"}.ti-dental-broken:before{content:"\f286"}.ti-dental-off:before{content:"\f110"}.ti-deselect:before{content:"\f9f3"}.ti-desk:before{content:"\fd35"}.ti-details:before{content:"\ee71"}.ti-details-off:before{content:"\f3e2"}.ti-device-airpods:before{content:"\f5a9"}.ti-device-airpods-case:before{content:"\f646"}.ti-device-airtag:before{content:"\fae6"}.ti-device-analytics:before{content:"\ee72"}.ti-device-audio-tape:before{content:"\ee73"}.ti-device-camera-phone:before{content:"\f233"}.ti-device-cctv:before{content:"\ee74"}.ti-device-cctv-off:before{content:"\f3e3"}.ti-device-computer-camera:before{content:"\ee76"}.ti-device-computer-camera-off:before{content:"\ee75"}.ti-device-desktop:before{content:"\ea89"}.ti-device-desktop-analytics:before{content:"\ee77"}.ti-device-desktop-bolt:before{content:"\f85e"}.ti-device-desktop-cancel:before{content:"\f85f"}.ti-device-desktop-check:before{content:"\f860"}.ti-device-desktop-code:before{content:"\f861"}.ti-device-desktop-cog:before{content:"\f862"}.ti-device-desktop-dollar:before{content:"\f863"}.ti-device-desktop-down:before{content:"\f864"}.ti-device-desktop-exclamation:before{content:"\f865"}.ti-device-desktop-heart:before{content:"\f866"}.ti-device-desktop-minus:before{content:"\f867"}.ti-device-desktop-off:before{content:"\ee78"}.ti-device-desktop-pause:before{content:"\f868"}.ti-device-desktop-pin:before{content:"\f869"}.ti-device-desktop-plus:before{content:"\f86a"}.ti-device-desktop-question:before{content:"\f86b"}.ti-device-desktop-search:before{content:"\f86c"}.ti-device-desktop-share:before{content:"\f86d"}.ti-device-desktop-star:before{content:"\f86e"}.ti-device-desktop-up:before{content:"\f86f"}.ti-device-desktop-x:before{content:"\f870"}.ti-device-floppy:before{content:"\eb62"}.ti-device-gamepad:before{content:"\eb63"}.ti-device-gamepad-2:before{content:"\f1d2"}.ti-device-gamepad-3:before{content:"\fc58"}.ti-device-heart-monitor:before{content:"\f060"}.ti-device-heart-monitor-filled:before{content:"\fa38"}.ti-device-imac:before{content:"\f7a7"}.ti-device-imac-bolt:before{content:"\f871"}.ti-device-imac-cancel:before{content:"\f872"}.ti-device-imac-check:before{content:"\f873"}.ti-device-imac-code:before{content:"\f874"}.ti-device-imac-cog:before{content:"\f875"}.ti-device-imac-dollar:before{content:"\f876"}.ti-device-imac-down:before{content:"\f877"}.ti-device-imac-exclamation:before{content:"\f878"}.ti-device-imac-heart:before{content:"\f879"}.ti-device-imac-minus:before{content:"\f87a"}.ti-device-imac-off:before{content:"\f87b"}.ti-device-imac-pause:before{content:"\f87c"}.ti-device-imac-pin:before{content:"\f87d"}.ti-device-imac-plus:before{content:"\f87e"}.ti-device-imac-question:before{content:"\f87f"}.ti-device-imac-search:before{content:"\f880"}.ti-device-imac-share:before{content:"\f881"}.ti-device-imac-star:before{content:"\f882"}.ti-device-imac-up:before{content:"\f883"}.ti-device-imac-x:before{content:"\f884"}.ti-device-ipad:before{content:"\f648"}.ti-device-ipad-bolt:before{content:"\f885"}.ti-device-ipad-cancel:before{content:"\f886"}.ti-device-ipad-check:before{content:"\f887"}.ti-device-ipad-code:before{content:"\f888"}.ti-device-ipad-cog:before{content:"\f889"}.ti-device-ipad-dollar:before{content:"\f88a"}.ti-device-ipad-down:before{content:"\f88b"}.ti-device-ipad-exclamation:before{content:"\f88c"}.ti-device-ipad-heart:before{content:"\f88d"}.ti-device-ipad-horizontal:before{content:"\f647"}.ti-device-ipad-horizontal-bolt:before{content:"\f88e"}.ti-device-ipad-horizontal-cancel:before{content:"\f88f"}.ti-device-ipad-horizontal-check:before{content:"\f890"}.ti-device-ipad-horizontal-code:before{content:"\f891"}.ti-device-ipad-horizontal-cog:before{content:"\f892"}.ti-device-ipad-horizontal-dollar:before{content:"\f893"}.ti-device-ipad-horizontal-down:before{content:"\f894"}.ti-device-ipad-horizontal-exclamation:before{content:"\f895"}.ti-device-ipad-horizontal-heart:before{content:"\f896"}.ti-device-ipad-horizontal-minus:before{content:"\f897"}.ti-device-ipad-horizontal-off:before{content:"\f898"}.ti-device-ipad-horizontal-pause:before{content:"\f899"}.ti-device-ipad-horizontal-pin:before{content:"\f89a"}.ti-device-ipad-horizontal-plus:before{content:"\f89b"}.ti-device-ipad-horizontal-question:before{content:"\f89c"}.ti-device-ipad-horizontal-search:before{content:"\f89d"}.ti-device-ipad-horizontal-share:before{content:"\f89e"}.ti-device-ipad-horizontal-star:before{content:"\f89f"}.ti-device-ipad-horizontal-up:before{content:"\f8a0"}.ti-device-ipad-horizontal-x:before{content:"\f8a1"}.ti-device-ipad-minus:before{content:"\f8a2"}.ti-device-ipad-off:before{content:"\f8a3"}.ti-device-ipad-pause:before{content:"\f8a4"}.ti-device-ipad-pin:before{content:"\f8a5"}.ti-device-ipad-plus:before{content:"\f8a6"}.ti-device-ipad-question:before{content:"\f8a7"}.ti-device-ipad-search:before{content:"\f8a8"}.ti-device-ipad-share:before{content:"\f8a9"}.ti-device-ipad-star:before{content:"\f8aa"}.ti-device-ipad-up:before{content:"\f8ab"}.ti-device-ipad-x:before{content:"\f8ac"}.ti-device-landline-phone:before{content:"\f649"}.ti-device-laptop:before{content:"\eb64"}.ti-device-laptop-off:before{content:"\f061"}.ti-device-mobile:before{content:"\ea8a"}.ti-device-mobile-bolt:before{content:"\f8ad"}.ti-device-mobile-cancel:before{content:"\f8ae"}.ti-device-mobile-charging:before{content:"\f224"}.ti-device-mobile-check:before{content:"\f8af"}.ti-device-mobile-code:before{content:"\f8b0"}.ti-device-mobile-cog:before{content:"\f8b1"}.ti-device-mobile-dollar:before{content:"\f8b2"}.ti-device-mobile-down:before{content:"\f8b3"}.ti-device-mobile-exclamation:before{content:"\f8b4"}.ti-device-mobile-filled:before{content:"\fa39"}.ti-device-mobile-heart:before{content:"\f8b5"}.ti-device-mobile-message:before{content:"\ee79"}.ti-device-mobile-minus:before{content:"\f8b6"}.ti-device-mobile-off:before{content:"\f062"}.ti-device-mobile-pause:before{content:"\f8b7"}.ti-device-mobile-pin:before{content:"\f8b8"}.ti-device-mobile-plus:before{content:"\f8b9"}.ti-device-mobile-question:before{content:"\f8ba"}.ti-device-mobile-rotated:before{content:"\ecdb"}.ti-device-mobile-search:before{content:"\f8bb"}.ti-device-mobile-share:before{content:"\f8bc"}.ti-device-mobile-star:before{content:"\f8bd"}.ti-device-mobile-up:before{content:"\f8be"}.ti-device-mobile-vibration:before{content:"\eb86"}.ti-device-mobile-x:before{content:"\f8bf"}.ti-device-nintendo:before{content:"\f026"}.ti-device-nintendo-off:before{content:"\f111"}.ti-device-projector:before{content:"\fc11"}.ti-device-remote:before{content:"\f792"}.ti-device-sd-card:before{content:"\f384"}.ti-device-sim:before{content:"\f4b2"}.ti-device-sim-1:before{content:"\f4af"}.ti-device-sim-2:before{content:"\f4b0"}.ti-device-sim-3:before{content:"\f4b1"}.ti-device-speaker:before{content:"\ea8b"}.ti-device-speaker-off:before{content:"\f112"}.ti-device-tablet:before{content:"\ea8c"}.ti-device-tablet-bolt:before{content:"\f8c0"}.ti-device-tablet-cancel:before{content:"\f8c1"}.ti-device-tablet-check:before{content:"\f8c2"}.ti-device-tablet-code:before{content:"\f8c3"}.ti-device-tablet-cog:before{content:"\f8c4"}.ti-device-tablet-dollar:before{content:"\f8c5"}.ti-device-tablet-down:before{content:"\f8c6"}.ti-device-tablet-exclamation:before{content:"\f8c7"}.ti-device-tablet-filled:before{content:"\fa3a"}.ti-device-tablet-heart:before{content:"\f8c8"}.ti-device-tablet-minus:before{content:"\f8c9"}.ti-device-tablet-off:before{content:"\f063"}.ti-device-tablet-pause:before{content:"\f8ca"}.ti-device-tablet-pin:before{content:"\f8cb"}.ti-device-tablet-plus:before{content:"\f8cc"}.ti-device-tablet-question:before{content:"\f8cd"}.ti-device-tablet-search:before{content:"\f8ce"}.ti-device-tablet-share:before{content:"\f8cf"}.ti-device-tablet-star:before{content:"\f8d0"}.ti-device-tablet-up:before{content:"\f8d1"}.ti-device-tablet-x:before{content:"\f8d2"}.ti-device-tv:before{content:"\ea8d"}.ti-device-tv-off:before{content:"\f064"}.ti-device-tv-old:before{content:"\f1d3"}.ti-device-usb:before{content:"\fc59"}.ti-device-vision-pro:before{content:"\fae7"}.ti-device-watch:before{content:"\ebf9"}.ti-device-watch-bolt:before{content:"\f8d3"}.ti-device-watch-cancel:before{content:"\f8d4"}.ti-device-watch-check:before{content:"\f8d5"}.ti-device-watch-code:before{content:"\f8d6"}.ti-device-watch-cog:before{content:"\f8d7"}.ti-device-watch-dollar:before{content:"\f8d8"}.ti-device-watch-down:before{content:"\f8d9"}.ti-device-watch-exclamation:before{content:"\f8da"}.ti-device-watch-heart:before{content:"\f8db"}.ti-device-watch-minus:before{content:"\f8dc"}.ti-device-watch-off:before{content:"\f065"}.ti-device-watch-pause:before{content:"\f8dd"}.ti-device-watch-pin:before{content:"\f8de"}.ti-device-watch-plus:before{content:"\f8df"}.ti-device-watch-question:before{content:"\f8e0"}.ti-device-watch-search:before{content:"\f8e1"}.ti-device-watch-share:before{content:"\f8e2"}.ti-device-watch-star:before{content:"\f8e3"}.ti-device-watch-stats:before{content:"\ef7d"}.ti-device-watch-stats-2:before{content:"\ef7c"}.ti-device-watch-up:before{content:"\f8e4"}.ti-device-watch-x:before{content:"\f8e5"}.ti-devices:before{content:"\eb87"}.ti-devices-2:before{content:"\ed29"}.ti-devices-bolt:before{content:"\f8e6"}.ti-devices-cancel:before{content:"\f8e7"}.ti-devices-check:before{content:"\f8e8"}.ti-devices-code:before{content:"\f8e9"}.ti-devices-cog:before{content:"\f8ea"}.ti-devices-dollar:before{content:"\f8eb"}.ti-devices-down:before{content:"\f8ec"}.ti-devices-exclamation:before{content:"\f8ed"}.ti-devices-heart:before{content:"\f8ee"}.ti-devices-minus:before{content:"\f8ef"}.ti-devices-off:before{content:"\f3e4"}.ti-devices-pause:before{content:"\f8f0"}.ti-devices-pc:before{content:"\ee7a"}.ti-devices-pc-off:before{content:"\f113"}.ti-devices-pin:before{content:"\f8f1"}.ti-devices-plus:before{content:"\f8f2"}.ti-devices-question:before{content:"\f8f3"}.ti-devices-search:before{content:"\f8f4"}.ti-devices-share:before{content:"\f8f5"}.ti-devices-star:before{content:"\f8f6"}.ti-devices-up:before{content:"\f8f7"}.ti-devices-x:before{content:"\f8f8"}.ti-diabolo:before{content:"\fa9c"}.ti-diabolo-off:before{content:"\fa9a"}.ti-diabolo-plus:before{content:"\fa9b"}.ti-dialpad:before{content:"\f067"}.ti-dialpad-filled:before{content:"\fa3b"}.ti-dialpad-off:before{content:"\f114"}.ti-diamond:before{content:"\eb65"}.ti-diamond-filled:before{content:"\f73d"}.ti-diamond-off:before{content:"\f115"}.ti-diamonds:before{content:"\eff5"}.ti-diamonds-filled:before{content:"\f676"}.ti-dice:before{content:"\eb66"}.ti-dice-1:before{content:"\f08b"}.ti-dice-1-filled:before{content:"\f73e"}.ti-dice-2:before{content:"\f08c"}.ti-dice-2-filled:before{content:"\f73f"}.ti-dice-3:before{content:"\f08d"}.ti-dice-3-filled:before{content:"\f740"}.ti-dice-4:before{content:"\f08e"}.ti-dice-4-filled:before{content:"\f741"}.ti-dice-5:before{content:"\f08f"}.ti-dice-5-filled:before{content:"\f742"}.ti-dice-6:before{content:"\f090"}.ti-dice-6-filled:before{content:"\f743"}.ti-dice-filled:before{content:"\f744"}.ti-dimensions:before{content:"\ee7b"}.ti-direction:before{content:"\ebfb"}.ti-direction-arrows:before{content:"\fd36"}.ti-direction-horizontal:before{content:"\ebfa"}.ti-direction-sign:before{content:"\f1f7"}.ti-direction-sign-filled:before{content:"\f745"}.ti-direction-sign-off:before{content:"\f3e5"}.ti-directions:before{content:"\ea8e"}.ti-directions-off:before{content:"\f116"}.ti-disabled:before{content:"\ea8f"}.ti-disabled-2:before{content:"\ebaf"}.ti-disabled-off:before{content:"\f117"}.ti-disc:before{content:"\ea90"}.ti-disc-golf:before{content:"\f385"}.ti-disc-off:before{content:"\f118"}.ti-discount:before{content:"\ebbd"}.ti-discount-2:before{content:"\ee7c"}.ti-discount-2-off:before{content:"\f3e6"}.ti-discount-check:before{content:"\f1f8"}.ti-discount-check-filled:before{content:"\f746"}.ti-discount-off:before{content:"\f3e7"}.ti-divide:before{content:"\ed5c"}.ti-dna:before{content:"\ee7d"}.ti-dna-2:before{content:"\ef5c"}.ti-dna-2-off:before{content:"\f119"}.ti-dna-off:before{content:"\f11a"}.ti-dog:before{content:"\f660"}.ti-dog-bowl:before{content:"\ef29"}.ti-door:before{content:"\ef4e"}.ti-door-enter:before{content:"\ef4c"}.ti-door-exit:before{content:"\ef4d"}.ti-door-off:before{content:"\f11b"}.ti-dots:before{content:"\ea95"}.ti-dots-circle-horizontal:before{content:"\ea91"}.ti-dots-diagonal:before{content:"\ea93"}.ti-dots-diagonal-2:before{content:"\ea92"}.ti-dots-vertical:before{content:"\ea94"}.ti-download:before{content:"\ea96"}.ti-download-off:before{content:"\f11c"}.ti-drag-drop:before{content:"\eb89"}.ti-drag-drop-2:before{content:"\eb88"}.ti-drone:before{content:"\ed79"}.ti-drone-off:before{content:"\ee7e"}.ti-drop-circle:before{content:"\efde"}.ti-droplet:before{content:"\ea97"}.ti-droplet-bolt:before{content:"\f8f9"}.ti-droplet-cancel:before{content:"\f8fa"}.ti-droplet-check:before{content:"\f8fb"}.ti-droplet-code:before{content:"\f8fc"}.ti-droplet-cog:before{content:"\f8fd"}.ti-droplet-dollar:before{content:"\f8fe"}.ti-droplet-down:before{content:"\f8ff"}.ti-droplet-exclamation:before{content:"\f900"}.ti-droplet-filled:before{content:"\ee80"}.ti-droplet-half:before{content:"\ee82"}.ti-droplet-half-2:before{content:"\ee81"}.ti-droplet-half-2-filled:before{content:"\fb6c"}.ti-droplet-half-filled:before{content:"\f6c5"}.ti-droplet-heart:before{content:"\f901"}.ti-droplet-minus:before{content:"\f902"}.ti-droplet-off:before{content:"\ee83"}.ti-droplet-pause:before{content:"\f903"}.ti-droplet-pin:before{content:"\f904"}.ti-droplet-plus:before{content:"\f905"}.ti-droplet-question:before{content:"\f906"}.ti-droplet-search:before{content:"\f907"}.ti-droplet-share:before{content:"\f908"}.ti-droplet-star:before{content:"\f909"}.ti-droplet-up:before{content:"\f90a"}.ti-droplet-x:before{content:"\f90b"}.ti-droplets:before{content:"\fc12"}.ti-dual-screen:before{content:"\fa59"}.ti-e-passport:before{content:"\f4df"}.ti-ear:before{content:"\ebce"}.ti-ear-off:before{content:"\ee84"}.ti-ear-scan:before{content:"\fd57"}.ti-ease-in:before{content:"\f573"}.ti-ease-in-control-point:before{content:"\f570"}.ti-ease-in-out:before{content:"\f572"}.ti-ease-in-out-control-points:before{content:"\f571"}.ti-ease-out:before{content:"\f575"}.ti-ease-out-control-point:before{content:"\f574"}.ti-edit:before{content:"\ea98"}.ti-edit-circle:before{content:"\ee85"}.ti-edit-circle-off:before{content:"\f11d"}.ti-edit-off:before{content:"\f11e"}.ti-egg:before{content:"\eb8a"}.ti-egg-cracked:before{content:"\f2d6"}.ti-egg-filled:before{content:"\f678"}.ti-egg-fried:before{content:"\f386"}.ti-egg-off:before{content:"\f11f"}.ti-eggs:before{content:"\f500"}.ti-elevator:before{content:"\efdf"}.ti-elevator-off:before{content:"\f3e8"}.ti-emergency-bed:before{content:"\ef5d"}.ti-empathize:before{content:"\f29b"}.ti-empathize-off:before{content:"\f3e9"}.ti-emphasis:before{content:"\ebcf"}.ti-engine:before{content:"\ef7e"}.ti-engine-off:before{content:"\f120"}.ti-equal:before{content:"\ee87"}.ti-equal-double:before{content:"\f4e1"}.ti-equal-not:before{content:"\ee86"}.ti-eraser:before{content:"\eb8b"}.ti-eraser-off:before{content:"\f121"}.ti-error-404:before{content:"\f027"}.ti-error-404-off:before{content:"\f122"}.ti-escalator:before{content:"\fb06"}.ti-escalator-down:before{content:"\fb04"}.ti-escalator-up:before{content:"\fb05"}.ti-exchange:before{content:"\ebe7"}.ti-exchange-off:before{content:"\f123"}.ti-exclamation-circle:before{content:"\f634"}.ti-exclamation-mark:before{content:"\efb4"}.ti-exclamation-mark-off:before{content:"\f124"}.ti-explicit:before{content:"\f256"}.ti-explicit-off:before{content:"\f3ea"}.ti-exposure:before{content:"\eb8c"}.ti-exposure-0:before{content:"\f29c"}.ti-exposure-minus-1:before{content:"\f29d"}.ti-exposure-minus-2:before{content:"\f29e"}.ti-exposure-off:before{content:"\f3eb"}.ti-exposure-plus-1:before{content:"\f29f"}.ti-exposure-plus-2:before{content:"\f2a0"}.ti-external-link:before{content:"\ea99"}.ti-external-link-off:before{content:"\f125"}.ti-eye:before{content:"\ea9a"}.ti-eye-bolt:before{content:"\fb6d"}.ti-eye-cancel:before{content:"\fb6e"}.ti-eye-check:before{content:"\ee88"}.ti-eye-closed:before{content:"\f7ec"}.ti-eye-code:before{content:"\fb6f"}.ti-eye-cog:before{content:"\f7ed"}.ti-eye-discount:before{content:"\fb70"}.ti-eye-dollar:before{content:"\fb71"}.ti-eye-down:before{content:"\fb72"}.ti-eye-edit:before{content:"\f7ee"}.ti-eye-exclamation:before{content:"\f7ef"}.ti-eye-filled:before{content:"\f679"}.ti-eye-heart:before{content:"\f7f0"}.ti-eye-minus:before{content:"\fb73"}.ti-eye-off:before{content:"\ecf0"}.ti-eye-pause:before{content:"\fb74"}.ti-eye-pin:before{content:"\fb75"}.ti-eye-plus:before{content:"\fb76"}.ti-eye-question:before{content:"\fb77"}.ti-eye-search:before{content:"\fb78"}.ti-eye-share:before{content:"\fb79"}.ti-eye-star:before{content:"\fb7a"}.ti-eye-table:before{content:"\ef5e"}.ti-eye-up:before{content:"\fb7b"}.ti-eye-x:before{content:"\f7f1"}.ti-eyeglass:before{content:"\ee8a"}.ti-eyeglass-2:before{content:"\ee89"}.ti-eyeglass-off:before{content:"\f126"}.ti-face-id:before{content:"\ea9b"}.ti-face-id-error:before{content:"\efa7"}.ti-face-mask:before{content:"\efb5"}.ti-face-mask-off:before{content:"\f127"}.ti-fall:before{content:"\ecb9"}.ti-favicon:before{content:"\fd65"}.ti-feather:before{content:"\ee8b"}.ti-feather-off:before{content:"\f128"}.ti-fence:before{content:"\ef2a"}.ti-fence-off:before{content:"\f129"}.ti-fidget-spinner:before{content:"\f068"}.ti-file:before{content:"\eaa4"}.ti-file-3d:before{content:"\f032"}.ti-file-alert:before{content:"\ede6"}.ti-file-analytics:before{content:"\ede7"}.ti-file-arrow-left:before{content:"\f033"}.ti-file-arrow-right:before{content:"\f034"}.ti-file-barcode:before{content:"\f035"}.ti-file-broken:before{content:"\f501"}.ti-file-certificate:before{content:"\ed4d"}.ti-file-chart:before{content:"\f036"}.ti-file-check:before{content:"\ea9c"}.ti-file-code:before{content:"\ebd0"}.ti-file-code-2:before{content:"\ede8"}.ti-file-cv:before{content:"\fa5a"}.ti-file-database:before{content:"\f037"}.ti-file-delta:before{content:"\f53d"}.ti-file-description:before{content:"\f028"}.ti-file-diff:before{content:"\ecf1"}.ti-file-digit:before{content:"\efa8"}.ti-file-dislike:before{content:"\ed2a"}.ti-file-dollar:before{content:"\efe0"}.ti-file-dots:before{content:"\f038"}.ti-file-download:before{content:"\ea9d"}.ti-file-euro:before{content:"\efe1"}.ti-file-export:before{content:"\ede9"}.ti-file-filled:before{content:"\f747"}.ti-file-function:before{content:"\f53e"}.ti-file-horizontal:before{content:"\ebb0"}.ti-file-import:before{content:"\edea"}.ti-file-infinity:before{content:"\f502"}.ti-file-info:before{content:"\edec"}.ti-file-invoice:before{content:"\eb67"}.ti-file-lambda:before{content:"\f53f"}.ti-file-like:before{content:"\ed2b"}.ti-file-minus:before{content:"\ea9e"}.ti-file-music:before{content:"\ea9f"}.ti-file-neutral:before{content:"\fd22"}.ti-file-off:before{content:"\ecf2"}.ti-file-orientation:before{content:"\f2a1"}.ti-file-pencil:before{content:"\f039"}.ti-file-percent:before{content:"\f540"}.ti-file-phone:before{content:"\ecdc"}.ti-file-plus:before{content:"\eaa0"}.ti-file-power:before{content:"\f03a"}.ti-file-report:before{content:"\eded"}.ti-file-rss:before{content:"\f03b"}.ti-file-sad:before{content:"\fd23"}.ti-file-scissors:before{content:"\f03c"}.ti-file-search:before{content:"\ed5d"}.ti-file-settings:before{content:"\f029"}.ti-file-shredder:before{content:"\eaa1"}.ti-file-signal:before{content:"\f03d"}.ti-file-smile:before{content:"\fd24"}.ti-file-spreadsheet:before{content:"\f03e"}.ti-file-stack:before{content:"\f503"}.ti-file-star:before{content:"\f03f"}.ti-file-symlink:before{content:"\ed53"}.ti-file-text:before{content:"\eaa2"}.ti-file-text-ai:before{content:"\fa27"}.ti-file-time:before{content:"\f040"}.ti-file-type-bmp:before{content:"\fb07"}.ti-file-type-css:before{content:"\fb08"}.ti-file-type-csv:before{content:"\fb09"}.ti-file-type-doc:before{content:"\fb0a"}.ti-file-type-docx:before{content:"\fb0b"}.ti-file-type-html:before{content:"\fb0c"}.ti-file-type-jpg:before{content:"\fb0d"}.ti-file-type-js:before{content:"\fb0e"}.ti-file-type-jsx:before{content:"\fb0f"}.ti-file-type-pdf:before{content:"\fb10"}.ti-file-type-php:before{content:"\fb11"}.ti-file-type-png:before{content:"\fb12"}.ti-file-type-ppt:before{content:"\fb13"}.ti-file-type-rs:before{content:"\fb14"}.ti-file-type-sql:before{content:"\fb15"}.ti-file-type-svg:before{content:"\fb16"}.ti-file-type-ts:before{content:"\fb17"}.ti-file-type-tsx:before{content:"\fb18"}.ti-file-type-txt:before{content:"\fb19"}.ti-file-type-vue:before{content:"\fb1a"}.ti-file-type-xls:before{content:"\fb1b"}.ti-file-type-xml:before{content:"\fb1c"}.ti-file-type-zip:before{content:"\fb1d"}.ti-file-typography:before{content:"\f041"}.ti-file-unknown:before{content:"\f042"}.ti-file-upload:before{content:"\ec91"}.ti-file-vector:before{content:"\f043"}.ti-file-x:before{content:"\eaa3"}.ti-file-x-filled:before{content:"\f748"}.ti-file-zip:before{content:"\ed4e"}.ti-files:before{content:"\edef"}.ti-files-off:before{content:"\edee"}.ti-filter:before{content:"\eaa5"}.ti-filter-bolt:before{content:"\fb7c"}.ti-filter-cancel:before{content:"\fb7d"}.ti-filter-check:before{content:"\fb7e"}.ti-filter-code:before{content:"\fb7f"}.ti-filter-cog:before{content:"\f9fe"}.ti-filter-discount:before{content:"\fb80"}.ti-filter-dollar:before{content:"\f9ff"}.ti-filter-down:before{content:"\fb81"}.ti-filter-edit:before{content:"\fa00"}.ti-filter-exclamation:before{content:"\fb82"}.ti-filter-filled:before{content:"\fc27"}.ti-filter-heart:before{content:"\fb83"}.ti-filter-minus:before{content:"\fa01"}.ti-filter-off:before{content:"\ed2c"}.ti-filter-pause:before{content:"\fb84"}.ti-filter-pin:before{content:"\fb85"}.ti-filter-plus:before{content:"\fa02"}.ti-filter-question:before{content:"\fb86"}.ti-filter-search:before{content:"\fb87"}.ti-filter-share:before{content:"\fb88"}.ti-filter-star:before{content:"\fa03"}.ti-filter-up:before{content:"\fb89"}.ti-filter-x:before{content:"\fa04"}.ti-filters:before{content:"\f793"}.ti-fingerprint:before{content:"\ebd1"}.ti-fingerprint-off:before{content:"\f12a"}.ti-fingerprint-scan:before{content:"\fcb5"}.ti-fire-extinguisher:before{content:"\faf6"}.ti-fire-hydrant:before{content:"\f3a9"}.ti-fire-hydrant-off:before{content:"\f3ec"}.ti-firetruck:before{content:"\ebe8"}.ti-first-aid-kit:before{content:"\ef5f"}.ti-first-aid-kit-off:before{content:"\f3ed"}.ti-fish:before{content:"\ef2b"}.ti-fish-bone:before{content:"\f287"}.ti-fish-christianity:before{content:"\f58b"}.ti-fish-hook:before{content:"\f1f9"}.ti-fish-hook-off:before{content:"\f3ee"}.ti-fish-off:before{content:"\f12b"}.ti-flag:before{content:"\eaa6"}.ti-flag-2:before{content:"\ee8c"}.ti-flag-2-filled:before{content:"\f707"}.ti-flag-2-off:before{content:"\f12c"}.ti-flag-3:before{content:"\ee8d"}.ti-flag-3-filled:before{content:"\f708"}.ti-flag-bolt:before{content:"\fb8a"}.ti-flag-cancel:before{content:"\fb8b"}.ti-flag-check:before{content:"\fb8c"}.ti-flag-code:before{content:"\fb8d"}.ti-flag-cog:before{content:"\fb8e"}.ti-flag-discount:before{content:"\fb8f"}.ti-flag-dollar:before{content:"\fb90"}.ti-flag-down:before{content:"\fb91"}.ti-flag-exclamation:before{content:"\fb92"}.ti-flag-filled:before{content:"\f67a"}.ti-flag-heart:before{content:"\fb93"}.ti-flag-minus:before{content:"\fb94"}.ti-flag-off:before{content:"\f12d"}.ti-flag-pause:before{content:"\fb95"}.ti-flag-pin:before{content:"\fb96"}.ti-flag-plus:before{content:"\fb97"}.ti-flag-question:before{content:"\fb98"}.ti-flag-search:before{content:"\fb99"}.ti-flag-share:before{content:"\fb9a"}.ti-flag-star:before{content:"\fb9b"}.ti-flag-up:before{content:"\fb9c"}.ti-flag-x:before{content:"\fb9d"}.ti-flame:before{content:"\ec2c"}.ti-flame-off:before{content:"\f12e"}.ti-flare:before{content:"\ee8e"}.ti-flask:before{content:"\ebd2"}.ti-flask-2:before{content:"\ef60"}.ti-flask-2-filled:before{content:"\fd12"}.ti-flask-2-off:before{content:"\f12f"}.ti-flask-filled:before{content:"\fd13"}.ti-flask-off:before{content:"\f130"}.ti-flip-flops:before{content:"\f564"}.ti-flip-horizontal:before{content:"\eaa7"}.ti-flip-vertical:before{content:"\eaa8"}.ti-float-center:before{content:"\ebb1"}.ti-float-left:before{content:"\ebb2"}.ti-float-none:before{content:"\ed13"}.ti-float-right:before{content:"\ebb3"}.ti-flower:before{content:"\eff6"}.ti-flower-off:before{content:"\f131"}.ti-focus:before{content:"\eb8d"}.ti-focus-2:before{content:"\ebd3"}.ti-focus-auto:before{content:"\fa62"}.ti-focus-centered:before{content:"\f02a"}.ti-fold:before{content:"\ed56"}.ti-fold-down:before{content:"\ed54"}.ti-fold-up:before{content:"\ed55"}.ti-folder:before{content:"\eaad"}.ti-folder-bolt:before{content:"\f90c"}.ti-folder-cancel:before{content:"\f90d"}.ti-folder-check:before{content:"\f90e"}.ti-folder-code:before{content:"\f90f"}.ti-folder-cog:before{content:"\f910"}.ti-folder-dollar:before{content:"\f911"}.ti-folder-down:before{content:"\f912"}.ti-folder-exclamation:before{content:"\f913"}.ti-folder-filled:before{content:"\f749"}.ti-folder-heart:before{content:"\f914"}.ti-folder-minus:before{content:"\eaaa"}.ti-folder-off:before{content:"\ed14"}.ti-folder-open:before{content:"\faf7"}.ti-folder-pause:before{content:"\f915"}.ti-folder-pin:before{content:"\f916"}.ti-folder-plus:before{content:"\eaab"}.ti-folder-question:before{content:"\f917"}.ti-folder-root:before{content:"\fd43"}.ti-folder-search:before{content:"\f918"}.ti-folder-share:before{content:"\f919"}.ti-folder-star:before{content:"\f91a"}.ti-folder-symlink:before{content:"\f91b"}.ti-folder-up:before{content:"\f91c"}.ti-folder-x:before{content:"\eaac"}.ti-folders:before{content:"\eaae"}.ti-folders-off:before{content:"\f133"}.ti-forbid:before{content:"\ebd5"}.ti-forbid-2:before{content:"\ebd4"}.ti-forbid-2-filled:before{content:"\fc28"}.ti-forbid-filled:before{content:"\fc29"}.ti-forklift:before{content:"\ebe9"}.ti-forms:before{content:"\ee8f"}.ti-fountain:before{content:"\f09b"}.ti-fountain-filled:before{content:"\fc2a"}.ti-fountain-off:before{content:"\f134"}.ti-frame:before{content:"\eaaf"}.ti-frame-off:before{content:"\f135"}.ti-free-rights:before{content:"\efb6"}.ti-freeze-column:before{content:"\fa63"}.ti-freeze-row:before{content:"\fa65"}.ti-freeze-row-column:before{content:"\fa64"}.ti-fridge:before{content:"\f1fa"}.ti-fridge-off:before{content:"\f3ef"}.ti-friends:before{content:"\eab0"}.ti-friends-off:before{content:"\f136"}.ti-frustum:before{content:"\fa9f"}.ti-frustum-off:before{content:"\fa9d"}.ti-frustum-plus:before{content:"\fa9e"}.ti-function:before{content:"\f225"}.ti-function-filled:before{content:"\fc2b"}.ti-function-off:before{content:"\f3f0"}.ti-galaxy:before{content:"\fcb6"}.ti-garden-cart:before{content:"\f23e"}.ti-garden-cart-off:before{content:"\f3f1"}.ti-gas-station:before{content:"\ec7d"}.ti-gas-station-off:before{content:"\f137"}.ti-gauge:before{content:"\eab1"}.ti-gauge-filled:before{content:"\fc2c"}.ti-gauge-off:before{content:"\f138"}.ti-gavel:before{content:"\ef90"}.ti-gender-agender:before{content:"\f0e1"}.ti-gender-androgyne:before{content:"\f0e2"}.ti-gender-bigender:before{content:"\f0e3"}.ti-gender-demiboy:before{content:"\f0e4"}.ti-gender-demigirl:before{content:"\f0e5"}.ti-gender-epicene:before{content:"\f0e6"}.ti-gender-female:before{content:"\f0e7"}.ti-gender-femme:before{content:"\f0e8"}.ti-gender-genderfluid:before{content:"\f0e9"}.ti-gender-genderless:before{content:"\f0ea"}.ti-gender-genderqueer:before{content:"\f0eb"}.ti-gender-hermaphrodite:before{content:"\f0ec"}.ti-gender-intergender:before{content:"\f0ed"}.ti-gender-male:before{content:"\f0ee"}.ti-gender-neutrois:before{content:"\f0ef"}.ti-gender-third:before{content:"\f0f0"}.ti-gender-transgender:before{content:"\f0f1"}.ti-gender-trasvesti:before{content:"\f0f2"}.ti-geometry:before{content:"\ee90"}.ti-ghost:before{content:"\eb8e"}.ti-ghost-2:before{content:"\f57c"}.ti-ghost-2-filled:before{content:"\f74a"}.ti-ghost-3:before{content:"\fc13"}.ti-ghost-filled:before{content:"\f74b"}.ti-ghost-off:before{content:"\f3f2"}.ti-gif:before{content:"\f257"}.ti-gift:before{content:"\eb68"}.ti-gift-card:before{content:"\f3aa"}.ti-gift-card-filled:before{content:"\fc2d"}.ti-gift-filled:before{content:"\fd14"}.ti-gift-off:before{content:"\f3f3"}.ti-git-branch:before{content:"\eab2"}.ti-git-branch-deleted:before{content:"\f57d"}.ti-git-cherry-pick:before{content:"\f57e"}.ti-git-commit:before{content:"\eab3"}.ti-git-compare:before{content:"\eab4"}.ti-git-fork:before{content:"\eb8f"}.ti-git-merge:before{content:"\eab5"}.ti-git-pull-request:before{content:"\eab6"}.ti-git-pull-request-closed:before{content:"\ef7f"}.ti-git-pull-request-draft:before{content:"\efb7"}.ti-gizmo:before{content:"\f02b"}.ti-glass:before{content:"\eab8"}.ti-glass-champagne:before{content:"\fd9c"}.ti-glass-cocktail:before{content:"\fd9d"}.ti-glass-full:before{content:"\eab7"}.ti-glass-full-filled:before{content:"\fc2e"}.ti-glass-gin:before{content:"\fd9e"}.ti-glass-off:before{content:"\ee91"}.ti-globe:before{content:"\eab9"}.ti-globe-filled:before{content:"\fc2f"}.ti-globe-off:before{content:"\f139"}.ti-go-game:before{content:"\f512"}.ti-golf:before{content:"\ed8c"}.ti-golf-off:before{content:"\f13a"}.ti-gps:before{content:"\ed7a"}.ti-gradienter:before{content:"\f3ab"}.ti-grain:before{content:"\ee92"}.ti-graph:before{content:"\f288"}.ti-graph-filled:before{content:"\fd15"}.ti-graph-off:before{content:"\f3f4"}.ti-grave:before{content:"\f580"}.ti-grave-2:before{content:"\f57f"}.ti-grid-3x3:before{content:"\fca4"}.ti-grid-4x4:before{content:"\fca5"}.ti-grid-dots:before{content:"\eaba"}.ti-grid-goldenratio:before{content:"\fca6"}.ti-grid-pattern:before{content:"\efc9"}.ti-grid-scan:before{content:"\fca7"}.ti-grill:before{content:"\efa9"}.ti-grill-fork:before{content:"\f35b"}.ti-grill-off:before{content:"\f3f5"}.ti-grill-spatula:before{content:"\f35c"}.ti-grip-horizontal:before{content:"\ec00"}.ti-grip-vertical:before{content:"\ec01"}.ti-growth:before{content:"\ee93"}.ti-guitar-pick:before{content:"\f4c6"}.ti-guitar-pick-filled:before{content:"\f67b"}.ti-gymnastics:before{content:"\fd44"}.ti-h-1:before{content:"\ec94"}.ti-h-2:before{content:"\ec95"}.ti-h-3:before{content:"\ec96"}.ti-h-4:before{content:"\ec97"}.ti-h-5:before{content:"\ec98"}.ti-h-6:before{content:"\ec99"}.ti-hammer:before{content:"\ef91"}.ti-hammer-off:before{content:"\f13c"}.ti-hand-click:before{content:"\ef4f"}.ti-hand-finger:before{content:"\ee94"}.ti-hand-finger-off:before{content:"\f13d"}.ti-hand-grab:before{content:"\f091"}.ti-hand-little-finger:before{content:"\ee95"}.ti-hand-middle-finger:before{content:"\ec2d"}.ti-hand-move:before{content:"\ef50"}.ti-hand-off:before{content:"\ed15"}.ti-hand-ring-finger:before{content:"\ee96"}.ti-hand-rock:before{content:"\ee97"}.ti-hand-sanitizer:before{content:"\f5f4"}.ti-hand-stop:before{content:"\ec2e"}.ti-hand-three-fingers:before{content:"\ee98"}.ti-hand-two-fingers:before{content:"\ee99"}.ti-hanger:before{content:"\ee9a"}.ti-hanger-2:before{content:"\f09c"}.ti-hanger-off:before{content:"\f13e"}.ti-hash:before{content:"\eabc"}.ti-haze:before{content:"\efaa"}.ti-haze-moon:before{content:"\faf8"}.ti-hdr:before{content:"\fa7b"}.ti-heading:before{content:"\ee9b"}.ti-heading-off:before{content:"\f13f"}.ti-headphones:before{content:"\eabd"}.ti-headphones-filled:before{content:"\fa3c"}.ti-headphones-off:before{content:"\ed1d"}.ti-headset:before{content:"\eb90"}.ti-headset-off:before{content:"\f3f6"}.ti-health-recognition:before{content:"\f1fb"}.ti-heart:before{content:"\eabe"}.ti-heart-bolt:before{content:"\fb9e"}.ti-heart-broken:before{content:"\ecba"}.ti-heart-cancel:before{content:"\fb9f"}.ti-heart-check:before{content:"\fba0"}.ti-heart-code:before{content:"\fba1"}.ti-heart-cog:before{content:"\fba2"}.ti-heart-discount:before{content:"\fba3"}.ti-heart-dollar:before{content:"\fba4"}.ti-heart-down:before{content:"\fba5"}.ti-heart-exclamation:before{content:"\fba6"}.ti-heart-filled:before{content:"\f67c"}.ti-heart-handshake:before{content:"\f0f3"}.ti-heart-minus:before{content:"\f140"}.ti-heart-off:before{content:"\f141"}.ti-heart-pause:before{content:"\fba7"}.ti-heart-pin:before{content:"\fba8"}.ti-heart-plus:before{content:"\f142"}.ti-heart-question:before{content:"\fba9"}.ti-heart-rate-monitor:before{content:"\ef61"}.ti-heart-search:before{content:"\fbaa"}.ti-heart-share:before{content:"\fbab"}.ti-heart-star:before{content:"\fbac"}.ti-heart-up:before{content:"\fbad"}.ti-heart-x:before{content:"\fbae"}.ti-heartbeat:before{content:"\ef92"}.ti-hearts:before{content:"\f387"}.ti-hearts-off:before{content:"\f3f7"}.ti-helicopter:before{content:"\ed8e"}.ti-helicopter-landing:before{content:"\ed8d"}.ti-helmet:before{content:"\efca"}.ti-helmet-off:before{content:"\f143"}.ti-help:before{content:"\eabf"}.ti-help-circle:before{content:"\f91d"}.ti-help-circle-filled:before{content:"\fa3d"}.ti-help-hexagon:before{content:"\f7a8"}.ti-help-hexagon-filled:before{content:"\fa3e"}.ti-help-octagon:before{content:"\f7a9"}.ti-help-octagon-filled:before{content:"\fa3f"}.ti-help-off:before{content:"\f3f8"}.ti-help-small:before{content:"\f91e"}.ti-help-square:before{content:"\f920"}.ti-help-square-filled:before{content:"\fa40"}.ti-help-square-rounded:before{content:"\f91f"}.ti-help-square-rounded-filled:before{content:"\fa41"}.ti-help-triangle:before{content:"\f921"}.ti-help-triangle-filled:before{content:"\fa42"}.ti-hemisphere:before{content:"\faa2"}.ti-hemisphere-off:before{content:"\faa0"}.ti-hemisphere-plus:before{content:"\faa1"}.ti-hexagon:before{content:"\ec02"}.ti-hexagon-0-filled:before{content:"\f74c"}.ti-hexagon-1-filled:before{content:"\f74d"}.ti-hexagon-2-filled:before{content:"\f74e"}.ti-hexagon-3-filled:before{content:"\f74f"}.ti-hexagon-3d:before{content:"\f4c7"}.ti-hexagon-4-filled:before{content:"\f750"}.ti-hexagon-5-filled:before{content:"\f751"}.ti-hexagon-6-filled:before{content:"\f752"}.ti-hexagon-7-filled:before{content:"\f753"}.ti-hexagon-8-filled:before{content:"\f754"}.ti-hexagon-9-filled:before{content:"\f755"}.ti-hexagon-filled:before{content:"\f67d"}.ti-hexagon-letter-a:before{content:"\f463"}.ti-hexagon-letter-b:before{content:"\f464"}.ti-hexagon-letter-c:before{content:"\f465"}.ti-hexagon-letter-d:before{content:"\f466"}.ti-hexagon-letter-e:before{content:"\f467"}.ti-hexagon-letter-f:before{content:"\f468"}.ti-hexagon-letter-g:before{content:"\f469"}.ti-hexagon-letter-h:before{content:"\f46a"}.ti-hexagon-letter-i:before{content:"\f46b"}.ti-hexagon-letter-j:before{content:"\f46c"}.ti-hexagon-letter-k:before{content:"\f46d"}.ti-hexagon-letter-l:before{content:"\f46e"}.ti-hexagon-letter-m:before{content:"\f46f"}.ti-hexagon-letter-n:before{content:"\f470"}.ti-hexagon-letter-o:before{content:"\f471"}.ti-hexagon-letter-p:before{content:"\f472"}.ti-hexagon-letter-q:before{content:"\f473"}.ti-hexagon-letter-r:before{content:"\f474"}.ti-hexagon-letter-s:before{content:"\f475"}.ti-hexagon-letter-t:before{content:"\f476"}.ti-hexagon-letter-u:before{content:"\f477"}.ti-hexagon-letter-v:before{content:"\f4b3"}.ti-hexagon-letter-w:before{content:"\f478"}.ti-hexagon-letter-x:before{content:"\f479"}.ti-hexagon-letter-y:before{content:"\f47a"}.ti-hexagon-letter-z:before{content:"\f47b"}.ti-hexagon-minus:before{content:"\fc8f"}.ti-hexagon-minus-2:before{content:"\fc8e"}.ti-hexagon-number-0:before{content:"\f459"}.ti-hexagon-number-1:before{content:"\f45a"}.ti-hexagon-number-2:before{content:"\f45b"}.ti-hexagon-number-3:before{content:"\f45c"}.ti-hexagon-number-4:before{content:"\f45d"}.ti-hexagon-number-5:before{content:"\f45e"}.ti-hexagon-number-6:before{content:"\f45f"}.ti-hexagon-number-7:before{content:"\f460"}.ti-hexagon-number-8:before{content:"\f461"}.ti-hexagon-number-9:before{content:"\f462"}.ti-hexagon-off:before{content:"\ee9c"}.ti-hexagon-plus:before{content:"\fc45"}.ti-hexagon-plus-2:before{content:"\fc90"}.ti-hexagonal-prism:before{content:"\faa5"}.ti-hexagonal-prism-off:before{content:"\faa3"}.ti-hexagonal-prism-plus:before{content:"\faa4"}.ti-hexagonal-pyramid:before{content:"\faa8"}.ti-hexagonal-pyramid-off:before{content:"\faa6"}.ti-hexagonal-pyramid-plus:before{content:"\faa7"}.ti-hexagons:before{content:"\f09d"}.ti-hexagons-off:before{content:"\f3f9"}.ti-hierarchy:before{content:"\ee9e"}.ti-hierarchy-2:before{content:"\ee9d"}.ti-hierarchy-3:before{content:"\f289"}.ti-hierarchy-off:before{content:"\f3fa"}.ti-highlight:before{content:"\ef3f"}.ti-highlight-off:before{content:"\f144"}.ti-history:before{content:"\ebea"}.ti-history-off:before{content:"\f3fb"}.ti-history-toggle:before{content:"\f1fc"}.ti-home:before{content:"\eac1"}.ti-home-2:before{content:"\eac0"}.ti-home-bolt:before{content:"\f336"}.ti-home-cancel:before{content:"\f350"}.ti-home-check:before{content:"\f337"}.ti-home-cog:before{content:"\f338"}.ti-home-dollar:before{content:"\f339"}.ti-home-dot:before{content:"\f33a"}.ti-home-down:before{content:"\f33b"}.ti-home-eco:before{content:"\f351"}.ti-home-edit:before{content:"\f352"}.ti-home-exclamation:before{content:"\f33c"}.ti-home-hand:before{content:"\f504"}.ti-home-heart:before{content:"\f353"}.ti-home-infinity:before{content:"\f505"}.ti-home-link:before{content:"\f354"}.ti-home-minus:before{content:"\f33d"}.ti-home-move:before{content:"\f33e"}.ti-home-off:before{content:"\f145"}.ti-home-plus:before{content:"\f33f"}.ti-home-question:before{content:"\f340"}.ti-home-ribbon:before{content:"\f355"}.ti-home-search:before{content:"\f341"}.ti-home-share:before{content:"\f342"}.ti-home-shield:before{content:"\f343"}.ti-home-signal:before{content:"\f356"}.ti-home-star:before{content:"\f344"}.ti-home-stats:before{content:"\f345"}.ti-home-up:before{content:"\f346"}.ti-home-x:before{content:"\f347"}.ti-horse:before{content:"\fc46"}.ti-horse-toy:before{content:"\f28a"}.ti-horseshoe:before{content:"\fcb7"}.ti-hospital:before{content:"\fd59"}.ti-hospital-circle:before{content:"\fd58"}.ti-hotel-service:before{content:"\ef80"}.ti-hourglass:before{content:"\ef93"}.ti-hourglass-empty:before{content:"\f146"}.ti-hourglass-filled:before{content:"\f756"}.ti-hourglass-high:before{content:"\f092"}.ti-hourglass-low:before{content:"\f093"}.ti-hourglass-off:before{content:"\f147"}.ti-html:before{content:"\f7b1"}.ti-http-connect:before{content:"\fa28"}.ti-http-delete:before{content:"\fa29"}.ti-http-get:before{content:"\fa2a"}.ti-http-head:before{content:"\fa2b"}.ti-http-options:before{content:"\fa2c"}.ti-http-patch:before{content:"\fa2d"}.ti-http-post:before{content:"\fa2e"}.ti-http-put:before{content:"\fa2f"}.ti-http-que:before{content:"\fa5b"}.ti-http-trace:before{content:"\fa30"}.ti-ice-cream:before{content:"\eac2"}.ti-ice-cream-2:before{content:"\ee9f"}.ti-ice-cream-off:before{content:"\f148"}.ti-ice-skating:before{content:"\efcb"}.ti-icons:before{content:"\f1d4"}.ti-icons-off:before{content:"\f3fc"}.ti-id:before{content:"\eac3"}.ti-id-badge:before{content:"\eff7"}.ti-id-badge-2:before{content:"\f076"}.ti-id-badge-off:before{content:"\f3fd"}.ti-id-off:before{content:"\f149"}.ti-image-in-picture:before{content:"\fd9f"}.ti-inbox:before{content:"\eac4"}.ti-inbox-off:before{content:"\f14a"}.ti-indent-decrease:before{content:"\eb91"}.ti-indent-increase:before{content:"\eb92"}.ti-infinity:before{content:"\eb69"}.ti-infinity-off:before{content:"\f3fe"}.ti-info-circle:before{content:"\eac5"}.ti-info-circle-filled:before{content:"\f6d8"}.ti-info-hexagon:before{content:"\f7aa"}.ti-info-hexagon-filled:before{content:"\fa43"}.ti-info-octagon:before{content:"\f7ab"}.ti-info-octagon-filled:before{content:"\fa44"}.ti-info-small:before{content:"\f922"}.ti-info-square:before{content:"\eac6"}.ti-info-square-filled:before{content:"\fa45"}.ti-info-square-rounded:before{content:"\f635"}.ti-info-square-rounded-filled:before{content:"\f6d9"}.ti-info-triangle:before{content:"\f923"}.ti-info-triangle-filled:before{content:"\fa46"}.ti-inner-shadow-bottom:before{content:"\f520"}.ti-inner-shadow-bottom-filled:before{content:"\f757"}.ti-inner-shadow-bottom-left:before{content:"\f51e"}.ti-inner-shadow-bottom-left-filled:before{content:"\f758"}.ti-inner-shadow-bottom-right:before{content:"\f51f"}.ti-inner-shadow-bottom-right-filled:before{content:"\f759"}.ti-inner-shadow-left:before{content:"\f521"}.ti-inner-shadow-left-filled:before{content:"\f75a"}.ti-inner-shadow-right:before{content:"\f522"}.ti-inner-shadow-right-filled:before{content:"\f75b"}.ti-inner-shadow-top:before{content:"\f525"}.ti-inner-shadow-top-filled:before{content:"\f75c"}.ti-inner-shadow-top-left:before{content:"\f523"}.ti-inner-shadow-top-left-filled:before{content:"\f75d"}.ti-inner-shadow-top-right:before{content:"\f524"}.ti-inner-shadow-top-right-filled:before{content:"\f75e"}.ti-input-ai:before{content:"\fc5a"}.ti-input-check:before{content:"\fc5b"}.ti-input-search:before{content:"\f2a2"}.ti-input-x:before{content:"\fc5c"}.ti-ironing:before{content:"\fa7c"}.ti-ironing-1:before{content:"\f2f4"}.ti-ironing-2:before{content:"\f2f5"}.ti-ironing-3:before{content:"\f2f6"}.ti-ironing-off:before{content:"\f2f7"}.ti-ironing-steam:before{content:"\f2f9"}.ti-ironing-steam-off:before{content:"\f2f8"}.ti-irregular-polyhedron:before{content:"\faab"}.ti-irregular-polyhedron-off:before{content:"\faa9"}.ti-irregular-polyhedron-plus:before{content:"\faaa"}.ti-italic:before{content:"\eb93"}.ti-jacket:before{content:"\f661"}.ti-jetpack:before{content:"\f581"}.ti-jewish-star:before{content:"\f3ff"}.ti-jewish-star-filled:before{content:"\f67e"}.ti-jpg:before{content:"\f3ac"}.ti-json:before{content:"\f7b2"}.ti-jump-rope:before{content:"\ed8f"}.ti-karate:before{content:"\ed32"}.ti-kayak:before{content:"\f1d6"}.ti-kering:before{content:"\efb8"}.ti-key:before{content:"\eac7"}.ti-key-off:before{content:"\f14b"}.ti-keyboard:before{content:"\ebd6"}.ti-keyboard-hide:before{content:"\ec7e"}.ti-keyboard-off:before{content:"\eea0"}.ti-keyboard-show:before{content:"\ec7f"}.ti-keyframe:before{content:"\f576"}.ti-keyframe-align-center:before{content:"\f582"}.ti-keyframe-align-center-filled:before{content:"\fc30"}.ti-keyframe-align-horizontal:before{content:"\f583"}.ti-keyframe-align-horizontal-filled:before{content:"\fc31"}.ti-keyframe-align-vertical:before{content:"\f584"}.ti-keyframe-align-vertical-filled:before{content:"\fc32"}.ti-keyframe-filled:before{content:"\fc33"}.ti-keyframes:before{content:"\f585"}.ti-keyframes-filled:before{content:"\fc34"}.ti-ladder:before{content:"\efe2"}.ti-ladder-off:before{content:"\f14c"}.ti-ladle:before{content:"\fc14"}.ti-lambda:before{content:"\f541"}.ti-lamp:before{content:"\efab"}.ti-lamp-2:before{content:"\f09e"}.ti-lamp-off:before{content:"\f14d"}.ti-lane:before{content:"\faf9"}.ti-language:before{content:"\ebbe"}.ti-language-hiragana:before{content:"\ef77"}.ti-language-katakana:before{content:"\ef78"}.ti-language-off:before{content:"\f14e"}.ti-lasso:before{content:"\efac"}.ti-lasso-off:before{content:"\f14f"}.ti-lasso-polygon:before{content:"\f388"}.ti-layers-difference:before{content:"\eac8"}.ti-layers-intersect:before{content:"\eac9"}.ti-layers-intersect-2:before{content:"\eff8"}.ti-layers-linked:before{content:"\eea1"}.ti-layers-off:before{content:"\f150"}.ti-layers-subtract:before{content:"\eaca"}.ti-layers-union:before{content:"\eacb"}.ti-layout:before{content:"\eadb"}.ti-layout-2:before{content:"\eacc"}.ti-layout-align-bottom:before{content:"\eacd"}.ti-layout-align-center:before{content:"\eace"}.ti-layout-align-left:before{content:"\eacf"}.ti-layout-align-middle:before{content:"\ead0"}.ti-layout-align-right:before{content:"\ead1"}.ti-layout-align-top:before{content:"\ead2"}.ti-layout-board:before{content:"\ef95"}.ti-layout-board-split:before{content:"\ef94"}.ti-layout-bottombar:before{content:"\ead3"}.ti-layout-bottombar-collapse:before{content:"\f28b"}.ti-layout-bottombar-collapse-filled:before{content:"\fc35"}.ti-layout-bottombar-expand:before{content:"\f28c"}.ti-layout-bottombar-expand-filled:before{content:"\fc36"}.ti-layout-bottombar-filled:before{content:"\fc37"}.ti-layout-bottombar-inactive:before{content:"\fd45"}.ti-layout-cards:before{content:"\ec13"}.ti-layout-collage:before{content:"\f389"}.ti-layout-columns:before{content:"\ead4"}.ti-layout-dashboard:before{content:"\f02c"}.ti-layout-distribute-horizontal:before{content:"\ead5"}.ti-layout-distribute-vertical:before{content:"\ead6"}.ti-layout-grid:before{content:"\edba"}.ti-layout-grid-add:before{content:"\edb9"}.ti-layout-grid-remove:before{content:"\fa7d"}.ti-layout-kanban:before{content:"\ec3f"}.ti-layout-list:before{content:"\ec14"}.ti-layout-navbar:before{content:"\ead7"}.ti-layout-navbar-collapse:before{content:"\f28d"}.ti-layout-navbar-collapse-filled:before{content:"\fc38"}.ti-layout-navbar-expand:before{content:"\f28e"}.ti-layout-navbar-expand-filled:before{content:"\fc39"}.ti-layout-navbar-filled:before{content:"\fc3a"}.ti-layout-navbar-inactive:before{content:"\fd46"}.ti-layout-off:before{content:"\f151"}.ti-layout-rows:before{content:"\ead8"}.ti-layout-sidebar:before{content:"\eada"}.ti-layout-sidebar-inactive:before{content:"\fd47"}.ti-layout-sidebar-left-collapse:before{content:"\f004"}.ti-layout-sidebar-left-collapse-filled:before{content:"\fc3b"}.ti-layout-sidebar-left-expand:before{content:"\f005"}.ti-layout-sidebar-left-expand-filled:before{content:"\fc3c"}.ti-layout-sidebar-right:before{content:"\ead9"}.ti-layout-sidebar-right-collapse:before{content:"\f006"}.ti-layout-sidebar-right-collapse-filled:before{content:"\fc3d"}.ti-layout-sidebar-right-expand:before{content:"\f007"}.ti-layout-sidebar-right-expand-filled:before{content:"\fc3e"}.ti-layout-sidebar-right-inactive:before{content:"\fd48"}.ti-leaf:before{content:"\ed4f"}.ti-leaf-off:before{content:"\f400"}.ti-lego:before{content:"\eadc"}.ti-lego-off:before{content:"\f401"}.ti-lemon:before{content:"\ef10"}.ti-lemon-2:before{content:"\ef81"}.ti-letter-a:before{content:"\ec50"}.ti-letter-a-small:before{content:"\fcc7"}.ti-letter-b:before{content:"\ec51"}.ti-letter-b-small:before{content:"\fcc8"}.ti-letter-c:before{content:"\ec52"}.ti-letter-c-small:before{content:"\fcc9"}.ti-letter-case:before{content:"\eea5"}.ti-letter-case-lower:before{content:"\eea2"}.ti-letter-case-toggle:before{content:"\eea3"}.ti-letter-case-upper:before{content:"\eea4"}.ti-letter-d:before{content:"\ec53"}.ti-letter-d-small:before{content:"\fcca"}.ti-letter-e:before{content:"\ec54"}.ti-letter-e-small:before{content:"\fccb"}.ti-letter-f:before{content:"\ec55"}.ti-letter-f-small:before{content:"\fccc"}.ti-letter-g:before{content:"\ec56"}.ti-letter-g-small:before{content:"\fccd"}.ti-letter-h:before{content:"\ec57"}.ti-letter-h-small:before{content:"\fcce"}.ti-letter-i:before{content:"\ec58"}.ti-letter-i-small:before{content:"\fccf"}.ti-letter-j:before{content:"\ec59"}.ti-letter-j-small:before{content:"\fcd0"}.ti-letter-k:before{content:"\ec5a"}.ti-letter-k-small:before{content:"\fcd1"}.ti-letter-l:before{content:"\ec5b"}.ti-letter-l-small:before{content:"\fcd2"}.ti-letter-m:before{content:"\ec5c"}.ti-letter-m-small:before{content:"\fcd3"}.ti-letter-n:before{content:"\ec5d"}.ti-letter-n-small:before{content:"\fcd4"}.ti-letter-o:before{content:"\ec5e"}.ti-letter-o-small:before{content:"\fcd5"}.ti-letter-p:before{content:"\ec5f"}.ti-letter-p-small:before{content:"\fcd6"}.ti-letter-q:before{content:"\ec60"}.ti-letter-q-small:before{content:"\fcd7"}.ti-letter-r:before{content:"\ec61"}.ti-letter-r-small:before{content:"\fcd8"}.ti-letter-s:before{content:"\ec62"}.ti-letter-s-small:before{content:"\fcd9"}.ti-letter-spacing:before{content:"\eea6"}.ti-letter-t:before{content:"\ec63"}.ti-letter-t-small:before{content:"\fcda"}.ti-letter-u:before{content:"\ec64"}.ti-letter-u-small:before{content:"\fcdb"}.ti-letter-v:before{content:"\ec65"}.ti-letter-v-small:before{content:"\fcdc"}.ti-letter-w:before{content:"\ec66"}.ti-letter-w-small:before{content:"\fcdd"}.ti-letter-x:before{content:"\ec67"}.ti-letter-x-small:before{content:"\fcde"}.ti-letter-y:before{content:"\ec68"}.ti-letter-y-small:before{content:"\fcdf"}.ti-letter-z:before{content:"\ec69"}.ti-letter-z-small:before{content:"\fce0"}.ti-library:before{content:"\fd4c"}.ti-library-minus:before{content:"\fd49"}.ti-library-photo:before{content:"\fd4a"}.ti-library-plus:before{content:"\fd4b"}.ti-license:before{content:"\ebc0"}.ti-license-off:before{content:"\f153"}.ti-lifebuoy:before{content:"\eadd"}.ti-lifebuoy-off:before{content:"\f154"}.ti-lighter:before{content:"\f794"}.ti-line:before{content:"\ec40"}.ti-line-dashed:before{content:"\eea7"}.ti-line-dotted:before{content:"\eea8"}.ti-line-height:before{content:"\eb94"}.ti-line-scan:before{content:"\fcb8"}.ti-link:before{content:"\eade"}.ti-link-minus:before{content:"\fd16"}.ti-link-off:before{content:"\f402"}.ti-link-plus:before{content:"\fd17"}.ti-list:before{content:"\eb6b"}.ti-list-check:before{content:"\eb6a"}.ti-list-details:before{content:"\ef40"}.ti-list-letters:before{content:"\fc47"}.ti-list-numbers:before{content:"\ef11"}.ti-list-search:before{content:"\eea9"}.ti-list-tree:before{content:"\fafa"}.ti-live-photo:before{content:"\eadf"}.ti-live-photo-off:before{content:"\f403"}.ti-live-view:before{content:"\ec6b"}.ti-load-balancer:before{content:"\fa5c"}.ti-loader:before{content:"\eca3"}.ti-loader-2:before{content:"\f226"}.ti-loader-3:before{content:"\f513"}.ti-loader-quarter:before{content:"\eca2"}.ti-location:before{content:"\eae0"}.ti-location-bolt:before{content:"\fbaf"}.ti-location-broken:before{content:"\f2c4"}.ti-location-cancel:before{content:"\fbb0"}.ti-location-check:before{content:"\fbb1"}.ti-location-code:before{content:"\fbb2"}.ti-location-cog:before{content:"\fbb3"}.ti-location-discount:before{content:"\fbb4"}.ti-location-dollar:before{content:"\fbb5"}.ti-location-down:before{content:"\fbb6"}.ti-location-exclamation:before{content:"\fbb7"}.ti-location-filled:before{content:"\f67f"}.ti-location-heart:before{content:"\fbb8"}.ti-location-minus:before{content:"\fbb9"}.ti-location-off:before{content:"\f155"}.ti-location-pause:before{content:"\fbba"}.ti-location-pin:before{content:"\fbbb"}.ti-location-plus:before{content:"\fbbc"}.ti-location-question:before{content:"\fbbd"}.ti-location-search:before{content:"\fbbe"}.ti-location-share:before{content:"\fbbf"}.ti-location-star:before{content:"\fbc0"}.ti-location-up:before{content:"\fbc1"}.ti-location-x:before{content:"\fbc2"}.ti-lock:before{content:"\eae2"}.ti-lock-access:before{content:"\eeaa"}.ti-lock-access-off:before{content:"\f404"}.ti-lock-bolt:before{content:"\f924"}.ti-lock-cancel:before{content:"\f925"}.ti-lock-check:before{content:"\f926"}.ti-lock-code:before{content:"\f927"}.ti-lock-cog:before{content:"\f928"}.ti-lock-dollar:before{content:"\f929"}.ti-lock-down:before{content:"\f92a"}.ti-lock-exclamation:before{content:"\f92b"}.ti-lock-heart:before{content:"\f92c"}.ti-lock-minus:before{content:"\f92d"}.ti-lock-off:before{content:"\ed1e"}.ti-lock-open:before{content:"\eae1"}.ti-lock-open-off:before{content:"\f156"}.ti-lock-pause:before{content:"\f92e"}.ti-lock-pin:before{content:"\f92f"}.ti-lock-plus:before{content:"\f930"}.ti-lock-question:before{content:"\f931"}.ti-lock-search:before{content:"\f932"}.ti-lock-share:before{content:"\f933"}.ti-lock-square:before{content:"\ef51"}.ti-lock-square-rounded:before{content:"\f636"}.ti-lock-square-rounded-filled:before{content:"\f6da"}.ti-lock-star:before{content:"\f934"}.ti-lock-up:before{content:"\f935"}.ti-lock-x:before{content:"\f936"}.ti-logic-and:before{content:"\f240"}.ti-logic-buffer:before{content:"\f241"}.ti-logic-nand:before{content:"\f242"}.ti-logic-nor:before{content:"\f243"}.ti-logic-not:before{content:"\f244"}.ti-logic-or:before{content:"\f245"}.ti-logic-xnor:before{content:"\f246"}.ti-logic-xor:before{content:"\f247"}.ti-login:before{content:"\eba7"}.ti-login-2:before{content:"\fc76"}.ti-logout:before{content:"\eba8"}.ti-logout-2:before{content:"\fa7e"}.ti-lollipop:before{content:"\efcc"}.ti-lollipop-off:before{content:"\f157"}.ti-luggage:before{content:"\efad"}.ti-luggage-off:before{content:"\f158"}.ti-lungs:before{content:"\ef62"}.ti-lungs-off:before{content:"\f405"}.ti-macro:before{content:"\eeab"}.ti-macro-off:before{content:"\f406"}.ti-magnet:before{content:"\eae3"}.ti-magnet-off:before{content:"\f159"}.ti-magnetic:before{content:"\fcb9"}.ti-mail:before{content:"\eae5"}.ti-mail-ai:before{content:"\fa31"}.ti-mail-bolt:before{content:"\f937"}.ti-mail-cancel:before{content:"\f938"}.ti-mail-check:before{content:"\f939"}.ti-mail-code:before{content:"\f93a"}.ti-mail-cog:before{content:"\f93b"}.ti-mail-dollar:before{content:"\f93c"}.ti-mail-down:before{content:"\f93d"}.ti-mail-exclamation:before{content:"\f93e"}.ti-mail-fast:before{content:"\f069"}.ti-mail-filled:before{content:"\fa47"}.ti-mail-forward:before{content:"\eeac"}.ti-mail-heart:before{content:"\f93f"}.ti-mail-minus:before{content:"\f940"}.ti-mail-off:before{content:"\f15a"}.ti-mail-opened:before{content:"\eae4"}.ti-mail-opened-filled:before{content:"\fa48"}.ti-mail-pause:before{content:"\f941"}.ti-mail-pin:before{content:"\f942"}.ti-mail-plus:before{content:"\f943"}.ti-mail-question:before{content:"\f944"}.ti-mail-search:before{content:"\f945"}.ti-mail-share:before{content:"\f946"}.ti-mail-star:before{content:"\f947"}.ti-mail-up:before{content:"\f948"}.ti-mail-x:before{content:"\f949"}.ti-mailbox:before{content:"\eead"}.ti-mailbox-off:before{content:"\f15b"}.ti-man:before{content:"\eae6"}.ti-manual-gearbox:before{content:"\ed7b"}.ti-map:before{content:"\eae9"}.ti-map-2:before{content:"\eae7"}.ti-map-bolt:before{content:"\fbc3"}.ti-map-cancel:before{content:"\fbc4"}.ti-map-check:before{content:"\fbc5"}.ti-map-code:before{content:"\fbc6"}.ti-map-cog:before{content:"\fbc7"}.ti-map-discount:before{content:"\fbc8"}.ti-map-dollar:before{content:"\fbc9"}.ti-map-down:before{content:"\fbca"}.ti-map-east:before{content:"\fc5d"}.ti-map-exclamation:before{content:"\fbcb"}.ti-map-heart:before{content:"\fbcc"}.ti-map-minus:before{content:"\fbcd"}.ti-map-north:before{content:"\fc5e"}.ti-map-off:before{content:"\f15c"}.ti-map-pause:before{content:"\fbce"}.ti-map-pin:before{content:"\eae8"}.ti-map-pin-2:before{content:"\fc48"}.ti-map-pin-bolt:before{content:"\f94a"}.ti-map-pin-cancel:before{content:"\f94b"}.ti-map-pin-check:before{content:"\f94c"}.ti-map-pin-code:before{content:"\f94d"}.ti-map-pin-cog:before{content:"\f94e"}.ti-map-pin-dollar:before{content:"\f94f"}.ti-map-pin-down:before{content:"\f950"}.ti-map-pin-exclamation:before{content:"\f951"}.ti-map-pin-filled:before{content:"\f680"}.ti-map-pin-heart:before{content:"\f952"}.ti-map-pin-minus:before{content:"\f953"}.ti-map-pin-off:before{content:"\ecf3"}.ti-map-pin-pause:before{content:"\f954"}.ti-map-pin-pin:before{content:"\f955"}.ti-map-pin-plus:before{content:"\f956"}.ti-map-pin-question:before{content:"\f957"}.ti-map-pin-search:before{content:"\f958"}.ti-map-pin-share:before{content:"\f795"}.ti-map-pin-star:before{content:"\f959"}.ti-map-pin-up:before{content:"\f95a"}.ti-map-pin-x:before{content:"\f95b"}.ti-map-pins:before{content:"\ed5e"}.ti-map-plus:before{content:"\fbcf"}.ti-map-question:before{content:"\fbd0"}.ti-map-route:before{content:"\fc79"}.ti-map-search:before{content:"\ef82"}.ti-map-share:before{content:"\fbd1"}.ti-map-south:before{content:"\fc5f"}.ti-map-star:before{content:"\fbd2"}.ti-map-up:before{content:"\fbd3"}.ti-map-west:before{content:"\fc60"}.ti-map-x:before{content:"\fbd4"}.ti-markdown:before{content:"\ec41"}.ti-markdown-off:before{content:"\f407"}.ti-marquee:before{content:"\ec77"}.ti-marquee-2:before{content:"\eeae"}.ti-marquee-off:before{content:"\f15d"}.ti-mars:before{content:"\ec80"}.ti-mask:before{content:"\eeb0"}.ti-mask-off:before{content:"\eeaf"}.ti-masks-theater:before{content:"\f263"}.ti-masks-theater-off:before{content:"\f408"}.ti-massage:before{content:"\eeb1"}.ti-matchstick:before{content:"\f577"}.ti-math:before{content:"\ebeb"}.ti-math-1-divide-2:before{content:"\f4e2"}.ti-math-1-divide-3:before{content:"\f4e3"}.ti-math-avg:before{content:"\f0f4"}.ti-math-equal-greater:before{content:"\f4e4"}.ti-math-equal-lower:before{content:"\f4e5"}.ti-math-function:before{content:"\eeb2"}.ti-math-function-off:before{content:"\f15e"}.ti-math-function-y:before{content:"\f4e6"}.ti-math-greater:before{content:"\f4e7"}.ti-math-integral:before{content:"\f4e9"}.ti-math-integral-x:before{content:"\f4e8"}.ti-math-integrals:before{content:"\f4ea"}.ti-math-lower:before{content:"\f4eb"}.ti-math-max:before{content:"\f0f5"}.ti-math-max-min:before{content:"\fda0"}.ti-math-min:before{content:"\f0f6"}.ti-math-not:before{content:"\f4ec"}.ti-math-off:before{content:"\f409"}.ti-math-pi:before{content:"\f4ee"}.ti-math-pi-divide-2:before{content:"\f4ed"}.ti-math-symbols:before{content:"\eeb3"}.ti-math-x-divide-2:before{content:"\f4ef"}.ti-math-x-divide-y:before{content:"\f4f1"}.ti-math-x-divide-y-2:before{content:"\f4f0"}.ti-math-x-minus-x:before{content:"\f4f2"}.ti-math-x-minus-y:before{content:"\f4f3"}.ti-math-x-plus-x:before{content:"\f4f4"}.ti-math-x-plus-y:before{content:"\f4f5"}.ti-math-xy:before{content:"\f4f6"}.ti-math-y-minus-y:before{content:"\f4f7"}.ti-math-y-plus-y:before{content:"\f4f8"}.ti-maximize:before{content:"\eaea"}.ti-maximize-off:before{content:"\f15f"}.ti-meat:before{content:"\ef12"}.ti-meat-off:before{content:"\f40a"}.ti-medal:before{content:"\ec78"}.ti-medal-2:before{content:"\efcd"}.ti-medical-cross:before{content:"\ec2f"}.ti-medical-cross-circle:before{content:"\fae8"}.ti-medical-cross-filled:before{content:"\f681"}.ti-medical-cross-off:before{content:"\f160"}.ti-medicine-syrup:before{content:"\ef63"}.ti-meeple:before{content:"\f514"}.ti-melon:before{content:"\fc7a"}.ti-menorah:before{content:"\f58c"}.ti-menu:before{content:"\eaeb"}.ti-menu-2:before{content:"\ec42"}.ti-menu-deep:before{content:"\fafb"}.ti-menu-order:before{content:"\f5f5"}.ti-message:before{content:"\eaef"}.ti-message-2:before{content:"\eaec"}.ti-message-2-bolt:before{content:"\f95c"}.ti-message-2-cancel:before{content:"\f95d"}.ti-message-2-check:before{content:"\f95e"}.ti-message-2-code:before{content:"\f012"}.ti-message-2-cog:before{content:"\f95f"}.ti-message-2-dollar:before{content:"\f960"}.ti-message-2-down:before{content:"\f961"}.ti-message-2-exclamation:before{content:"\f962"}.ti-message-2-heart:before{content:"\f963"}.ti-message-2-minus:before{content:"\f964"}.ti-message-2-off:before{content:"\f40b"}.ti-message-2-pause:before{content:"\f965"}.ti-message-2-pin:before{content:"\f966"}.ti-message-2-plus:before{content:"\f967"}.ti-message-2-question:before{content:"\f968"}.ti-message-2-search:before{content:"\f969"}.ti-message-2-share:before{content:"\f077"}.ti-message-2-star:before{content:"\f96a"}.ti-message-2-up:before{content:"\f96b"}.ti-message-2-x:before{content:"\f96c"}.ti-message-bolt:before{content:"\f96d"}.ti-message-cancel:before{content:"\f96e"}.ti-message-chatbot:before{content:"\f38a"}.ti-message-check:before{content:"\f96f"}.ti-message-circle:before{content:"\eaed"}.ti-message-circle-2:before{content:"\ed3f"}.ti-message-circle-2-filled:before{content:"\f682"}.ti-message-circle-bolt:before{content:"\f970"}.ti-message-circle-cancel:before{content:"\f971"}.ti-message-circle-check:before{content:"\f972"}.ti-message-circle-code:before{content:"\f973"}.ti-message-circle-cog:before{content:"\f974"}.ti-message-circle-dollar:before{content:"\f975"}.ti-message-circle-down:before{content:"\f976"}.ti-message-circle-exclamation:before{content:"\f977"}.ti-message-circle-heart:before{content:"\f978"}.ti-message-circle-minus:before{content:"\f979"}.ti-message-circle-off:before{content:"\ed40"}.ti-message-circle-pause:before{content:"\f97a"}.ti-message-circle-pin:before{content:"\f97b"}.ti-message-circle-plus:before{content:"\f97c"}.ti-message-circle-question:before{content:"\f97d"}.ti-message-circle-search:before{content:"\f97e"}.ti-message-circle-share:before{content:"\f97f"}.ti-message-circle-star:before{content:"\f980"}.ti-message-circle-up:before{content:"\f981"}.ti-message-circle-x:before{content:"\f982"}.ti-message-code:before{content:"\f013"}.ti-message-cog:before{content:"\f983"}.ti-message-dollar:before{content:"\f984"}.ti-message-dots:before{content:"\eaee"}.ti-message-down:before{content:"\f985"}.ti-message-exclamation:before{content:"\f986"}.ti-message-forward:before{content:"\f28f"}.ti-message-heart:before{content:"\f987"}.ti-message-language:before{content:"\efae"}.ti-message-minus:before{content:"\f988"}.ti-message-off:before{content:"\ed41"}.ti-message-pause:before{content:"\f989"}.ti-message-pin:before{content:"\f98a"}.ti-message-plus:before{content:"\ec9a"}.ti-message-question:before{content:"\f98b"}.ti-message-reply:before{content:"\fd4d"}.ti-message-report:before{content:"\ec9b"}.ti-message-search:before{content:"\f98c"}.ti-message-share:before{content:"\f078"}.ti-message-star:before{content:"\f98d"}.ti-message-up:before{content:"\f98e"}.ti-message-x:before{content:"\f98f"}.ti-messages:before{content:"\eb6c"}.ti-messages-off:before{content:"\ed42"}.ti-meteor:before{content:"\f1fd"}.ti-meteor-off:before{content:"\f40c"}.ti-meter-cube:before{content:"\fd7c"}.ti-meter-square:before{content:"\fd7d"}.ti-metronome:before{content:"\fd25"}.ti-michelin-bib-gourmand:before{content:"\fae9"}.ti-michelin-star:before{content:"\faeb"}.ti-michelin-star-green:before{content:"\faea"}.ti-mickey:before{content:"\f2a3"}.ti-mickey-filled:before{content:"\f683"}.ti-microphone:before{content:"\eaf0"}.ti-microphone-2:before{content:"\ef2c"}.ti-microphone-2-off:before{content:"\f40d"}.ti-microphone-off:before{content:"\ed16"}.ti-microscope:before{content:"\ef64"}.ti-microscope-off:before{content:"\f40e"}.ti-microwave:before{content:"\f248"}.ti-microwave-off:before{content:"\f264"}.ti-military-award:before{content:"\f079"}.ti-military-rank:before{content:"\efcf"}.ti-milk:before{content:"\ef13"}.ti-milk-off:before{content:"\f40f"}.ti-milkshake:before{content:"\f4c8"}.ti-minimize:before{content:"\eaf1"}.ti-minus:before{content:"\eaf2"}.ti-minus-vertical:before{content:"\eeb4"}.ti-mist:before{content:"\ec30"}.ti-mist-off:before{content:"\f410"}.ti-mobiledata:before{content:"\f9f5"}.ti-mobiledata-off:before{content:"\f9f4"}.ti-moneybag:before{content:"\f506"}.ti-mood-angry:before{content:"\f2de"}.ti-mood-annoyed:before{content:"\f2e0"}.ti-mood-annoyed-2:before{content:"\f2df"}.ti-mood-boy:before{content:"\ed2d"}.ti-mood-check:before{content:"\f7b3"}.ti-mood-cog:before{content:"\f7b4"}.ti-mood-confuzed:before{content:"\eaf3"}.ti-mood-confuzed-filled:before{content:"\f7f2"}.ti-mood-crazy-happy:before{content:"\ed90"}.ti-mood-cry:before{content:"\ecbb"}.ti-mood-dollar:before{content:"\f7b5"}.ti-mood-edit:before{content:"\fa05"}.ti-mood-empty:before{content:"\eeb5"}.ti-mood-empty-filled:before{content:"\f7f3"}.ti-mood-happy:before{content:"\eaf4"}.ti-mood-happy-filled:before{content:"\f7f4"}.ti-mood-heart:before{content:"\f7b6"}.ti-mood-kid:before{content:"\ec03"}.ti-mood-kid-filled:before{content:"\f7f5"}.ti-mood-look-down:before{content:"\fd37"}.ti-mood-look-left:before{content:"\f2c5"}.ti-mood-look-right:before{content:"\f2c6"}.ti-mood-look-up:before{content:"\fd38"}.ti-mood-minus:before{content:"\f7b7"}.ti-mood-nerd:before{content:"\f2e1"}.ti-mood-nervous:before{content:"\ef96"}.ti-mood-neutral:before{content:"\eaf5"}.ti-mood-neutral-filled:before{content:"\f7f6"}.ti-mood-off:before{content:"\f161"}.ti-mood-pin:before{content:"\f7b8"}.ti-mood-plus:before{content:"\f7b9"}.ti-mood-puzzled:before{content:"\fd39"}.ti-mood-sad:before{content:"\eaf6"}.ti-mood-sad-2:before{content:"\f2e2"}.ti-mood-sad-dizzy:before{content:"\f2e3"}.ti-mood-sad-filled:before{content:"\f7f7"}.ti-mood-sad-squint:before{content:"\f2e4"}.ti-mood-search:before{content:"\f7ba"}.ti-mood-share:before{content:"\fa06"}.ti-mood-sick:before{content:"\f2e5"}.ti-mood-silence:before{content:"\f2e6"}.ti-mood-sing:before{content:"\f2c7"}.ti-mood-smile:before{content:"\eaf7"}.ti-mood-smile-beam:before{content:"\f2e7"}.ti-mood-smile-dizzy:before{content:"\f2e8"}.ti-mood-smile-filled:before{content:"\f7f8"}.ti-mood-suprised:before{content:"\ec04"}.ti-mood-tongue:before{content:"\eb95"}.ti-mood-tongue-wink:before{content:"\f2ea"}.ti-mood-tongue-wink-2:before{content:"\f2e9"}.ti-mood-unamused:before{content:"\f2eb"}.ti-mood-up:before{content:"\f7bb"}.ti-mood-wink:before{content:"\f2ed"}.ti-mood-wink-2:before{content:"\f2ec"}.ti-mood-wrrr:before{content:"\f2ee"}.ti-mood-x:before{content:"\f7bc"}.ti-mood-xd:before{content:"\f2ef"}.ti-moon:before{content:"\eaf8"}.ti-moon-2:before{content:"\ece6"}.ti-moon-filled:before{content:"\f684"}.ti-moon-off:before{content:"\f162"}.ti-moon-stars:before{content:"\ece7"}.ti-moped:before{content:"\ecbc"}.ti-motorbike:before{content:"\eeb6"}.ti-mountain:before{content:"\ef97"}.ti-mountain-off:before{content:"\f411"}.ti-mouse:before{content:"\eaf9"}.ti-mouse-2:before{content:"\f1d7"}.ti-mouse-filled:before{content:"\fb2f"}.ti-mouse-off:before{content:"\f163"}.ti-moustache:before{content:"\f4c9"}.ti-movie:before{content:"\eafa"}.ti-movie-off:before{content:"\f164"}.ti-mug:before{content:"\eafb"}.ti-mug-off:before{content:"\f165"}.ti-multiplier-0-5x:before{content:"\ef41"}.ti-multiplier-1-5x:before{content:"\ef42"}.ti-multiplier-1x:before{content:"\ef43"}.ti-multiplier-2x:before{content:"\ef44"}.ti-mushroom:before{content:"\ef14"}.ti-mushroom-filled:before{content:"\f7f9"}.ti-mushroom-off:before{content:"\f412"}.ti-music:before{content:"\eafc"}.ti-music-bolt:before{content:"\fbd5"}.ti-music-cancel:before{content:"\fbd6"}.ti-music-check:before{content:"\fbd7"}.ti-music-code:before{content:"\fbd8"}.ti-music-cog:before{content:"\fbd9"}.ti-music-discount:before{content:"\fbda"}.ti-music-dollar:before{content:"\fbdb"}.ti-music-down:before{content:"\fbdc"}.ti-music-exclamation:before{content:"\fbdd"}.ti-music-heart:before{content:"\fbde"}.ti-music-minus:before{content:"\fbdf"}.ti-music-off:before{content:"\f166"}.ti-music-pause:before{content:"\fbe0"}.ti-music-pin:before{content:"\fbe1"}.ti-music-plus:before{content:"\fbe2"}.ti-music-question:before{content:"\fbe3"}.ti-music-search:before{content:"\fbe4"}.ti-music-share:before{content:"\fbe5"}.ti-music-star:before{content:"\fbe6"}.ti-music-up:before{content:"\fbe7"}.ti-music-x:before{content:"\fbe8"}.ti-navigation:before{content:"\f2c8"}.ti-navigation-bolt:before{content:"\fbe9"}.ti-navigation-cancel:before{content:"\fbea"}.ti-navigation-check:before{content:"\fbeb"}.ti-navigation-code:before{content:"\fbec"}.ti-navigation-cog:before{content:"\fbed"}.ti-navigation-discount:before{content:"\fbee"}.ti-navigation-dollar:before{content:"\fbef"}.ti-navigation-down:before{content:"\fbf0"}.ti-navigation-east:before{content:"\fcba"}.ti-navigation-exclamation:before{content:"\fbf1"}.ti-navigation-filled:before{content:"\f685"}.ti-navigation-heart:before{content:"\fbf2"}.ti-navigation-minus:before{content:"\fbf3"}.ti-navigation-north:before{content:"\fcbb"}.ti-navigation-off:before{content:"\f413"}.ti-navigation-pause:before{content:"\fbf4"}.ti-navigation-pin:before{content:"\fbf5"}.ti-navigation-plus:before{content:"\fbf6"}.ti-navigation-question:before{content:"\fbf7"}.ti-navigation-search:before{content:"\fbf8"}.ti-navigation-share:before{content:"\fbf9"}.ti-navigation-south:before{content:"\fcbc"}.ti-navigation-star:before{content:"\fbfa"}.ti-navigation-top:before{content:"\faec"}.ti-navigation-up:before{content:"\fbfb"}.ti-navigation-west:before{content:"\fcbd"}.ti-navigation-x:before{content:"\fbfc"}.ti-needle:before{content:"\f508"}.ti-needle-thread:before{content:"\f507"}.ti-network:before{content:"\f09f"}.ti-network-off:before{content:"\f414"}.ti-new-section:before{content:"\ebc1"}.ti-news:before{content:"\eafd"}.ti-news-off:before{content:"\f167"}.ti-nfc:before{content:"\eeb7"}.ti-nfc-off:before{content:"\f168"}.ti-no-copyright:before{content:"\efb9"}.ti-no-creative-commons:before{content:"\efba"}.ti-no-derivatives:before{content:"\efbb"}.ti-north-star:before{content:"\f014"}.ti-note:before{content:"\eb6d"}.ti-note-off:before{content:"\f169"}.ti-notebook:before{content:"\eb96"}.ti-notebook-off:before{content:"\f415"}.ti-notes:before{content:"\eb6e"}.ti-notes-off:before{content:"\f16a"}.ti-notification:before{content:"\eafe"}.ti-notification-off:before{content:"\f16b"}.ti-number:before{content:"\f1fe"}.ti-number-0:before{content:"\edf0"}.ti-number-0-small:before{content:"\fce1"}.ti-number-1:before{content:"\edf1"}.ti-number-1-small:before{content:"\fce2"}.ti-number-10-small:before{content:"\fce3"}.ti-number-11-small:before{content:"\fce4"}.ti-number-12-small:before{content:"\fce5"}.ti-number-13-small:before{content:"\fce6"}.ti-number-14-small:before{content:"\fce7"}.ti-number-15-small:before{content:"\fce8"}.ti-number-16-small:before{content:"\fce9"}.ti-number-17-small:before{content:"\fcea"}.ti-number-18-small:before{content:"\fceb"}.ti-number-19-small:before{content:"\fcec"}.ti-number-2:before{content:"\edf2"}.ti-number-2-small:before{content:"\fced"}.ti-number-20-small:before{content:"\fcee"}.ti-number-21-small:before{content:"\fcef"}.ti-number-22-small:before{content:"\fcf0"}.ti-number-23-small:before{content:"\fcf1"}.ti-number-24-small:before{content:"\fcf2"}.ti-number-25-small:before{content:"\fcf3"}.ti-number-26-small:before{content:"\fcf4"}.ti-number-27-small:before{content:"\fcf5"}.ti-number-28-small:before{content:"\fcf6"}.ti-number-29-small:before{content:"\fcf7"}.ti-number-3:before{content:"\edf3"}.ti-number-3-small:before{content:"\fcf8"}.ti-number-4:before{content:"\edf4"}.ti-number-4-small:before{content:"\fcf9"}.ti-number-5:before{content:"\edf5"}.ti-number-5-small:before{content:"\fcfa"}.ti-number-6:before{content:"\edf6"}.ti-number-6-small:before{content:"\fcfb"}.ti-number-7:before{content:"\edf7"}.ti-number-7-small:before{content:"\fcfc"}.ti-number-8:before{content:"\edf8"}.ti-number-8-small:before{content:"\fcfd"}.ti-number-9:before{content:"\edf9"}.ti-number-9-small:before{content:"\fcfe"}.ti-numbers:before{content:"\f015"}.ti-nurse:before{content:"\ef65"}.ti-nut:before{content:"\fc61"}.ti-octagon:before{content:"\ecbd"}.ti-octagon-filled:before{content:"\f686"}.ti-octagon-minus:before{content:"\fc92"}.ti-octagon-minus-2:before{content:"\fc91"}.ti-octagon-off:before{content:"\eeb8"}.ti-octagon-plus:before{content:"\fc94"}.ti-octagon-plus-2:before{content:"\fc93"}.ti-octahedron:before{content:"\faae"}.ti-octahedron-off:before{content:"\faac"}.ti-octahedron-plus:before{content:"\faad"}.ti-old:before{content:"\eeb9"}.ti-olympics:before{content:"\eeba"}.ti-olympics-off:before{content:"\f416"}.ti-om:before{content:"\f58d"}.ti-omega:before{content:"\eb97"}.ti-outbound:before{content:"\f249"}.ti-outlet:before{content:"\ebd7"}.ti-oval:before{content:"\f02e"}.ti-oval-filled:before{content:"\f687"}.ti-oval-vertical:before{content:"\f02d"}.ti-oval-vertical-filled:before{content:"\f688"}.ti-overline:before{content:"\eebb"}.ti-package:before{content:"\eaff"}.ti-package-export:before{content:"\f07a"}.ti-package-import:before{content:"\f07b"}.ti-package-off:before{content:"\f16c"}.ti-packages:before{content:"\f2c9"}.ti-pacman:before{content:"\eebc"}.ti-page-break:before{content:"\ec81"}.ti-paint:before{content:"\eb00"}.ti-paint-filled:before{content:"\f75f"}.ti-paint-off:before{content:"\f16d"}.ti-palette:before{content:"\eb01"}.ti-palette-off:before{content:"\f16e"}.ti-panorama-horizontal:before{content:"\ed33"}.ti-panorama-horizontal-off:before{content:"\f417"}.ti-panorama-vertical:before{content:"\ed34"}.ti-panorama-vertical-off:before{content:"\f418"}.ti-paper-bag:before{content:"\f02f"}.ti-paper-bag-off:before{content:"\f16f"}.ti-paperclip:before{content:"\eb02"}.ti-parachute:before{content:"\ed7c"}.ti-parachute-off:before{content:"\f170"}.ti-parentheses:before{content:"\ebd8"}.ti-parentheses-off:before{content:"\f171"}.ti-parking:before{content:"\eb03"}.ti-parking-circle:before{content:"\fd5a"}.ti-parking-off:before{content:"\f172"}.ti-password:before{content:"\f4ca"}.ti-password-fingerprint:before{content:"\fc7b"}.ti-password-mobile-phone:before{content:"\fc7c"}.ti-password-user:before{content:"\fc7d"}.ti-paw:before{content:"\eff9"}.ti-paw-filled:before{content:"\f689"}.ti-paw-off:before{content:"\f419"}.ti-paywall:before{content:"\fd7e"}.ti-pdf:before{content:"\f7ac"}.ti-peace:before{content:"\ecbe"}.ti-pencil:before{content:"\eb04"}.ti-pencil-bolt:before{content:"\fbfd"}.ti-pencil-cancel:before{content:"\fbfe"}.ti-pencil-check:before{content:"\fbff"}.ti-pencil-code:before{content:"\fc00"}.ti-pencil-cog:before{content:"\fc01"}.ti-pencil-discount:before{content:"\fc02"}.ti-pencil-dollar:before{content:"\fc03"}.ti-pencil-down:before{content:"\fc04"}.ti-pencil-exclamation:before{content:"\fc05"}.ti-pencil-heart:before{content:"\fc06"}.ti-pencil-minus:before{content:"\f1eb"}.ti-pencil-off:before{content:"\f173"}.ti-pencil-pause:before{content:"\fc07"}.ti-pencil-pin:before{content:"\fc08"}.ti-pencil-plus:before{content:"\f1ec"}.ti-pencil-question:before{content:"\fc09"}.ti-pencil-search:before{content:"\fc0a"}.ti-pencil-share:before{content:"\fc0b"}.ti-pencil-star:before{content:"\fc0c"}.ti-pencil-up:before{content:"\fc0d"}.ti-pencil-x:before{content:"\fc0e"}.ti-pennant:before{content:"\ed7d"}.ti-pennant-2:before{content:"\f06a"}.ti-pennant-2-filled:before{content:"\f68a"}.ti-pennant-filled:before{content:"\f68b"}.ti-pennant-off:before{content:"\f174"}.ti-pentagon:before{content:"\efe3"}.ti-pentagon-filled:before{content:"\f68c"}.ti-pentagon-number-0:before{content:"\fc7e"}.ti-pentagon-number-1:before{content:"\fc7f"}.ti-pentagon-number-2:before{content:"\fc80"}.ti-pentagon-number-3:before{content:"\fc81"}.ti-pentagon-number-4:before{content:"\fc82"}.ti-pentagon-number-5:before{content:"\fc83"}.ti-pentagon-number-6:before{content:"\fc84"}.ti-pentagon-number-7:before{content:"\fc85"}.ti-pentagon-number-8:before{content:"\fc86"}.ti-pentagon-number-9:before{content:"\fc87"}.ti-pentagon-off:before{content:"\f41a"}.ti-pentagon-plus:before{content:"\fc49"}.ti-pentagon-x:before{content:"\fc88"}.ti-pentagram:before{content:"\f586"}.ti-pepper:before{content:"\ef15"}.ti-pepper-off:before{content:"\f175"}.ti-percentage:before{content:"\ecf4"}.ti-perfume:before{content:"\f509"}.ti-perspective:before{content:"\eebd"}.ti-perspective-off:before{content:"\f176"}.ti-phone:before{content:"\eb09"}.ti-phone-call:before{content:"\eb05"}.ti-phone-calling:before{content:"\ec43"}.ti-phone-check:before{content:"\ec05"}.ti-phone-filled:before{content:"\fa49"}.ti-phone-incoming:before{content:"\eb06"}.ti-phone-off:before{content:"\ecf5"}.ti-phone-outgoing:before{content:"\eb07"}.ti-phone-pause:before{content:"\eb08"}.ti-phone-plus:before{content:"\ec06"}.ti-phone-x:before{content:"\ec07"}.ti-photo:before{content:"\eb0a"}.ti-photo-ai:before{content:"\fa32"}.ti-photo-bolt:before{content:"\f990"}.ti-photo-cancel:before{content:"\f35d"}.ti-photo-check:before{content:"\f35e"}.ti-photo-circle:before{content:"\fc4a"}.ti-photo-circle-minus:before{content:"\fc62"}.ti-photo-circle-plus:before{content:"\fc63"}.ti-photo-code:before{content:"\f991"}.ti-photo-cog:before{content:"\f992"}.ti-photo-dollar:before{content:"\f993"}.ti-photo-down:before{content:"\f35f"}.ti-photo-edit:before{content:"\f360"}.ti-photo-exclamation:before{content:"\f994"}.ti-photo-filled:before{content:"\fa4a"}.ti-photo-heart:before{content:"\f361"}.ti-photo-hexagon:before{content:"\fc4b"}.ti-photo-minus:before{content:"\f362"}.ti-photo-off:before{content:"\ecf6"}.ti-photo-pause:before{content:"\f995"}.ti-photo-pentagon:before{content:"\fc4c"}.ti-photo-pin:before{content:"\f996"}.ti-photo-plus:before{content:"\f363"}.ti-photo-question:before{content:"\f997"}.ti-photo-scan:before{content:"\fca8"}.ti-photo-search:before{content:"\f364"}.ti-photo-sensor:before{content:"\f798"}.ti-photo-sensor-2:before{content:"\f796"}.ti-photo-sensor-3:before{content:"\f797"}.ti-photo-share:before{content:"\f998"}.ti-photo-shield:before{content:"\f365"}.ti-photo-square-rounded:before{content:"\fc4d"}.ti-photo-star:before{content:"\f366"}.ti-photo-up:before{content:"\f38b"}.ti-photo-video:before{content:"\fc95"}.ti-photo-x:before{content:"\f367"}.ti-physotherapist:before{content:"\eebe"}.ti-piano:before{content:"\fad3"}.ti-pick:before{content:"\fafc"}.ti-picture-in-picture:before{content:"\ed35"}.ti-picture-in-picture-off:before{content:"\ed43"}.ti-picture-in-picture-on:before{content:"\ed44"}.ti-picture-in-picture-top:before{content:"\efe4"}.ti-pig:before{content:"\ef52"}.ti-pig-money:before{content:"\f38c"}.ti-pig-off:before{content:"\f177"}.ti-pilcrow:before{content:"\f5f6"}.ti-pilcrow-left:before{content:"\fd7f"}.ti-pilcrow-right:before{content:"\fd80"}.ti-pill:before{content:"\ec44"}.ti-pill-off:before{content:"\f178"}.ti-pills:before{content:"\ef66"}.ti-pin:before{content:"\ec9c"}.ti-pin-end:before{content:"\fd5b"}.ti-pin-filled:before{content:"\f68d"}.ti-pin-invoke:before{content:"\fd5c"}.ti-ping-pong:before{content:"\f38d"}.ti-pinned:before{content:"\ed60"}.ti-pinned-filled:before{content:"\f68e"}.ti-pinned-off:before{content:"\ed5f"}.ti-pizza:before{content:"\edbb"}.ti-pizza-off:before{content:"\f179"}.ti-placeholder:before{content:"\f626"}.ti-plane:before{content:"\eb6f"}.ti-plane-arrival:before{content:"\eb99"}.ti-plane-departure:before{content:"\eb9a"}.ti-plane-inflight:before{content:"\ef98"}.ti-plane-off:before{content:"\f17a"}.ti-plane-tilt:before{content:"\f1ed"}.ti-planet:before{content:"\ec08"}.ti-planet-off:before{content:"\f17b"}.ti-plant:before{content:"\ed50"}.ti-plant-2:before{content:"\ed7e"}.ti-plant-2-off:before{content:"\f17c"}.ti-plant-off:before{content:"\f17d"}.ti-play-basketball:before{content:"\fa66"}.ti-play-card:before{content:"\eebf"}.ti-play-card-off:before{content:"\f17e"}.ti-play-football:before{content:"\fa67"}.ti-play-handball:before{content:"\fa68"}.ti-play-volleyball:before{content:"\fa69"}.ti-player-eject:before{content:"\efbc"}.ti-player-eject-filled:before{content:"\f68f"}.ti-player-pause:before{content:"\ed45"}.ti-player-pause-filled:before{content:"\f690"}.ti-player-play:before{content:"\ed46"}.ti-player-play-filled:before{content:"\f691"}.ti-player-record:before{content:"\ed47"}.ti-player-record-filled:before{content:"\f692"}.ti-player-skip-back:before{content:"\ed48"}.ti-player-skip-back-filled:before{content:"\f693"}.ti-player-skip-forward:before{content:"\ed49"}.ti-player-skip-forward-filled:before{content:"\f694"}.ti-player-stop:before{content:"\ed4a"}.ti-player-stop-filled:before{content:"\f695"}.ti-player-track-next:before{content:"\ed4b"}.ti-player-track-next-filled:before{content:"\f696"}.ti-player-track-prev:before{content:"\ed4c"}.ti-player-track-prev-filled:before{content:"\f697"}.ti-playlist:before{content:"\eec0"}.ti-playlist-add:before{content:"\f008"}.ti-playlist-off:before{content:"\f17f"}.ti-playlist-x:before{content:"\f009"}.ti-playstation-circle:before{content:"\f2ad"}.ti-playstation-square:before{content:"\f2ae"}.ti-playstation-triangle:before{content:"\f2af"}.ti-playstation-x:before{content:"\f2b0"}.ti-plug:before{content:"\ebd9"}.ti-plug-connected:before{content:"\f00a"}.ti-plug-connected-x:before{content:"\f0a0"}.ti-plug-off:before{content:"\f180"}.ti-plug-x:before{content:"\f0a1"}.ti-plus:before{content:"\eb0b"}.ti-plus-equal:before{content:"\f7ad"}.ti-plus-minus:before{content:"\f7ae"}.ti-png:before{content:"\f3ad"}.ti-podium:before{content:"\f1d8"}.ti-podium-off:before{content:"\f41b"}.ti-point:before{content:"\eb0c"}.ti-point-filled:before{content:"\f698"}.ti-point-off:before{content:"\f181"}.ti-pointer:before{content:"\f265"}.ti-pointer-bolt:before{content:"\f999"}.ti-pointer-cancel:before{content:"\f99a"}.ti-pointer-check:before{content:"\f99b"}.ti-pointer-code:before{content:"\f99c"}.ti-pointer-cog:before{content:"\f99d"}.ti-pointer-dollar:before{content:"\f99e"}.ti-pointer-down:before{content:"\f99f"}.ti-pointer-exclamation:before{content:"\f9a0"}.ti-pointer-filled:before{content:"\fb30"}.ti-pointer-heart:before{content:"\f9a1"}.ti-pointer-minus:before{content:"\f9a2"}.ti-pointer-off:before{content:"\f9a3"}.ti-pointer-pause:before{content:"\f9a4"}.ti-pointer-pin:before{content:"\f9a5"}.ti-pointer-plus:before{content:"\f9a6"}.ti-pointer-question:before{content:"\f9a7"}.ti-pointer-search:before{content:"\f9a8"}.ti-pointer-share:before{content:"\f9a9"}.ti-pointer-star:before{content:"\f9aa"}.ti-pointer-up:before{content:"\f9ab"}.ti-pointer-x:before{content:"\f9ac"}.ti-pokeball:before{content:"\eec1"}.ti-pokeball-off:before{content:"\f41c"}.ti-poker-chip:before{content:"\f515"}.ti-polaroid:before{content:"\eec2"}.ti-polaroid-filled:before{content:"\fa4b"}.ti-polygon:before{content:"\efd0"}.ti-polygon-off:before{content:"\f182"}.ti-poo:before{content:"\f258"}.ti-pool:before{content:"\ed91"}.ti-pool-off:before{content:"\f41d"}.ti-power:before{content:"\eb0d"}.ti-pray:before{content:"\ecbf"}.ti-premium-rights:before{content:"\efbd"}.ti-prescription:before{content:"\ef99"}.ti-presentation:before{content:"\eb70"}.ti-presentation-analytics:before{content:"\eec3"}.ti-presentation-off:before{content:"\f183"}.ti-printer:before{content:"\eb0e"}.ti-printer-off:before{content:"\f184"}.ti-prism:before{content:"\fab1"}.ti-prism-off:before{content:"\faaf"}.ti-prism-plus:before{content:"\fab0"}.ti-prison:before{content:"\ef79"}.ti-progress:before{content:"\fa0d"}.ti-progress-alert:before{content:"\fa07"}.ti-progress-bolt:before{content:"\fa08"}.ti-progress-check:before{content:"\fa09"}.ti-progress-down:before{content:"\fa0a"}.ti-progress-help:before{content:"\fa0b"}.ti-progress-x:before{content:"\fa0c"}.ti-prompt:before{content:"\eb0f"}.ti-prong:before{content:"\fda1"}.ti-propeller:before{content:"\eec4"}.ti-propeller-off:before{content:"\f185"}.ti-protocol:before{content:"\fd81"}.ti-pumpkin-scary:before{content:"\f587"}.ti-puzzle:before{content:"\eb10"}.ti-puzzle-2:before{content:"\ef83"}.ti-puzzle-filled:before{content:"\f699"}.ti-puzzle-off:before{content:"\f186"}.ti-pyramid:before{content:"\eec5"}.ti-pyramid-off:before{content:"\f187"}.ti-pyramid-plus:before{content:"\fab2"}.ti-qrcode:before{content:"\eb11"}.ti-qrcode-off:before{content:"\f41e"}.ti-question-mark:before{content:"\ec9d"}.ti-quote:before{content:"\efbe"}.ti-quote-off:before{content:"\f188"}.ti-quotes:before{content:"\fb1e"}.ti-radar:before{content:"\f017"}.ti-radar-2:before{content:"\f016"}.ti-radar-off:before{content:"\f41f"}.ti-radio:before{content:"\ef2d"}.ti-radio-off:before{content:"\f420"}.ti-radioactive:before{content:"\ecc0"}.ti-radioactive-filled:before{content:"\f760"}.ti-radioactive-off:before{content:"\f189"}.ti-radius-bottom-left:before{content:"\eec6"}.ti-radius-bottom-right:before{content:"\eec7"}.ti-radius-top-left:before{content:"\eec8"}.ti-radius-top-right:before{content:"\eec9"}.ti-rainbow:before{content:"\edbc"}.ti-rainbow-off:before{content:"\f18a"}.ti-rating-12-plus:before{content:"\f266"}.ti-rating-14-plus:before{content:"\f267"}.ti-rating-16-plus:before{content:"\f268"}.ti-rating-18-plus:before{content:"\f269"}.ti-rating-21-plus:before{content:"\f26a"}.ti-razor:before{content:"\f4b5"}.ti-razor-electric:before{content:"\f4b4"}.ti-receipt:before{content:"\edfd"}.ti-receipt-2:before{content:"\edfa"}.ti-receipt-bitcoin:before{content:"\fd66"}.ti-receipt-dollar:before{content:"\fd67"}.ti-receipt-euro:before{content:"\fd68"}.ti-receipt-off:before{content:"\edfb"}.ti-receipt-pound:before{content:"\fd69"}.ti-receipt-refund:before{content:"\edfc"}.ti-receipt-rupee:before{content:"\fd82"}.ti-receipt-tax:before{content:"\edbd"}.ti-receipt-yen:before{content:"\fd6a"}.ti-receipt-yuan:before{content:"\fd6b"}.ti-recharging:before{content:"\eeca"}.ti-record-mail:before{content:"\eb12"}.ti-record-mail-off:before{content:"\f18b"}.ti-rectangle:before{content:"\ed37"}.ti-rectangle-filled:before{content:"\f69a"}.ti-rectangle-rounded-bottom:before{content:"\faed"}.ti-rectangle-rounded-top:before{content:"\faee"}.ti-rectangle-vertical:before{content:"\ed36"}.ti-rectangle-vertical-filled:before{content:"\f69b"}.ti-rectangular-prism:before{content:"\fab5"}.ti-rectangular-prism-off:before{content:"\fab3"}.ti-rectangular-prism-plus:before{content:"\fab4"}.ti-recycle:before{content:"\eb9b"}.ti-recycle-off:before{content:"\f18c"}.ti-refresh:before{content:"\eb13"}.ti-refresh-alert:before{content:"\ed57"}.ti-refresh-dot:before{content:"\efbf"}.ti-refresh-off:before{content:"\f18d"}.ti-regex:before{content:"\f31f"}.ti-regex-off:before{content:"\f421"}.ti-registered:before{content:"\eb14"}.ti-relation-many-to-many:before{content:"\ed7f"}.ti-relation-one-to-many:before{content:"\ed80"}.ti-relation-one-to-one:before{content:"\ed81"}.ti-reload:before{content:"\f3ae"}.ti-reorder:before{content:"\fc15"}.ti-repeat:before{content:"\eb72"}.ti-repeat-off:before{content:"\f18e"}.ti-repeat-once:before{content:"\eb71"}.ti-replace:before{content:"\ebc7"}.ti-replace-filled:before{content:"\f69c"}.ti-replace-off:before{content:"\f422"}.ti-report:before{content:"\eece"}.ti-report-analytics:before{content:"\eecb"}.ti-report-medical:before{content:"\eecc"}.ti-report-money:before{content:"\eecd"}.ti-report-off:before{content:"\f18f"}.ti-report-search:before{content:"\ef84"}.ti-reserved-line:before{content:"\f9f6"}.ti-resize:before{content:"\eecf"}.ti-restore:before{content:"\fafd"}.ti-rewind-backward-10:before{content:"\faba"}.ti-rewind-backward-15:before{content:"\fabb"}.ti-rewind-backward-20:before{content:"\fabc"}.ti-rewind-backward-30:before{content:"\fabd"}.ti-rewind-backward-40:before{content:"\fabe"}.ti-rewind-backward-5:before{content:"\fabf"}.ti-rewind-backward-50:before{content:"\fac0"}.ti-rewind-backward-60:before{content:"\fac1"}.ti-rewind-forward-10:before{content:"\fac2"}.ti-rewind-forward-15:before{content:"\fac3"}.ti-rewind-forward-20:before{content:"\fac4"}.ti-rewind-forward-30:before{content:"\fac5"}.ti-rewind-forward-40:before{content:"\fac6"}.ti-rewind-forward-5:before{content:"\fac7"}.ti-rewind-forward-50:before{content:"\fac8"}.ti-rewind-forward-60:before{content:"\fac9"}.ti-ribbon-health:before{content:"\f58e"}.ti-rings:before{content:"\fa6a"}.ti-ripple:before{content:"\ed82"}.ti-ripple-off:before{content:"\f190"}.ti-road:before{content:"\f018"}.ti-road-off:before{content:"\f191"}.ti-road-sign:before{content:"\ecdd"}.ti-robot:before{content:"\f00b"}.ti-robot-face:before{content:"\fcbe"}.ti-robot-off:before{content:"\f192"}.ti-rocket:before{content:"\ec45"}.ti-rocket-off:before{content:"\f193"}.ti-roller-skating:before{content:"\efd1"}.ti-rollercoaster:before{content:"\f0a2"}.ti-rollercoaster-off:before{content:"\f423"}.ti-rosette:before{content:"\f599"}.ti-rosette-filled:before{content:"\f69d"}.ti-rosette-number-0:before{content:"\f58f"}.ti-rosette-number-1:before{content:"\f590"}.ti-rosette-number-2:before{content:"\f591"}.ti-rosette-number-3:before{content:"\f592"}.ti-rosette-number-4:before{content:"\f593"}.ti-rosette-number-5:before{content:"\f594"}.ti-rosette-number-6:before{content:"\f595"}.ti-rosette-number-7:before{content:"\f596"}.ti-rosette-number-8:before{content:"\f597"}.ti-rosette-number-9:before{content:"\f598"}.ti-rotate:before{content:"\eb16"}.ti-rotate-2:before{content:"\ebb4"}.ti-rotate-360:before{content:"\ef85"}.ti-rotate-clockwise:before{content:"\eb15"}.ti-rotate-clockwise-2:before{content:"\ebb5"}.ti-rotate-dot:before{content:"\efe5"}.ti-rotate-rectangle:before{content:"\ec15"}.ti-route:before{content:"\eb17"}.ti-route-2:before{content:"\f4b6"}.ti-route-alt-left:before{content:"\fca9"}.ti-route-alt-right:before{content:"\fcaa"}.ti-route-off:before{content:"\f194"}.ti-route-scan:before{content:"\fcbf"}.ti-route-square:before{content:"\fcac"}.ti-route-square-2:before{content:"\fcab"}.ti-route-x:before{content:"\fcae"}.ti-route-x-2:before{content:"\fcad"}.ti-router:before{content:"\eb18"}.ti-router-off:before{content:"\f424"}.ti-row-insert-bottom:before{content:"\eed0"}.ti-row-insert-top:before{content:"\eed1"}.ti-row-remove:before{content:"\fafe"}.ti-rss:before{content:"\eb19"}.ti-rubber-stamp:before{content:"\f5ab"}.ti-rubber-stamp-off:before{content:"\f5aa"}.ti-ruler:before{content:"\eb1a"}.ti-ruler-2:before{content:"\eed2"}.ti-ruler-2-off:before{content:"\f195"}.ti-ruler-3:before{content:"\f290"}.ti-ruler-measure:before{content:"\f291"}.ti-ruler-off:before{content:"\f196"}.ti-run:before{content:"\ec82"}.ti-rv-truck:before{content:"\fcc0"}.ti-s-turn-down:before{content:"\f516"}.ti-s-turn-left:before{content:"\f517"}.ti-s-turn-right:before{content:"\f518"}.ti-s-turn-up:before{content:"\f519"}.ti-sailboat:before{content:"\ec83"}.ti-sailboat-2:before{content:"\f5f7"}.ti-sailboat-off:before{content:"\f425"}.ti-salad:before{content:"\f50a"}.ti-salt:before{content:"\ef16"}.ti-sandbox:before{content:"\fd6c"}.ti-satellite:before{content:"\eed3"}.ti-satellite-off:before{content:"\f197"}.ti-sausage:before{content:"\ef17"}.ti-scale:before{content:"\ebc2"}.ti-scale-off:before{content:"\f198"}.ti-scale-outline:before{content:"\ef53"}.ti-scale-outline-off:before{content:"\f199"}.ti-scan:before{content:"\ebc8"}.ti-scan-eye:before{content:"\f1ff"}.ti-schema:before{content:"\f200"}.ti-schema-off:before{content:"\f426"}.ti-school:before{content:"\ecf7"}.ti-school-bell:before{content:"\f64a"}.ti-school-off:before{content:"\f19a"}.ti-scissors:before{content:"\eb1b"}.ti-scissors-off:before{content:"\f19b"}.ti-scooter:before{content:"\ec6c"}.ti-scooter-electric:before{content:"\ecc1"}.ti-scoreboard:before{content:"\fa6b"}.ti-screen-share:before{content:"\ed18"}.ti-screen-share-off:before{content:"\ed17"}.ti-screenshot:before{content:"\f201"}.ti-scribble:before{content:"\f0a3"}.ti-scribble-off:before{content:"\f427"}.ti-script:before{content:"\f2da"}.ti-script-minus:before{content:"\f2d7"}.ti-script-plus:before{content:"\f2d8"}.ti-script-x:before{content:"\f2d9"}.ti-scuba-diving:before{content:"\fd4e"}.ti-scuba-mask:before{content:"\eed4"}.ti-scuba-mask-off:before{content:"\f428"}.ti-sdk:before{content:"\f3af"}.ti-search:before{content:"\eb1c"}.ti-search-off:before{content:"\f19c"}.ti-section:before{content:"\eed5"}.ti-section-sign:before{content:"\f019"}.ti-seeding:before{content:"\ed51"}.ti-seeding-off:before{content:"\f19d"}.ti-select:before{content:"\ec9e"}.ti-select-all:before{content:"\f9f7"}.ti-selector:before{content:"\eb1d"}.ti-send:before{content:"\eb1e"}.ti-send-2:before{content:"\fd5d"}.ti-send-off:before{content:"\f429"}.ti-seo:before{content:"\f26b"}.ti-separator:before{content:"\ebda"}.ti-separator-horizontal:before{content:"\ec79"}.ti-separator-vertical:before{content:"\ec7a"}.ti-server:before{content:"\eb1f"}.ti-server-2:before{content:"\f07c"}.ti-server-bolt:before{content:"\f320"}.ti-server-cog:before{content:"\f321"}.ti-server-off:before{content:"\f19e"}.ti-servicemark:before{content:"\ec09"}.ti-settings:before{content:"\eb20"}.ti-settings-2:before{content:"\f5ac"}.ti-settings-automation:before{content:"\eed6"}.ti-settings-bolt:before{content:"\f9ad"}.ti-settings-cancel:before{content:"\f9ae"}.ti-settings-check:before{content:"\f9af"}.ti-settings-code:before{content:"\f9b0"}.ti-settings-cog:before{content:"\f9b1"}.ti-settings-dollar:before{content:"\f9b2"}.ti-settings-down:before{content:"\f9b3"}.ti-settings-exclamation:before{content:"\f9b4"}.ti-settings-filled:before{content:"\f69e"}.ti-settings-heart:before{content:"\f9b5"}.ti-settings-minus:before{content:"\f9b6"}.ti-settings-off:before{content:"\f19f"}.ti-settings-pause:before{content:"\f9b7"}.ti-settings-pin:before{content:"\f9b8"}.ti-settings-plus:before{content:"\f9b9"}.ti-settings-question:before{content:"\f9ba"}.ti-settings-search:before{content:"\f9bb"}.ti-settings-share:before{content:"\f9bc"}.ti-settings-star:before{content:"\f9bd"}.ti-settings-up:before{content:"\f9be"}.ti-settings-x:before{content:"\f9bf"}.ti-shadow:before{content:"\eed8"}.ti-shadow-off:before{content:"\eed7"}.ti-shape:before{content:"\eb9c"}.ti-shape-2:before{content:"\eed9"}.ti-shape-3:before{content:"\eeda"}.ti-shape-off:before{content:"\f1a0"}.ti-share:before{content:"\eb21"}.ti-share-2:before{content:"\f799"}.ti-share-3:before{content:"\f7bd"}.ti-share-off:before{content:"\f1a1"}.ti-shi-jumping:before{content:"\fa6c"}.ti-shield:before{content:"\eb24"}.ti-shield-bolt:before{content:"\f9c0"}.ti-shield-cancel:before{content:"\f9c1"}.ti-shield-check:before{content:"\eb22"}.ti-shield-check-filled:before{content:"\f761"}.ti-shield-checkered:before{content:"\ef9a"}.ti-shield-checkered-filled:before{content:"\f762"}.ti-shield-chevron:before{content:"\ef9b"}.ti-shield-code:before{content:"\f9c2"}.ti-shield-cog:before{content:"\f9c3"}.ti-shield-dollar:before{content:"\f9c4"}.ti-shield-down:before{content:"\f9c5"}.ti-shield-exclamation:before{content:"\f9c6"}.ti-shield-filled:before{content:"\f69f"}.ti-shield-half:before{content:"\f358"}.ti-shield-half-filled:before{content:"\f357"}.ti-shield-heart:before{content:"\f9c7"}.ti-shield-lock:before{content:"\ed58"}.ti-shield-lock-filled:before{content:"\f763"}.ti-shield-minus:before{content:"\f9c8"}.ti-shield-off:before{content:"\ecf8"}.ti-shield-pause:before{content:"\f9c9"}.ti-shield-pin:before{content:"\f9ca"}.ti-shield-plus:before{content:"\f9cb"}.ti-shield-question:before{content:"\f9cc"}.ti-shield-search:before{content:"\f9cd"}.ti-shield-share:before{content:"\f9ce"}.ti-shield-star:before{content:"\f9cf"}.ti-shield-up:before{content:"\f9d0"}.ti-shield-x:before{content:"\eb23"}.ti-ship:before{content:"\ec84"}.ti-ship-off:before{content:"\f42a"}.ti-shirt:before{content:"\ec0a"}.ti-shirt-filled:before{content:"\f6a0"}.ti-shirt-off:before{content:"\f1a2"}.ti-shirt-sport:before{content:"\f26c"}.ti-shoe:before{content:"\efd2"}.ti-shoe-off:before{content:"\f1a4"}.ti-shopping-bag:before{content:"\f5f8"}.ti-shopping-bag-check:before{content:"\fc16"}.ti-shopping-bag-discount:before{content:"\fc17"}.ti-shopping-bag-edit:before{content:"\fc18"}.ti-shopping-bag-exclamation:before{content:"\fc19"}.ti-shopping-bag-heart:before{content:"\fda2"}.ti-shopping-bag-minus:before{content:"\fc1a"}.ti-shopping-bag-plus:before{content:"\fc1b"}.ti-shopping-bag-search:before{content:"\fc1c"}.ti-shopping-bag-x:before{content:"\fc1d"}.ti-shopping-cart:before{content:"\eb25"}.ti-shopping-cart-bolt:before{content:"\fb57"}.ti-shopping-cart-cancel:before{content:"\fb58"}.ti-shopping-cart-check:before{content:"\fb59"}.ti-shopping-cart-code:before{content:"\fb5a"}.ti-shopping-cart-cog:before{content:"\fb5b"}.ti-shopping-cart-copy:before{content:"\fb5c"}.ti-shopping-cart-discount:before{content:"\fb5d"}.ti-shopping-cart-dollar:before{content:"\fb5e"}.ti-shopping-cart-down:before{content:"\fb5f"}.ti-shopping-cart-exclamation:before{content:"\fb60"}.ti-shopping-cart-filled:before{content:"\fc3f"}.ti-shopping-cart-heart:before{content:"\fb61"}.ti-shopping-cart-minus:before{content:"\fb62"}.ti-shopping-cart-off:before{content:"\eedc"}.ti-shopping-cart-pause:before{content:"\fb63"}.ti-shopping-cart-pin:before{content:"\fb64"}.ti-shopping-cart-plus:before{content:"\fb65"}.ti-shopping-cart-question:before{content:"\fb66"}.ti-shopping-cart-search:before{content:"\fb67"}.ti-shopping-cart-share:before{content:"\fb68"}.ti-shopping-cart-star:before{content:"\fb69"}.ti-shopping-cart-up:before{content:"\fb6a"}.ti-shopping-cart-x:before{content:"\fb6b"}.ti-shovel:before{content:"\f1d9"}.ti-shovel-pitchforks:before{content:"\fd3a"}.ti-shredder:before{content:"\eedf"}.ti-sign-left:before{content:"\f06b"}.ti-sign-left-filled:before{content:"\f6a1"}.ti-sign-right:before{content:"\f06c"}.ti-sign-right-filled:before{content:"\f6a2"}.ti-signal-2g:before{content:"\f79a"}.ti-signal-3g:before{content:"\f1ee"}.ti-signal-4g:before{content:"\f1ef"}.ti-signal-4g-plus:before{content:"\f259"}.ti-signal-5g:before{content:"\f1f0"}.ti-signal-6g:before{content:"\f9f8"}.ti-signal-e:before{content:"\f9f9"}.ti-signal-g:before{content:"\f9fa"}.ti-signal-h:before{content:"\f9fc"}.ti-signal-h-plus:before{content:"\f9fb"}.ti-signal-lte:before{content:"\f9fd"}.ti-signature:before{content:"\eee0"}.ti-signature-off:before{content:"\f1a5"}.ti-sitemap:before{content:"\eb9d"}.ti-sitemap-off:before{content:"\f1a6"}.ti-skateboard:before{content:"\ecc2"}.ti-skateboard-off:before{content:"\f42b"}.ti-skateboarding:before{content:"\faca"}.ti-skew-x:before{content:"\fd3b"}.ti-skew-y:before{content:"\fd3c"}.ti-skull:before{content:"\f292"}.ti-slash:before{content:"\f4f9"}.ti-slashes:before{content:"\f588"}.ti-sleigh:before{content:"\ef9c"}.ti-slice:before{content:"\ebdb"}.ti-slideshow:before{content:"\ebc9"}.ti-smart-home:before{content:"\ecde"}.ti-smart-home-off:before{content:"\f1a7"}.ti-smoking:before{content:"\ecc4"}.ti-smoking-no:before{content:"\ecc3"}.ti-snowboarding:before{content:"\fd4f"}.ti-snowflake:before{content:"\ec0b"}.ti-snowflake-off:before{content:"\f1a8"}.ti-snowman:before{content:"\f26d"}.ti-soccer-field:before{content:"\ed92"}.ti-social:before{content:"\ebec"}.ti-social-off:before{content:"\f1a9"}.ti-sock:before{content:"\eee1"}.ti-sofa:before{content:"\efaf"}.ti-sofa-off:before{content:"\f42c"}.ti-solar-electricity:before{content:"\fcc1"}.ti-solar-panel:before{content:"\f7bf"}.ti-solar-panel-2:before{content:"\f7be"}.ti-sort-0-9:before{content:"\f54d"}.ti-sort-9-0:before{content:"\f54e"}.ti-sort-a-z:before{content:"\f54f"}.ti-sort-ascending:before{content:"\eb26"}.ti-sort-ascending-2:before{content:"\eee2"}.ti-sort-ascending-letters:before{content:"\ef18"}.ti-sort-ascending-numbers:before{content:"\ef19"}.ti-sort-ascending-shapes:before{content:"\fd94"}.ti-sort-ascending-small-big:before{content:"\fd95"}.ti-sort-deacending-small-big:before{content:"\fd96"}.ti-sort-descending:before{content:"\eb27"}.ti-sort-descending-2:before{content:"\eee3"}.ti-sort-descending-letters:before{content:"\ef1a"}.ti-sort-descending-numbers:before{content:"\ef1b"}.ti-sort-descending-shapes:before{content:"\fd97"}.ti-sort-z-a:before{content:"\f550"}.ti-sos:before{content:"\f24a"}.ti-soup:before{content:"\ef2e"}.ti-soup-off:before{content:"\f42d"}.ti-source-code:before{content:"\f4a2"}.ti-space:before{content:"\ec0c"}.ti-space-off:before{content:"\f1aa"}.ti-spacing-horizontal:before{content:"\ef54"}.ti-spacing-vertical:before{content:"\ef55"}.ti-spade:before{content:"\effa"}.ti-spade-filled:before{content:"\f6a3"}.ti-sparkles:before{content:"\f6d7"}.ti-speakerphone:before{content:"\ed61"}.ti-speedboat:before{content:"\ed93"}.ti-sphere:before{content:"\fab8"}.ti-sphere-off:before{content:"\fab6"}.ti-sphere-plus:before{content:"\fab7"}.ti-spider:before{content:"\f293"}.ti-spiral:before{content:"\f294"}.ti-spiral-off:before{content:"\f42e"}.ti-sport-billard:before{content:"\eee4"}.ti-spray:before{content:"\f50b"}.ti-spy:before{content:"\f227"}.ti-spy-off:before{content:"\f42f"}.ti-sql:before{content:"\f7c0"}.ti-square:before{content:"\eb2c"}.ti-square-0-filled:before{content:"\f764"}.ti-square-1-filled:before{content:"\f765"}.ti-square-2-filled:before{content:"\f7fa"}.ti-square-3-filled:before{content:"\f766"}.ti-square-4-filled:before{content:"\f767"}.ti-square-5-filled:before{content:"\f768"}.ti-square-6-filled:before{content:"\f769"}.ti-square-7-filled:before{content:"\f76a"}.ti-square-8-filled:before{content:"\f76b"}.ti-square-9-filled:before{content:"\f76c"}.ti-square-arrow-down:before{content:"\f4b7"}.ti-square-arrow-down-filled:before{content:"\fb31"}.ti-square-arrow-left:before{content:"\f4b8"}.ti-square-arrow-left-filled:before{content:"\fb32"}.ti-square-arrow-right:before{content:"\f4b9"}.ti-square-arrow-right-filled:before{content:"\fb33"}.ti-square-arrow-up:before{content:"\f4ba"}.ti-square-arrow-up-filled:before{content:"\fb34"}.ti-square-asterisk:before{content:"\f01a"}.ti-square-asterisk-filled:before{content:"\fb35"}.ti-square-check:before{content:"\eb28"}.ti-square-check-filled:before{content:"\f76d"}.ti-square-chevron-down:before{content:"\f627"}.ti-square-chevron-down-filled:before{content:"\fb36"}.ti-square-chevron-left:before{content:"\f628"}.ti-square-chevron-left-filled:before{content:"\fb37"}.ti-square-chevron-right:before{content:"\f629"}.ti-square-chevron-right-filled:before{content:"\fb38"}.ti-square-chevron-up:before{content:"\f62a"}.ti-square-chevron-up-filled:before{content:"\fb39"}.ti-square-chevrons-down:before{content:"\f64b"}.ti-square-chevrons-down-filled:before{content:"\fb3a"}.ti-square-chevrons-left:before{content:"\f64c"}.ti-square-chevrons-left-filled:before{content:"\fb3b"}.ti-square-chevrons-right:before{content:"\f64d"}.ti-square-chevrons-right-filled:before{content:"\fb3c"}.ti-square-chevrons-up:before{content:"\f64e"}.ti-square-chevrons-up-filled:before{content:"\fb3d"}.ti-square-dot:before{content:"\ed59"}.ti-square-dot-filled:before{content:"\fb3e"}.ti-square-f0:before{content:"\f526"}.ti-square-f0-filled:before{content:"\f76e"}.ti-square-f1:before{content:"\f527"}.ti-square-f1-filled:before{content:"\f76f"}.ti-square-f2:before{content:"\f528"}.ti-square-f2-filled:before{content:"\f770"}.ti-square-f3:before{content:"\f529"}.ti-square-f3-filled:before{content:"\f771"}.ti-square-f4:before{content:"\f52a"}.ti-square-f4-filled:before{content:"\f772"}.ti-square-f5:before{content:"\f52b"}.ti-square-f5-filled:before{content:"\f773"}.ti-square-f6:before{content:"\f52c"}.ti-square-f6-filled:before{content:"\f774"}.ti-square-f7:before{content:"\f52d"}.ti-square-f7-filled:before{content:"\f775"}.ti-square-f8:before{content:"\f52e"}.ti-square-f8-filled:before{content:"\f776"}.ti-square-f9:before{content:"\f52f"}.ti-square-f9-filled:before{content:"\f777"}.ti-square-filled:before{content:"\fc40"}.ti-square-forbid:before{content:"\ed5b"}.ti-square-forbid-2:before{content:"\ed5a"}.ti-square-half:before{content:"\effb"}.ti-square-key:before{content:"\f638"}.ti-square-letter-a:before{content:"\f47c"}.ti-square-letter-b:before{content:"\f47d"}.ti-square-letter-c:before{content:"\f47e"}.ti-square-letter-d:before{content:"\f47f"}.ti-square-letter-e:before{content:"\f480"}.ti-square-letter-f:before{content:"\f481"}.ti-square-letter-g:before{content:"\f482"}.ti-square-letter-h:before{content:"\f483"}.ti-square-letter-i:before{content:"\f484"}.ti-square-letter-j:before{content:"\f485"}.ti-square-letter-k:before{content:"\f486"}.ti-square-letter-l:before{content:"\f487"}.ti-square-letter-m:before{content:"\f488"}.ti-square-letter-n:before{content:"\f489"}.ti-square-letter-o:before{content:"\f48a"}.ti-square-letter-p:before{content:"\f48b"}.ti-square-letter-q:before{content:"\f48c"}.ti-square-letter-r:before{content:"\f48d"}.ti-square-letter-s:before{content:"\f48e"}.ti-square-letter-t:before{content:"\f48f"}.ti-square-letter-u:before{content:"\f490"}.ti-square-letter-v:before{content:"\f4bb"}.ti-square-letter-w:before{content:"\f491"}.ti-square-letter-x:before{content:"\f4bc"}.ti-square-letter-y:before{content:"\f492"}.ti-square-letter-z:before{content:"\f493"}.ti-square-minus:before{content:"\eb29"}.ti-square-minus-filled:before{content:"\fb3f"}.ti-square-number-0:before{content:"\eee5"}.ti-square-number-1:before{content:"\eee6"}.ti-square-number-2:before{content:"\eee7"}.ti-square-number-3:before{content:"\eee8"}.ti-square-number-4:before{content:"\eee9"}.ti-square-number-5:before{content:"\eeea"}.ti-square-number-6:before{content:"\eeeb"}.ti-square-number-7:before{content:"\eeec"}.ti-square-number-8:before{content:"\eeed"}.ti-square-number-9:before{content:"\eeee"}.ti-square-off:before{content:"\eeef"}.ti-square-percentage:before{content:"\fd83"}.ti-square-plus:before{content:"\eb2a"}.ti-square-plus-2:before{content:"\fc96"}.ti-square-root:before{content:"\eef1"}.ti-square-root-2:before{content:"\eef0"}.ti-square-rotated:before{content:"\ecdf"}.ti-square-rotated-filled:before{content:"\f6a4"}.ti-square-rotated-forbid:before{content:"\f01c"}.ti-square-rotated-forbid-2:before{content:"\f01b"}.ti-square-rotated-off:before{content:"\eef2"}.ti-square-rounded:before{content:"\f59a"}.ti-square-rounded-arrow-down:before{content:"\f639"}.ti-square-rounded-arrow-down-filled:before{content:"\f6db"}.ti-square-rounded-arrow-left:before{content:"\f63a"}.ti-square-rounded-arrow-left-filled:before{content:"\f6dc"}.ti-square-rounded-arrow-right:before{content:"\f63b"}.ti-square-rounded-arrow-right-filled:before{content:"\f6dd"}.ti-square-rounded-arrow-up:before{content:"\f63c"}.ti-square-rounded-arrow-up-filled:before{content:"\f6de"}.ti-square-rounded-check:before{content:"\f63d"}.ti-square-rounded-check-filled:before{content:"\f6df"}.ti-square-rounded-chevron-down:before{content:"\f62b"}.ti-square-rounded-chevron-down-filled:before{content:"\f6e0"}.ti-square-rounded-chevron-left:before{content:"\f62c"}.ti-square-rounded-chevron-left-filled:before{content:"\f6e1"}.ti-square-rounded-chevron-right:before{content:"\f62d"}.ti-square-rounded-chevron-right-filled:before{content:"\f6e2"}.ti-square-rounded-chevron-up:before{content:"\f62e"}.ti-square-rounded-chevron-up-filled:before{content:"\f6e3"}.ti-square-rounded-chevrons-down:before{content:"\f64f"}.ti-square-rounded-chevrons-down-filled:before{content:"\f6e4"}.ti-square-rounded-chevrons-left:before{content:"\f650"}.ti-square-rounded-chevrons-left-filled:before{content:"\f6e5"}.ti-square-rounded-chevrons-right:before{content:"\f651"}.ti-square-rounded-chevrons-right-filled:before{content:"\f6e6"}.ti-square-rounded-chevrons-up:before{content:"\f652"}.ti-square-rounded-chevrons-up-filled:before{content:"\f6e7"}.ti-square-rounded-filled:before{content:"\f6a5"}.ti-square-rounded-letter-a:before{content:"\f5ae"}.ti-square-rounded-letter-b:before{content:"\f5af"}.ti-square-rounded-letter-c:before{content:"\f5b0"}.ti-square-rounded-letter-d:before{content:"\f5b1"}.ti-square-rounded-letter-e:before{content:"\f5b2"}.ti-square-rounded-letter-f:before{content:"\f5b3"}.ti-square-rounded-letter-g:before{content:"\f5b4"}.ti-square-rounded-letter-h:before{content:"\f5b5"}.ti-square-rounded-letter-i:before{content:"\f5b6"}.ti-square-rounded-letter-j:before{content:"\f5b7"}.ti-square-rounded-letter-k:before{content:"\f5b8"}.ti-square-rounded-letter-l:before{content:"\f5b9"}.ti-square-rounded-letter-m:before{content:"\f5ba"}.ti-square-rounded-letter-n:before{content:"\f5bb"}.ti-square-rounded-letter-o:before{content:"\f5bc"}.ti-square-rounded-letter-p:before{content:"\f5bd"}.ti-square-rounded-letter-q:before{content:"\f5be"}.ti-square-rounded-letter-r:before{content:"\f5bf"}.ti-square-rounded-letter-s:before{content:"\f5c0"}.ti-square-rounded-letter-t:before{content:"\f5c1"}.ti-square-rounded-letter-u:before{content:"\f5c2"}.ti-square-rounded-letter-v:before{content:"\f5c3"}.ti-square-rounded-letter-w:before{content:"\f5c4"}.ti-square-rounded-letter-x:before{content:"\f5c5"}.ti-square-rounded-letter-y:before{content:"\f5c6"}.ti-square-rounded-letter-z:before{content:"\f5c7"}.ti-square-rounded-minus:before{content:"\f63e"}.ti-square-rounded-minus-2:before{content:"\fc97"}.ti-square-rounded-minus-filled:before{content:"\fb40"}.ti-square-rounded-number-0:before{content:"\f5c8"}.ti-square-rounded-number-0-filled:before{content:"\f778"}.ti-square-rounded-number-1:before{content:"\f5c9"}.ti-square-rounded-number-1-filled:before{content:"\f779"}.ti-square-rounded-number-2:before{content:"\f5ca"}.ti-square-rounded-number-2-filled:before{content:"\f77a"}.ti-square-rounded-number-3:before{content:"\f5cb"}.ti-square-rounded-number-3-filled:before{content:"\f77b"}.ti-square-rounded-number-4:before{content:"\f5cc"}.ti-square-rounded-number-4-filled:before{content:"\f77c"}.ti-square-rounded-number-5:before{content:"\f5cd"}.ti-square-rounded-number-5-filled:before{content:"\f77d"}.ti-square-rounded-number-6:before{content:"\f5ce"}.ti-square-rounded-number-6-filled:before{content:"\f77e"}.ti-square-rounded-number-7:before{content:"\f5cf"}.ti-square-rounded-number-7-filled:before{content:"\f77f"}.ti-square-rounded-number-8:before{content:"\f5d0"}.ti-square-rounded-number-8-filled:before{content:"\f780"}.ti-square-rounded-number-9:before{content:"\f5d1"}.ti-square-rounded-number-9-filled:before{content:"\f781"}.ti-square-rounded-percentage:before{content:"\fd84"}.ti-square-rounded-plus:before{content:"\f63f"}.ti-square-rounded-plus-2:before{content:"\fc98"}.ti-square-rounded-plus-filled:before{content:"\f6e8"}.ti-square-rounded-x:before{content:"\f640"}.ti-square-rounded-x-filled:before{content:"\f6e9"}.ti-square-toggle:before{content:"\eef4"}.ti-square-toggle-horizontal:before{content:"\eef3"}.ti-square-x:before{content:"\eb2b"}.ti-square-x-filled:before{content:"\fb41"}.ti-squares-diagonal:before{content:"\eef5"}.ti-squares-filled:before{content:"\eef6"}.ti-stack:before{content:"\eb2d"}.ti-stack-2:before{content:"\eef7"}.ti-stack-3:before{content:"\ef9d"}.ti-stack-back:before{content:"\fd26"}.ti-stack-backward:before{content:"\fd27"}.ti-stack-forward:before{content:"\fd28"}.ti-stack-front:before{content:"\fd29"}.ti-stack-middle:before{content:"\fd2a"}.ti-stack-pop:before{content:"\f234"}.ti-stack-push:before{content:"\f235"}.ti-stairs:before{content:"\eca6"}.ti-stairs-down:before{content:"\eca4"}.ti-stairs-up:before{content:"\eca5"}.ti-star:before{content:"\eb2e"}.ti-star-filled:before{content:"\f6a6"}.ti-star-half:before{content:"\ed19"}.ti-star-half-filled:before{content:"\f6a7"}.ti-star-off:before{content:"\ed62"}.ti-stars:before{content:"\ed38"}.ti-stars-filled:before{content:"\f6a8"}.ti-stars-off:before{content:"\f430"}.ti-status-change:before{content:"\f3b0"}.ti-steam:before{content:"\f24b"}.ti-steering-wheel:before{content:"\ec7b"}.ti-steering-wheel-off:before{content:"\f431"}.ti-step-into:before{content:"\ece0"}.ti-step-out:before{content:"\ece1"}.ti-stereo-glasses:before{content:"\f4cb"}.ti-stethoscope:before{content:"\edbe"}.ti-stethoscope-off:before{content:"\f432"}.ti-sticker:before{content:"\eb2f"}.ti-sticker-2:before{content:"\fd3d"}.ti-storm:before{content:"\f24c"}.ti-storm-off:before{content:"\f433"}.ti-stretching:before{content:"\f2db"}.ti-stretching-2:before{content:"\fa6d"}.ti-strikethrough:before{content:"\eb9e"}.ti-submarine:before{content:"\ed94"}.ti-subscript:before{content:"\eb9f"}.ti-subtask:before{content:"\ec9f"}.ti-sum:before{content:"\eb73"}.ti-sum-off:before{content:"\f1ab"}.ti-sun:before{content:"\eb30"}.ti-sun-electricity:before{content:"\fcc2"}.ti-sun-filled:before{content:"\f6a9"}.ti-sun-high:before{content:"\f236"}.ti-sun-low:before{content:"\f237"}.ti-sun-moon:before{content:"\f4a3"}.ti-sun-off:before{content:"\ed63"}.ti-sun-wind:before{content:"\f238"}.ti-sunglasses:before{content:"\f239"}.ti-sunrise:before{content:"\ef1c"}.ti-sunset:before{content:"\ec31"}.ti-sunset-2:before{content:"\f23a"}.ti-superscript:before{content:"\eba0"}.ti-svg:before{content:"\f25a"}.ti-swimming:before{content:"\ec92"}.ti-swipe:before{content:"\f551"}.ti-swipe-down:before{content:"\fd5e"}.ti-swipe-left:before{content:"\fd5f"}.ti-swipe-right:before{content:"\fd60"}.ti-swipe-up:before{content:"\fd61"}.ti-switch:before{content:"\eb33"}.ti-switch-2:before{content:"\edbf"}.ti-switch-3:before{content:"\edc0"}.ti-switch-horizontal:before{content:"\eb31"}.ti-switch-vertical:before{content:"\eb32"}.ti-sword:before{content:"\f030"}.ti-sword-off:before{content:"\f434"}.ti-swords:before{content:"\f132"}.ti-table:before{content:"\eba1"}.ti-table-alias:before{content:"\f25b"}.ti-table-column:before{content:"\faff"}.ti-table-down:before{content:"\fa1c"}.ti-table-export:before{content:"\eef8"}.ti-table-filled:before{content:"\f782"}.ti-table-heart:before{content:"\fa1d"}.ti-table-import:before{content:"\eef9"}.ti-table-minus:before{content:"\fa1e"}.ti-table-off:before{content:"\eefa"}.ti-table-options:before{content:"\f25c"}.ti-table-plus:before{content:"\fa1f"}.ti-table-row:before{content:"\fb00"}.ti-table-share:before{content:"\fa20"}.ti-table-shortcut:before{content:"\f25d"}.ti-tag:before{content:"\eb34"}.ti-tag-off:before{content:"\efc0"}.ti-tag-starred:before{content:"\fc99"}.ti-tags:before{content:"\ef86"}.ti-tags-off:before{content:"\efc1"}.ti-tallymark-1:before{content:"\ec46"}.ti-tallymark-2:before{content:"\ec47"}.ti-tallymark-3:before{content:"\ec48"}.ti-tallymark-4:before{content:"\ec49"}.ti-tallymarks:before{content:"\ec4a"}.ti-tank:before{content:"\ed95"}.ti-target:before{content:"\eb35"}.ti-target-arrow:before{content:"\f51a"}.ti-target-off:before{content:"\f1ad"}.ti-teapot:before{content:"\f552"}.ti-telescope:before{content:"\f07d"}.ti-telescope-off:before{content:"\f1ae"}.ti-temperature:before{content:"\eb38"}.ti-temperature-celsius:before{content:"\eb36"}.ti-temperature-fahrenheit:before{content:"\eb37"}.ti-temperature-minus:before{content:"\ebed"}.ti-temperature-off:before{content:"\f1af"}.ti-temperature-plus:before{content:"\ebee"}.ti-temperature-snow:before{content:"\fda3"}.ti-temperature-sun:before{content:"\fda4"}.ti-template:before{content:"\eb39"}.ti-template-off:before{content:"\f1b0"}.ti-tent:before{content:"\eefb"}.ti-tent-off:before{content:"\f435"}.ti-terminal:before{content:"\ebdc"}.ti-terminal-2:before{content:"\ebef"}.ti-test-pipe:before{content:"\eb3a"}.ti-test-pipe-2:before{content:"\f0a4"}.ti-test-pipe-off:before{content:"\f1b1"}.ti-tex:before{content:"\f4e0"}.ti-text-caption:before{content:"\f4a4"}.ti-text-color:before{content:"\f2dc"}.ti-text-decrease:before{content:"\f202"}.ti-text-direction-ltr:before{content:"\eefc"}.ti-text-direction-rtl:before{content:"\eefd"}.ti-text-grammar:before{content:"\fd6d"}.ti-text-increase:before{content:"\f203"}.ti-text-orientation:before{content:"\f2a4"}.ti-text-plus:before{content:"\f2a5"}.ti-text-recognition:before{content:"\f204"}.ti-text-resize:before{content:"\ef87"}.ti-text-scan-2:before{content:"\fcc3"}.ti-text-size:before{content:"\f2b1"}.ti-text-spellcheck:before{content:"\f2a6"}.ti-text-wrap:before{content:"\ebdd"}.ti-text-wrap-disabled:before{content:"\eca7"}.ti-texture:before{content:"\f51b"}.ti-theater:before{content:"\f79b"}.ti-thermometer:before{content:"\ef67"}.ti-thumb-down:before{content:"\eb3b"}.ti-thumb-down-filled:before{content:"\f6aa"}.ti-thumb-down-off:before{content:"\f436"}.ti-thumb-up:before{content:"\eb3c"}.ti-thumb-up-filled:before{content:"\f6ab"}.ti-thumb-up-off:before{content:"\f437"}.ti-tic-tac:before{content:"\f51c"}.ti-ticket:before{content:"\eb3d"}.ti-ticket-off:before{content:"\f1b2"}.ti-tie:before{content:"\f07e"}.ti-tilde:before{content:"\f4a5"}.ti-tilt-shift:before{content:"\eefe"}.ti-tilt-shift-off:before{content:"\f1b3"}.ti-time-duration-0:before{content:"\fad4"}.ti-time-duration-10:before{content:"\fad5"}.ti-time-duration-15:before{content:"\fad6"}.ti-time-duration-30:before{content:"\fad7"}.ti-time-duration-45:before{content:"\fad8"}.ti-time-duration-5:before{content:"\fad9"}.ti-time-duration-60:before{content:"\fada"}.ti-time-duration-90:before{content:"\fadb"}.ti-time-duration-off:before{content:"\fadc"}.ti-timeline:before{content:"\f031"}.ti-timeline-event:before{content:"\f553"}.ti-timeline-event-exclamation:before{content:"\f662"}.ti-timeline-event-filled:before{content:"\fd18"}.ti-timeline-event-minus:before{content:"\f663"}.ti-timeline-event-plus:before{content:"\f664"}.ti-timeline-event-text:before{content:"\f665"}.ti-timeline-event-x:before{content:"\f666"}.ti-tir:before{content:"\ebf0"}.ti-toggle-left:before{content:"\eb3e"}.ti-toggle-right:before{content:"\eb3f"}.ti-toilet-paper:before{content:"\efd3"}.ti-toilet-paper-off:before{content:"\f1b4"}.ti-toml:before{content:"\fa5d"}.ti-tool:before{content:"\eb40"}.ti-tools:before{content:"\ebca"}.ti-tools-kitchen:before{content:"\ed64"}.ti-tools-kitchen-2:before{content:"\eeff"}.ti-tools-kitchen-2-off:before{content:"\f1b5"}.ti-tools-kitchen-3:before{content:"\fd2b"}.ti-tools-kitchen-off:before{content:"\f1b6"}.ti-tools-off:before{content:"\f1b7"}.ti-tooltip:before{content:"\f2dd"}.ti-topology-bus:before{content:"\f5d9"}.ti-topology-complex:before{content:"\f5da"}.ti-topology-full:before{content:"\f5dc"}.ti-topology-full-hierarchy:before{content:"\f5db"}.ti-topology-ring:before{content:"\f5df"}.ti-topology-ring-2:before{content:"\f5dd"}.ti-topology-ring-3:before{content:"\f5de"}.ti-topology-star:before{content:"\f5e5"}.ti-topology-star-2:before{content:"\f5e0"}.ti-topology-star-3:before{content:"\f5e1"}.ti-topology-star-ring:before{content:"\f5e4"}.ti-topology-star-ring-2:before{content:"\f5e2"}.ti-topology-star-ring-3:before{content:"\f5e3"}.ti-torii:before{content:"\f59b"}.ti-tornado:before{content:"\ece2"}.ti-tournament:before{content:"\ecd0"}.ti-tower:before{content:"\f2cb"}.ti-tower-off:before{content:"\f2ca"}.ti-track:before{content:"\ef00"}.ti-tractor:before{content:"\ec0d"}.ti-trademark:before{content:"\ec0e"}.ti-traffic-cone:before{content:"\ec0f"}.ti-traffic-cone-off:before{content:"\f1b8"}.ti-traffic-lights:before{content:"\ed39"}.ti-traffic-lights-off:before{content:"\f1b9"}.ti-train:before{content:"\ed96"}.ti-transaction-bitcoin:before{content:"\fd6e"}.ti-transaction-dollar:before{content:"\fd6f"}.ti-transaction-euro:before{content:"\fd70"}.ti-transaction-pound:before{content:"\fd71"}.ti-transaction-rupee:before{content:"\fd85"}.ti-transaction-yen:before{content:"\fd72"}.ti-transaction-yuan:before{content:"\fd73"}.ti-transfer:before{content:"\fc1f"}.ti-transfer-in:before{content:"\ef2f"}.ti-transfer-out:before{content:"\ef30"}.ti-transfer-vertical:before{content:"\fc1e"}.ti-transform:before{content:"\f38e"}.ti-transform-filled:before{content:"\f6ac"}.ti-transform-point:before{content:"\fda9"}.ti-transform-point-bottom-left:before{content:"\fda5"}.ti-transform-point-bottom-right:before{content:"\fda6"}.ti-transform-point-top-left:before{content:"\fda7"}.ti-transform-point-top-right:before{content:"\fda8"}.ti-transition-bottom:before{content:"\f2b2"}.ti-transition-left:before{content:"\f2b3"}.ti-transition-right:before{content:"\f2b4"}.ti-transition-top:before{content:"\f2b5"}.ti-trash:before{content:"\eb41"}.ti-trash-filled:before{content:"\f783"}.ti-trash-off:before{content:"\ed65"}.ti-trash-x:before{content:"\ef88"}.ti-trash-x-filled:before{content:"\f784"}.ti-treadmill:before{content:"\fa6e"}.ti-tree:before{content:"\ef01"}.ti-trees:before{content:"\ec10"}.ti-trekking:before{content:"\f5ad"}.ti-trending-down:before{content:"\eb42"}.ti-trending-down-2:before{content:"\edc1"}.ti-trending-down-3:before{content:"\edc2"}.ti-trending-up:before{content:"\eb43"}.ti-trending-up-2:before{content:"\edc3"}.ti-trending-up-3:before{content:"\edc4"}.ti-triangle:before{content:"\eb44"}.ti-triangle-filled:before{content:"\f6ad"}.ti-triangle-inverted:before{content:"\f01d"}.ti-triangle-inverted-filled:before{content:"\f6ae"}.ti-triangle-minus:before{content:"\fc9b"}.ti-triangle-minus-2:before{content:"\fc9a"}.ti-triangle-off:before{content:"\ef02"}.ti-triangle-plus:before{content:"\fc9d"}.ti-triangle-plus-2:before{content:"\fc9c"}.ti-triangle-square-circle:before{content:"\ece8"}.ti-triangle-square-circle-filled:before{content:"\fb42"}.ti-triangles:before{content:"\f0a5"}.ti-trident:before{content:"\ecc5"}.ti-trolley:before{content:"\f4cc"}.ti-trophy:before{content:"\eb45"}.ti-trophy-filled:before{content:"\f6af"}.ti-trophy-off:before{content:"\f438"}.ti-trowel:before{content:"\f368"}.ti-truck:before{content:"\ebc4"}.ti-truck-delivery:before{content:"\ec4b"}.ti-truck-loading:before{content:"\f1da"}.ti-truck-off:before{content:"\ef03"}.ti-truck-return:before{content:"\ec4c"}.ti-txt:before{content:"\f3b1"}.ti-typography:before{content:"\ebc5"}.ti-typography-off:before{content:"\f1ba"}.ti-ufo:before{content:"\f26f"}.ti-ufo-off:before{content:"\f26e"}.ti-umbrella:before{content:"\ebf1"}.ti-umbrella-filled:before{content:"\f6b0"}.ti-umbrella-off:before{content:"\f1bb"}.ti-underline:before{content:"\eba2"}.ti-universe:before{content:"\fcc4"}.ti-unlink:before{content:"\eb46"}.ti-upload:before{content:"\eb47"}.ti-urgent:before{content:"\eb48"}.ti-usb:before{content:"\f00c"}.ti-user:before{content:"\eb4d"}.ti-user-bolt:before{content:"\f9d1"}.ti-user-cancel:before{content:"\f9d2"}.ti-user-check:before{content:"\eb49"}.ti-user-circle:before{content:"\ef68"}.ti-user-code:before{content:"\f9d3"}.ti-user-cog:before{content:"\f9d4"}.ti-user-dollar:before{content:"\f9d5"}.ti-user-down:before{content:"\f9d6"}.ti-user-edit:before{content:"\f7cc"}.ti-user-exclamation:before{content:"\ec12"}.ti-user-filled:before{content:"\fd19"}.ti-user-heart:before{content:"\f7cd"}.ti-user-hexagon:before{content:"\fc4e"}.ti-user-minus:before{content:"\eb4a"}.ti-user-off:before{content:"\ecf9"}.ti-user-pause:before{content:"\f9d7"}.ti-user-pentagon:before{content:"\fc4f"}.ti-user-pin:before{content:"\f7ce"}.ti-user-plus:before{content:"\eb4b"}.ti-user-question:before{content:"\f7cf"}.ti-user-scan:before{content:"\fcaf"}.ti-user-search:before{content:"\ef89"}.ti-user-share:before{content:"\f9d8"}.ti-user-shield:before{content:"\f7d0"}.ti-user-square:before{content:"\fc51"}.ti-user-square-rounded:before{content:"\fc50"}.ti-user-star:before{content:"\f7d1"}.ti-user-up:before{content:"\f7d2"}.ti-user-x:before{content:"\eb4c"}.ti-users:before{content:"\ebf2"}.ti-users-group:before{content:"\fa21"}.ti-users-minus:before{content:"\fa0e"}.ti-users-plus:before{content:"\fa0f"}.ti-uv-index:before{content:"\f3b2"}.ti-ux-circle:before{content:"\f369"}.ti-vaccine:before{content:"\ef04"}.ti-vaccine-bottle:before{content:"\ef69"}.ti-vaccine-bottle-off:before{content:"\f439"}.ti-vaccine-off:before{content:"\f1bc"}.ti-vacuum-cleaner:before{content:"\f5e6"}.ti-variable:before{content:"\ef05"}.ti-variable-minus:before{content:"\f36a"}.ti-variable-off:before{content:"\f1bd"}.ti-variable-plus:before{content:"\f36b"}.ti-vector:before{content:"\eca9"}.ti-vector-bezier:before{content:"\ef1d"}.ti-vector-bezier-2:before{content:"\f1a3"}.ti-vector-bezier-arc:before{content:"\f4cd"}.ti-vector-bezier-circle:before{content:"\f4ce"}.ti-vector-off:before{content:"\f1be"}.ti-vector-spline:before{content:"\f565"}.ti-vector-triangle:before{content:"\eca8"}.ti-vector-triangle-off:before{content:"\f1bf"}.ti-venus:before{content:"\ec86"}.ti-versions:before{content:"\ed52"}.ti-versions-filled:before{content:"\f6b1"}.ti-versions-off:before{content:"\f1c0"}.ti-video:before{content:"\ed22"}.ti-video-minus:before{content:"\ed1f"}.ti-video-off:before{content:"\ed20"}.ti-video-plus:before{content:"\ed21"}.ti-view-360:before{content:"\ed84"}.ti-view-360-off:before{content:"\f1c1"}.ti-viewfinder:before{content:"\eb4e"}.ti-viewfinder-off:before{content:"\f1c2"}.ti-viewport-narrow:before{content:"\ebf3"}.ti-viewport-wide:before{content:"\ebf4"}.ti-vinyl:before{content:"\f00d"}.ti-vip:before{content:"\f3b3"}.ti-vip-off:before{content:"\f43a"}.ti-virus:before{content:"\eb74"}.ti-virus-off:before{content:"\ed66"}.ti-virus-search:before{content:"\ed67"}.ti-vocabulary:before{content:"\ef1e"}.ti-vocabulary-off:before{content:"\f43b"}.ti-volcano:before{content:"\f79c"}.ti-volume:before{content:"\eb51"}.ti-volume-2:before{content:"\eb4f"}.ti-volume-3:before{content:"\eb50"}.ti-volume-off:before{content:"\f1c3"}.ti-vs:before{content:"\fc52"}.ti-walk:before{content:"\ec87"}.ti-wall:before{content:"\ef7a"}.ti-wall-off:before{content:"\f43c"}.ti-wallet:before{content:"\eb75"}.ti-wallet-off:before{content:"\f1c4"}.ti-wallpaper:before{content:"\ef56"}.ti-wallpaper-off:before{content:"\f1c5"}.ti-wand:before{content:"\ebcb"}.ti-wand-off:before{content:"\f1c6"}.ti-wash:before{content:"\f311"}.ti-wash-dry:before{content:"\f304"}.ti-wash-dry-1:before{content:"\f2fa"}.ti-wash-dry-2:before{content:"\f2fb"}.ti-wash-dry-3:before{content:"\f2fc"}.ti-wash-dry-a:before{content:"\f2fd"}.ti-wash-dry-dip:before{content:"\f2fe"}.ti-wash-dry-f:before{content:"\f2ff"}.ti-wash-dry-flat:before{content:"\fa7f"}.ti-wash-dry-hang:before{content:"\f300"}.ti-wash-dry-off:before{content:"\f301"}.ti-wash-dry-p:before{content:"\f302"}.ti-wash-dry-shade:before{content:"\f303"}.ti-wash-dry-w:before{content:"\f322"}.ti-wash-dryclean:before{content:"\f305"}.ti-wash-dryclean-off:before{content:"\f323"}.ti-wash-eco:before{content:"\fa80"}.ti-wash-gentle:before{content:"\f306"}.ti-wash-hand:before{content:"\fa81"}.ti-wash-machine:before{content:"\f25e"}.ti-wash-off:before{content:"\f307"}.ti-wash-press:before{content:"\f308"}.ti-wash-temperature-1:before{content:"\f309"}.ti-wash-temperature-2:before{content:"\f30a"}.ti-wash-temperature-3:before{content:"\f30b"}.ti-wash-temperature-4:before{content:"\f30c"}.ti-wash-temperature-5:before{content:"\f30d"}.ti-wash-temperature-6:before{content:"\f30e"}.ti-wash-tumble-dry:before{content:"\f30f"}.ti-wash-tumble-off:before{content:"\f310"}.ti-waterpolo:before{content:"\fa6f"}.ti-wave-saw-tool:before{content:"\ecd3"}.ti-wave-sine:before{content:"\ecd4"}.ti-wave-square:before{content:"\ecd5"}.ti-waves-electricity:before{content:"\fcc5"}.ti-webhook:before{content:"\f01e"}.ti-webhook-off:before{content:"\f43d"}.ti-weight:before{content:"\f589"}.ti-wheel:before{content:"\fc64"}.ti-wheelchair:before{content:"\f1db"}.ti-wheelchair-off:before{content:"\f43e"}.ti-whirl:before{content:"\f51d"}.ti-wifi:before{content:"\eb52"}.ti-wifi-0:before{content:"\eba3"}.ti-wifi-1:before{content:"\eba4"}.ti-wifi-2:before{content:"\eba5"}.ti-wifi-off:before{content:"\ecfa"}.ti-wind:before{content:"\ec34"}.ti-wind-electricity:before{content:"\fcc6"}.ti-wind-off:before{content:"\f1c7"}.ti-windmill:before{content:"\ed85"}.ti-windmill-filled:before{content:"\f6b2"}.ti-windmill-off:before{content:"\f1c8"}.ti-window:before{content:"\ef06"}.ti-window-maximize:before{content:"\f1f1"}.ti-window-minimize:before{content:"\f1f2"}.ti-window-off:before{content:"\f1c9"}.ti-windsock:before{content:"\f06d"}.ti-wiper:before{content:"\ecab"}.ti-wiper-wash:before{content:"\ecaa"}.ti-woman:before{content:"\eb53"}.ti-wood:before{content:"\f359"}.ti-world:before{content:"\eb54"}.ti-world-bolt:before{content:"\f9d9"}.ti-world-cancel:before{content:"\f9da"}.ti-world-check:before{content:"\f9db"}.ti-world-code:before{content:"\f9dc"}.ti-world-cog:before{content:"\f9dd"}.ti-world-dollar:before{content:"\f9de"}.ti-world-down:before{content:"\f9df"}.ti-world-download:before{content:"\ef8a"}.ti-world-exclamation:before{content:"\f9e0"}.ti-world-heart:before{content:"\f9e1"}.ti-world-latitude:before{content:"\ed2e"}.ti-world-longitude:before{content:"\ed2f"}.ti-world-minus:before{content:"\f9e2"}.ti-world-off:before{content:"\f1ca"}.ti-world-pause:before{content:"\f9e3"}.ti-world-pin:before{content:"\f9e4"}.ti-world-plus:before{content:"\f9e5"}.ti-world-question:before{content:"\f9e6"}.ti-world-search:before{content:"\f9e7"}.ti-world-share:before{content:"\f9e8"}.ti-world-star:before{content:"\f9e9"}.ti-world-up:before{content:"\f9ea"}.ti-world-upload:before{content:"\ef8b"}.ti-world-www:before{content:"\f38f"}.ti-world-x:before{content:"\f9eb"}.ti-wrecking-ball:before{content:"\ed97"}.ti-writing:before{content:"\ef08"}.ti-writing-off:before{content:"\f1cb"}.ti-writing-sign:before{content:"\ef07"}.ti-writing-sign-off:before{content:"\f1cc"}.ti-x:before{content:"\eb55"}.ti-xbox-a:before{content:"\f2b6"}.ti-xbox-b:before{content:"\f2b7"}.ti-xbox-x:before{content:"\f2b8"}.ti-xbox-y:before{content:"\f2b9"}.ti-xd:before{content:"\fa33"}.ti-xxx:before{content:"\fc20"}.ti-yin-yang:before{content:"\ec35"}.ti-yin-yang-filled:before{content:"\f785"}.ti-yoga:before{content:"\f01f"}.ti-zeppelin:before{content:"\f270"}.ti-zeppelin-off:before{content:"\f43f"}.ti-zip:before{content:"\f3b4"}.ti-zodiac-aquarius:before{content:"\ecac"}.ti-zodiac-aries:before{content:"\ecad"}.ti-zodiac-cancer:before{content:"\ecae"}.ti-zodiac-capricorn:before{content:"\ecaf"}.ti-zodiac-gemini:before{content:"\ecb0"}.ti-zodiac-leo:before{content:"\ecb1"}.ti-zodiac-libra:before{content:"\ecb2"}.ti-zodiac-pisces:before{content:"\ecb3"}.ti-zodiac-sagittarius:before{content:"\ecb4"}.ti-zodiac-scorpio:before{content:"\ecb5"}.ti-zodiac-taurus:before{content:"\ecb6"}.ti-zodiac-virgo:before{content:"\ecb7"}.ti-zoom-cancel:before{content:"\ec4d"}.ti-zoom-check:before{content:"\ef09"}.ti-zoom-check-filled:before{content:"\f786"}.ti-zoom-code:before{content:"\f07f"}.ti-zoom-exclamation:before{content:"\f080"}.ti-zoom-filled:before{content:"\f787"}.ti-zoom-in:before{content:"\eb56"}.ti-zoom-in-area:before{content:"\f1dc"}.ti-zoom-in-area-filled:before{content:"\f788"}.ti-zoom-in-filled:before{content:"\f789"}.ti-zoom-money:before{content:"\ef0a"}.ti-zoom-out:before{content:"\eb57"}.ti-zoom-out-area:before{content:"\f1dd"}.ti-zoom-out-filled:before{content:"\f78a"}.ti-zoom-pan:before{content:"\f1de"}.ti-zoom-question:before{content:"\edeb"}.ti-zoom-replace:before{content:"\f2a7"}.ti-zoom-reset:before{content:"\f295"}.ti-zoom-scan:before{content:"\fcb0"}.ti-zzz:before{content:"\f228"}.ti-zzz-off:before{content:"\f440"}/*# sourceMappingURL=tabler-icons.min.css.map */ diff --git a/resources/index.html b/resources/index.html index d382a6ec2e..399763d822 100644 --- a/resources/index.html +++ b/resources/index.html @@ -3,6 +3,7 @@ + @@ -34,7 +35,7 @@ - + diff --git a/resources/marketplace.html b/resources/marketplace.html index 22b8cdea98..9a115b928e 100644 --- a/resources/marketplace.html +++ b/resources/marketplace.html @@ -68,7 +68,7 @@
- + - \ No newline at end of file + diff --git a/resources/mobile/index.html b/resources/mobile/index.html index f773170d33..236c77ece7 100644 --- a/resources/mobile/index.html +++ b/resources/mobile/index.html @@ -12,7 +12,7 @@ - + diff --git a/resources/package.json b/resources/package.json index fe3244c439..bb6eabafe4 100644 --- a/resources/package.json +++ b/resources/package.json @@ -22,28 +22,25 @@ "forge": "./forge.config.js" }, "dependencies": { - "@fastify/cors": "11.0.1", - "@modelcontextprotocol/sdk": "^1.17.5", - "@sentry/electron": "2.5.1", + "@fastify/cors": "11.2.0", + "@modelcontextprotocol/sdk": "^1.27.1", "abort-controller": "3.0.0", "command-exists": "1.2.9", "diff-match-patch": "1.0.5", - "electron-deeplink": "1.0.10", "electron-dl": "4.0.0", - "electron-log": "4.3.1", - "electron-squirrel-startup": "1.0.0", + "electron-log": "5.4.3", + "electron-squirrel-startup": "1.0.1", "electron-window-state": "5.0.3", "extract-zip": "2.0.1", - "fastify": "5.3.2", - "fs-extra": "^11.3.0", - "https-proxy-agent": "7.0.2", - "node-fetch": "2.6.7", - "open": "7.3.1", - "posthog-js": "1.10.2", - "semver": "7.5.2", - "socks-proxy-agent": "8.0.2", - "update-electron-app": "2.0.1", - "zod": "^4.1.5", + "fastify": "5.8.2", + "fs-extra": "^11.3.4", + "https-proxy-agent": "8.0.0", + "node-fetch": "3.3.2", + "open": "11.0.0", + "semver": "7.7.4", + "socks-proxy-agent": "9.0.0", + "update-electron-app": "3.1.2", + "zod": "^4.3.6", "keytar": "^7.9.0" }, "devDependencies": { diff --git a/scripts/package.json b/scripts/package.json index e56f4167b4..8007277d15 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -6,8 +6,8 @@ "@logseq/nbb-logseq": "github:logseq/nbb-logseq#feat-db-v33" }, "dependencies": { - "better-sqlite3": "11.10.0", - "fs-extra": "9.1.0", + "better-sqlite3": "12.8.0", + "fs-extra": "^11.3.4", "mldoc": "^1.5.9" } } diff --git a/scripts/yarn.lock b/scripts/yarn.lock index cf795a3698..804045037d 100644 --- a/scripts/yarn.lock +++ b/scripts/yarn.lock @@ -18,20 +18,15 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== -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== - base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -better-sqlite3@11.10.0: - version "11.10.0" - resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-11.10.0.tgz#2b1b14c5acd75a43fd84d12cc291ea98cef57d98" - integrity sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ== +better-sqlite3@12.8.0: + version "12.8.0" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-12.8.0.tgz#ec9ccd4a426a35f3b9355c147af6c92a6ddd6862" + integrity sha512-RxD2Vd96sQDjQr20kdP+F+dK/1OUNiVOl200vKBZY8u0vTwysfolF6Hq+3ZK2+h8My9YvZhHsF+RSGZW2VYrPQ== dependencies: bindings "^1.5.0" prebuild-install "^7.1.1" @@ -159,12 +154,11 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@9.1.0: - 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== +fs-extra@^11.3.4: + version "11.3.4" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.4.tgz#ab6934eca8bcf6f7f6b82742e33591f86301d6fc" + integrity sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA== dependencies: - at-least-node "^1.0.0" graceful-fs "^4.2.0" jsonfile "^6.0.1" universalify "^2.0.0" diff --git a/shadow-cljs.edn b/shadow-cljs.edn index 9b37384ee3..e7359473b3 100644 --- a/shadow-cljs.edn +++ b/shadow-cljs.edn @@ -252,10 +252,4 @@ :redef false}} :devtools {:before-load frontend.core/stop :after-load frontend.core/start - :preloads [devtools.preload]}} - - :stories-dev {:target :npm-module - :entries [logseq.shui.storybook] - :output-dir "packages/ui/.storybook/cljs" - :devtools {:enabled true} - :compiler-options {:optimizations :simple}}}} + :preloads [devtools.preload]}}}} diff --git a/src/electron/electron/core.cljs b/src/electron/electron/core.cljs index 4a856ef13a..72af481bd2 100644 --- a/src/electron/electron/core.cljs +++ b/src/electron/electron/core.cljs @@ -1,7 +1,7 @@ (ns electron.core (:require ["/electron/utils" :as js-utils] ["electron" :refer [BrowserWindow Menu app protocol ipcMain dialog shell] :as electron] - ["electron-deeplink" :refer [Deeplink]] + ["os" :as os] ["path" :as node-path] [cljs-bean.core :as bean] @@ -56,9 +56,20 @@ (when (= (str LSP_SCHEME ":") (.-protocol parsed-url)) (logseq-url-handler win parsed-url)))) -(defn setup-interceptor! [^js app'] - (.setAsDefaultProtocolClient app' LSP_SCHEME) +(defn- register-default-protocol-client! + "Register Logseq as the default handler for the custom protocol. + Windows dev runs launched through the Electron binary need the entry + script path passed explicitly so the OS can relaunch the same app." + [^js app'] + (if (and utils/win32? (.-defaultApp js/process)) + (let [main-script (aget (.-argv js/process) 1) + args (if main-script + #js [(.resolve node-path main-script)] + #js [])] + (.setAsDefaultProtocolClient app' LSP_SCHEME (.-execPath js/process) args)) + (.setAsDefaultProtocolClient app' LSP_SCHEME))) +(defn setup-interceptor! [_app] (.registerFileProtocol protocol FILE_ASSETS_SCHEME (fn [^js request callback] @@ -219,20 +230,26 @@ menu (.buildFromTemplate Menu (clj->js template))] (.setApplicationMenu Menu menu))) +(defn- find-deeplink-url + "Extract a deeplink URL from a sequence of command-line argument strings." + [args] + (some #(when (string/starts-with? % (str LSP_SCHEME ":")) %) args)) + (defn- setup-deeplink! [] - ;; Works for Deeplink v1.0.9 - ;; :mainWindow is only used for handling window restoring on second-instance, - ;; But we already handle window restoring without deeplink. - ;; https://github.com/glawson/electron-deeplink/blob/73d58edcde3d0e80b1819cd68a0c6e837a9c9258/src/index.ts#L150-L155 - (-> (Deeplink. #js - {:app app - :mainWindow nil - :protocol LSP_SCHEME - :isDev dev?}) - (.on "received" - (fn [url] - (when-let [win @*win] - (open-url-handler win url)))))) + ;; macOS: app fires open-url for custom-protocol links when the app is already running + (.on app "open-url" + (fn [^js event url] + (.preventDefault event) + (when-let [win @*win] + (open-url-handler win url))))) + +(defn- handle-initial-deeplink! + "On Windows/Linux, the protocol URL is passed as a command-line argument + on the first launch. Call this after the main window is ready." + [win] + (when-not mac? + (when-let [url (find-deeplink-url (rest (js->clj (.-argv js/process))))] + (open-url-handler win url)))) (defn- on-app-ready! [^js app'] @@ -255,6 +272,9 @@ (db/ensure-graphs-dir!) + ;; Windows/Linux: handle deeplink URL passed on first launch via argv + (handle-initial-deeplink! win) + (vreset! *setup-fn (fn [] (let [t1 (setup-updater! win) @@ -317,13 +337,17 @@ :bypassCSP false :supportFetchAPI false}}])) + (register-default-protocol-client! app) (set-app-menu!) (setup-deeplink!) (.on app "second-instance" - (fn [_event _commandLine _workingDirectory] + (fn [_event ^js command-line _working-directory] (when-let [window @*win] - (win/switch-to-window! window)))) + (win/switch-to-window! window) + ;; Windows/Linux: deeplink URL may appear in subsequent-instance commandLine + (when-let [url (find-deeplink-url (rest (js->clj command-line)))] + (open-url-handler window url))))) (.on app "window-all-closed" (fn [] (logger/debug "window-all-closed" "Quitting...") diff --git a/src/electron/electron/handler.cljs b/src/electron/electron/handler.cljs index 5f5f9e0ef8..793ee9db73 100644 --- a/src/electron/electron/handler.cljs +++ b/src/electron/electron/handler.cljs @@ -401,8 +401,9 @@ (.arrayBuffer res) :base64 - (-> (.buffer res) - (p/then #(.toString % "base64"))) + (-> (.arrayBuffer res) + (p/then #(-> (js/Buffer.from %) + (.toString "base64")))) :text (.text res)))) diff --git a/src/electron/electron/url.cljs b/src/electron/electron/url.cljs index 68e7e8a7d6..610e2e09ac 100644 --- a/src/electron/electron/url.cljs +++ b/src/electron/electron/url.cljs @@ -27,7 +27,7 @@ (send-to-renderer "notification" {:type "error" :payload (str "Failed to open link. Cannot match graph identifier `" graph-identifier "` to any linked graph.")}) (send-to-renderer "notification" {:type "error" - :payload (str "Failed to open link. Missing graph identifier after `logseq://graph/`.")}))) + :payload "Failed to open link. Missing graph identifier after `logseq://graph/`."}))) (defn local-url-handler "Given a URL with `graph identifier` as path, `page` (optional) and `block-id` diff --git a/src/electron/electron/utils.cljs b/src/electron/electron/utils.cljs index f1fd448b2b..228a25d901 100644 --- a/src/electron/electron/utils.cljs +++ b/src/electron/electron/utils.cljs @@ -1,5 +1,7 @@ (ns electron.utils (:require ["electron" :refer [app BrowserWindow]] + ["node-fetch" :default node-fetch] + ["open" :default open-external] ["fs-extra" :as fs] ["path" :as node-path] [cljs-bean.core :as bean] @@ -9,7 +11,8 @@ [logseq.cli.common.graph :as cli-common-graph] [logseq.common.graph-dir :as graph-dir] [logseq.common.config :as common-config] - [promesa.core :as p])) + [promesa.core :as p] + [shadow.esm :refer [dynamic-import]])) (defonce *win (atom nil)) ;; The main window @@ -21,17 +24,31 @@ (defonce dev? (not prod?)) (defonce *fetchAgent (atom nil)) - -(defonce open (js/require "open")) -(defonce HttpsProxyAgent (.-HttpsProxyAgent (js/require "https-proxy-agent"))) -(defonce SocksProxyAgent (.-SocksProxyAgent (js/require "socks-proxy-agent"))) -(defonce _fetch (js/require "node-fetch")) +(defonce *proxy-agent-ctors (atom nil)) (defonce extract-zip (js/require "extract-zip")) +(defn- js options)) + (open-external target)))) + (defn fetch ([url] (fetch url nil)) ([url options] - (_fetch url (bean/->js (merge options {:agent @*fetchAgent}))))) + (node-fetch url (bean/->js (merge options {:agent @*fetchAgent}))))) (defn fix-win-path! [path] @@ -72,12 +89,10 @@ protocol: http | socks5" [{:keys [protocol host port]}] (if (and protocol host port (or (= protocol "http") (= protocol "socks5"))) - (let [proxy-url (str protocol "://" host ":" port)] - (condp = protocol - "http" - (reset! *fetchAgent (new HttpsProxyAgent proxy-url)) - "socks5" - (reset! *fetchAgent (new SocksProxyAgent proxy-url)) + (p/let [ctors (heading level) heading (str "h-" level) "Heading"])) (range 1 7))) + (into [["Normal text" (->heading nil) "Clear heading and set to normal text" :icon/text "Heading"]] + (mapv (fn [level] + (let [heading (str "Heading " level)] + [heading (->heading level) heading (str "h-" level) "Heading"])) (range 1 7)))) (defonce *latest-matched-command (atom "")) (defonce *matched-commands (atom nil)) diff --git a/src/main/frontend/common.css b/src/main/frontend/common.css index 0ac38269ea..b844926ea0 100644 --- a/src/main/frontend/common.css +++ b/src/main/frontend/common.css @@ -372,7 +372,7 @@ button.menu { .menu-link:hover, button.pull:hover, button.menu:focus { - background-color: or(--lx-gray-05, --ls-menu-hover-color, --rx-gray-05); + background-color: var(--lx-gray-05, var(--ls-menu-hover-color, var(--rx-gray-05))); } .menu-links-wrapper, diff --git a/src/main/frontend/common/cache.cljs b/src/main/frontend/common/cache.cljs index dc7960a139..7e7df4155a 100644 --- a/src/main/frontend/common/cache.cljs +++ b/src/main/frontend/common/cache.cljs @@ -2,7 +2,6 @@ "Utils about cache" (:require [cljs.cache :as cache])) -#_{:clj-kondo/ignore [:clojure-lsp/unused-public-var]} ;; (def *profile (volatile! {})) (defn cache-fn diff --git a/src/main/frontend/common/file/opfs.cljs b/src/main/frontend/common/file/opfs.cljs index 96d49d4666..d66b420493 100644 --- a/src/main/frontend/common/file/opfs.cljs +++ b/src/main/frontend/common/file/opfs.cljs @@ -26,19 +26,13 @@ file (.getFile file-handle)] (.text file))) -(comment - (defn (p/let [root (.. js/navigator -storage (getDirectory))] - (.removeEntry root filename)) - (p/catch (fn [err] - (if (and ignore-not-found? - (= (.-name err) "NotFoundError")) - nil - (throw err))))))) +(defn (p/let [root (.. js/navigator -storage (getDirectory))] + (.removeEntry root filename)) + (p/catch (fn [err] + (if (= (.-name err) "NotFoundError") + nil + (throw err)))))) diff --git a/src/main/frontend/common/thread_api.cljc b/src/main/frontend/common/thread_api.cljc index 5ecac50910..31f84b1877 100644 --- a/src/main/frontend/common/thread_api.cljc +++ b/src/main/frontend/common/thread_api.cljc @@ -8,7 +8,7 @@ #?(:cljs (def *thread-apis (volatile! {}))) -#_:clj-kondo/ignore +#_{:clojure-lsp/ignore [:clojure-lsp/unused-public-var]} (defmacro defkeyword [& _args]) (defmacro def-thread-api diff --git a/src/main/frontend/components/block.cljs b/src/main/frontend/components/block.cljs index d05465cba3..0a84840d2f 100644 --- a/src/main/frontend/components/block.cljs +++ b/src/main/frontend/components/block.cljs @@ -663,6 +663,7 @@ page-entity children label] (let [*mouse-down? (::mouse-down? state) tag? (:tag? config) + recycled? (ldb/recycled? page-entity) page-name (when (:block/title page-entity) (util/page-name-sanity-lc (:block/title page-entity))) untitled? (when page-name @@ -675,8 +676,10 @@ :class (cond-> (if tag? "tag" "page-ref") (:property? config) (str " page-property-key block-property") + recycled? (str " line-through opacity-70") untitled? (str " opacity-50")) :data-ref page-name + :title (when recycled? "Deleted") :draggable true :on-drag-start (fn [e] (editor-handler/block->data-transfer! page-name e true)) @@ -1524,10 +1527,9 @@ (defn- macro-cp [config options] (let [{:keys [name arguments]} options - arguments (if (and - (>= (count arguments) 2) - (and (string/starts-with? (first arguments) page-ref/left-brackets) - (string/ends-with? (last arguments) page-ref/right-brackets))) ; page reference + arguments (if (and (>= (count arguments) 2) + (string/starts-with? (first arguments) page-ref/left-brackets) + (string/ends-with? (last arguments) page-ref/right-brackets)) ; page reference (let [title (string/join ", " arguments)] [title]) arguments)] @@ -3213,6 +3215,7 @@ :ref #(when (nil? @*ref) (reset! *ref %)) :data-collapsed (and collapsed? has-child?) :class (str (when selected? "selected") + (when (ldb/recycled? block) " line-through opacity-70") (when order-list? " is-order-list") (when (string/blank? title) " is-blank") (when original-block " embed-block")) diff --git a/src/main/frontend/components/container.cljs b/src/main/frontend/components/container.cljs index 070f76895f..fe1d233eb6 100644 --- a/src/main/frontend/components/container.cljs +++ b/src/main/frontend/components/container.cljs @@ -290,9 +290,12 @@ (fn [content & {:as option}] (shui/popup-show! e (fn [{:keys [id]}] - [:div {:on-click (fn [e] - (when-not (util/input? (.-target e)) - (shui/popup-hide! id))) + [:div {:on-click (fn [^js e] + (when-let [target (.-target e)] + (let [input? (util/input? target) + popup? (.closest target "[data-radix-popper-content-wrapper]")] + (when (not (or input? popup?)) + (shui/popup-hide! id))))) :data-keep-selection true} content]) (merge diff --git a/src/main/frontend/components/container.css b/src/main/frontend/components/container.css index 9dd56d72f7..8f87d4191a 100644 --- a/src/main/frontend/components/container.css +++ b/src/main/frontend/components/container.css @@ -364,6 +364,12 @@ } } + &:not(.is-open) { + .left-sidebar-resizer { + @apply hidden; + } + } + &.is-closing { .left-sidebar-inner { transition: transform .3s; @@ -584,7 +590,7 @@ top: 0; left: 0; right: 0; - background-color: or(--ls-right-sidebar-topbar-color, --lx-gray-02, --ls-secondary-background-color, #d8e1e8); + background-color: var(--ls-right-sidebar-topbar-color, var(--lx-gray-02, var(--ls-secondary-background-color, #d8e1e8))); z-index: 999; user-select: none; -webkit-app-region: drag; diff --git a/src/main/frontend/components/content.cljs b/src/main/frontend/components/content.cljs index 3ea00b5f30..d921b5797e 100644 --- a/src/main/frontend/components/content.cljs +++ b/src/main/frontend/components/content.cljs @@ -16,7 +16,6 @@ [frontend.handler.property :as property-handler] [frontend.handler.property.util :as pu] [frontend.handler.reaction :as reaction-handler] - [frontend.modules.shortcut.core :as shortcut] [frontend.state :as state] [frontend.ui :as ui] [frontend.util :as util] @@ -27,264 +26,320 @@ [logseq.common.util :as common-util] [logseq.db :as ldb] [logseq.shui.ui :as shui] + [logseq.shui.popup.core :as shui-popup] [promesa.core :as p] [rum.core :as rum])) ;; TODO i18n support -(rum/defc custom-context-menu-content +(rum/defc ^:large-vars/cleanup-todo custom-context-menu-content [] - [:<> - (ui/menu-background-color #(property-handler/batch-set-block-property! (state/get-selection-block-ids) + (let [[set-icon-sub-menu-open? set-icon-sub-menu-open] (rum/use-state false)] + [:<> + (ui/menu-background-color #(property-handler/batch-set-block-property! (state/get-selection-block-ids) + :logseq.property/background-color + %) + #(property-handler/batch-remove-block-property! (state/get-selection-block-ids) + :logseq.property/background-color)) + (ui/menu-heading #(editor-handler/batch-set-heading! (state/get-selection-block-ids) %) + #(editor-handler/batch-set-heading! (state/get-selection-block-ids) true) + #(editor-handler/batch-remove-heading! (state/get-selection-block-ids))) + + (shui/dropdown-menu-sub + {:open set-icon-sub-menu-open? + :onOpenChange (fn [v] + (when (not= (some-> (shui-popup/get-last-popup) :id) :icons-color-picker) + (swap! shui-popup/*opened-sub-menus (if v conj disj) :set-icon) + (set-icon-sub-menu-open v)))} + (shui/dropdown-menu-sub-trigger + (t :context-menu/set-icon)) + (shui/dropdown-menu-sub-content + [:div.p-1 + (icon-component/icon-search + {:on-chosen (fn [_e icon] + (let [block-ids (state/get-selection-block-ids)] + (if icon + (property-handler/batch-set-block-property! + block-ids + :logseq.property/icon + (select-keys icon [:type :id :color])) + (property-handler/batch-remove-block-property! + block-ids + :logseq.property/icon))) + (state/hide-custom-context-menu!) + (shui/popup-hide!)) + :color-auto-chosen? false + :del-btn? true + :icon-value nil})])) + + (shui/dropdown-menu-separator) + + (shui/dropdown-menu-item + {:key "cut" + :on-click #(editor-handler/cut-selection-blocks true)} + (t :editor/cut) + (ui/dropdown-shortcut :editor/cut)) + + (shui/dropdown-menu-item + {:key "delete" + :on-click #(do (editor-handler/delete-selection %) + (state/hide-custom-context-menu!) + (shui/popup-hide!))} + + (t :editor/delete-selection) + (ui/dropdown-shortcut :editor/delete)) + + (shui/dropdown-menu-item + {:key "copy" + :on-click #(editor-handler/copy-selection-blocks true)} + (t :editor/copy) + (ui/dropdown-shortcut :editor/copy)) + + (shui/dropdown-menu-item + {:key "copy as" + :on-pointer-down (fn [e] + (util/stop-propagation e) + (let [block-uuids (state/get-selection-block-ids)] + (shui/popup-hide!) + (shui/dialog-open! + #(export/export-blocks block-uuids {:export-type :selected-nodes}))))} + (t :content/copy-export-as)) + + (shui/dropdown-menu-item + {:key "copy block refs" + :on-click editor-handler/copy-block-refs} + (t :content/copy-block-ref)) + + (shui/dropdown-menu-separator) + + (when (state/enable-flashcards?) + (shui/dropdown-menu-item + {:key "Make a Card" + :on-click #(fsrs/batch-make-cards!)} + (t :context-menu/make-a-flashcard))) + + (shui/dropdown-menu-item + {:key "Toggle number list" + :on-click #(state/pub-event! [:editor/toggle-own-number-list (state/get-selection-block-ids)])} + (t :context-menu/toggle-number-list)) + + (shui/dropdown-menu-item + {:key "cycle todos" + :on-click editor-handler/cycle-todos!} + (t :editor/cycle-todo) + (ui/dropdown-shortcut :editor/cycle-todo)) + + (shui/dropdown-menu-separator) + + (shui/dropdown-menu-item + {:key "Expand all" + :on-pointer-down (fn [e] + (util/stop e) + (editor-handler/expand-all-selection!))} + (t :editor/expand-block-children) + (ui/dropdown-shortcut :editor/expand-block-children)) + + (shui/dropdown-menu-item + {:key "Collapse all" + :on-pointer-down (fn [e] + (util/stop e) + (editor-handler/collapse-all-selection!))} + (t :editor/collapse-block-children) + (ui/dropdown-shortcut :editor/collapse-block-children))])) + +(rum/defc ^:large-vars/cleanup-todo block-context-menu-content + [_target block-id property-default-value?] + (let [[set-icon-sub-menu-open? set-icon-sub-menu-open] (rum/use-state false)] + (when-let [block (db/entity [:block/uuid block-id])] + (let [heading (or (pu/lookup block :logseq.property/heading) + false)] + [:<> + (ui/menu-background-color #(property-handler/set-block-property! block-id :logseq.property/background-color %) - #(property-handler/batch-remove-block-property! (state/get-selection-block-ids) + #(property-handler/remove-block-property! block-id :logseq.property/background-color)) - (ui/menu-heading #(editor-handler/batch-set-heading! (state/get-selection-block-ids) %) - #(editor-handler/batch-set-heading! (state/get-selection-block-ids) true) - #(editor-handler/batch-remove-heading! (state/get-selection-block-ids))) - (shui/dropdown-menu-separator) + (ui/menu-heading heading + #(editor-handler/set-heading! block-id %) + #(editor-handler/set-heading! block-id true) + #(editor-handler/remove-heading! block-id)) - (shui/dropdown-menu-item - {:key "cut" - :on-click #(editor-handler/cut-selection-blocks true)} - (t :editor/cut) - (ui/dropdown-shortcut :editor/cut)) + (shui/dropdown-menu-separator) - (shui/dropdown-menu-item - {:key "delete" - :on-click #(do (editor-handler/delete-selection %) - (state/hide-custom-context-menu!) - (shui/popup-hide!))} + (shui/dropdown-menu-item + {:key "Open in sidebar" + :on-click (fn [_e] + (editor-handler/open-block-in-sidebar! block-id))} + (t :content/open-in-sidebar) + (ui/dropdown-shortcut "shift+click")) - (t :editor/delete-selection) - (ui/dropdown-shortcut :editor/delete)) + (shui/dropdown-menu-sub + (shui/dropdown-menu-sub-trigger + "Add reaction") + (shui/dropdown-menu-sub-content + [:div.p-1 + (icon-component/icon-search + {:on-chosen (fn [_e icon] + (let [emoji-id (:id icon) + emoji? (= :emoji (:type icon))] + (if emoji? + (do + (reaction-handler/toggle-reaction! block-id emoji-id) + (state/hide-custom-context-menu!) + (shui/popup-hide!)) + (notification/show! "Please pick an emoji reaction." :warning)))) + :tabs [[:emoji "Emojis"]] + :default-tab :emoji + :show-used? true + :icon-value nil})])) - (shui/dropdown-menu-item - {:key "copy" - :on-click #(editor-handler/copy-selection-blocks true)} - (t :editor/copy) - (ui/dropdown-shortcut :editor/copy)) + (shui/dropdown-menu-sub + {:open set-icon-sub-menu-open? + :onOpenChange (fn [v] + (when (not= (some-> (shui-popup/get-last-popup) :id) :icons-color-picker) + (swap! shui-popup/*opened-sub-menus (if v conj disj) :set-icon) + (set-icon-sub-menu-open v)))} + (shui/dropdown-menu-sub-trigger + (t :context-menu/set-icon)) + (shui/dropdown-menu-sub-content + [:div.p-1 + (let [icon-value (:logseq.property/icon block)] + (icon-component/icon-search + {:on-chosen (fn [_e icon] + (if icon + (property-handler/set-block-property! + block-id + :logseq.property/icon + (select-keys icon [:type :id :color])) + (property-handler/remove-block-property! + block-id + :logseq.property/icon)) + (state/hide-custom-context-menu!) + (shui/popup-hide!)) + :color-auto-chosen? false + :del-btn? (boolean icon-value) + :icon-value icon-value}))])) - (shui/dropdown-menu-item - {:key "copy as" - :on-pointer-down (fn [e] - (util/stop-propagation e) - (let [block-uuids (state/get-selection-block-ids)] - (shui/popup-hide!) - (shui/dialog-open! - #(export/export-blocks block-uuids {:export-type :selected-nodes}))))} - (t :content/copy-export-as)) + (shui/dropdown-menu-separator) - (shui/dropdown-menu-item - {:key "copy block refs" - :on-click editor-handler/copy-block-refs} - (t :content/copy-block-ref)) - - (shui/dropdown-menu-separator) - - (when (state/enable-flashcards?) - (shui/dropdown-menu-item - {:key "Make a Card" - :on-click #(fsrs/batch-make-cards!)} - (t :context-menu/make-a-flashcard))) - - (shui/dropdown-menu-item - {:key "Toggle number list" - :on-click #(state/pub-event! [:editor/toggle-own-number-list (state/get-selection-block-ids)])} - (t :context-menu/toggle-number-list)) - - (shui/dropdown-menu-item - {:key "cycle todos" - :on-click editor-handler/cycle-todos!} - (t :editor/cycle-todo) - (ui/dropdown-shortcut :editor/cycle-todo)) - - (shui/dropdown-menu-separator) - - (shui/dropdown-menu-item - {:key "Expand all" - :on-pointer-down (fn [e] - (util/stop e) - (editor-handler/expand-all-selection!))} - (t :editor/expand-block-children) - (ui/dropdown-shortcut :editor/expand-block-children)) - - (shui/dropdown-menu-item - {:key "Collapse all" - :on-pointer-down (fn [e] - (util/stop e) - (editor-handler/collapse-all-selection!))} - (t :editor/collapse-block-children) - (ui/dropdown-shortcut :editor/collapse-block-children))]) - -(rum/defc ^:large-vars/cleanup-todo block-context-menu-content < - shortcut/disable-all-shortcuts - [_target block-id property-default-value?] - (when-let [block (db/entity [:block/uuid block-id])] - (let [heading (or (pu/lookup block :logseq.property/heading) - false)] - [:<> - (ui/menu-background-color #(property-handler/set-block-property! block-id - :logseq.property/background-color - %) - #(property-handler/remove-block-property! block-id - :logseq.property/background-color)) - - (ui/menu-heading heading - #(editor-handler/set-heading! block-id %) - #(editor-handler/set-heading! block-id true) - #(editor-handler/remove-heading! block-id)) - - (shui/dropdown-menu-separator) - - (shui/dropdown-menu-item - {:key "Open in sidebar" - :on-click (fn [_e] - (editor-handler/open-block-in-sidebar! block-id))} - (t :content/open-in-sidebar) - (ui/dropdown-shortcut "shift+click")) - - (shui/dropdown-menu-sub - (shui/dropdown-menu-sub-trigger - "Add reaction") - (shui/dropdown-menu-sub-content - [:div.p-1 - (icon-component/icon-search - {:on-chosen (fn [_e icon] - (let [emoji-id (:id icon) - emoji? (= :emoji (:type icon))] - (if emoji? - (do - (reaction-handler/toggle-reaction! block-id emoji-id) - (state/hide-custom-context-menu!) - (shui/popup-hide!)) - (notification/show! "Please pick an emoji reaction." :warning)))) - :tabs [[:emoji "Emojis"]] - :default-tab :emoji - :show-used? true - :icon-value nil})])) - - (shui/dropdown-menu-separator) - - (shui/dropdown-menu-item - {:key "Copy block ref" - :on-click (fn [_e] - (editor-handler/copy-block-ref! block-id ref/->block-ref))} - (t :content/copy-block-ref)) + (shui/dropdown-menu-item + {:key "Copy block ref" + :on-click (fn [_e] + (editor-handler/copy-block-ref! block-id ref/->block-ref))} + (t :content/copy-block-ref)) ;; TODO Logseq protocol mobile support - (when (util/electron?) + (when (util/electron?) + (shui/dropdown-menu-item + {:key "Copy block URL" + :on-click (fn [_e] + (let [current-repo (state/get-current-repo) + tap-f (fn [block-id] + (url-util/get-logseq-graph-uuid-url nil current-repo block-id))] + (editor-handler/copy-block-ref! block-id tap-f)))} + (t :content/copy-block-url))) + (shui/dropdown-menu-item - {:key "Copy block URL" + {:key "Copy as" + :on-click (fn [_] + (shui/dialog-open! + #(export/export-blocks [block-id] {:export-type :block})))} + (t :content/copy-export-as)) + + (when-not property-default-value? + (shui/dropdown-menu-item + {:key "Cut" + :on-click (fn [_e] + (editor-handler/cut-block! block-id))} + (t :editor/cut) + (ui/dropdown-shortcut :editor/cut))) + + (when-not property-default-value? + (shui/dropdown-menu-item + {:key "delete" + :on-click #(editor-handler/delete-block-aux! block)} + (t :editor/delete-selection) + (ui/dropdown-shortcut :editor/delete))) + + (shui/dropdown-menu-separator) + + (cond + (state/enable-flashcards?) + (shui/dropdown-menu-item + {:key "Make a Card" + :on-click #(fsrs/batch-make-cards! [block-id])} + (t :context-menu/make-a-flashcard)) + :else + nil) + + (shui/dropdown-menu-item + {:key "Toggle number list" + :on-click #(state/pub-event! [:editor/toggle-own-number-list (state/get-selection-block-ids)])} + (t :context-menu/toggle-number-list)) + + (shui/dropdown-menu-separator) + + (shui/dropdown-menu-item + {:key "Expand all" :on-click (fn [_e] - (let [current-repo (state/get-current-repo) - tap-f (fn [block-id] - (url-util/get-logseq-graph-uuid-url nil current-repo block-id))] - (editor-handler/copy-block-ref! block-id tap-f)))} - (t :content/copy-block-url))) + (editor-handler/expand-all! block-id))} + (t :editor/expand-block-children) + (ui/dropdown-shortcut :editor/expand-block-children)) - (shui/dropdown-menu-item - {:key "Copy as" - :on-click (fn [_] - (shui/dialog-open! - #(export/export-blocks [block-id] {:export-type :block})))} - (t :content/copy-export-as)) - - (when-not property-default-value? (shui/dropdown-menu-item - {:key "Cut" + {:key "Collapse all" :on-click (fn [_e] - (editor-handler/cut-block! block-id))} - (t :editor/cut) - (ui/dropdown-shortcut :editor/cut))) + (editor-handler/collapse-all! block-id {}))} + (t :editor/collapse-block-children) + (ui/dropdown-shortcut :editor/collapse-block-children)) - (when-not property-default-value? - (shui/dropdown-menu-item - {:key "delete" - :on-click #(editor-handler/delete-block-aux! block)} - (t :editor/delete-selection) - (ui/dropdown-shortcut :editor/delete))) + (when (state/sub [:plugin/simple-commands]) + (when-let [cmds (state/get-plugins-commands-with-type :block-context-menu-item)] + (for [[_ {:keys [key label] :as cmd} action pid] cmds] + (shui/dropdown-menu-item + {:key key + :on-click #(commands/exec-plugin-simple-command! + pid (assoc cmd :uuid block-id) action)} + label)))) - (shui/dropdown-menu-separator) + (when (state/sub [:ui/developer-mode?]) + [:<> + (shui/dropdown-menu-separator) + (shui/dropdown-menu-sub + (shui/dropdown-menu-sub-trigger + "Developer tools") - (cond - (state/enable-flashcards?) - (shui/dropdown-menu-item - {:key "Make a Card" - :on-click #(fsrs/batch-make-cards! [block-id])} - (t :context-menu/make-a-flashcard)) - :else - nil) + (shui/dropdown-menu-sub-content + (shui/dropdown-menu-item + {:key "(Dev) Show block data" + :on-click (fn [] + (dev-common-handler/show-entity-data [:block/uuid block-id]))} + (t :dev/show-block-data)) + (shui/dropdown-menu-item + {:key "(Dev) Show block AST" + :on-click (fn [] + (let [block (db/entity [:block/uuid block-id])] + (dev-common-handler/show-content-ast (:block/title block) + (get block :block/format :markdown))))} + (t :dev/show-block-ast)) + (shui/dropdown-menu-item + {:key "(Dev) Show block content history" + :on-click + (fn [] + (let [token (state/get-auth-id-token) + graph-uuid (ldb/get-graph-rtc-uuid (db/get-db))] + (p/let [blocks-versions (state/ - (shui/dropdown-menu-separator) - (shui/dropdown-menu-sub - (shui/dropdown-menu-sub-trigger - "Developer tools") - - (shui/dropdown-menu-sub-content - (shui/dropdown-menu-item - {:key "(Dev) Show block data" - :on-click (fn [] - (dev-common-handler/show-entity-data [:block/uuid block-id]))} - (t :dev/show-block-data)) - (shui/dropdown-menu-item - {:key "(Dev) Show block AST" - :on-click (fn [] - (let [block (db/entity [:block/uuid block-id])] - (dev-common-handler/show-content-ast (:block/title block) - (get block :block/format :markdown))))} - (t :dev/show-block-ast)) - (shui/dropdown-menu-item - {:key "(Dev) Show block content history" - :on-click - (fn [] - (let [token (state/get-auth-id-token) - graph-uuid (ldb/get-graph-rtc-uuid (db/get-db))] - (p/let [blocks-versions (state/ (if backup-folder [:div.flex.flex-row.items-center.gap-1.text-sm - [:div.opacity-50 (str "Backup folder:")] + [:div.opacity-50 "Backup folder:"] backup-folder (shui/button {:variant :ghost diff --git a/src/main/frontend/components/handbooks.cljs b/src/main/frontend/components/handbooks.cljs index 04ce0e5abc..6801523b69 100644 --- a/src/main/frontend/components/handbooks.cljs +++ b/src/main/frontend/components/handbooks.cljs @@ -6,7 +6,6 @@ [logseq.shui.hooks :as hooks] [rum.core :as rum])) -#_:clj-kondo/ignore ;(def lazy-handbooks (lazy/loadable frontend.extensions.handbooks.core/content)) ; ;(rum/defc loadable-handbooks diff --git a/src/main/frontend/components/header.cljs b/src/main/frontend/components/header.cljs index 56f5ff98eb..6a3ae4afbe 100644 --- a/src/main/frontend/components/header.cljs +++ b/src/main/frontend/components/header.cljs @@ -29,6 +29,7 @@ [frontend.ui :as ui] [frontend.util :as util] [frontend.version :refer [version]] + [logseq.common.config :as common-config] [logseq.common.util :as common-util] [logseq.db :as ldb] [logseq.shui.hooks :as hooks] @@ -156,6 +157,11 @@ :options {:on-click #(state/pub-event! [:ui/toggle-appearance])} :icon (ui/icon "color-swatch")} + (when (db/get-page common-config/recycle-page-name) + {:title "Recycle" + :options {:on-click page-handler/open-recycle!} + :icon (ui/icon "trash")}) + (when current-repo {:title (t :export-graph) :options {:on-click #(shui/dialog-open! export/export)} diff --git a/src/main/frontend/components/icon.cljs b/src/main/frontend/components/icon.cljs index 436b0dbbea..7ae3902aca 100644 --- a/src/main/frontend/components/icon.cljs +++ b/src/main/frontend/components/icon.cljs @@ -60,7 +60,7 @@ (ldb/class? node-entity) "hash" (ldb/property? node-entity) - "writing" + "letter-p" (ldb/page? node-entity) "file" (= asset-type "pdf") @@ -353,7 +353,11 @@ (shui/button {:size :sm :ref *el :class "color-picker" - :on-click (fn [^js e] (shui/popup-show! (.-target e) content-fn {:content-props {:side-offset 6}})) + :on-pointer-down (fn [^js e] + (util/stop e) + (shui/popup-show! (.-target e) content-fn + {:id :icons-color-picker + :content-props {:side-offset 6}})) :variant :outline} [:strong {:style {:color (or color "inherit")}} (shui/tabler-icon "palette")]))) @@ -365,7 +369,7 @@ (rum/local nil ::tab) {:init (fn [s] (assoc s ::color (atom (storage/get :ls-icon-color-preset))))} - [state {:keys [on-chosen del-btn? icon-value] :as opts}] + [state {:keys [on-chosen del-btn? color-auto-chosen? icon-value] :as opts}] (let [*q (::q state) *result (::result state) *tab (::tab state) @@ -477,7 +481,8 @@ (when (and show-tabs? has-icon-tab? (not= :emoji tab)) (color-picker *color (fn [c] (when (= :tabler-icon (some-> icon-value :type)) - (on-chosen nil (assoc icon-value :color c) true))))) + (when (not (false? color-auto-chosen?)) + (on-chosen nil (assoc icon-value :color c) true)))))) ;; action buttons (when del-btn? diff --git a/src/main/frontend/components/icon.css b/src/main/frontend/components/icon.css index eca3ff179e..03b62dcd01 100644 --- a/src/main/frontend/components/icon.css +++ b/src/main/frontend/components/icon.css @@ -168,3 +168,9 @@ .ls-icon-color-wrap em-emoji { @apply !w-auto !h-auto; } + +.ui__dropdown-menu-sub-content { + .cp__emoji-icon-picker { + @apply -m-2; + } +} \ No newline at end of file diff --git a/src/main/frontend/components/imports.cljs b/src/main/frontend/components/imports.cljs index 55db6af356..ce352c7cb5 100644 --- a/src/main/frontend/components/imports.cljs +++ b/src/main/frontend/components/imports.cljs @@ -311,10 +311,10 @@ (str "Block icons can't be imported. Manually import it at the block: " (pr-str (:block location)))) (if (not= (get-in schema [:type :to]) (get-in schema [:type :from])) (str "Property value has type " (get-in schema [:type :to]) " instead of type " (get-in schema [:type :from])) - (str "Property should be imported manually")))])) + "Property should be imported manually"))])) (map (fn [[k v]] [:dl.my-2.mb-0 - [:dt.m-0 [:strong (str k)]] + [:dt.m-0 [:strong k]] [:dd {:class "text-warning"} v]])))] :warning false)) (let [{:keys [errors]} (db-validate/validate-local-db! db {:verbose true})] diff --git a/src/main/frontend/components/page.cljs b/src/main/frontend/components/page.cljs index e747400b41..504ce089b9 100644 --- a/src/main/frontend/components/page.cljs +++ b/src/main/frontend/components/page.cljs @@ -12,6 +12,7 @@ [frontend.components.plugins :as plugins] [frontend.components.property.config :as property-config] [frontend.components.query :as query] + [frontend.components.recycle :as recycle] [frontend.components.reference :as reference] [frontend.components.scheduled-deadlines :as scheduled] [frontend.components.svg :as svg] @@ -418,85 +419,94 @@ property-page? (ldb/property? page) title (:block/title page) journal? (db/journal-page? title) + recycle-page? (and (ldb/page? page) + (= title common-config/recycle-page-name)) fmt-journal? (boolean (date/journal-title->int title)) today? (and journal? (= title (date/journal-name))) home? (= :home (state/get-current-route)) + recycled? (ldb/recycled? page) show-tabs? (and (or class-page? (ldb/property? page)) (not tag-dialog?))] (if page (when (or title block?) - [:div.flex-1.page.relative.cp__page-inner-wrap - (merge (if (seq (:block/tags page)) - (let [page-names (map :block/title (:block/tags page))] - (when (seq page-names) - {:data-page-tags (text-util/build-data-value page-names)})) - {}) + (if recycled? + [:div.flex-1.page.relative.cp__page-inner-wrap + [:div.relative.grid.gap-4.sm:gap-8.page-inner.mb-16 + [:div.opacity-75 "Node has been moved to Recycle"]]] + [:div.flex-1.page.relative.cp__page-inner-wrap + (merge (if (seq (:block/tags page)) + (let [page-names (map :block/title (:block/tags page))] + (when (seq page-names) + {:data-page-tags (text-util/build-data-value page-names)})) + {}) - {:key title - :class (util/classnames [{:is-journals (or journal? fmt-journal?) - :is-node-page (or class-page? property-page?)}])}) + {:key title + :class (util/classnames [{:is-journals (or journal? fmt-journal?) + :is-node-page (or class-page? property-page?)}])}) - [:div.relative.grid.gap-4.sm:gap-8.page-inner.mb-16 - (when-not (or block? sidebar?) - [:div.flex.flex-row.space-between - (when (ldb/page? page) - (db-page-title page - {:sidebar? sidebar? - :journals? journals? - :container-id (:container-id state) - :tag-dialog? tag-dialog?})) - (lsp-pagebar-slot)]) + [:div.relative.grid.gap-4.sm:gap-8.page-inner.mb-16 + (when-not (or block? sidebar?) + [:div.flex.flex-row.space-between + (when (ldb/page? page) + (db-page-title page + {:sidebar? sidebar? + :journals? journals? + :container-id (:container-id state) + :tag-dialog? tag-dialog?})) + (lsp-pagebar-slot)]) - (when (and block? (not sidebar?)) - (component-block/breadcrumb {} repo (:block/uuid page) {})) + (when (and block? (not sidebar?)) + (component-block/breadcrumb {} repo (:block/uuid page) {})) - (when (ldb/library? page) - (library/add-pages page)) + (when (ldb/library? page) + (library/add-pages page)) - (when (and sidebar? (ldb/page? page)) - [:div.-mb-8 - (sidebar-page-properties config page)]) + (when (and sidebar? (ldb/page? page)) + [:div.-mb-8 + (sidebar-page-properties config page)]) - (when show-tabs? - (tabs page {:current-page? option :sidebar? sidebar?})) + (when show-tabs? + (tabs page {:current-page? option :sidebar? sidebar?})) - (when (not tag-dialog?) - [:div.ls-page-blocks - {:style {:margin-left (if (util/mobile?) 0 -20)} - :class (when-not (or sidebar? (util/capacitor?)) - "mt-4")} - (page-blocks-cp page (merge option {:sidebar? sidebar? - :container-id (:container-id state)}))])] + (when (not tag-dialog?) + (if recycle-page? + (recycle/recycle-page page) + [:div.ls-page-blocks + {:style {:margin-left (if (util/mobile?) 0 -20)} + :class (when-not (or sidebar? (util/capacitor?)) + "mt-4")} + (page-blocks-cp page (merge option {:sidebar? sidebar? + :container-id (:container-id state)}))]))] - (when-not preview? - [:div.flex.flex-col.gap-8 - {:class (when-not (util/mobile?) "ml-1")} - (when today? - (today-queries repo today? sidebar?)) + (when-not (or preview? recycle-page?) + [:div.flex.flex-col.gap-8 + {:class (when-not (util/mobile?) "ml-1")} + (when today? + (today-queries repo today? sidebar?)) - (when today? - (scheduled/scheduled-and-deadlines title)) + (when today? + (scheduled/scheduled-and-deadlines title)) - (when (and (ldb/page? page) (:logseq.property.class/_extends page)) - (class-component/class-children page)) + (when (and (ldb/page? page) (:logseq.property.class/_extends page)) + (class-component/class-children page)) ;; referenced blocks - (when-not (or tag-dialog? linked-refs?) - [:div.fade-in.delay {:key "page-references"} - (rum/with-key - (reference/references page {:sidebar? sidebar? - :journals? journals? - :refs-count (:refs-count option)}) - (str title "-refs"))]) + (when-not (or tag-dialog? linked-refs?) + [:div.fade-in.delay {:key "page-references"} + (rum/with-key + (reference/references page {:sidebar? sidebar? + :journals? journals? + :refs-count (:refs-count option)}) + (str title "-refs"))]) - (when-not (or unlinked-refs? - sidebar? - tag-dialog? - home? - class-page? property-page?) - [:div.fade-in.delay {:key "page-unlinked-references"} - (reference/unlinked-references page {:sidebar? sidebar?})])])]) + (when-not (or unlinked-refs? + sidebar? + tag-dialog? + home? + class-page? property-page?) + [:div.fade-in.delay {:key "page-unlinked-references"} + (reference/unlinked-references page {:sidebar? sidebar?})])])])) [:div.opacity-75 "Page not found"]))) (rum/defcs page-aux < rum/reactive diff --git a/src/main/frontend/components/plugins_settings.cljs b/src/main/frontend/components/plugins_settings.cljs index 1a47570096..51010b2711 100644 --- a/src/main/frontend/components/plugins_settings.cljs +++ b/src/main/frontend/components/plugins_settings.cljs @@ -138,7 +138,7 @@ [:div.code-mode-wrap.pl-3.pr-1.py-1.mb-8.-ml-1 (let [content' (js/JSON.stringify (bean/->js settings) nil 2)] (lazy-editor/editor {:file? false} - (str "code-edit-lsp-settings") + "code-edit-lsp-settings" {:data-lang "json"} content' {})) [:div.flex.justify-end.pt-2.gap-2 diff --git a/src/main/frontend/components/property/config.cljs b/src/main/frontend/components/property/config.cljs index 63306a5ad6..f896b0de2b 100644 --- a/src/main/frontend/components/property/config.cljs +++ b/src/main/frontend/components/property/config.cljs @@ -587,7 +587,7 @@ (property-handler/remove-block-property! (:block/uuid block) (:db/ident property)))] (if (and class? class-schema?) (-> (shui/dialog-confirm! - [:p (str "Are you sure you want to delete the property from this tag?")] + [:p "Are you sure you want to delete the property from this tag?"] {:id :delete-property-from-class :data-reminder :ok}) (p/then remove!)) diff --git a/src/main/frontend/components/property/value.cljs b/src/main/frontend/components/property/value.cljs index c837d6befd..00e1640e68 100644 --- a/src/main/frontend/components/property/value.cljs +++ b/src/main/frontend/components/property/value.cljs @@ -353,12 +353,15 @@ select-handler! (fn [^js d] (when d - (let [journal (date/js-date->journal-title d)] + (p/let [journal (date/js-date->journal-title d) + page (db-async/ (remove (fn [c] (= (:db/ident c) :logseq.class/Root)) classes) class? - (conj (frontend.db/entity :logseq.class/Tag))) + (conj (db/entity :logseq.class/Tag))) extends-property? (= (:db/ident property) :logseq.property.class/extends)] ;; effect runs once @@ -1478,10 +1481,10 @@ :auto-focus editing? :checked value :on-checked-change (fn [] - (add-property! (boolean (not value)))) + (add-property! (not value))) :on-key-down (fn [e] (when (= (util/ekey e) "Enter") - (add-property! (boolean (not value)))) + (add-property! (not value))) (when (contains? #{"Backspace" "Delete"} (util/ekey e)) (delete-block-property! block property)))})]) ;; :others diff --git a/src/main/frontend/components/query.cljs b/src/main/frontend/components/query.cljs index 8d5984b664..f5bc60abe3 100644 --- a/src/main/frontend/components/query.cljs +++ b/src/main/frontend/components/query.cljs @@ -146,7 +146,11 @@ ;; Remove hidden pages from result result (if (and (coll? result) (not (map? result))) (->> result - (remove (fn [b] (when (and (map? b) (:block/title b)) (ldb/hidden? (:block/title b))))) + (remove (fn [b] + (when (and (map? b) (:block/title b)) + (ldb/hidden? (or (when-let [id (:db/id b)] + (db/entity id)) + (:block/title b)))))) (remove (fn [b] (when (and current-block (:db/id current-block)) (= (:db/id b) (:db/id current-block)))))) result) diff --git a/src/main/frontend/components/recycle.cljs b/src/main/frontend/components/recycle.cljs new file mode 100644 index 0000000000..ff08c543cb --- /dev/null +++ b/src/main/frontend/components/recycle.cljs @@ -0,0 +1,112 @@ +(ns frontend.components.recycle + "Recycle page UI" + (:require [clojure.string :as string] + [datascript.core :as d] + [frontend.components.block :as component-block] + [frontend.db :as db] + [frontend.handler.editor :as editor-handler] + [frontend.handler.page :as page-handler] + [frontend.state :as state] + [logseq.db :as ldb] + [logseq.shui.ui :as shui] + [rum.core :as rum])) + +(defn- resolve-entity + [db value] + (cond + (and (map? value) (:db/id value)) value + (integer? value) (d/entity db value) + (vector? value) (d/entity db value) + :else nil)) + +(defn- user-initials + [user] + (let [name (or (:logseq.property.user/name user) + (:block/title user) + "U") + name (string/trim name)] + (subs name 0 (min 2 (count name))))) + +(defn- deleted-roots + [db] + (->> (d/q '[:find [?e ...] + :where + [?e :logseq.property/deleted-at]] + db) + (map #(d/entity db %)) + (sort-by :logseq.property/deleted-at #(compare %2 %1)))) + +(defn- group-title + [db root] + (if (ldb/page? root) + (:block/title root) + (or (:block/title (resolve-entity db (:logseq.property.recycle/original-page root))) + "Unknown page"))) + +(defn- deleted-by + [db root] + (resolve-entity db (:logseq.property/deleted-by-ref root))) + +(defn- deleted-by-avatar + [user] + (let [avatar-src (:logseq.property.user/avatar user)] + (shui/avatar + {:class "w-4 h-4"} + (when (seq avatar-src) + (shui/avatar-image {:src avatar-src})) + (shui/avatar-fallback (user-initials user))))) + +(defn- deleted-root-header + [db root] + (let [user (deleted-by db root) + deleted-at (:logseq.property/deleted-at root)] + [:div.flex.items-center.justify-between.gap-4.text-xs.text-muted-foreground + [:div.flex.items-center.gap-1.min-w-0.flex-1 + (deleted-by-avatar user) + [:div.min-w-0 + [:div.truncate + (str (if (ldb/page? root) "Page" "Block") + " deleted " + (.toLocaleString (js/Date. deleted-at)))]]] + (shui/button + {:variant :ghost + :size :xs + :class "!py-0 !px-1 h-4" + :on-click #(page-handler/restore-recycled! (:block/uuid root))} + "Restore")])) + +(defn- deleted-root-outliner + [root] + (component-block/block-container + {:view? true + :block? true + :publishing? true + :stop-events? true + :default-collapsed? (boolean (editor-handler/collapsable? (:block/uuid root) + {:semantic? true})) + :container-id (state/get-container-id [:recycle-root (:block/uuid root)]) + :id (str (:block/uuid root))} + root)) + +(rum/defc recycle-page + [_page] + (let [db* (db/get-db) + groups (->> (deleted-roots db*) + (group-by #(group-title db* %)) + (sort-by (fn [[_ roots]] + (:logseq.property/deleted-at (first roots))) + #(compare %2 %1)))] + [:div.flex.flex-col.gap-1 + [:div.text-sm.text-muted-foreground.mb-4 + "Deleted pages and blocks stay here until restored or automatically garbage collected after 30 days."] + (if (seq groups) + (for [[title roots] groups] + [:section {:key title} + (when-not (some ldb/page? roots) + [:h2.text-lg.font-medium.mb-3 title]) + [:div.flex.flex-col + (for [root roots] + [:div {:key (str (:block/uuid root))} + (deleted-root-header db* root) + (deleted-root-outliner root)])]]) + [:div.text-sm.text-muted-foreground "Recycle is empty."])])) diff --git a/src/main/frontend/components/repo.cljs b/src/main/frontend/components/repo.cljs index dafdc2f71d..6f3b20007d 100644 --- a/src/main/frontend/components/repo.cljs +++ b/src/main/frontend/components/repo.cljs @@ -460,8 +460,8 @@ e))) (p/resolved nil))) -(rum/defc new-db-graph - [] +(rum/defc new-db-graph-inner + [rtc-group?] (let [[creating-db? set-creating-db?] (hooks/use-state false) [cloud? set-cloud?] (hooks/use-state false) [graph-e2ee? set-graph-e2ee?] (hooks/use-state true) @@ -519,7 +519,7 @@ :placeholder "your graph name" :on-key-down submit! :autoComplete "off"}) - (when (user-handler/rtc-group?) + (when rtc-group? [:div.flex.flex-col [:div.flex.flex-row.items-center.gap-1 (shui/checkbox @@ -527,7 +527,7 @@ :checked cloud? :on-checked-change (fn [] - (let [v (boolean (not cloud?))] + (let [v (not cloud?)] (set-cloud? v)))}) [:label.opacity-70.text-sm {:for "rtc-sync"} @@ -539,7 +539,7 @@ :checked graph-e2ee? :on-checked-change (fn [] - (set-graph-e2ee? (boolean (not graph-e2ee?))))}) + (set-graph-e2ee? (not graph-e2ee?)))}) [:label.opacity-70.text-sm {:for "rtc-graph-e2ee"} "Encrypt graph data"]])]]) @@ -550,3 +550,8 @@ (if creating-db? (ui/loading "Creating graph") "Submit"))])) + +(rum/defc new-db-graph < rum/reactive + [] + (let [rtc-group? (user-handler/rtc-group?)] + (new-db-graph-inner rtc-group?))) diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs index 54fa5ed1e8..b792a86657 100644 --- a/src/main/frontend/components/right_sidebar.cljs +++ b/src/main/frontend/components/right_sidebar.cljs @@ -20,6 +20,7 @@ [frontend.handler.ui :as ui-handler] [frontend.state :as state] [frontend.ui :as ui] + [frontend.undo-redo.debug-ui :as undo-redo-debug-ui] [frontend.util :as util] [logseq.db :as ldb] [logseq.shui.hooks :as hooks] @@ -143,10 +144,15 @@ :shortcut-settings [[:.flex.items-center (ui/icon "command" {:class "text-md mr-2"}) (t :help/shortcuts)] (shortcut-settings)] + :rtc [[:.flex.items-center (ui/icon "cloud" {:class "text-md mr-2"}) "(Dev) RTC"] (rtc-debug-ui/rtc-debug-ui)] + :undo-redo + [[:.flex.items-center (ui/icon "rotate-clockwise" {:class "text-md mr-2"}) "(Dev) Undo/Redo"] + (undo-redo-debug-ui/undo-redo-debug-ui)] + :profiler [[:.flex.items-center (ui/icon "cloud" {:class "text-md mr-2"}) "(Dev) Profiler"] (profiler/profiler)] @@ -165,6 +171,21 @@ (defonce *drag-from (atom nil)) +(defn dev-sidebar-items + [developer-mode?] + (cond-> [] + (and developer-mode? (not config/publishing?)) + (conj {:db-id "rtc" :block-type :rtc :label "(Dev) RTC"}) + + developer-mode? + (conj {:db-id "undo-redo" :block-type :undo-redo :label "(Dev) Undo/Redo"}) + + developer-mode? + (conj {:db-id "vector-search" :block-type :vector-search :label "(Dev) vector-search"}) + + developer-mode? + (conj {:db-id "profiler" :block-type :profiler :label "(Dev) Profiler"}))) + (rum/defc actions-menu-content [db-id idx type collapsed? block-count] (let [multi-items? (> block-count 1) @@ -292,17 +313,17 @@ ::init-key (random-uuid)))} [state repo idx db-id block-type block-count] (let [drag-from (rum/react *drag-from) - drag-to (rum/react *drag-to)] - (let [collapsed? (state/sub [:ui/sidebar-collapsed-blocks db-id])] - (sidebar-item-inner db-id {:repo repo - :idx idx - :block-type block-type - :collapsed? collapsed? - :drag-from drag-from - :drag-to drag-to - :block-count block-count - :*db-id (::db-id state) - :init-key (::init-key state)})))) + drag-to (rum/react *drag-to) + collapsed? (state/sub [:ui/sidebar-collapsed-blocks db-id])] + (sidebar-item-inner db-id {:repo repo + :idx idx + :block-type block-type + :collapsed? collapsed? + :drag-from drag-from + :drag-to drag-to + :block-count block-count + :*db-id (::db-id state) + :init-key (::init-key state)}))) (defn- get-page [match] @@ -386,8 +407,8 @@ ratio (.toFixed (/ offset width) 6) ratio (if (= handler-position :west) (- 1 ratio) ratio)] (when (and (> ratio min-ratio) (< ratio max-ratio) (not (zero? keyboard-step))) - (do (add-resizing-class) - (set-width! ratio))))))) + (add-resizing-class) + (set-width! ratio)))))) (.on "keyup" remove-resizing-class))) #()) []) @@ -417,7 +438,8 @@ state)} [state repo t blocks] (let [*anim-finished? (get state ::anim-finished?) - block-count (count blocks)] + block-count (count blocks) + developer-mode? (state/sub [:ui/developer-mode?])] [:div.cp__right-sidebar-inner.flex.flex-col.h-full#right-sidebar-container [:div.cp__right-sidebar-scrollable @@ -443,22 +465,12 @@ (state/sidebar-add-block! repo "help" :help))} (t :right-side-bar/help)]] - (when (and (state/sub [:ui/developer-mode?]) (not config/publishing?)) - [:div.text-sm - [:button.button.cp__right-sidebar-settings-btn {:on-click (fn [_e] - (state/sidebar-add-block! repo "rtc" :rtc))} - "(Dev) RTC"]]) - (when (state/sub [:ui/developer-mode?]) - [:div.text-sm + (for [{:keys [db-id block-type label]} (dev-sidebar-items developer-mode?)] + [:div.text-sm {:key (str "dev-sidebar-item-" (name block-type))} [:button.button.cp__right-sidebar-settings-btn {:on-click (fn [_e] - (state/sidebar-add-block! repo "vector-search" :vector-search))} - "(Dev) vector-search"]]) - (when (state/sub [:ui/developer-mode?]) - [:div.text-sm - [:button.button.cp__right-sidebar-settings-btn {:on-click (fn [_e] - (state/sidebar-add-block! repo "profiler" :profiler))} - "(Dev) Profiler"]])]] + (state/sidebar-add-block! repo db-id block-type))} + label]])]] [:.sidebar-item-list.flex-1.scrollbar-spacing.px-2 (if @*anim-finished? diff --git a/src/main/frontend/components/rtc/indicator.cljs b/src/main/frontend/components/rtc/indicator.cljs index 253b5574bc..0b02dd5d3a 100644 --- a/src/main/frontend/components/rtc/indicator.cljs +++ b/src/main/frontend/components/rtc/indicator.cljs @@ -27,6 +27,8 @@ :graph-uuid nil :local-tx nil :remote-tx nil + :local-checksum nil + :remote-checksum nil :rtc-state :open :download-logs nil :upload-logs nil @@ -61,6 +63,8 @@ :graph-uuid (:graph-uuid state) :local-tx (:local-tx state) :remote-tx (:remote-tx state) + :local-checksum (:local-checksum state) + :remote-checksum (:remote-checksum state) :rtc-state (if (:rtc-lock state) :open :close))) rtc-flows/rtc-state-flow)))] (reset! *update-detail-info-canceler canceler)))) @@ -118,7 +122,7 @@ [] (let [online? (hooks/use-flow-state flows/network-online-event-flow) [expand-debug? set-expand-debug!] (hooks/use-state false) - {:keys [graph-uuid local-tx remote-tx rtc-state + {:keys [graph-uuid local-tx remote-tx local-checksum remote-checksum rtc-state download-logs upload-logs misc-logs pending-local-ops pending-server-ops]} (hooks/use-flow-state (m/watch *detail-info))] [:div.rtc-info.flex.flex-col.gap-1.p-2.text-gray-11 @@ -144,6 +148,8 @@ graph-uuid (assoc :graph-uuid graph-uuid) local-tx (assoc :local-tx local-tx) remote-tx (assoc :remote-tx remote-tx) + local-checksum (assoc :local-checksum local-checksum) + remote-checksum (assoc :remote-checksum remote-checksum) rtc-state (assoc :rtc-state rtc-state)) pprint/pprint with-out-str)]]) diff --git a/src/main/frontend/components/settings.cljs b/src/main/frontend/components/settings.cljs index 85bc4b5db3..f6c90b4eda 100644 --- a/src/main/frontend/components/settings.cljs +++ b/src/main/frontend/components/settings.cljs @@ -1309,7 +1309,7 @@ [:li.settings-menu-item {:key text :data-id id - :class (util/classnames [{:active (= label (first @*active))}]) + :class (classnames [{:active (= label (first @*active))}]) :on-click (fn [] (if (= label :plugins-setting) (state/pub-event! [:go/plugins-settings (:id (first plugins-of-settings))]) diff --git a/src/main/frontend/components/views.cljs b/src/main/frontend/components/views.cljs index c268d36f81..eaae99192b 100644 --- a/src/main/frontend/components/views.cljs +++ b/src/main/frontend/components/views.cljs @@ -1253,57 +1253,52 @@ (for [operator operators] (shui/dropdown-menu-item {:on-click (fn [] - (let [new-filters (update filters :filters - (fn [col] - (update col idx - (fn [[property _old-operator value]] - (let [value' (get-filter-with-changed-operator property operator value)] - (if value' - [property operator value'] - [property operator]))))))] - (set-filters! new-filters)))} + (set-filters! + (update filters :filters + (fn [col] + (update col idx + (fn [[property _old-operator value]] + (let [value' (get-filter-with-changed-operator property operator value)] + (if value' + [property operator value'] + [property operator]))))))))} (operator->text operator))))))) (rum/defc between < rum/static [_property [start end] filters set-filters! idx] - [:<> - (shui/input - {:auto-focus true - :placeholder "from" - :value (str start) - :onChange (fn [e] - (let [input-value (util/evalue e) - number-value (when-not (string/blank? input-value) - (util/safe-parse-float input-value)) - value [number-value end] - value (if (every? nil? value) nil value)] - (let [new-filters (update filters :filters - (fn [col] - (update col idx - (fn [[property operator _old_value]] - (if (nil? value) - [property operator] - [property operator value])))))] - (set-filters! new-filters)))) - :class "w-24 !h-6 !py-0 border-none focus-visible:ring-0 focus-visible:ring-offset-0"}) - (shui/input - {:value (str end) - :placeholder "to" - :onChange (fn [e] - (let [input-value (util/evalue e) - number-value (when-not (string/blank? input-value) - (util/safe-parse-float input-value)) - value [start number-value] - value (if (every? nil? value) nil value)] - (let [new-filters (update filters :filters - (fn [col] - (update col idx - (fn [[property operator _old_value]] - (if (nil? value) - [property operator] - [property operator value])))))] - (set-filters! new-filters)))) - :class "w-24 !h-6 !py-0 border-none focus-visible:ring-0 focus-visible:ring-offset-0"})]) + (let [set-filter-range! (fn [value] + (set-filters! + (update filters :filters + (fn [col] + (update col idx + (fn [[property operator _old_value]] + (if (nil? value) + [property operator] + [property operator value])))))))] + [:<> + (shui/input + {:auto-focus true + :placeholder "from" + :value (str start) + :onChange (fn [e] + (let [input-value (util/evalue e) + number-value (when-not (string/blank? input-value) + (util/safe-parse-float input-value)) + value [number-value end] + value (if (every? nil? value) nil value)] + (set-filter-range! value))) + :class "w-24 !h-6 !py-0 border-none focus-visible:ring-0 focus-visible:ring-offset-0"}) + (shui/input + {:value (str end) + :placeholder "to" + :onChange (fn [e] + (let [input-value (util/evalue e) + number-value (when-not (string/blank? input-value) + (util/safe-parse-float input-value)) + value [start number-value] + value (if (every? nil? value) nil value)] + (set-filter-range! value))) + :class "w-24 !h-6 !py-0 border-none focus-visible:ring-0 focus-visible:ring-offset-0"})])) (rum/defc ^:large-vars/cleanup-todo filter-value-select < rum/static [view-entity {:keys [data-fns] :as table} property value operator idx opts] @@ -1354,12 +1349,12 @@ (shui/popup-hide!)) (let [value' (if many? selected value) set-filters-fn (fn [value'] - (let [new-filters (update filters :filters - (fn [col] - (update col idx - (fn [[property operator _value]] - [property operator value']))))] - (set-filters! new-filters)))] + (set-filters! + (update filters :filters + (fn [col] + (update col idx + (fn [[property operator _value]] + [property operator value']))))))] (if (= value "Custom date") (shui/popup-show! (.-target e) @@ -1381,12 +1376,12 @@ (select/select option) (shui/button {:variant :ghost :size :sm :class "justify-start" :on-click (fn [] - (let [new-filters (update filters :filters - (fn [col] - (update col idx - (fn [[property operator _value]] - [property operator :empty]))))] - (set-filters! new-filters)))} + (set-filters! + (update filters :filters + (fn [col] + (update col idx + (fn [[property operator _value]] + [property operator :empty]))))))} [:span.opacity-75.hover:opacity-100.font-normal.text-sm "Empty"])] (select/select option)))) @@ -1424,7 +1419,16 @@ (rum/defc filter-value < rum/static [view-entity table property operator value filters set-filters! idx opts] - (let [number-operator? (string/starts-with? (name operator) "number-")] + (let [number-operator? (string/starts-with? (name operator) "number-") + set-filter-value! (fn [input-value number-value] + (set-filters! + (update filters :filters + (fn [col] + (update col idx + (fn [[property operator _value]] + (if (and number-operator? (nil? number-value)) + [property operator] + [property operator (or number-value input-value)])))))))] (case operator :between (between property value filters set-filters! idx) @@ -1434,17 +1438,10 @@ {:auto-focus false :value (or value "") :onChange (fn [e] - (let [value (util/evalue e) - number-value (and number-operator? (when-not (string/blank? value) - (util/safe-parse-float value)))] - (let [new-filters (update filters :filters - (fn [col] - (update col idx - (fn [[property operator _value]] - (if (and number-operator? (nil? number-value)) - [property operator] - [property operator (or number-value value)])))))] - (set-filters! new-filters)))) + (let [input-value (util/evalue e) + number-value (and number-operator? (when-not (string/blank? input-value) + (util/safe-parse-float input-value)))] + (set-filter-value! input-value number-value))) :class "w-24 !h-6 !py-0 border-none focus-visible:ring-0 focus-visible:ring-offset-0"}) (filter-value-select view-entity table property value operator idx opts)))) diff --git a/src/main/frontend/config.cljs b/src/main/frontend/config.cljs index e193e852ee..d1ddf164a8 100644 --- a/src/main/frontend/config.cljs +++ b/src/main/frontend/config.cljs @@ -52,12 +52,15 @@ (defonce db-sync-ws-url (if db-sync-local? "ws://127.0.0.1:8787/sync/%s" + ;; "wss://api-staging.logseq.io/sync/%s" "wss://api.logseq.io/sync/%s")) (defonce db-sync-http-base (if db-sync-local? "http://127.0.0.1:8787" - "https://api.logseq.io")) + ;; "https://api-staging.logseq.io" + "https://api.logseq.io" + )) ;; Feature flags ;; ============= diff --git a/src/main/frontend/core.cljs b/src/main/frontend/core.cljs index 740df9ee8e..4a75cda7ea 100644 --- a/src/main/frontend/core.cljs +++ b/src/main/frontend/core.cljs @@ -91,7 +91,6 @@ (defn ^:export stop [] ;; stop is called before any code is reloaded ;; this is controlled by :before-load in the config - (handler/stop!) (js/console.log "stop")) (defn ^:export delay-remount diff --git a/src/main/frontend/db/async.cljs b/src/main/frontend/db/async.cljs index a414b77479..1d5ce0ac85 100644 --- a/src/main/frontend/db/async.cljs +++ b/src/main/frontend/db/async.cljs @@ -19,9 +19,6 @@ (def ^:private yyyyMMdd-formatter (tf/formatter "yyyyMMdd")) (def > (d/datoms db :avet :block/tags :logseq.class/Tag) (map (fn [d] (db-utils/entity db (:e d)))) + (remove ldb/recycled?) (remove (fn [d] (and except-private-tags? (contains? ldb/private-tags (:db/ident d))))) @@ -353,7 +354,7 @@ independent of format as format specific heading characters are stripped" (db-property/plugin-property?))) ldb/built-in? :block/title) - (ldb/get-all-properties db))] + (remove ldb/recycled? (ldb/get-all-properties db)))] (cond->> result remove-built-in-property? ;; remove private built-in properties diff --git a/src/main/frontend/db/restore.cljs b/src/main/frontend/db/restore.cljs index e504132668..9d0fcb7a9e 100644 --- a/src/main/frontend/db/restore.cljs +++ b/src/main/frontend/db/restore.cljs @@ -5,7 +5,6 @@ [frontend.db.conn :as db-conn] [frontend.persist-db :as persist-db] [frontend.state :as state] - [frontend.undo-redo :as undo-redo] [lambdaisland.glogi :as log] [logseq.db :as ldb] [promesa.core :as p])) @@ -28,7 +27,6 @@ :initial-data initial-data})) (js/console.error e) (throw e))) - _ (undo-redo/listen-db-changes! repo conn) db-name (db-conn/get-repo-path repo) _ (swap! db-conn/conns assoc db-name conn) end-time (t/now)] diff --git a/src/main/frontend/db/transact.cljs b/src/main/frontend/db/transact.cljs index 92e176c026..c7179916cf 100644 --- a/src/main/frontend/db/transact.cljs +++ b/src/main/frontend/db/transact.cljs @@ -21,24 +21,44 @@ (p/resolve! response result)))) response)) +(defn- ensure-local-op-tx-id + [tx-meta] + (cond-> (or tx-meta {}) + (nil? (:db-sync/tx-id tx-meta)) + (assoc :db-sync/tx-id (random-uuid)))) + (defn transact [worker-transact repo tx-data tx-meta] - (let [tx-meta' (assoc tx-meta + (let [tx-meta' (-> tx-meta + ensure-local-op-tx-id + (assoc ;; not from remote (rtc) - :local-tx? true)] + :local-tx? true))] (worker-call (fn async-request [] - (worker-transact repo tx-data tx-meta'))))) + (p/do! + (state/ opts + ensure-local-op-tx-id + (assoc + :client-id (:client-id @state/state) + :local-tx? true)) + request #(state/ a (.dividedBy 100.00))) :scientific bn/BigNumber diff --git a/src/main/frontend/extensions/highlight.cljs b/src/main/frontend/extensions/highlight.cljs index 8d2a289457..f5dce152b5 100644 --- a/src/main/frontend/extensions/highlight.cljs +++ b/src/main/frontend/extensions/highlight.cljs @@ -6,7 +6,7 @@ (let [[id attr] (:rum/args state)] (when (:data-lang attr) (when-let [element (js/document.getElementById id)] - (js/hljs.highlightBlock element))))) + (js/hljs.highlightElement element))))) (rum/defcs highlight < rum/reactive {:did-mount (fn [state] diff --git a/src/main/frontend/extensions/html_parser.cljs b/src/main/frontend/extensions/html_parser.cljs index cda99a2047..1d058ba54e 100644 --- a/src/main/frontend/extensions/html_parser.cljs +++ b/src/main/frontend/extensions/html_parser.cljs @@ -206,9 +206,9 @@ (let [columns (count (last (first children)))] (str (map-join children) - (str "| " (string/join " | " - (repeat columns "----")) - " |"))) + "| " + (string/join " | " (repeat columns "----")) + " |")) :tr (str "| " (->> (map #(transform-fn % (assoc opts :in-table? true)) children) diff --git a/src/main/frontend/extensions/sci.cljs b/src/main/frontend/extensions/sci.cljs index a7ea3500ea..2a86ee2097 100644 --- a/src/main/frontend/extensions/sci.cljs +++ b/src/main/frontend/extensions/sci.cljs @@ -8,7 +8,8 @@ [frontend.util :as util] [goog.dom] [goog.object] - [goog.string])) + [goog.string] + [lambdaisland.glogi :as log])) ;; Helper fns for eval-string ;; ========================== @@ -24,6 +25,25 @@ (throw (ex-info "Api function does not exist" {:fn fn-name}))) (apply js-invoke (aget js/window.logseq "api") fn-name args)) +(def ^:private default-user-namespace + {'sum sum + 'average average + 'parseFloat js/parseFloat + 'isNaN js/isNaN + 'log js/console.log + 'pprint util/pp-str + ;; Provide to all evals as it useful in most contexts + 'call-api call-api}) + +(defn- normalize-sci-options + [options] + (let [namespaces (or (:namespaces options) {}) + user-namespace (or (get namespaces 'user) (:bindings options))] + (-> options + (dissoc :bindings) + (assoc :namespaces + (assoc namespaces 'user (merge default-user-namespace user-namespace)))))) + ;; Public fns ;; ========== (defn eval-string @@ -32,19 +52,9 @@ (eval-string s {})) ([s options] (try - (sci/eval-string s (merge-with merge - {:bindings {'sum sum - 'average average - 'parseFloat js/parseFloat - 'isNaN js/isNaN - 'log js/console.log - 'pprint util/pp-str - ;; Provide to all evals as it useful in most contexts - 'call-api call-api}} - options)) + (sci/eval-string s (normalize-sci-options options)) (catch :default e - (println "Query: sci eval failed:") - (js/console.error e))))) + (log/error :sci-eval-failed e))))) (defn call-fn [f & args] diff --git a/src/main/frontend/fs/memory_fs.cljs b/src/main/frontend/fs/memory_fs.cljs index 69666a26bd..c857eaa9ed 100644 --- a/src/main/frontend/fs/memory_fs.cljs +++ b/src/main/frontend/fs/memory_fs.cljs @@ -130,6 +130,13 @@ (let [old-path (path/url-to-path old-path) new-path (path/url-to-path new-path)] (js/window.pfs.rename old-path new-path))) + (copy! [_this _repo old-path new-path] + (p/let [old-path (path/url-to-path old-path) + new-path (path/url-to-path new-path) + content (js/window.pfs.readFile old-path) + containing-dir (path/parent new-path) + _ ( tail-len 0) (>= (count content) tail-len)) - (subs content 0 (- (count content) tail-len)) + (and (> tail-len 0) (>= (count content) tail-len)) + (subs content 0 (- (count content) tail-len)) - (or (= :max pos) (<= content-length pos)) - content + (or (= :max pos) (<= content-length pos)) + content - :else - (subs content 0 pos))] - (state/clear-selection!) - (edit-block-aux repo block content text-range (assoc opts :pos pos)))))))) + :else + (subs content 0 pos))] + (state/clear-selection!) + (edit-block-aux repo block content text-range (assoc opts :pos pos)))))))))) (defn- get-original-block-by-dom [node] diff --git a/src/main/frontend/handler/common/developer.cljs b/src/main/frontend/handler/common/developer.cljs index d2a98ec394..0f4b8ad57a 100644 --- a/src/main/frontend/handler/common/developer.cljs +++ b/src/main/frontend/handler/common/developer.cljs @@ -1,6 +1,8 @@ (ns frontend.handler.common.developer "Common fns for developer related functionality" - (:require [cljs.pprint :as pprint] + (:require ["/frontend/utils" :as utils] + [cljs.pprint :as pprint] + [clojure.string :as string] [datascript.impl.entity :as de] [frontend.db :as db] [frontend.format.mldoc :as mldoc] @@ -9,6 +11,7 @@ [frontend.persist-db :as persist-db] [frontend.state :as state] [frontend.ui :as ui] + [frontend.util :as util] [frontend.util.page :as page-util] [logseq.db.frontend.property :as db-property] [promesa.core :as p])) @@ -83,10 +86,50 @@ (defn ^:export validate-db [] (state/ (or repo "graph") + (string/replace #"^/+" "") + (string/replace #"[\\/]+" "_") + (str "_checksum_" (quot (util/time-ms) 1000)))) + +(defn ^:export recompute-checksum-diagnostics + [] + (if-let [repo (state/get-current-repo)] + (-> (state/js {:type "text/edn;charset=utf-8"})) + filename (checksum-export-file-name repo)] + (utils/saveToFile blob filename "edn") + (notification/show! + (str "Checksum recomputed. Recomputed: " recomputed-checksum + ", local: " (or local-checksum "") + ", remote: " (or remote-checksum "") + ". Downloaded " filename ".edn with " (count blocks) + " blocks and checksum attrs " (pr-str checksum-attrs) ".") + :success + false)) + (notification/show! "Unable to compute checksum diagnostics for current graph." :warning)))) + (p/catch (fn [error] + (js/console.error "recompute-checksum-diagnostics failed:" error) + (notification/show! "Failed to compute graph checksum diagnostics." :error)))) + (notification/show! "No graph found" :warning))) + (defn import-chosen-graph [repo] (p/let [_ (persist-db/ (state/get-current-page) common-util/page-name-sanity-lc) - (common-util/page-name-sanity-lc page-name))) - (route-handler/redirect-to-home!)) - - ;; TODO: why need this? - (ui-handler/re-render-root!)) + ( (state/ (when (not config/publishing?) (when-let [state (get-state)] @@ -507,7 +508,7 @@ :else insert-new-block-aux!) - [result-promise sibling? next-block] (insert-fn config block'' value) + [result-promise sibling? next-block] (insert-fn (assoc config :right-sibling right-sibling) block'' value) edit-block-f (fn [] (let [next-block' (db/entity [:block/uuid (:block/uuid next-block)]) pos 0 @@ -541,71 +542,72 @@ (db/get-page page) (db/entity [:block/uuid block-uuid]))] (when block - (let [last-block (when (not sibling?) - (let [children (:block/_parent block) - blocks (db/sort-by-order children) - last-block-id (:db/id (last blocks))] - (when last-block-id - (db/entity last-block-id)))) - new-block (-> (select-keys block [:block/page]) - (assoc :block/title content)) - new-block (assoc new-block :block/page - (if page - (:db/id block) - (:db/id (:block/page new-block)))) - new-block (-> new-block - (wrap-parse-block) - (assoc :block/uuid (or custom-uuid (db/new-block-id)))) - new-block (merge new-block other-attrs) - block' (db/entity (:db/id block)) - [target-block sibling?] (cond - before? - (let [left-or-parent (or (ldb/get-left-sibling block) - (:block/parent block)) - sibling? (if (= (:db/id (:block/parent block)) (:db/id left-or-parent)) - false sibling?)] - [left-or-parent sibling?]) + (if (ldb/recycled? block) + (notification/show! "Recycle is read-only." :warning) + (let [last-block (when (not sibling?) + (let [children (:block/_parent block) + blocks (db/sort-by-order children) + last-block-id (:db/id (last blocks))] + (when last-block-id + (db/entity last-block-id)))) + new-block (-> (select-keys block [:block/page]) + (assoc :block/title content)) + new-block (assoc new-block :block/page + (if page + (:db/id block) + (:db/id (:block/page new-block)))) + new-block (-> new-block + (wrap-parse-block) + (assoc :block/uuid (or custom-uuid (db/new-block-id)))) + new-block (merge new-block other-attrs) + block' (db/entity (:db/id block)) + [target-block sibling?] (cond + before? + (let [left-or-parent (or (ldb/get-left-sibling block) + (:block/parent block)) + sibling? (if (= (:db/id (:block/parent block)) (:db/id left-or-parent)) + false sibling?)] + [left-or-parent sibling?]) - sibling? - [block' sibling?] + sibling? + [block' sibling?] - start? - [block' false] + start? + [block' false] - end? - (if last-block + end? + (if last-block + [last-block true] + [block' false]) + + last-block [last-block true] - [block' false]) - last-block - [last-block true] + block + [block' sibling?] - block - [block' sibling?] - - ;; FIXME: assert - :else - nil)] - (when target-block - (p/do! - (let [new-block' (if (seq properties) - (into new-block properties) - new-block)] - (ui-outliner-tx/transact! - {:outliner-op :insert-blocks} - (outliner-insert-block! config target-block new-block' - {:sibling? sibling? - :keep-uuid? true - :ordered-list? ordered-list? - :outliner-op outliner-op - :replace-empty-target? replace-empty-target?}))) - (when edit-block? - (if (and replace-empty-target? - (string/blank? (:block/title last-block))) - (edit-block! last-block :max) - (edit-block! new-block :max))) - (when-let [id (:block/uuid new-block)] - (db/entity [:block/uuid id]))))))))) + :else + nil)] + (when target-block + (p/do! + (let [new-block' (if (seq properties) + (into new-block properties) + new-block)] + (ui-outliner-tx/transact! + {:outliner-op :insert-blocks} + (outliner-insert-block! config target-block new-block' + {:sibling? sibling? + :keep-uuid? true + :ordered-list? ordered-list? + :outliner-op outliner-op + :replace-empty-target? replace-empty-target?}))) + (when edit-block? + (if (and replace-empty-target? + (string/blank? (:block/title last-block))) + (edit-block! last-block :max) + (edit-block! new-block :max))) + (when-let [id (:block/uuid new-block)] + (db/entity [:block/uuid id])))))))))) (defn get-selected-blocks [] @@ -797,9 +799,12 @@ (defn move-blocks! [blocks target opts] (when (seq blocks) - (ui-outliner-tx/transact! - {:outliner-op :move-blocks} - (outliner-op/move-blocks! blocks target opts)))) + (if (or (some ldb/recycled? blocks) + (ldb/recycled? target)) + (notification/show! "Recycle is read-only." :warning) + (ui-outliner-tx/transact! + {:outliner-op :move-blocks} + (outliner-op/move-blocks! blocks target opts))))) (defn move-selected-blocks [e] @@ -976,10 +981,11 @@ (let [repo (state/get-current-repo) block-uuids (distinct (keep #(when-let [id (dom/attr % "blockid")] (uuid id)) dom-blocks)) lookup-refs (map (fn [id] [:block/uuid id]) block-uuids) - blocks (map db/entity lookup-refs)] - (ui-outliner-tx/transact! - {:outliner-op :delete-blocks} - (let [top-level-blocks (block-handler/get-top-level-blocks blocks)] + blocks (map db/entity lookup-refs) + top-level-blocks (block-handler/get-top-level-blocks blocks)] + (when-not (every? ldb/recycled? top-level-blocks) + (ui-outliner-tx/transact! + {:outliner-op :delete-blocks} (when (seq top-level-blocks) (let [sorted-blocks (mapcat (fn [block] (tree/get-sorted-block-and-children repo (:db/id block))) @@ -1831,6 +1837,14 @@ (let [ids (set (map :db/id blocks))] (some? (some #(ids (:db/id (:block/parent %))) blocks)))) +(defn- unrecycle-tx-data + [root] + [[:db/retract (:db/id root) :logseq.property/deleted-at] + [:db/retract (:db/id root) :logseq.property/deleted-by-ref] + [:db/retract (:db/id root) :logseq.property.recycle/original-parent] + [:db/retract (:db/id root) :logseq.property.recycle/original-page] + [:db/retract (:db/id root) :logseq.property.recycle/original-order]]) + (defn paste-blocks "Given a vec of blocks, insert them into the target page. keep-uuid?: if true, keep the uuid provided in the block structure." @@ -1865,6 +1879,13 @@ (or (ldb/get-left-sibling target-block) (:block/parent (db/entity (:db/id target-block)))) target-block) + existing-blocks (keep (fn [block] + (when-let [id (:block/uuid block)] + (db/entity [:block/uuid id]))) + blocks) + move-from-recycle? (and keep-uuid? + (seq existing-blocks) + (every? ldb/recycled? existing-blocks)) sibling? (cond (and paste-nested-blocks? empty-target?) (= (:block/parent target-block') (:block/parent target-block)) @@ -1877,20 +1898,32 @@ :else true) - transact-blocks! #(ui-outliner-tx/transact! - {:outliner-op :insert-blocks - :additional-tx revert-cut-txs} - (when target-block' - (let [format (get target-block' :block/format :markdown) - repo (state/get-current-repo) - blocks' (map (fn [block] - (paste-block-cleanup repo block page exclude-properties format content-update-fn keep-uuid?)) - blocks)] - (outliner-op/insert-blocks! blocks' target-block' {:sibling? sibling? - :outliner-op :paste - :outliner-real-op outliner-real-op - :replace-empty-target? replace-empty-target? - :keep-uuid? keep-uuid?}))))] + transact-blocks! #(if move-from-recycle? + (ui-outliner-tx/transact! + {:outliner-op :move-blocks + :additional-tx revert-cut-txs} + (when target-block' + (let [top-level-blocks (block-handler/get-top-level-blocks existing-blocks) + unrecycle-tx (mapcat unrecycle-tx-data top-level-blocks)] + (when (seq unrecycle-tx) + (outliner-op/transact! unrecycle-tx nil)) + (outliner-op/move-blocks! top-level-blocks target-block' + {:sibling? sibling? + :outliner-op :paste})))) + (ui-outliner-tx/transact! + {:outliner-op :insert-blocks + :additional-tx revert-cut-txs} + (when target-block' + (let [format (get target-block' :block/format :markdown) + repo (state/get-current-repo) + blocks' (map (fn [block] + (paste-block-cleanup repo block page exclude-properties format content-update-fn keep-uuid?)) + blocks)] + (outliner-op/insert-blocks! blocks' target-block' {:sibling? sibling? + :outliner-op :paste + :outliner-real-op outliner-real-op + :replace-empty-target? replace-empty-target? + :keep-uuid? keep-uuid?})))))] (if ops-only? (transact-blocks!) (p/let [_ (when has-unsaved-edits @@ -1950,51 +1983,26 @@ (insert-template! element-id db-id {})) ([element-id db-id {:keys [target] :as opts}] (let [repo (state/get-current-repo)] - (p/let [block (db-async/ (first blocks') - (assoc :logseq.property/used-template (:db/id block))) - (rest blocks'))) - blocks sorted-blocks] + format (get block :block/format :markdown)] (when element-id (insert-command! element-id "" format {:end-pattern commands/command-trigger})) - (let [sibling? (:sibling? opts) - sibling?' (cond - (some? sibling?) - sibling? + (try + (p/let [result (ui-outliner-tx/transact! + {:outliner-op :apply-template + :created-from-journal-template? journal?} + (when-not (string/blank? (state/get-edit-content)) + (save-current-block!)) + (outliner-op/apply-template! db-id target opts))] + (when result (edit-last-block-after-inserted! result))) - (db/has-children? (:block/uuid target)) - false - - :else - true)] - (when (seq blocks) - (try - (p/let [result (ui-outliner-tx/transact! - {:outliner-op :insert-blocks - :created-from-journal-template? journal?} - (when-not (string/blank? (state/get-edit-content)) - (save-current-block!)) - (outliner-op/insert-blocks! blocks target - (assoc opts - :sibling? sibling?' - :insert-template? true)))] - (when result (edit-last-block-after-inserted! result))) - - (catch :default ^js/Error e - (notification/show! - (util/format "Template insert error: %s" (.-message e)) - :error))))))))))) + (catch :default ^js/Error e + (notification/show! + (util/format "Template insert error: %s" (.-message e)) + :error))))))))) (defn template-on-chosen-handler [element-id] @@ -2063,7 +2071,7 @@ input (state/get-input) config (assoc config :keydown-new-block true) content (gobj/get input "value") - has-right? (ldb/get-right-sibling block)] + right-sibling (ldb/get-right-sibling block)] (cond (and (string/blank? content) (own-order-number-list? block) @@ -2073,12 +2081,12 @@ (and (string/blank? content) - (not has-right?) + (not right-sibling) (not (last-top-level-child? config block))) (indent-outdent false) :else - (insert-new-block! state))))))) + (insert-new-block! state right-sibling))))))) (defn- inside-of-single-block "When we are in a single block wrapper, we should always insert a new line instead of new block" @@ -3074,8 +3082,7 @@ (:block/uuid page-entity))) repo (state/get-current-repo) _ (db-async/ UI (defmethod handle :db/sync-changes [[_ data]] diff --git a/src/main/frontend/handler/export/common.cljs b/src/main/frontend/handler/export/common.cljs index 0344ba43f5..dbf2d52c0b 100644 --- a/src/main/frontend/handler/export/common.cljs +++ b/src/main/frontend/handler/export/common.cljs @@ -1,8 +1,5 @@ (ns frontend.handler.export.common - "common fns for exporting. - exclude some fns which produce lazy-seq, which can cause strange behaviors - when use together with dynamic var." - (:refer-clojure :exclude [map filter mapcat concat remove]) + "Common functions for exporting." (:require [clojure.string :as string] [frontend.db.conn :as conn] [frontend.state :as state] diff --git a/src/main/frontend/handler/export/opml.cljs b/src/main/frontend/handler/export/opml.cljs index c96b4950c5..0aabbf9af1 100644 --- a/src/main/frontend/handler/export/opml.cljs +++ b/src/main/frontend/handler/export/opml.cljs @@ -1,6 +1,5 @@ (ns frontend.handler.export.opml "export blocks/pages as opml" - (:refer-clojure :exclude [map filter mapcat concat remove newline]) (:require ["/frontend/utils" :as utils] [clojure.string :as string] [clojure.zip :as z] diff --git a/src/main/frontend/handler/history.cljs b/src/main/frontend/handler/history.cljs index e844648493..b5d7517864 100644 --- a/src/main/frontend/handler/history.cljs +++ b/src/main/frontend/handler/history.cljs @@ -4,7 +4,6 @@ [frontend.handler.route :as route-handler] [frontend.persist-db.browser :as db-browser] [frontend.state :as state] - [frontend.undo-redo :as undo-redo] [frontend.util :as util] [goog.functions :refer [debounce]] [logseq.db :as ldb] @@ -12,12 +11,21 @@ (defn- restore-cursor! [{:keys [editor-cursors block-content undo?]}] - (let [{:keys [block-uuid container-id start-pos end-pos]} (if undo? (first editor-cursors) (or (last editor-cursors) (first editor-cursors))) + (let [cursor (if undo? + (first editor-cursors) + (or (last editor-cursors) (first editor-cursors))) + {:keys [selected-block-uuids selection-direction block-uuid container-id start-pos end-pos]} cursor + selected-blocks (when (seq selected-block-uuids) + (->> selected-block-uuids + (mapcat util/get-blocks-by-id) + vec)) pos (if undo? (or start-pos end-pos) (or end-pos start-pos))] - (when-let [block (db/pull [:block/uuid block-uuid])] - (editor/edit-block! block pos - {:container-id container-id - :custom-content block-content})))) + (if (seq selected-blocks) + (state/exit-editing-and-set-selected-blocks! selected-blocks selection-direction) + (when-let [block (db/pull [:block/uuid block-uuid])] + (editor/edit-block! block pos + {:container-id container-id + :custom-content block-content}))))) (defn- restore-app-state! [state] @@ -52,7 +60,7 @@ (state/set-state! [:editor/last-replace-ref-content-tx repo] nil) (editor/save-current-block!) (state/clear-editor-action!) - (reset! *last-request (undo-redo/undo repo)) + (reset! *last-request (state/ ") + "<" (:id payload) "> " msg) type))) (when-not fake-error? diff --git a/src/main/frontend/handler/repo.cljs b/src/main/frontend/handler/repo.cljs index 6555ff367b..9d3852f4dd 100644 --- a/src/main/frontend/handler/repo.cljs +++ b/src/main/frontend/handler/repo.cljs @@ -1,6 +1,5 @@ (ns frontend.handler.repo "System-component-like ns that manages user's repos/graphs" - (:refer-clojure :exclude [clone]) (:require [clojure.string :as string] [electron.ipc :as ipc] [frontend.config :as config] @@ -17,7 +16,6 @@ [frontend.persist-db :as persist-db] [frontend.search :as search] [frontend.state :as state] - [frontend.undo-redo :as undo-redo] [frontend.util :as util] [frontend.util.text :as text-util] [logseq.db.frontend.schema :as db-schema] @@ -52,10 +50,7 @@ (defn start-repo-db-if-not-exists! [repo & {:as opts}] (state/set-current-repo! repo) - (db/start-db-conn! repo (assoc opts - :db-graph? true - :listen-handler (fn [conn] - (undo-redo/listen-db-changes! repo conn))))) + (db/start-db-conn! repo (assoc opts :db-graph? true))) (defn restore-and-setup-repo! "Restore the db of a graph from the persisted data, and setup. Create a new diff --git a/src/main/frontend/handler/route.cljs b/src/main/frontend/handler/route.cljs index cbe00c1645..be539a5fd8 100644 --- a/src/main/frontend/handler/route.cljs +++ b/src/main/frontend/handler/route.cljs @@ -81,6 +81,7 @@ (and (string? page-name) (not (string/blank? page-name)))) (let [page (db/get-page page-name)] (if (and (not config/dev?) + (not= common-config/recycle-page-name (:block/title page)) (or (and (ldb/hidden? page) (not (ldb/property? page))) (and (ldb/built-in? page) (ldb/private-built-in-page? page)))) (notification/show! "Cannot go to an internal page." :warning) diff --git a/src/main/frontend/handler/user.cljs b/src/main/frontend/handler/user.cljs index b2d4cfa7f1..214814728e 100644 --- a/src/main/frontend/handler/user.cljs +++ b/src/main/frontend/handler/user.cljs @@ -238,6 +238,14 @@ (auto-fill-refresh-token-from-cognito!) (state/pub-event! [:user/fetch-info-and-graphs])) +(defn- clear-e2ee-password! + [] + (when @state/*db-worker + (-> (state/ (or opts {}) + (and (nil? (:deleted-by-uuid opts)) + (user-handler/user-uuid)) + (assoc :deleted-by-uuid (uuid (user-handler/user-uuid))))) (def ^:private ^:dynamic *outliner-ops* "Stores outliner ops that are generated by the following calls" @@ -27,12 +35,18 @@ (let [id (:db/id target-block)] [:insert-blocks [blocks id opts]]))) +(defn apply-template! + [template-id target-block opts] + (op-transact! + (let [id (:db/id target-block)] + [:apply-template [template-id id opts]]))) + (defn delete-blocks! [blocks opts] (op-transact! (let [ids (map :db/id blocks)] (when (seq ids) - [:delete-blocks [ids opts]])))) + [:delete-blocks [ids (current-user-delete-opts opts)]])))) (defn move-blocks! [blocks target-block opts] @@ -144,6 +158,8 @@ [:rename-page [page-uuid new-name]])) (defn delete-page! - [page-uuid] - (op-transact! - [:delete-page [page-uuid]])) + ([page-uuid] + (delete-page! page-uuid {})) + ([page-uuid opts] + (op-transact! + [:delete-page [page-uuid (current-user-delete-opts opts)]]))) diff --git a/src/main/frontend/modules/outliner/pipeline.cljs b/src/main/frontend/modules/outliner/pipeline.cljs index ad8e80789b..2d594c588a 100644 --- a/src/main/frontend/modules/outliner/pipeline.cljs +++ b/src/main/frontend/modules/outliner/pipeline.cljs @@ -23,12 +23,13 @@ (defn invoke-hooks [{:keys [repo tx-meta tx-data deleted-block-uuids deleted-assets affected-keys blocks]}] - ;; (prn :debug - ;; :tx-meta tx-meta - ;; :tx-data tx-data) (let [{:keys [initial-pages? end?]} tx-meta tx-report {:tx-meta tx-meta - :tx-data tx-data}] + :tx-data tx-data} + current-block-id (state/get-current-page) + current-block (when (and current-block-id (util/uuid-string? current-block-id)) + (let [id (uuid current-block-id)] + (db/entity [:block/uuid id])))] (when (= repo (state/get-current-repo)) (when (seq deleted-block-uuids) (let [ids (map (fn [id] (:db/id (db/entity [:block/uuid id]))) deleted-block-uuids)] @@ -68,7 +69,11 @@ tx-data))] (d/transact! conn tx-data' tx-meta)) - (when-not (= (:client-id tx-meta) (:client-id @state/state)) + (when (and current-block (ldb/recycled? (db/entity [:block/uuid (:block/uuid current-block)]))) + (route-handler/redirect! {:to :home :push false})) + + (when (or (not= (:client-id tx-meta) (:client-id @state/state)) + (= :apply-template (:outliner-op tx-meta))) (update-editing-block-title-if-changed! tx-data)) ;; (when (seq deleted-assets) diff --git a/src/main/frontend/modules/shortcut/config.cljs b/src/main/frontend/modules/shortcut/config.cljs index 0a08f4d349..aac16523f7 100644 --- a/src/main/frontend/modules/shortcut/config.cljs +++ b/src/main/frontend/modules/shortcut/config.cljs @@ -508,6 +508,9 @@ :dev/validate-db {:binding [] :inactive (not (state/developer-mode?)) :fn :frontend.handler.common.developer/validate-db} + :dev/recompute-checksum {:binding [] + :inactive (not (state/developer-mode?)) + :fn :frontend.handler.common.developer/recompute-checksum-diagnostics} :dev/rtc-stop {:binding [] :inactive (not (state/developer-mode?)) :fn :frontend.handler.common.developer/rtc-stop} @@ -710,6 +713,7 @@ :dev/show-page-data :dev/replace-graph-with-db-file :dev/validate-db + :dev/recompute-checksum :dev/gc-graph :dev/rtc-stop :dev/rtc-start @@ -873,6 +877,7 @@ :dev/show-page-data :dev/replace-graph-with-db-file :dev/validate-db + :dev/recompute-checksum :dev/gc-graph :dev/rtc-stop :dev/rtc-start diff --git a/src/main/frontend/persist_db/browser.cljs b/src/main/frontend/persist_db/browser.cljs index ebfabd2f1c..456f0cfac5 100644 --- a/src/main/frontend/persist_db/browser.cljs +++ b/src/main/frontend/persist_db/browser.cljs @@ -48,7 +48,9 @@ old-state (f prev) new-state (f current)] (when (not= new-state old-state) - (undo-redo/record-ui-state! (state/get-current-repo) (ldb/write-transit-str {:old-state old-state :new-state new-state})))))))) + (let [repo (state/get-current-repo) + ui-state-str (ldb/write-transit-str {:old-state old-state :new-state new-state})] + (undo-redo/record-ui-state! repo ui-state-str)))))))) (defn transact! [repo tx-data tx-meta] @@ -104,11 +106,6 @@ (reset! state/*infer-worker-port nil) (reset! state/*infer-worker nil)) -(defn stop-workers! - [] - (stop-inference-worker!) - (stop-db-worker!)) - (defn start-db-worker! [] (when-not util/node-test? diff --git a/src/main/frontend/state.cljs b/src/main/frontend/state.cljs index 2298f508fe..56b1002e40 100644 --- a/src/main/frontend/state.cljs +++ b/src/main/frontend/state.cljs @@ -1043,7 +1043,14 @@ Similar to re-frame subscriptions" (set-selection-blocks! blocks nil)) ([blocks direction] (when (seq blocks) - (let [blocks (vec (remove nil? blocks))] + (let [blocks (->> blocks + (remove nil?) + (remove (fn [block] + (when-let [id (some-> block (dom/attr "blockid"))] + (when-let [conn (db-conn-state/get-conn (get-current-repo))] + (when-let [entity (d/entity @conn [:block/uuid (uuid id)])] + (ldb/recycled? entity)))))) + vec)] (set-selection-blocks-aux! blocks) (when direction (set-state! :selection/direction direction)) (let [ids (get-selection-block-ids)] @@ -1652,6 +1659,7 @@ Similar to re-frame subscriptions" (if (and page ;; TODO: Use config/dev? when it's not a circular dep (not goog.DEBUG) + (not= common-config/recycle-page-name (:block/title page)) (or (and (ldb/hidden? page) (not (ldb/property? page))) (and (ldb/built-in? page) (ldb/private-built-in-page? page)))) (pub-event! [:notification/show {:content "Cannot open an internal page." :status :warning}]) @@ -2036,11 +2044,18 @@ Similar to re-frame subscriptions" (defn get-editor-info [] - (when-let [edit-block (get-edit-block)] - {:block-uuid (:block/uuid edit-block) - :container-id (or @(:editor/container-id @state) :unknown-container) - :start-pos @(:editor/start-pos @state) - :end-pos (get-edit-pos)})) + (let [selected-block-uuids (some-> (get-selection-block-ids) seq vec) + selection-info (when selected-block-uuids + {:selected-block-uuids selected-block-uuids + :selection-direction (get-selection-direction)})] + (if-let [edit-block (get-edit-block)] + (cond-> {:block-uuid (:block/uuid edit-block) + :container-id (or @(:editor/container-id @state) :unknown-container) + :start-pos @(:editor/start-pos @state) + :end-pos (get-edit-pos)} + selection-info + (merge selection-info)) + selection-info))) (defn conj-block-ref! [ref-entity] diff --git a/src/main/frontend/ui.cljs b/src/main/frontend/ui.cljs index 647f1e4e58..28c4e1e5d8 100644 --- a/src/main/frontend/ui.cljs +++ b/src/main/frontend/ui.cljs @@ -953,7 +953,6 @@ "" :icon "h-auto" :disabled? (and (some? heading) (true? heading)) - :icon-props {:extension? true} :class "to-heading-button" :title (t :auto-heading) :on-click auto-heading-fn @@ -963,7 +962,6 @@ "" :icon "heading-off" :disabled? (and (some? heading) (not heading)) - :icon-props {:extension? true} :class "to-heading-button" :title (t :remove-heading) :on-click rm-heading-fn diff --git a/src/main/frontend/ui.css b/src/main/frontend/ui.css index dd18ed0f90..861cb32e99 100644 --- a/src/main/frontend/ui.css +++ b/src/main/frontend/ui.css @@ -66,8 +66,8 @@ .notification-area { @apply border; - background-color: or(--ls-notification-background, --lx-gray-02, --ls-tertiary-background-color, --rx-gray-03); - color: or(--ls-notification-text-color, --lx-gray-11, --ls-primary-text-color, --rx-gray-11); + background-color: var(--ls-notification-background, var(--lx-gray-02, var(--ls-tertiary-background-color, var(--rx-gray-03)))); + color: var(--ls-notification-text-color, var(--lx-gray-11, var(--ls-primary-text-color, var(--rx-gray-11)))); &:has(.ls-wrap-widen) { @apply w-[680px] max-w-[96vw]; @@ -106,8 +106,8 @@ } &-overlay div { - --from: or(--ls-modal-overlay-gradient-start, --lx-gray-03, --ls-primary-background-color); - --to: or(--ls-modal-overlay-gradient-end, --lx-gray-06, --ls-quaternary-background-color); + --from: var(--ls-modal-overlay-gradient-start, var(--lx-gray-03, var(--ls-primary-background-color))); + --to: var(--ls-modal-overlay-gradient-end, var(--lx-gray-06, var(--ls-quaternary-background-color))); background-image: linear-gradient(to bottom, var(--from), var(--to)); } @@ -268,7 +268,7 @@ html.is-mobile { } .bg-quaternary { - background-color: or(--ls-bg-quaternary, --lx-gray-06, --ls-quaternary-background-color); + background-color: var(--ls-bg-quaternary, var(--lx-gray-06, var(--ls-quaternary-background-color))); } .ui__icon { diff --git a/src/main/frontend/undo_redo.cljs b/src/main/frontend/undo_redo.cljs index 0f102be100..e404b20e53 100644 --- a/src/main/frontend/undo_redo.cljs +++ b/src/main/frontend/undo_redo.cljs @@ -1,459 +1,69 @@ (ns frontend.undo-redo - "Undo redo new implementation" - (:require [clojure.set :as set] - [datascript.core :as d] - [frontend.db :as db] - [frontend.state :as state] - [frontend.util :as util] - [lambdaisland.glogi :as log] - [logseq.common.defkeywords :refer [defkeywords]] - [logseq.db :as ldb] - [malli.core :as m] - [malli.util :as mu] - [promesa.core :as p])) + "Main-thread proxy for worker-owned undo/redo." + (:require [frontend.state :as state] + [frontend.util :as util])) -(defkeywords - ::record-editor-info {:doc "record current editor and cursor"} - ::db-transact {:doc "db tx"} - ::ui-state {:doc "ui state such as route && sidebar blocks"}) +(defn- worker-not-initialized? + [e] + (= "db-worker has not been initialized" (ex-message e))) -;; TODO: add other UI states such as `::ui-updates`. -(comment - ;; TODO: convert it to a qualified-keyword - (sr/defkeyword :gen-undo-ops? - "tx-meta option, generate undo ops from tx-data when true (default true)")) +(defn- normalize-empty-result + [result] + (case result + :frontend.worker.undo-redo/empty-undo-stack + :frontend.undo-redo/empty-undo-stack -(def ^:private undo-op-item-schema - (mu/closed-schema - [:multi {:dispatch first} - [::db-transact - [:cat :keyword - [:map - [:tx-data [:sequential [:fn - {:error/message "should be a Datom"} - d/datom?]]] - [:tx-meta [:map {:closed false} - [:outliner-op :keyword]]] - [:added-ids [:set :int]] - [:retracted-ids [:set :int]]]]] + :frontend.worker.undo-redo/empty-redo-stack + :frontend.undo-redo/empty-redo-stack - [::record-editor-info - [:cat :keyword - [:map - [:block-uuid :uuid] - [:container-id [:or :int [:enum :unknown-container]]] - [:start-pos [:maybe :int]] - [:end-pos [:maybe :int]]]]] + result)) - [::ui-state - [:cat :keyword :string]]])) - -(def ^:private undo-op-validator (m/validator [:sequential undo-op-item-schema])) - -(defonce max-stack-length 100) -(defonce *undo-ops (atom {})) -(defonce *redo-ops (atom {})) +(defn- invoke-db-worker + [thread-api & args] + (try + (apply state/= (count result) max-stack-length) - (subvec result 0 (/ max-stack-length 2)) - result))) - -(defn- pop-stack - [stack] - (when (seq stack) - [(last stack) (pop stack)])) - -(defn- push-undo-op - [repo op] - (assert (undo-op-validator op) {:op op}) - (swap! *undo-ops update repo conj-op op)) - -(defn- push-redo-op - [repo op] - (assert (undo-op-validator op) {:op op}) - (swap! *redo-ops update repo conj-op op)) - -(comment - ;; This version checks updated datoms by other clients, allows undo and redo back - ;; to the current state. - ;; The downside is that it'll undo the changes made by others. - (defn- pop-undo-op - [repo conn] - (let [undo-stack (get @*undo-ops repo) - [op undo-stack*] (pop-stack undo-stack)] - (swap! *undo-ops assoc repo undo-stack*) - (mapv (fn [item] - (if (= (first item) ::db-transact) - (let [m (second item) - tx-data' (mapv - (fn [{:keys [e a v tx add] :as datom}] - (let [one-value? (= :db.cardinality/one (:db/cardinality (d/entity @conn a))) - new-value (when (and one-value? add) (get (d/entity @conn e) a)) - value-not-matched? (and (some? new-value) (not= v new-value))] - (if value-not-matched? - ;; another client might updated `new-value`, the datom below will be used - ;; to restore the the current state when redo this undo. - (d/datom e a new-value tx add) - datom))) - (:tx-data m))] - [::db-transact (assoc m :tx-data tx-data')]) - item)) - op)))) - -(defn- pop-undo-op - [repo] - (let [undo-stack (get @*undo-ops repo) - [op undo-stack*] (pop-stack undo-stack)] - (swap! *undo-ops assoc repo undo-stack*) - (let [op' (mapv (fn [item] - (if (= (first item) ::db-transact) - (let [m (second item) - tx-data' (vec (:tx-data m))] - (if (seq tx-data') - [::db-transact (assoc m :tx-data tx-data')] - ::db-transact-no-tx-data)) - item)) - op)] - (when-not (some #{::db-transact-no-tx-data} op') - op')))) - -(defn- pop-redo-op - [repo] - (let [redo-stack (get @*redo-ops repo) - [op redo-stack*] (pop-stack redo-stack)] - (swap! *redo-ops assoc repo redo-stack*) - (let [op' (mapv (fn [item] - (if (= (first item) ::db-transact) - (let [m (second item) - tx-data' (vec (:tx-data m))] - (if (seq tx-data') - [::db-transact (assoc m :tx-data tx-data')] - ::db-transact-no-tx-data)) - item)) - op)] - (when-not (some #{::db-transact-no-tx-data} op') - op')))) - -(defn- empty-undo-stack? - [repo] - (empty? (get @*undo-ops repo))) - -(defn- empty-redo-stack? - [repo] - (empty? (get @*redo-ops repo))) - -(defn- get-moved-blocks - [e->datoms] - (->> - (keep (fn [[e datoms]] - (when (some - (fn [k] - (and (some (fn [d] (and (= k (:a d)) (:added d))) datoms) - (some (fn [d] (and (= k (:a d)) (not (:added d)))) datoms))) - [:block/parent :block/order]) - e)) e->datoms) - (set))) - -(defn- other-children-exist? - "return true if there are other children existing(not included in `ids`)" - [entity ids] - (seq - (set/difference - (set (map :db/id (:block/_parent entity))) - ids))) - -(defn- reverse-datoms - [conn datoms schema added-ids retracted-ids undo? redo?] - (keep - (fn [[e a v _tx add?]] - (let [ref? (= :db.type/ref (get-in schema [a :db/valueType])) - op (if (or (and redo? add?) (and undo? (not add?))) - :db/add - :db/retract)] - (when (or (not ref?) - (d/entity @conn v) - (and (retracted-ids v) undo?) - (and (added-ids v) redo?)) ; entity exists - [op e a v]))) - datoms)) - -(defn- block-moved-and-target-deleted? - [conn e->datoms e moved-blocks tx-data] - (let [datoms (get e->datoms e)] - (and (moved-blocks e) - (let [b (d/entity @conn e) - cur-parent (:db/id (:block/parent b)) - move-datoms (filter (fn [d] (contains? #{:block/parent} (:a d))) datoms)] - (when cur-parent - (let [before-parent (some (fn [d] (when (and (= :block/parent (:a d)) (not (:added d))) (:v d))) move-datoms) - not-exists-in-current-db (nil? (d/entity @conn before-parent)) - ;; reverse tx-data will add parent before back - removed-before-parent (some (fn [d] (and (= :block/uuid (:a d)) - (= before-parent (:e d)) - (not (:added d)))) tx-data)] - (and before-parent - not-exists-in-current-db - (not removed-before-parent)))))))) - -(defn- tx-added-attrs - [tx-data] - (reduce (fn [acc [op e a v]] - (if (= :db/add op) - (update acc e assoc a v) - acc)) - {} - tx-data)) - -(defn- entity-exists-or-added? - [conn added-attrs id] - (or (contains? added-attrs id) - (some? (d/entity @conn id)))) - -(defn- assert-reversed-tx-safe! - [conn reversed-tx-data] - (let [added-attrs (tx-added-attrs reversed-tx-data) - ops-by-entity (group-by second reversed-tx-data)] - (doseq [[e ops] ops-by-entity] - (let [retract-entity? (some #(= :db/retractEntity (first %)) ops) - retract-parent? (some #(and (= :db/retract (first %)) - (= :block/parent (nth % 2))) - ops) - add-parent? (some #(and (= :db/add (first %)) - (= :block/parent (nth % 2))) - ops) - retract-page? (some #(and (= :db/retract (first %)) - (= :block/page (nth % 2))) - ops) - add-page? (some #(and (= :db/add (first %)) - (= :block/page (nth % 2))) - ops)] - ;; Moving blocks must not leave entities without parent/page refs. - (when (and (not retract-entity?) - retract-parent? - (not add-parent?)) - (throw (ex-info "Reversed tx retracts parent without replacement" - {:error :block-moved-or-target-deleted - :entity-id e - :ops ops}))) - (when (and (not retract-entity?) - retract-page? - (not add-page?)) - (throw (ex-info "Reversed tx retracts page without replacement" - {:error :block-moved-or-target-deleted - :entity-id e - :ops ops}))))) - (doseq [[e attrs] added-attrs] - (let [existing (d/entity @conn e) - new-entity? (nil? existing) - page? (or (:block/name attrs) (:block/name existing)) - parent (:block/parent attrs) - page (:block/page attrs)] - ;; Redoing a block creation must restore parent/page refs. - (when (and new-entity? - (not page?) - (not (contains? attrs :block/uuid))) - (throw (ex-info "Missing block identity in reversed tx" - {:error :block-moved-or-target-deleted - :entity-id e - :attrs attrs}))) - - (when (and new-entity? - (contains? attrs :block/uuid) - (not page?) - (nil? parent)) - (throw (ex-info "Missing block parent in reversed tx" - {:error :block-parent-missing - :entity-id e - :attrs attrs}))) - - (when (and parent - (not (entity-exists-or-added? conn added-attrs parent))) - (throw (ex-info "Parent deleted in reversed tx" - {:error :block-moved-or-target-deleted - :entity-id e - :parent-id parent - :attrs attrs}))) - - (when (and page - (not (entity-exists-or-added? conn added-attrs page))) - (throw (ex-info "Page deleted in reversed tx" - {:error :block-moved-or-target-deleted - :entity-id e - :page-id page - :attrs attrs}))))))) - -(defn get-reversed-datoms - [conn undo? {:keys [tx-data added-ids retracted-ids] :as op} _tx-meta] - (try - (let [redo? (not undo?) - e->datoms (->> (if redo? tx-data (reverse tx-data)) - (group-by :e)) - schema (:schema @conn) - moved-blocks (get-moved-blocks e->datoms) - reversed-tx-data (->> (mapcat - (fn [[e datoms]] - (let [entity (d/entity @conn e)] - (cond - ;; New children may have been added after the original op. - (or (and (contains? retracted-ids e) redo? - (other-children-exist? entity retracted-ids)) ; redo delete-blocks - (and (contains? added-ids e) undo? - (other-children-exist? entity added-ids))) ; undo insert-blocks - (throw (ex-info "Children still exists" - (merge op {:error :block-children-exists - :undo? undo?}))) - - ;; Block has moved or target got deleted. - (block-moved-and-target-deleted? conn e->datoms e moved-blocks tx-data) - (throw (ex-info "This block has been moved or its target has been deleted" - (merge op {:error :block-moved-or-target-deleted - :undo? undo?}))) - - ;; Delete entity instead of retracting attrs one-by-one. - (and entity - (or (and (contains? retracted-ids e) redo?) ; redo delete-blocks - (and (contains? added-ids e) undo?))) ; undo insert-blocks - [[:db/retractEntity e]] - - :else - (reverse-datoms conn datoms schema added-ids retracted-ids undo? redo?)))) - e->datoms) - (remove nil?))] - (assert-reversed-tx-safe! conn reversed-tx-data) - reversed-tx-data) - (catch :default e - (when-not (contains? #{:block-moved-or-target-deleted - :block-children-exists - :block-parent-missing} - (:error (ex-data e))) - (throw e))))) - -(defn- undo-redo-aux - [repo undo?] - (if-let [op (not-empty ((if undo? pop-undo-op pop-redo-op) repo))] - (let [conn (db/get-db repo false)] - (cond - (= ::ui-state (ffirst op)) - (do - ((if undo? push-redo-op push-undo-op) repo op) - (let [ui-state-str (second (first op))] - {:undo? undo? - :ui-state-str ui-state-str})) - - :else - (let [{:keys [tx-data tx-meta] :as data} (some #(when (= ::db-transact (first %)) - (second %)) op)] - (when (seq tx-data) - (let [reversed-tx-data (cond-> (get-reversed-datoms conn undo? data tx-meta) - undo? - reverse) - tx-meta' (-> tx-meta - (dissoc :batch-tx/batch-tx-mode?) - (assoc - :gen-undo-ops? false - :undo? undo? - :redo? (not undo?))) - handler (fn handler [] - ((if undo? push-redo-op push-undo-op) repo op) - (let [editor-cursors (->> (filter #(= ::record-editor-info (first %)) op) - (map second)) - block-content (:block/title (d/entity @conn [:block/uuid (:block-uuid - (if undo? - (first editor-cursors) - (last editor-cursors)))]))] - {:undo? undo? - :editor-cursors editor-cursors - :block-content block-content}))] - (if (seq reversed-tx-data) - (if util/node-test? - (try - (ldb/transact! conn reversed-tx-data tx-meta') - (handler) - (catch :default e - (log/error ::undo-redo-failed e) - (clear-history! repo) - (if undo? ::empty-undo-stack ::empty-redo-stack))) - (-> - (p/do! - ;; async write to the master worker - (ldb/transact! repo reversed-tx-data tx-meta') - (handler)) - (p/catch (fn [e] - (log/error ::undo-redo-failed e) - (clear-history! repo))))) - (do - (log/warn ::undo-redo-skip-conflicted-op - {:undo? undo? - :outliner-op (:outliner-op tx-meta)}) - (undo-redo-aux repo undo?)))))))) - - (when ((if undo? empty-undo-stack? empty-redo-stack?) repo) - (if undo? ::empty-undo-stack ::empty-redo-stack)))) + (if util/node-test? + nil + (invoke-db-worker :thread-api/undo-redo-clear-history repo))) (defn undo [repo] - (undo-redo-aux repo true)) + (if util/node-test? + :frontend.undo-redo/empty-undo-stack + (or (some-> (invoke-db-worker :thread-api/undo-redo-undo repo) + normalize-empty-result) + :frontend.undo-redo/empty-undo-stack))) (defn redo [repo] - (undo-redo-aux repo false)) + (if util/node-test? + :frontend.undo-redo/empty-redo-stack + (or (some-> (invoke-db-worker :thread-api/undo-redo-redo repo) + normalize-empty-result) + :frontend.undo-redo/empty-redo-stack))) (defn record-editor-info! [repo editor-info] - (swap! *undo-ops - update repo - (fn [stack] - (if (seq stack) - (update stack (dec (count stack)) - (fn [op] - (conj (vec op) [::record-editor-info editor-info]))) - stack)))) + (when editor-info + (if util/node-test? + nil + (invoke-db-worker :thread-api/undo-redo-record-editor-info repo editor-info)))) (defn record-ui-state! [repo ui-state-str] (when ui-state-str - (push-undo-op repo [[::ui-state ui-state-str]]))) + (if util/node-test? + nil + (invoke-db-worker :thread-api/undo-redo-record-ui-state repo ui-state-str)))) -(defn gen-undo-ops! - [repo {:keys [tx-data tx-meta db-after db-before]}] - (let [{:keys [outliner-op local-tx?]} tx-meta] - (when (and - (= (:client-id tx-meta) (:client-id @state/state)) - local-tx? - outliner-op - (not (false? (:gen-undo-ops? tx-meta))) - (not (:create-today-journal? tx-meta))) - (let [all-ids (distinct (map :e tx-data)) - retracted-ids (set - (filter - (fn [id] (and (nil? (d/entity db-after id)) (d/entity db-before id))) - all-ids)) - added-ids (set - (filter - (fn [id] (and (nil? (d/entity db-before id)) (d/entity db-after id))) - all-ids)) - tx-data' (vec tx-data) - editor-info @state/*editor-info - _ (reset! state/*editor-info nil) - op (->> [(when editor-info [::record-editor-info editor-info]) - [::db-transact - {:tx-data tx-data' - :tx-meta tx-meta - :added-ids added-ids - :retracted-ids retracted-ids}]] - (remove nil?) - vec)] - (push-undo-op repo op))))) - -(defn listen-db-changes! - [repo conn] - (d/listen! conn ::gen-undo-ops - (fn [tx-report] (gen-undo-ops! repo tx-report)))) +(defn > entry' + (keep (fn [item] + (cond + (keyword? item) (name item) + (and (vector? item) (keyword? (first item))) (name (first item)) + :else nil))) + first + (or "entry")))) + +(def ^:private ui-entry-tags + #{::undo-redo/ui-state + ::undo-redo/record-editor-info + :frontend.worker.undo-redo/ui-state + :frontend.worker.undo-redo/record-editor-info}) + +(defn- ui-entry-item? + [item] + (and (vector? item) + (contains? ui-entry-tags (first item)))) + +(defn- filter-ui-items + [entry] + (if (vector? entry) + (->> entry + (remove ui-entry-item?) + vec) + entry)) + +(defn- empty-filtered-entry? + [entry] + (and (vector? entry) + (empty? entry))) + +(rum/defc payload-entry + [expanded?* id entry] + (let [expanded? (contains? @expanded?* id)] + [:div.rounded-md.border.p-2 + [:button.flex.w-full.items-center.justify-between.text-left + {:aria-expanded expanded? + :on-click (fn [_] + (swap! expanded?* + (fn [expanded] + (if (contains? expanded id) + (disj expanded id) + (conj expanded id)))))} + [:span.text-sm.font-medium (entry-title entry)] + [:span.opacity-60 (ui/rotating-arrow (not expanded?))]] + (when expanded? + [:pre.select-text.mt-2.text-xs.overflow-auto + (-> (strip-tx-data entry) + (fipp/pprint {:width 60}) + with-out-str)])])) + +(rum/defc payload-stack + [expanded?* label entries] + [:div.flex.flex-col.gap-2 + [:div.text-sm.font-medium label] + (if (seq entries) + (for [[idx entry] (map-indexed vector (reverse entries))] + (rum/with-key + (payload-entry expanded?* (str label "-" idx) entry) + (str label "-" idx))) + [:div.text-sm.opacity-50 "Empty"])]) + +(rum/defcs undo-redo-debug-ui < rum/reactive + (rum/local #{} ::expanded) + (rum/local false ::filter-ui-state?) + (rum/local nil ::history) + [state] + (let [repo (state/sub :git/current-repo) + history* (::history state) + _ (rum/react history*) + refresh! (fn [] + (when repo + (-> (undo-redo/> stack + (map filter-ui-items) + (remove empty-filtered-entry?)) + stack)) + undo-stack' (filter-stack undo-stack) + redo-stack' (filter-stack redo-stack)] + [:div.flex.flex-col.gap-3 + [:div.flex.gap-2.flex-wrap.items-center + (shui/button + {:size :sm + :disabled (or (nil? repo) (empty? undo-stack)) + :on-click (fn [e] + (history-handler/undo! e) + (js/setTimeout refresh! 0))} + (shui/tabler-icon "arrow-back-up") "undo") + (shui/button + {:size :sm + :disabled (or (nil? repo) (empty? redo-stack)) + :on-click (fn [e] + (history-handler/redo! e) + (js/setTimeout refresh! 0))} + (shui/tabler-icon "arrow-forward-up") "redo") + (shui/button + {:size :sm + :variant :outline + :disabled (nil? repo) + :on-click (fn [_] + (undo-redo/clear-history! repo) + (js/setTimeout refresh! 0))} + (shui/tabler-icon "trash") "clear-history") + (shui/button + {:size :sm + :variant :outline + :disabled (nil? repo) + :on-click (fn [_] (refresh!))} + (shui/tabler-icon "refresh") "refresh") + (shui/button + {:size :sm + :variant (if filter-ui-state? :default :outline) + :on-click (fn [_] + (swap! filter-ui-state?* not))} + (shui/tabler-icon "filter") "filter-ui-entry-global")] + + [:div.text-sm.opacity-70 + (str "undo=" (count undo-stack') + (when filter-ui-state? + (str "/" (count undo-stack))) + " redo=" (count redo-stack') + (when filter-ui-state? + (str "/" (count redo-stack))))] + + (payload-stack expanded?* "Undo" undo-stack') + (payload-stack expanded?* "Redo" redo-stack')])) diff --git a/src/main/frontend/util.cljc b/src/main/frontend/util.cljc index abea74df6a..b1b43fcf3f 100644 --- a/src/main/frontend/util.cljc +++ b/src/main/frontend/util.cljc @@ -7,7 +7,6 @@ ["@capacitor/clipboard" :as CapacitorClipboard] ["@capacitor/core" :refer [Capacitor]] ["@capacitor/status-bar" :refer [^js StatusBar Style]] - ["grapheme-splitter" :as GraphemeSplitter] ["path-complete-extname" :as pathCompleteExtname] ["semver" :as semver] [cljs-bean.core :as bean] @@ -336,11 +335,22 @@ (when input (.-selectionDirection input))) +#?(:cljs + (defonce ^:private ^js grapheme-segmenter + (when (gobj/getValueByKeys js/globalThis "Intl" "Segmenter") + (js/Intl.Segmenter. "und" #js {:granularity "grapheme"})))) + +#?(:cljs + (defn- split-grapheme-clusters + [s] + (if grapheme-segmenter + (mapv #(.-segment ^js %) (js/Array.from (.segment grapheme-segmenter s))) + (vec (js/Array.from s))))) + #?(:cljs (defn split-graphemes [s] - (let [^js splitter (GraphemeSplitter.)] - (.splitGraphemes splitter s)))) + (split-grapheme-clusters s))) #?(:cljs (defn get-graphemes-pos @@ -348,8 +358,7 @@ multi-char count as 1, like emoji characters" [s from-index] - (let [^js splitter (GraphemeSplitter.)] - (.countGraphemes splitter (subs s 0 from-index))))) + (count (split-grapheme-clusters (subs s 0 from-index))))) #?(:cljs (defn get-line-pos @@ -358,11 +367,10 @@ multi-char count as 1, like emoji characters" [s from-newline-index] - (let [^js splitter (GraphemeSplitter.) - last-newline-pos (string/last-index-of s \newline (dec from-newline-index)) + (let [last-newline-pos (string/last-index-of s \newline (dec from-newline-index)) before-last-newline-length (or last-newline-pos -1) last-newline-content (subs s (inc before-last-newline-length) from-newline-index)] - (.countGraphemes splitter last-newline-content)))) + (count (split-grapheme-clusters last-newline-content))))) #?(:cljs (defn stop [e] @@ -595,9 +603,9 @@ (if-let [input (and (>= len 2) (<= current-pos len) (.substring input (max (- current-pos 20) 0) current-pos))] (try - (let [^js splitter (GraphemeSplitter.) - ^js input' (.splitGraphemes splitter input)] - (- current-pos (.-length (.pop input')))) + (if-let [last-grapheme (peek (split-grapheme-clusters input))] + (- current-pos (.-length last-grapheme)) + (dec current-pos)) (catch :default e (js/console.error e) (dec current-pos))) @@ -612,9 +620,9 @@ (if-let [input (and (>= len 2) (<= current-pos len) (.substr input current-pos 20))] (try - (let [^js splitter (GraphemeSplitter.) - ^js input (.splitGraphemes splitter input)] - (+ current-pos (.-length (.shift input)))) + (if-let [first-grapheme (first (split-grapheme-clusters input))] + (+ current-pos (.-length first-grapheme)) + (inc current-pos)) (catch :default e (js/console.error e) (inc current-pos))) @@ -757,6 +765,7 @@ (defn react [ref] (when ref + #_{:clj-kondo/ignore [:private-call]} (if rum/*reactions* (rum/react ref) @ref)))) diff --git a/src/main/frontend/worker/db/migrate.cljs b/src/main/frontend/worker/db/migrate.cljs index 83a0233c9f..563a655e28 100644 --- a/src/main/frontend/worker/db/migrate.cljs +++ b/src/main/frontend/worker/db/migrate.cljs @@ -76,7 +76,12 @@ ["65.21" {:properties [:logseq.property.sync/large-title-object]}] ["65.22" {:properties [:logseq.property.reaction/emoji-id :logseq.property.reaction/target]}] - ["65.23" {:properties [:logseq.property.asset/align]}]]) + ["65.23" {:properties [:logseq.property.asset/align]}] + ["65.24" {:properties [:logseq.property/deleted-at + :logseq.property/deleted-by-ref + :logseq.property.recycle/original-parent + :logseq.property.recycle/original-page + :logseq.property.recycle/original-order]}]]) (let [[major minor] (last (sort (map (comp (juxt :major :minor) db-schema/parse-schema-version first) schema-version->updates)))] diff --git a/src/main/frontend/worker/db/validate.cljs b/src/main/frontend/worker/db/validate.cljs index 38291ff504..5dfc818d6e 100644 --- a/src/main/frontend/worker/db/validate.cljs +++ b/src/main/frontend/worker/db/validate.cljs @@ -6,6 +6,7 @@ [frontend.worker.db.migrate :as db-migrate] [frontend.worker.shared-service :as shared-service] [logseq.db :as ldb] + [logseq.db-sync.checksum :as sync-checksum] [logseq.db.frontend.class :as db-class] [logseq.db.frontend.validate :as db-validate])) @@ -220,7 +221,7 @@ {:fix-db? true}))) (defn validate-db - [conn {:keys [fix] :or {fix true}}] + [conn & {:keys [fix] :or {fix true}}] (when fix (fix-extends-cardinality! conn) (fix-icon-wrong-type! conn) @@ -229,7 +230,7 @@ (fix-num-prefix-db-idents! conn)) (let [db @conn - {:keys [errors datom-count entities]} (db-validate/validate-db! db) + {:keys [errors datom-count entities]} (db-validate/validate-db db) invalid-entity-ids (distinct (map (fn [e] (:db/id (:entity e))) errors))] (doseq [error errors] @@ -256,3 +257,13 @@ {:errors errors :datom-count datom-count :invalid-entity-ids invalid-entity-ids})) + +(defn recompute-checksum-diagnostics + [_repo conn {:keys [local-checksum remote-checksum] :as _sync-diagnostics}] + (let [{:keys [checksum attrs blocks e2ee?]} (sync-checksum/recompute-checksum-diagnostics @conn)] + {:recomputed-checksum checksum + :local-checksum local-checksum + :remote-checksum remote-checksum + :e2ee? e2ee? + :checksum-attrs attrs + :blocks blocks})) diff --git a/src/main/frontend/worker/db_core.cljs b/src/main/frontend/worker/db_core.cljs index d866fcb4ba..c2d259d46a 100644 --- a/src/main/frontend/worker/db_core.cljs +++ b/src/main/frontend/worker/db_core.cljs @@ -1,60 +1,59 @@ (ns frontend.worker.db-core "Core db-worker logic without host-specific bootstrap." - (:require [cljs-bean.core :as bean] - [cljs.cache :as cache] - [clojure.set] - [clojure.string :as string] - [datascript.core :as d] - [datascript.storage :refer [IStorage] :as storage] - [frontend.common.cache :as common.cache] - [frontend.common.graph-view :as graph-view] - [frontend.common.missionary :as c.m] - [frontend.common.thread-api :as thread-api :refer [def-thread-api]] - [frontend.worker-common.util :as worker-util] - [frontend.worker.db-listener :as db-listener] - [frontend.worker.db.fix :as db-fix] - [frontend.worker.db.migrate :as db-migrate] - [frontend.worker.db.validate :as worker-db-validate] - [frontend.worker.embedding :as embedding] - [frontend.worker.export :as worker-export] - [frontend.worker.handler.page :as worker-page] - [frontend.worker.pipeline :as worker-pipeline] - [frontend.worker.platform :as platform] - [frontend.worker.publish] - [frontend.worker.search :as search] - [frontend.worker.shared-service :as shared-service] - [frontend.worker.state :as worker-state] - [frontend.worker.sync :as db-sync] - [frontend.worker.sync.client-op :as client-op] - [frontend.worker.sync.crypt :as sync-crypt] - [frontend.worker.sync.log-and-state :as sync-log-and-state] - [frontend.worker.thread-atom] - [lambdaisland.glogi :as log] - [logseq.cli.common.db-worker :as cli-db-worker] - [logseq.cli.common.mcp.tools :as cli-common-mcp-tools] - [logseq.common.graph-dir :as graph-dir] - [logseq.common.util :as common-util] - [logseq.db :as ldb] - [logseq.db-sync.snapshot :as snapshot] - [logseq.db.common.entity-plus :as entity-plus] - [logseq.db.common.initial-data :as common-initial-data] - [logseq.db.common.order :as db-order] - [logseq.db.common.reference :as db-reference] - [logseq.db.common.sqlite :as common-sqlite] - [logseq.db.common.view :as db-view] - [logseq.db.frontend.class :as db-class] - [logseq.db.frontend.entity-util :as entity-util] - [logseq.db.frontend.property :as db-property] - [logseq.db.frontend.schema :as db-schema] - [logseq.db.sqlite.create-graph :as sqlite-create-graph] - [logseq.db.sqlite.export :as sqlite-export] - [logseq.db.sqlite.gc :as sqlite-gc] - [logseq.db.sqlite.util :as sqlite-util] - [logseq.outliner.core :as outliner-core] - [logseq.outliner.op :as outliner-op] - [me.tonsky.persistent-sorted-set :as set :refer [BTSet]] - [missionary.core :as m] - [promesa.core :as p])) + (:require + [cljs-bean.core :as bean] + [cljs.cache :as cache] + [clojure.set] + [clojure.string :as string] + [datascript.core :as d] + [datascript.storage :refer [IStorage] :as storage] + [frontend.common.cache :as common.cache] + [frontend.common.graph-view :as graph-view] + [frontend.common.missionary :as c.m] + [frontend.common.thread-api :as thread-api :refer [def-thread-api]] + [frontend.worker-common.util :as worker-util] + [frontend.worker.db-listener :as db-listener] + [frontend.worker.db.fix :as db-fix] + [frontend.worker.db.migrate :as db-migrate] + [frontend.worker.db.validate :as worker-db-validate] + [frontend.worker.embedding :as embedding] + [frontend.worker.export :as worker-export] + [frontend.worker.pipeline :as worker-pipeline] + [frontend.worker.platform :as platform] + [frontend.worker.publish] + [frontend.worker.search :as search] + [frontend.worker.shared-service :as shared-service] + [frontend.worker.state :as worker-state] + [frontend.worker.sync :as db-sync] + [frontend.worker.sync.client-op :as client-op] + [frontend.worker.sync.crypt :as sync-crypt] + [frontend.worker.sync.log-and-state :as rtc-log-and-state] + [frontend.worker.thread-atom] + [frontend.worker.undo-redo :as worker-undo-redo] + [goog.functions :as gfun] + [lambdaisland.glogi :as log] + [logseq.cli.common.db-worker :as cli-db-worker] + [logseq.cli.common.mcp.tools :as cli-common-mcp-tools] + [logseq.common.graph-dir :as graph-dir] + [logseq.common.util :as common-util] + [logseq.db :as ldb] + [logseq.db.common.initial-data :as common-initial-data] + [logseq.db.common.order :as db-order] + [logseq.db.common.reference :as db-reference] + [logseq.db.common.sqlite :as common-sqlite] + [logseq.db.common.view :as db-view] + [logseq.db.frontend.class :as db-class] + [logseq.db.frontend.entity-util :as entity-util] + [logseq.db.frontend.schema :as db-schema] + [logseq.db.sqlite.create-graph :as sqlite-create-graph] + [logseq.db.sqlite.export :as sqlite-export] + [logseq.db.sqlite.gc :as sqlite-gc] + [logseq.db.sqlite.util :as sqlite-util] + [logseq.outliner.op :as outliner-op] + [logseq.outliner.recycle :as outliner-recycle] + [me.tonsky.persistent-sorted-set :as set :refer [BTSet]] + [missionary.core :as m] + [promesa.core :as p])) (defonce *sqlite worker-state/*sqlite) (defonce *sqlite-conns worker-state/*sqlite-conns) @@ -63,9 +62,23 @@ (defonce *opfs-pools worker-state/*opfs-pools) (defonce *publishing? (atom false)) (defonce ^:private *node-pools (atom {})) +;; Chunked import state - held between prepare/chunk/finalize calls (defonce ^:private *import-state (atom nil)) -(def ^:private db-sync-import-batch-size 10000) +(def search-db-version + "Current search index version, stored in PRAGMA user_version. + Bump to force a rebuild when the index format changes." + 1) +(def ^:private recycle-gc-kv :logseq.kv/recycle-last-gc-at) + +(def ^:private search-index-build-batch-size 200) +(def ^:private search-index-build-time-budget-ms 8) +(def ^:private search-index-build-idle-diff-ms 1000) +(def ^:private search-index-build-pause-ms 300) +(defonce ^:private *search-index-build-ids (atom {})) +(defonce ^:private *client-ops-cleanup-timers (atom {})) +(def ^:private client-ops-cleanup-interval-ms (* 3 60 60 1000)) + (defn- node-runtime? [] @@ -147,28 +160,6 @@ (.exec tx #js {:sql "INSERT INTO kvs (addr, content, addresses) values ($addr, $content, $addresses) on conflict(addr) do update set content = $content, addresses = $addresses" :bind item}))))) -(defn- rows->sqlite-binds - [rows] - (mapv (fn [[addr content addresses]] - #js {:$addr addr - :$content content - :$addresses addresses}) - rows)) - -(defn- ensure-db-sync-import-db! - [repo reset?] - (if-let [sqlite @*sqlite] - (p/let [db (platform/sqlite-open (platform/current) - {:sqlite sqlite - :path ":memory:" - :mode "c"})] - (common-sqlite/create-kvs-table! db) - (when reset? - (.exec db "delete from kvs")) - db) - (db-sync/fail-fast :db-sync/missing-field {:repo repo - :field :sqlite}))) - (defn restore-data-from-addr "Update sqlite-cli/restore-data-from-addr when making changes" [db addr] @@ -206,15 +197,19 @@ (restore-data-from-addr db addr)))) (defn- close-db-aux! - [repo ^Object db ^Object search ^Object client-ops ^Object debug-log] + [repo ^Object db ^Object search ^Object client-ops] + (when-let [timer (get @*client-ops-cleanup-timers repo)] + (js/clearInterval timer)) + (swap! *client-ops-cleanup-timers dissoc repo) (swap! *sqlite-conns dissoc repo) (swap! *datascript-conns dissoc repo) (swap! *client-ops-conns dissoc repo) + (swap! client-op/*repo->pending-local-tx-count dissoc repo) + (swap! *search-index-build-ids dissoc repo) (search/clear-fuzzy-search-indice! repo) (when db (.close db)) (when search (.close search)) (when client-ops (.close client-ops)) - (when debug-log (.close debug-log)) (when-let [^js pool (get-storage-pool repo)] (when (exists? (.-pauseVfs pool)) (.pauseVfs pool))) @@ -222,14 +217,14 @@ (defn- close-other-dbs! [repo] - (doseq [[r {:keys [db search client-ops debug-log]}] @*sqlite-conns] + (doseq [[r {:keys [db search client-ops]}] @*sqlite-conns] (when-not (= repo r) - (close-db-aux! r db search client-ops debug-log)))) + (close-db-aux! r db search client-ops)))) (defn close-db! [repo] - (let [{:keys [db search client-ops debug-log]} (get @*sqlite-conns repo)] - (close-db-aux! repo db search client-ops debug-log))) + (let [{:keys [db search client-ops]} (get @*sqlite-conns repo)] + (close-db-aux! repo db search client-ops))) (defn- (- (common-util/time-ms) last-gc-at) (* 3 24 3600 1000))) ; 3 days ago + (> (- (common-util/time-ms) last-gc-at) (* 30 24 3600 1000))) ; 1 month ago (log/info :gc-sqlite-dbs "gc current graph") (doseq [db (if @*publishing? [sqlite-db] [sqlite-db client-ops-db])] (sqlite-gc/gc-kvs-table! db {:full-gc? full-gc?}) (.exec db "VACUUM")) (ldb/transact! datascript-conn [{:db/ident :logseq.kv/graph-last-gc-at - :kv/value (common-util/time-ms)}])))) + :kv/value (common-util/time-ms)}] + {:skip-validate-db? true + :persist-op? false})))) + +(defn- run-client-ops-cleanup! + [repo] + (let [protected-tx-ids (worker-undo-redo/referenced-history-tx-ids repo)] + (client-op/cleanup-finished-history-ops! repo protected-tx-ids) + nil)) + +(defn- ensure-client-ops-cleanup-timer! + [repo] + (when (and (not @*publishing?) + repo + (nil? (get @*client-ops-cleanup-timers repo))) + (let [timer (js/setInterval (fn [] + (run-client-ops-cleanup! repo)) + client-ops-cleanup-interval-ms)] + (swap! *client-ops-cleanup-timers assoc repo timer)) + nil)) + +(defn- maybe-run-recycle-gc! + [conn] + (let [now (common-util/time-ms) + last-gc-at (:kv/value (d/entity @conn recycle-gc-kv))] + (when (or (not (number? last-gc-at)) + (> (- now last-gc-at) outliner-recycle/gc-interval-ms)) + (outliner-recycle/gc! conn {:now-ms now}) + (ldb/transact! conn [{:db/ident recycle-gc-kv + :kv/value now}] + {:persist-op? false + :skip-validate-db? true})))) (defn- datoms (group-by :e datoms) - {properties true non-properties false} (group-by - (fn [[_eid datoms]] - (boolean - (some (fn [datom] (and (= (:a datom) :db/ident) - (db-property/property? (:v datom)))) - datoms))) - eid->datoms) - datoms (concat (mapcat second properties) - (mapcat second non-properties)) - data (map (fn [datom] - [:db/add (:e datom) (:a datom) (:v datom)]) - datoms)] - (d/transact! conn data {:initial-db? true}))) + (let [ident-eids (into #{} + (comp (filter (fn [datom] + (= (:a datom) :db/ident))) + (map :e)) + datoms) + to-tx (fn [d] [:db/add (:e d) (:a d) (:v d)]) + batch-size 20000 + ident-batches (->> datoms + (filter #(contains? ident-eids (:e %))) + (map to-tx) + (partition-all batch-size)) + _ (doseq [batch ident-batches] + (d/transact! conn batch {:initial-db? true})) + non-ident-batches (->> datoms + (remove #(contains? ident-eids (:e %))) + (map to-tx) + (partition-all batch-size))] + (doseq [batch non-ident-batches] + (d/transact! conn batch {:initial-db? true})))) client-ops-conn (when-not @*publishing? (common-sqlite/get-storage-conn client-ops-storage client-op/schema-in-db)) - empty-startup? (and (some? datoms) (empty? datoms)) initial-data-exists? (when (nil? datoms) (and (d/entity @conn :logseq.class/Root) (= "db" (:kv/value (d/entity @conn :logseq.kv/db-type)))))] @@ -366,18 +393,26 @@ (swap! *client-ops-conns assoc repo client-ops-conn) (when (and (not @*publishing?) (not= client-op/schema-in-db (d/schema @client-ops-conn))) (d/reset-schema! client-ops-conn client-op/schema-in-db)) - (when (and db-based? (not initial-data-exists?) (not datoms)) - (let [config (or config "") - initial-data (sqlite-create-graph/build-db-initial-data - config (select-keys opts [:import-type :graph-git-sha]))] - (ldb/transact! conn initial-data {:initial-db? true}))) + (ensure-client-ops-cleanup-timer! repo) + (let [initial-tx-report (when-not (or initial-data-exists? + (seq datoms) + sync-download-graph?) + (let [config (or config "") + initial-data (sqlite-create-graph/build-db-initial-data + config (select-keys opts [:import-type :graph-git-sha :remote-graph?]))] + (ldb/transact! conn initial-data + {:initial-db? true})))] + (when-not sync-download-graph? + (db-migrate/migrate conn) + (gc-sqlite-dbs! db client-ops-db conn {}) + (maybe-run-recycle-gc! conn)) - (gc-sqlite-dbs! db client-ops-db conn {}) + (when initial-tx-report + (db-sync/handle-local-tx! repo initial-tx-report)) - (when-not empty-startup? - (db-migrate/migrate conn)) + (db-listener/listen-db-changes! repo (get @*datascript-conns repo)) - (db-listener/listen-db-changes! repo (get @*datascript-conns repo)))))) + nil))))) (defn- tx-meta - (not (:rtc-download-graph? tx-meta)) ; delay writes to the disk - (assoc :skip-store? true) - true (dissoc :insert-blocks?))] (when-not (and (:create-today-journal? tx-meta) @@ -675,12 +728,45 @@ (worker-util/profile "Worker db transact" (ldb/transact! conn tx-data' tx-meta'))) + (maybe-run-recycle-gc! conn) nil) (catch :default e (prn :debug :worker-transact-failed :tx-meta tx-meta :tx-data tx-data) (log/error ::worker-transact-failed e) (throw e))))) +(def-thread-api :thread-api/undo-redo-set-pending-editor-info + [repo editor-info] + (worker-undo-redo/set-pending-editor-info! repo editor-info) + nil) + +(def-thread-api :thread-api/undo-redo-record-editor-info + [repo editor-info] + (worker-undo-redo/record-editor-info! repo editor-info) + nil) + +(def-thread-api :thread-api/undo-redo-record-ui-state + [repo ui-state-str] + (worker-undo-redo/record-ui-state! repo ui-state-str) + nil) + +(def-thread-api :thread-api/undo-redo-undo + [repo] + (worker-undo-redo/undo repo)) + +(def-thread-api :thread-api/undo-redo-redo + [repo] + (worker-undo-redo/redo repo)) + +(def-thread-api :thread-api/undo-redo-clear-history + [repo] + (worker-undo-redo/clear-history! repo) + nil) + +(def-thread-api :thread-api/undo-redo-get-debug-state + [repo] + (worker-undo-redo/get-debug-state repo)) + (def-thread-api :thread-api/get-initial-data [repo opts] (when-let [conn (worker-state/get-datascript-conn repo)] @@ -706,44 +792,20 @@ (close-db! repo) nil) -(defn- import-datoms-to-db! - [repo graph-id remote-tx datoms] - (-> - (p/do! - (sync-log-and-state/rtc-log :rtc.log/download - {:sub-type :download-progress - :graph-uuid graph-id - :message "Saving data to DB"}) - ((@thread-api/*thread-apis :thread-api/create-or-open-db) - repo - {:close-other-db? true - :datoms datoms}) - (db-sync/rehydrate-large-titles-from-db! repo graph-id) - (sync-log-and-state/rtc-log :rtc.log/download - {:sub-type :download-completed - :graph-uuid graph-id - :message "Graph is ready!"}) - ((@thread-api/*thread-apis :thread-api/export-db) repo) - (client-op/update-graph-uuid repo graph-id) - (client-op/update-local-tx repo remote-tx) - (shared-service/broadcast-to-clients! :add-repo {:repo repo})) - (p/catch (fn [error] - (js/console.error error))))) - (defn- complete-datoms-import! [repo graph-id remote-tx] (-> (p/do! (when-let [search-db (worker-state/get-sqlite-conn repo :search)] (search/truncate-table! search-db)) - (sync-log-and-state/rtc-log :rtc.log/download - {:sub-type :download-progress - :graph-uuid graph-id - :message "Saving data to DB"}) + (rtc-log-and-state/rtc-log :rtc.log/download + {:sub-type :download-progress + :graph-uuid graph-id + :message "Saving data to DB"}) (db-sync/rehydrate-large-titles-from-db! repo graph-id) - (sync-log-and-state/rtc-log :rtc.log/download - {:sub-type :download-completed - :graph-uuid graph-id - :message "Graph is ready!"}) + (rtc-log-and-state/rtc-log :rtc.log/download + {:sub-type :download-completed + :graph-uuid graph-id + :message "Graph is ready!"}) (when-let [^js db (worker-state/get-sqlite-conn repo :db)] (.exec db "PRAGMA wal_checkpoint(2)")) (client-op/update-local-tx repo remote-tx) @@ -751,14 +813,6 @@ (p/catch (fn [error] (js/console.error error))))) -(defn- ->uint8 - [data] - (cond - (instance? js/Uint8Array data) data - (instance? js/ArrayBuffer data) (js/Uint8Array. data) - (string? data) (.encode (js/TextEncoder.) data) - :else (js/Uint8Array. data))) - (defn- stale-import-ex-info [repo graph-id import-id] (ex-info "stale db sync import" @@ -768,10 +822,14 @@ :import-id import-id})) (defn- close-import-state! - [{:keys [db]}] + [{:keys [db import-pool]}] (when db (try (.close db) + (catch :default _))) + (when import-pool + (try + (remove-vfs! import-pool) (catch :default _)))) (defn- clear-import-state! @@ -810,221 +868,75 @@ (when (seq tx-data) (d/transact! conn tx-data {:sync-download-graph? true})))) -(defn- sqlite-binds rows-batch)))) - -(defn- import-snapshot-rows! - [db aes-key graph-e2ee? rows] - (let [batches (partition-all db-sync-import-batch-size rows)] - (p/doseq [batch batches] - (import-snapshot-rows-batch! db aes-key graph-e2ee? batch)))) - (defn- log-import-progress! - [graph-id import-id rows-count] - (when (pos? rows-count) - (let [state (swap! *import-state - (fn [curr] - (if (= import-id (:import-id curr)) - (update curr :imported-rows (fnil + 0) rows-count) - curr))) - {:keys [imported-rows total-rows]} state] - (when (= import-id (:import-id state)) - (sync-log-and-state/rtc-log :rtc.log/download - {:sub-type :download-progress - :graph-uuid graph-id - :message (if (some? total-rows) - (str "Importing data " imported-rows "/" total-rows) - (str "Importing data " imported-rows))}))))) - -(defn- log-datoms-import-progress! [graph-id import-id datoms-count] (when (pos? datoms-count) - (let [state (swap! *import-state - (fn [curr] - (if (= import-id (:import-id curr)) - (update curr :imported-datoms (fnil + 0) datoms-count) - curr))) - {:keys [imported-datoms total-datoms]} state] - (when (= import-id (:import-id state)) - (sync-log-and-state/rtc-log :rtc.log/download - {:sub-type :download-progress - :graph-uuid graph-id - :message (if (some? total-datoms) - (str "Importing data " imported-datoms "/" total-datoms) - (str "Importing data " imported-datoms))}))))) + (let [{:keys [imported-datoms total-datoms]} + (swap! *import-state + (fn [state] + (if (= import-id (:import-id state)) + (update state :imported-datoms (fnil + 0) datoms-count) + state)))] + (rtc-log-and-state/rtc-log :rtc.log/download + {:sub-type :download-progress + :graph-uuid graph-id + :message (if (some? total-datoms) + (str "Importing data " imported-datoms "/" total-datoms) + (str "Importing data " imported-datoms))})))) (def-thread-api :thread-api/db-sync-import-prepare - [repo reset? graph-id graph-e2ee? & [total-rows]] - (let [graph-e2ee? (if (nil? graph-e2ee?) true (true? graph-e2ee?)) - opened-db (atom nil)] + [repo reset? graph-id graph-e2ee? & [total-datoms]] + (let [graph-e2ee? (if (nil? graph-e2ee?) true (true? graph-e2ee?))] (-> (p/let [_ (when-let [state @*import-state] - (close-import-state! state)) + (close-import-state! state) + (close-db! (:repo state))) _ (reset! *import-state nil) - _ (when reset? - (close-db! repo)) - _ (when reset? - ( (p/let [{:keys [db aes-key graph-e2ee?]} (require-import-state! nil graph-id import-id) - _ (import-snapshot-rows! db aes-key graph-e2ee? rows)] - (log-import-progress! graph-id import-id (count rows)) - true) - (p/catch - (fn [error] - (when-not (= :db-sync/stale-import (:type (ex-data error))) - (clear-import-state! import-id)) - (throw error))))) + (p/catch (fn [error] + (reset! *import-state nil) + (throw error)))))) (def-thread-api :thread-api/db-sync-import-datoms-chunk [datoms graph-id import-id] - (-> (p/let [{:keys [repo aes-key graph-e2ee?]} (require-import-state! nil graph-id import-id) - conn ( (p/let [{:keys [conn aes-key graph-e2ee?]} (require-import-state! nil graph-id import-id) _ (import-datoms-batch! conn aes-key graph-e2ee? datoms)] - (log-datoms-import-progress! graph-id import-id (count datoms)) + (log-import-progress! graph-id import-id (count datoms)) true) - (p/catch - (fn [error] - (when-not (= :db-sync/stale-import (:type (ex-data error))) - (clear-import-state! import-id)) - (throw error))))) - -(def-thread-api :thread-api/db-sync-import-framed-chunk - [chunk graph-id import-id] - (-> (p/let [{:keys [db aes-key graph-e2ee? snapshot-buffer]} (require-import-state! nil graph-id import-id) - {:keys [rows buffer]} (snapshot/parse-framed-chunk snapshot-buffer (->uint8 chunk)) - _ (swap! *import-state - (fn [state] - (if (= import-id (:import-id state)) - (assoc state :snapshot-buffer buffer) - state))) - _ (when (seq rows) - (import-snapshot-rows! db aes-key graph-e2ee? rows))] - (log-import-progress! graph-id import-id (count rows)) - true) - (p/catch - (fn [error] - (when-not (= :db-sync/stale-import (:type (ex-data error))) - (clear-import-state! import-id)) - (throw error))))) + (p/catch (fn [error] + (when-not (= :db-sync/stale-import (:type (ex-data error))) + (clear-import-state! import-id)) + (throw error))))) (def-thread-api :thread-api/db-sync-import-finalize [repo graph-id remote-tx import-id] - (-> (p/let [{:keys [db aes-key graph-e2ee? snapshot-buffer conn]} (require-import-state! repo graph-id import-id)] - (if conn - (p/let [result (complete-datoms-import! repo graph-id remote-tx) - _ (clear-import-state! import-id)] - result) - (p/let [rows (when (and snapshot-buffer (pos? (.-byteLength snapshot-buffer))) - (snapshot/finalize-framed-buffer snapshot-buffer)) - _ (when (seq rows) - (import-snapshot-rows! db aes-key graph-e2ee? rows)) - _ (log-import-progress! graph-id import-id (count rows)) - storage (new-sqlite-storage db) - conn (common-sqlite/get-storage-conn storage db-schema/schema) - datoms (vec (d/datoms @conn :eavt)) - _ (clear-import-state! import-id)] - (import-datoms-to-db! repo graph-id remote-tx datoms)))) - (p/catch - (fn [error] - (when-not (= :db-sync/stale-import (:type (ex-data error))) - (clear-import-state! import-id)) - (throw error))))) - -(def-thread-api :thread-api/db-sync-import-kvs-rows - [repo rows reset? graph-id remote-tx graph-e2ee?] - (let [graph-e2ee? (if (nil? graph-e2ee?) true (true? graph-e2ee?))] - (p/let [_ (when reset? - (close-db! repo)) - aes-key (when graph-e2ee? - (sync-crypt/sqlite-binds rows-batch)) - (sync-log-and-state/rtc-log :rtc.log/download - {:sub-type :download-progress - :graph-uuid graph-id - :message (str (if graph-e2ee? - "Decrypting data" - "Importing data") - " " - (inc index) - "/" - total-batches)}))) - (let [storage (new-sqlite-storage db) - conn (common-sqlite/get-storage-conn storage db-schema/schema) - datoms (vec (d/datoms @conn :eavt))] - (.close db) - (import-datoms-to-db! repo graph-id remote-tx datoms))))) + (-> (p/let [_ (require-import-state! repo graph-id import-id) + result (complete-datoms-import! repo graph-id remote-tx) + _ (reset! *import-state nil)] + result) + (p/catch (fn [error] + (when-not (= :db-sync/stale-import (:type (ex-data error))) + (clear-import-state! import-id)) + (throw error))))) (def-thread-api :thread-api/release-access-handles [repo] @@ -1115,17 +1027,72 @@ (when-let [conn (worker-state/get-datascript-conn repo)] (search/build-blocks-indice repo @conn))) +(defn- take-block-datoms-batch + [datoms batch-size time-budget-ms] + (let [deadline (+ (common-util/time-ms) time-budget-ms)] + (loop [batch (transient []) + remaining (seq datoms) + n 0] + (if (or (nil? remaining) + (>= n batch-size) + (and (pos? n) (>= (common-util/time-ms) deadline))) + [(persistent! batch) remaining] + (recur (conj! batch (first remaining)) + (next remaining) + (inc n)))))) + +(defn- > batch + (keep #(d/entity db (:e %))) + (remove search/hidden-entity?) + (keep search/block->index))] + (when (seq indexed) + (search/upsert-blocks! search-db (bean/->js indexed))) + (p/let [_ (js/Promise. (fn [resolve] (js/setTimeout resolve 0)))] + (p/recur remaining'))) + (do + (ensure-active-search-index-build! repo build-id) + (.exec search-db (str "PRAGMA user_version = " search-db-version)))))))) + (def-thread-api :thread-api/search-build-blocks-indice-in-worker [repo & [force?]] - (when-let [conn (worker-state/get-datascript-conn repo)] - (when force? - (search/build-fuzzy-search-indice repo @conn)) - (when-let [search-db (get-search-db repo)] - (search/truncate-table! search-db) - (let [blocks (search/build-blocks-indice repo @conn)] - (when (seq blocks) - (search/upsert-blocks! search-db (bean/->js blocks))) - (count blocks))))) + (p/let [search-db (get-search-db repo)] + (when search-db + (let [version (search-index-version search-db)] + (if (and (= version search-db-version) (not force?)) + version + (when-let [conn (worker-state/get-datascript-conn repo)] + (when force? + (search/build-fuzzy-search-indice repo @conn)) + (let [build-id (start-search-index-build! repo)] + (-> (latest-remote-checksum repo)}) + +(def-thread-api :thread-api/recompute-checksum-diagnostics + [repo] + (when-let [conn (worker-state/get-datascript-conn repo)] + (worker-db-validate/recompute-checksum-diagnostics repo conn (checksum-diagnostics repo)))) + ;; Returns an export-edn map for given repo. When there's an unexpected error, a map ;; with key :export-edn-error is returned (def-thread-api :thread-api/export-edn @@ -1341,37 +1318,6 @@ dbs (ldb/read-transit-str r)] (p/all (map #(.unsafeUnlinkDB this (:name %)) dbs))))) -(defn- delete-page! - [conn page-uuid] - (let [error-handler (fn [{:keys [msg]}] - (platform/post-message! (platform/current) - :notification - [[:div [:p msg]] :error]))] - (worker-page/delete! conn page-uuid {:error-handler error-handler}))) - -(defn- create-page! - [conn title options] - (try - (worker-page/create! conn title options) - (catch :default e - (js/console.error e) - (throw e)))) - -(defn- outliner-register-op-handlers! - [] - (outliner-op/register-op-handlers! - {:create-page (fn [conn [title options]] - (create-page! conn title options)) - :rename-page (fn [conn [page-uuid new-title]] - (if (string/blank? new-title) - (throw (ex-info "Page name shouldn't be blank" {:block/uuid page-uuid - :block/title new-title})) - (outliner-core/save-block! conn - {:block/uuid page-uuid - :block/title new-title}))) - :delete-page (fn [conn [page-uuid]] - (delete-page! conn page-uuid))})) - (defn- on-become-master [repo start-opts] (js/Promise. @@ -1483,7 +1429,6 @@ [platform'] (platform/set-platform! platform') (ldb/register-transact-invalid-callback-fn! notify-invalid-data) - (outliner-register-op-handlers!) (build-proxy-object)) (comment diff --git a/src/main/frontend/worker/db_listener.cljs b/src/main/frontend/worker/db_listener.cljs index 3d434a0d87..c93a2c1e06 100644 --- a/src/main/frontend/worker/db_listener.cljs +++ b/src/main/frontend/worker/db_listener.cljs @@ -8,19 +8,27 @@ [frontend.worker.shared-service :as shared-service] [frontend.worker.state :as worker-state] [frontend.worker.sync :as db-sync] - [logseq.common.util :as common-util] [logseq.db :as ldb] - [logseq.outliner.batch-tx :as batch-tx] [promesa.core :as p])) (defmulti listen-db-changes (fn [listen-key & _] listen-key)) +(defn- transit-safe-tx-meta + [tx-meta] + (when (map? tx-meta) + (->> tx-meta + (remove (fn [[k v]] + (or (= :error-handler k) + (fn? v)))) + (into {})))) + (defn- sync-db-to-main-thread "Return tx-report" [repo conn {:keys [tx-meta] :as tx-report}] (when repo (worker-state/set-db-latest-tx-time! repo)) - (when-not (:rtc-download-graph? tx-meta) + (when-not (or (:rtc-download-graph? tx-meta) + (:mark-embedding? tx-meta)) (let [{:keys [from-disk?]} tx-meta result (worker-pipeline/invoke-hooks conn tx-report (worker-state/get-context)) tx-report' (:tx-report result)] @@ -29,7 +37,7 @@ {:repo repo :request-id (:request-id tx-meta) :tx-data (:tx-data tx-report') - :tx-meta tx-meta} + :tx-meta (transit-safe-tx-meta tx-meta)} (dissoc result :tx-report))] (shared-service/broadcast-to-clients! :sync-db-changes data)) @@ -68,9 +76,10 @@ (:e datom))) tx-data) ;; Mark block embedding to be computed (map (fn [id] [:db/add id :logseq.property.embedding/hnsw-label-updated-at 0]))) - tx-data (concat remove-old-hnsw-tx-data mark-embedding-tx-data)] + tx-data' (concat remove-old-hnsw-tx-data mark-embedding-tx-data)] (when (seq tx-data) - (ldb/transact! conn tx-data {:skip-validate-db? true})))) + (ldb/transact! conn tx-data' {:skip-validate-db? true + :mark-embedding? true})))) (defn listen-db-changes! [repo conn & {:keys [handler-keys]}] @@ -81,47 +90,17 @@ (or (nil? handler-keys) (contains? (set handler-keys) :sync-db-to-main-thread))] (d/unlisten! conn ::listen-db-changes!) - (let [*batch-all-txs (volatile! []) - get-batch-txs #(->> @*batch-all-txs - (sort-by :tx) - (common-util/distinct-by-last-wins (fn [[e a v _tx added]] [e a v added])))] - (d/listen! conn ::listen-db-changes! - (fn listen-db-changes!-inner - [{:keys [tx-data _db-before _db-after tx-meta] :as tx-report}] + (d/listen! conn ::listen-db-changes! + (fn listen-db-changes!-inner + [{:keys [tx-data tx-meta] :as tx-report}] + (when-not (:batch-tx? @conn) (remove-old-embeddings-and-reset-new-updates! conn tx-data tx-meta) - - (let [tx-meta (merge (batch-tx/get-batch-opts) tx-meta) - in-batch-tx-mode? (:batch-tx/batch-tx-mode? tx-meta)] - (when in-batch-tx-mode? - (batch-tx/set-batch-opts tx-meta)) - (cond - (and in-batch-tx-mode? - (not (:batch-tx/exit? tx-meta))) - ;; still in batch mode - (vswap! *batch-all-txs into tx-data) - - in-batch-tx-mode? - ;; exit batch mode - (when-let [tx-data (not-empty (get-batch-txs))] - (vreset! *batch-all-txs []) - (let [db-before (batch-tx/get-batch-db-before) - tx-meta (dissoc tx-meta :batch-tx/batch-tx-mode? :batch-tx/exit?) - tx-report (assoc tx-report - :tx-data tx-data - :db-before db-before - :tx-meta tx-meta) - tx-report' (if sync-db-to-main-thread? - (sync-db-to-main-thread repo conn tx-report) - tx-report) - opt {:repo repo}] - (doseq [[k handler-fn] handlers] - (handler-fn k opt tx-report')))) - - (seq tx-data) - ;; raw transact - (let [tx-report' (if sync-db-to-main-thread? - (sync-db-to-main-thread repo conn tx-report) - tx-report) - opt {:repo repo}] + (when (and (seq tx-data) (not (:mark-embedding? tx-meta))) + (let [tx-report' (if sync-db-to-main-thread? + (sync-db-to-main-thread repo conn tx-report) + tx-report) + opt {:repo repo}] + (when tx-report' + (db-sync/update-local-sync-checksum! repo tx-report') (doseq [[k handler-fn] handlers] (handler-fn k opt tx-report')))))))))) diff --git a/src/main/frontend/worker/db_worker.cljs b/src/main/frontend/worker/db_worker.cljs index e4399f2483..148e87834a 100644 --- a/src/main/frontend/worker/db_worker.cljs +++ b/src/main/frontend/worker/db_worker.cljs @@ -10,7 +10,15 @@ [logseq.db :as ldb] [promesa.core :as p])) -(.importScripts js/self "worker.js") +(def ^:private worker-bootstrap-loaded-key "__logseq_db_worker_bootstrap_loaded__") + +(defn- ensure-worker-bootstrap! + [] + (when-not (gobj/get js/self worker-bootstrap-loaded-key) + (gobj/set js/self worker-bootstrap-loaded-key true) + (.importScripts js/self "worker.js"))) + +(ensure-worker-bootstrap!) (defn- check-worker-scope! [] diff --git a/src/main/frontend/worker/db_worker_node.cljs b/src/main/frontend/worker/db_worker_node.cljs index 071115e2c2..16dd6ae3bb 100644 --- a/src/main/frontend/worker/db_worker_node.cljs +++ b/src/main/frontend/worker/db_worker_node.cljs @@ -171,7 +171,6 @@ :thread-api/import-db :thread-api/import-db-base64 :thread-api/backup-db-sqlite - :thread-api/db-sync-import-kvs-rows :thread-api/import-edn :thread-api/unsafe-unlink-db :thread-api/search-upsert-blocks @@ -316,7 +315,8 @@ (defn- startup-db-opts [{:keys [create-empty-db?]}] (if create-empty-db? - {:datoms []} + {:datoms [] + :sync-download-graph? true} {})) (defn- pad2 diff --git a/src/main/frontend/worker/debug.cljs b/src/main/frontend/worker/debug.cljs index b0b82d721b..9b8f995ec6 100644 --- a/src/main/frontend/worker/debug.cljs +++ b/src/main/frontend/worker/debug.cljs @@ -13,12 +13,12 @@ [] (some-> (get-conn) deref)) -#_:clj-kondo/ignore +#_{:clojure-lsp/ignore [:clojure-lsp/unused-public-var]} (defn pull [eid] (some-> (get-db) (d/pull '[*] eid))) -#_:clj-kondo/ignore +#_{:clojure-lsp/ignore [:clojure-lsp/unused-public-var]} (defn entity [eid] (some-> (get-db) (d/entity eid))) diff --git a/src/main/frontend/worker/pipeline.cljs b/src/main/frontend/worker/pipeline.cljs index d5d264df52..557e2017fa 100644 --- a/src/main/frontend/worker/pipeline.cljs +++ b/src/main/frontend/worker/pipeline.cljs @@ -478,43 +478,44 @@ "Compute extra tx-data and block/refs, should ensure it's a pure function and doesn't call `d/transact!` or `ldb/transact!`." [{:keys [db-after tx-meta _tx-data] :as tx-report}] - (when-not (or (:temp-conn? tx-meta) (:sync-download-graph? tx-meta)) - (ensure-journal-page-protected-attrs-not-updated! tx-report) - (let [extra-tx-data (compute-extra-tx-data tx-report) - tx-report* (if (seq extra-tx-data) - (let [result (d/with db-after extra-tx-data)] - (assoc tx-report - :tx-data (concat (:tx-data tx-report) (:tx-data result)) - :db-after (:db-after result))) - tx-report) - {:keys [pages blocks]} (ds-report/get-blocks-and-pages tx-report*) - deleted-blocks (outliner-pipeline/filter-deleted-blocks (:tx-data tx-report*)) - deleted-block-ids (set (map :db/id deleted-blocks)) - blocks' (remove (fn [b] (deleted-block-ids (:db/id b))) blocks) - block-refs (when (seq blocks') - (rebuild-block-refs tx-report* blocks')) - tx-id-data (let [db-after (:db-after tx-report*) - updated-blocks (remove (fn [b] (contains? deleted-block-ids (:db/id b))) - (concat pages blocks)) - tx-id (get-in tx-report* [:tempids :db/current-tx])] - (keep (fn [b] - (when-let [db-id (:db/id b)] - (when (:block/uuid (d/entity db-after db-id)) - {:db/id db-id - :block/tx-id tx-id}))) updated-blocks)) - block-refs-tx-id-data (concat block-refs tx-id-data) - replace-tx-report (when (seq block-refs-tx-id-data) - (d/with (:db-after tx-report*) block-refs-tx-id-data)) - tx-report' (or replace-tx-report tx-report*) - full-tx-data (-> (concat (:tx-data tx-report*) - (:tx-data replace-tx-report)) - ldb/remove-conflict-datoms)] - (assoc tx-report' - :tx-data full-tx-data - :tx-meta tx-meta - :db-before (:db-before tx-report) - :db-after (or (:db-after tx-report') - (:db-after tx-report)))))) + (or + (when-not (:sync-download-graph? tx-meta) + (ensure-journal-page-protected-attrs-not-updated! tx-report) + (let [extra-tx-data (compute-extra-tx-data tx-report) + tx-report* (if (seq extra-tx-data) + (let [result (d/with db-after extra-tx-data)] + (assoc tx-report + :tx-data (concat (:tx-data tx-report) (:tx-data result)) + :db-after (:db-after result))) + tx-report) + {:keys [pages blocks]} (ds-report/get-blocks-and-pages tx-report*) + deleted-blocks (outliner-pipeline/filter-deleted-blocks (:tx-data tx-report*)) + deleted-block-ids (set (map :db/id deleted-blocks)) + blocks' (remove (fn [b] (deleted-block-ids (:db/id b))) blocks) + block-refs (when (seq blocks') + (rebuild-block-refs tx-report* blocks')) + tx-id-data (let [db-after (:db-after tx-report*) + updated-blocks (remove (fn [b] (contains? deleted-block-ids (:db/id b))) + (concat pages blocks)) + tx-id (get-in tx-report* [:tempids :db/current-tx])] + (keep (fn [b] + (when-let [db-id (:db/id b)] + (when (:block/uuid (d/entity db-after db-id)) + {:db/id db-id + :block/tx-id tx-id}))) updated-blocks)) + block-refs-tx-id-data (concat block-refs tx-id-data) + replace-tx-report (when (seq block-refs-tx-id-data) + (d/with (:db-after tx-report*) block-refs-tx-id-data)) + tx-report' (or replace-tx-report tx-report*) + full-tx-data (concat (:tx-data tx-report*) + (:tx-data replace-tx-report))] + (assoc tx-report' + :tx-data full-tx-data + :tx-meta tx-meta + :db-before (:db-before tx-report) + :db-after (or (:db-after tx-report') + (:db-after tx-report))))) + tx-report)) (defn- invoke-hooks-default [{:keys [tx-meta] :as tx-report} context] diff --git a/src/main/frontend/worker/search.cljs b/src/main/frontend/worker/search.cljs index fdafa83be4..eda61eb33b 100644 --- a/src/main/frontend/worker/search.cljs +++ b/src/main/frontend/worker/search.cljs @@ -17,6 +17,8 @@ [missionary.core :as m])) (def fuse + ;; Fuse 6 exposed the constructor on `default`, while Fuse 7's CJS path returns + ;; the constructor directly. (or (aget Fuse "default") Fuse)) ;; TODO: use sqlite for fuzzy search @@ -509,32 +511,33 @@ DROP TRIGGER IF EXISTS blocks_au; k-max (if (seq keyword-scores) (apply max keyword-scores) 1.0) all-ids (set/union (set (map :id keyword-results)) (set (map :id semantic-results))) - merged (map (fn [id] - (let [block (when id (d/entity db [:block/uuid (uuid id)])) - k-result (first (filter #(= (:id %) id) keyword-results)) - s-result (first (filter #(= (:id %) id) semantic-results)) - result (merge s-result k-result) - page? (ldb/page? block) - keyword-score (if page? (+ (:keyword-score k-result) 2) (:keyword-score k-result)) - k-score (or keyword-score 0.0) - s-score (or (:semantic-score s-result) 0.0) - norm-k-score (normalize-score k-score k-min k-max) - ;; Weighted combination - combined-score (+ (* (:keyword-weight config) - norm-k-score) - (* (:semantic-weight config) s-score) - (cond - (ldb/page? block) - 0.02 - (:block/tags block) - 0.01 - :else - 0))] - (merge result - {:combined-score combined-score - :keyword-score k-score - :semantic-score s-score}))) - all-ids) + merged (keep (fn [id] + (let [block (when id (d/entity db [:block/uuid (uuid id)]))] + (when-not (ldb/hidden? block) + (let [k-result (first (filter #(= (:id %) id) keyword-results)) + s-result (first (filter #(= (:id %) id) semantic-results)) + result (merge s-result k-result) + page? (ldb/page? block) + keyword-score (if page? (+ (:keyword-score k-result) 2) (:keyword-score k-result)) + k-score (or keyword-score 0.0) + s-score (or (:semantic-score s-result) 0.0) + norm-k-score (normalize-score k-score k-min k-max) + ;; Weighted combination + combined-score (+ (* (:keyword-weight config) + norm-k-score) + (* (:semantic-weight config) s-score) + (cond + (ldb/page? block) + 0.02 + (:block/tags block) + 0.01 + :else + 0))] + (merge result + {:combined-score combined-score + :keyword-score k-score + :semantic-score s-score}))))) + all-ids) sorted-result (sort-by :combined-score #(compare %2 %1) merged)] sorted-result)) @@ -679,25 +682,64 @@ DROP TRIGGER IF EXISTS blocks_au; (defn- get-blocks-from-datoms-impl [{:keys [db-after db-before]} datoms] - (when (seq datoms) - (let [blocks-to-add-set (->> (filter :added datoms) + (letfn [(page-descendants [page] + (loop [pages [page] + result []] + (if-let [page' (first pages)] + (let [children (->> (:block/_parent page') + (filter ldb/page?) + ldb/sort-by-order)] + (recur (concat (rest pages) children) + (conj result page'))) + result))) + (page-tree [db page] + (->> (page-descendants page) + (mapcat (fn [page'] + (concat + [page'] + (mapcat #(ldb/get-block-and-children db (:block/uuid %)) + (ldb/sort-by-order (:block/_page page')))))) + distinct)) + (entity-tree [db entity] + (cond + (nil? entity) [] + (ldb/page? entity) (page-tree db entity) + (:block/uuid entity) (ldb/get-block-and-children db (:block/uuid entity)) + :else [entity])) + (referrer-eids [db eids] + (->> eids + (mapcat (fn [id] + (map :db/id (:block/_refs (d/entity db id))))) + set)) + (entities-for [db eids {:keys [include-tree? include-refs?]}] + (let [entities (keep #(d/entity db %) eids) + entities' (if include-tree? + (mapcat #(entity-tree db %) entities) + entities) + entities'' (if include-refs? + (concat entities' + (keep #(d/entity db %) + (referrer-eids db eids))) + entities')] + (->> entities'' + distinct + (remove nil?))))] + (when (seq datoms) + (let [ref-affecting-attrs #{:block/uuid :block/name :block/title :block/properties} + visibility-affecting-attrs #{:logseq.property/deleted-at :block/parent :block/page} + ref-eids (->> datoms + (filter #(contains? ref-affecting-attrs (:a %))) + (map :e) + set) + visibility-eids (->> datoms + (filter #(contains? visibility-affecting-attrs (:a %))) (map :e) - (set)) - blocks-to-remove-set (->> (remove :added datoms) - (filter #(= :block/uuid (:a %))) - (map :e) - (set)) - blocks-to-add-set' (if (seq blocks-to-add-set) - (->> blocks-to-add-set - (mapcat (fn [id] (map :db/id (:block/_refs (d/entity db-after id))))) - (concat blocks-to-add-set) - set) - blocks-to-add-set)] - {:blocks-to-remove (->> - (keep #(d/entity db-before %) blocks-to-remove-set)) - :blocks-to-add (->> - (keep #(d/entity db-after %) blocks-to-add-set') - (remove hidden-entity?))}))) + set)] + {:blocks-to-remove (concat (entities-for db-before ref-eids {:include-refs? true}) + (entities-for db-before visibility-eids {:include-tree? true})) + :blocks-to-add (->> (concat (entities-for db-after ref-eids {:include-refs? true}) + (entities-for db-after visibility-eids {:include-tree? true})) + (remove hidden-entity?))})))) (defn- get-affected-blocks [tx-report] diff --git a/src/main/frontend/worker/sync.cljs b/src/main/frontend/worker/sync.cljs index ee50251a0d..ed63d77380 100644 --- a/src/main/frontend/worker/sync.cljs +++ b/src/main/frontend/worker/sync.cljs @@ -1,421 +1,133 @@ (ns frontend.worker.sync - "Simple db-sync client based on promesa + WebSocket." - (:require [cljs-bean.core :as bean] - [clojure.set :as set] - [clojure.string :as string] - [datascript.core :as d] - [datascript.storage :refer [IStorage]] - [frontend.common.crypt :as crypt] - [frontend.worker-common.util :as worker-util] - [frontend.worker.handler.page :as worker-page] - [frontend.worker.platform :as platform] - [frontend.worker.shared-service :as shared-service] - [frontend.worker.state :as worker-state] - [frontend.worker.sync.client-op :as client-op] - [frontend.worker.sync.const :as rtc-const] - [frontend.worker.sync.crypt :as sync-crypt] - [frontend.worker.sync.log-and-state :as sync-log-and-state] - [lambdaisland.glogi :as log] - [logseq.common.config :as common-config] - [logseq.common.util :as common-util] - [logseq.db :as ldb] - [logseq.db-sync.cycle :as sync-cycle] - [logseq.db-sync.malli-schema :as db-sync-schema] - [logseq.db-sync.order :as sync-order] - [logseq.db-sync.snapshot :as snapshot] - [logseq.db.common.normalize :as db-normalize] - [logseq.db.common.sqlite :as common-sqlite] - [logseq.db.sqlite.util :as sqlite-util] - [logseq.outliner.core :as outliner-core] - [logseq.outliner.transaction :as outliner-tx] - [promesa.core :as p])) + "Sync client" + (:require + [frontend.worker.shared-service :as shared-service] + [frontend.worker.state :as worker-state] + [frontend.worker.sync.apply-txs :as sync-apply] + [frontend.worker.sync.assets :as sync-assets] + [frontend.worker.sync.auth :as sync-auth] + [frontend.worker.sync.client-op :as client-op] + [frontend.worker.sync.handle-message :as sync-handle-message] + [frontend.worker.sync.presence :as sync-presence] + [frontend.worker.sync.transport :as sync-transport] + [frontend.worker.sync.upload :as sync-upload] + [lambdaisland.glogi :as log] + [logseq.common.util :as common-util] + [logseq.db-sync.checksum :as sync-checksum] + [promesa.core :as p] + [frontend.worker.platform :as platform] + [frontend.worker.sync.util :as sync-util] + [frontend.worker.sync.download :as sync-download])) -(defonce *repo->latest-remote-tx (atom {})) -(defonce *start-inflight-target (atom nil)) - -(defn- current-client - [repo] - (let [client @worker-state/*db-sync-client] - (when (= repo (:repo client)) - client))) - -(defn- client-ops-conn [repo] - (worker-state/get-client-ops-conn repo)) - -(defn- sync-counts - [repo] - (when (worker-state/get-datascript-conn repo) - (let [pending-local (when-let [conn (client-ops-conn repo)] - (count (d/datoms @conn :avet :db-sync/created-at))) - pending-asset (client-op/get-unpushed-asset-ops-count repo) - local-tx (client-op/get-local-tx repo) - remote-tx (get @*repo->latest-remote-tx repo) - pending-server (when (and (number? local-tx) (number? remote-tx)) - (max 0 (- remote-tx local-tx))) - graph-uuid (client-op/get-graph-uuid repo)] - {:pending-local pending-local - :pending-asset pending-asset - :pending-server pending-server - :local-tx local-tx - :remote-tx remote-tx - :graph-uuid graph-uuid}))) - -(defn status - [repo] - (let [client (current-client repo) - counts (or (sync-counts repo) {}) - ws-url (:ws-url @worker-state/*db-sync-config) - ws-state (or (some-> client :ws-state deref) - (if (seq ws-url) :stopped :inactive)) - last-error (some-> client :last-sync-error deref)] - {:repo repo - :graph-id (or (:graph-id client) (:graph-uuid counts)) - :ws-state ws-state - :pending-local (or (:pending-local counts) 0) - :pending-asset (or (:pending-asset counts) 0) - :pending-server (or (:pending-server counts) 0) - :local-tx (:local-tx counts) - :remote-tx (:remote-tx counts) - :last-error last-error})) - -(defn- normalize-online-users - [users] - (->> users - (keep (fn [{:keys [user-id email username name]}] - (when (string? user-id) - (let [display-name (or username name user-id)] - (cond-> {:user/uuid user-id - :user/name display-name} - (string? email) (assoc :user/email email)))))) - (common-util/distinct-by :user/uuid) - (vec))) - -(defn- broadcast-rtc-state! - [client] - (when client - (let [repo (:repo client) - ws-state @(:ws-state client) - online-users @(:online-users client) - {:keys [pending-local pending-asset pending-server local-tx remote-tx graph-uuid]} (sync-counts repo)] - (shared-service/broadcast-to-clients! - :rtc-sync-state - {:rtc-state {:ws-state ws-state} - :rtc-lock (= :open ws-state) - :online-users (or online-users []) - :unpushed-block-update-count (or pending-local 0) - :pending-asset-ops-count (or pending-asset 0) - :pending-server-ops-count (or pending-server 0) - :local-tx local-tx - :remote-tx remote-tx - :graph-uuid graph-uuid})))) - -(defn- set-ws-state! - [client ws-state] - (when-let [*ws-state (:ws-state client)] - (reset! *ws-state ws-state) - (broadcast-rtc-state! client))) - -(defn- update-online-users! - [client users] - (when-let [*online-users (:online-users client)] - (let [users' (normalize-online-users users)] - (when (not= users' @*online-users) - (reset! *online-users users') - (broadcast-rtc-state! client))))) - -(defn- update-user-presence! - [client user-id* editing-block-uuid] - (when (and user-id* editing-block-uuid) - (when-let [*online-users (:online-users client)] - (swap! *online-users - (fn [users] - (mapv (fn [user] - (if (= user-id* (:user/uuid user)) - (assoc user :user/editing-block-uuid editing-block-uuid) - user)) users))) - (broadcast-rtc-state! client)))) - -(defn- ws-base-url - [] - (:ws-url @worker-state/*db-sync-config)) - -(defn http-base-url - [] - (:http-base @worker-state/*db-sync-config)) - -(defn- cli-node-owner? - [] - (try - (let [env (:env (platform/current))] - (and (= :node (:runtime env)) - (= :cli (:owner-source env)))) - (catch :default _ - false))) - -(defn- auth-token [] - (let [configured-token (:auth-token @worker-state/*db-sync-config)] - (if (cli-node-owner?) - configured-token - (or (worker-state/get-id-token) - configured-token)))) - -(defn- id-token-expired? - [token] - (if-not (string? token) - true - (try - (let [exp-ms (some-> token worker-util/parse-jwt :exp (* 1000))] - (or (not (number? exp-ms)) - (<= exp-ms (common-util/time-ms)))) - (catch :default _ - true)))) - -(defn- (auth-token) - worker-util/parse-jwt - :sub)) - -(defn- auth-headers [] - (when-let [token (auth-token)] - {"authorization" (str "Bearer " token)})) - -(defn- with-auth-headers [opts] - (if-let [auth (auth-headers)] - (assoc opts :headers (merge (or (:headers opts) {}) auth)) - opts)) - -(def ^:private max-asset-size (* 100 1024 1024)) -(def ^:private upload-kvs-batch-size 2000) -(def ^:private upload-prepare-datoms-batch-size 100000) -(def ^:private upload-temp-pool-name (worker-util/get-pool-name "upload-temp")) -(def ^:private snapshot-content-type "application/transit+json") -(def ^:private snapshot-text-encoder (js/TextEncoder.)) (def ^:private reconnect-base-delay-ms 1000) (def ^:private reconnect-max-delay-ms 30000) (def ^:private reconnect-jitter-ms 250) (def ^:private ws-stale-kill-interval-ms 60000) -;; kill ws when 10-mins inactive (def ^:private ws-stale-timeout-ms 600000) -(def ^:private large-title-byte-limit 4096) -(def ^:private large-title-asset-type "txt") -(def ^:private large-title-object-attr :logseq.property.sync/large-title-object) -(def ^:private text-encoder (js/TextEncoder.)) -(def ^:private text-decoder (js/TextDecoder.)) +(def fail-fast sync-util/fail-fast) -(defn- format-ws-url [base graph-id] - (cond - (string/includes? base "%s") - (string/replace base "%s" graph-id) +(defonce *repo->latest-remote-tx sync-apply/*repo->latest-remote-tx) +(defonce *repo->latest-remote-checksum sync-apply/*repo->latest-remote-checksum) +(defonce *start-inflight-target (atom nil)) - (string/ends-with? base "/") - (str base graph-id) +(defn- current-client + [repo] + (sync-presence/current-client worker-state/*db-sync-client repo)) - :else - (str base "/" graph-id))) +(defn status + [repo] + (sync-presence/sync-counts + {:get-datascript-conn worker-state/get-datascript-conn + :get-client-ops-conn worker-state/get-client-ops-conn + :get-pending-local-tx-count client-op/get-pending-local-tx-count + :get-unpushed-asset-ops-count client-op/get-unpushed-asset-ops-count + :get-local-tx client-op/get-local-tx + :get-local-checksum client-op/get-local-checksum + :get-graph-uuid client-op/get-graph-uuid + :latest-remote-tx @*repo->latest-remote-tx + :latest-remote-checksum @*repo->latest-remote-checksum} + repo)) -(defn- append-token [url token] - (if (string? token) - (let [separator (if (string/includes? url "?") "&" "?")] - (str url separator "token=" (js/encodeURIComponent token))) - url)) +(defn update-local-sync-checksum! + [repo tx-report] + (when (worker-state/get-client-ops-conn repo) + (client-op/update-local-checksum + repo + (sync-checksum/update-checksum (client-op/get-local-checksum repo) tx-report)))) -(defn- utf8-byte-length [value] - (when (string? value) - (.-length (.encode text-encoder value)))) +(defn- broadcast-rtc-state! + [client] + (when client + (shared-service/broadcast-to-clients! + :rtc-sync-state + (sync-presence/rtc-state-payload status client)))) -(defn- large-title? [value] - (when-let [byte-length (utf8-byte-length value)] - (> byte-length large-title-byte-limit))) +(defn- set-ws-state! + [client ws-state] + (sync-presence/set-ws-state! broadcast-rtc-state! client ws-state)) -(defn- assoc-datom-value - [datom new-value] - (let [[op e a _v & others] datom] - (into [op e a new-value] others))) +(defn- update-online-users! + [client users] + (sync-presence/update-online-users! broadcast-rtc-state! client users)) -(defn- large-title-object - [asset-uuid asset-type] - {:asset-uuid asset-uuid - :asset-type asset-type}) +(defn- ws-base-url + [] + (sync-auth/ws-base-url @worker-state/*db-sync-config)) -(defn- large-title-object? - [value] - (and (map? value) - (string? (:asset-uuid value)) - (string? (:asset-type value)))) +(def auth-token sync-util/auth-token) -(defn- get-graph-id [repo] - (or (when-let [conn (worker-state/get-datascript-conn repo)] - (let [db @conn - graph-uuid (ldb/get-graph-rtc-uuid db)] - (when graph-uuid - (str graph-uuid)))) - (some-> (client-op/get-graph-uuid repo) str))) +(def id-token-expired? sync-auth/id-token-expired?) -(defn- ensure-client-graph-uuid! [repo graph-id] +(def repo common-config/strip-leading-db-version-prefix)] - (if-not (seq target-graph-name) - (p/resolved nil) - (p/let [remote-graphs (list-remote-graphs!) - remote-graph-id (some (fn [{:keys [graph-name graph-id]}] - (when (= target-graph-name graph-name) - graph-id)) - remote-graphs)] - (when (seq remote-graph-id) - (ensure-client-graph-uuid! repo remote-graph-id) - remote-graph-id)))))) - -(defn- ready-state [ws] - (.-readyState ws)) - -(defn- ws-open? [ws] - (= 1 (ready-state ws))) - -(def ^:private invalid-coerce ::invalid-coerce) - -(defn- coerce - [coercer value context] - (try - (coercer value) - (catch :default e - (log/error :db-sync/malli-coerce-failed (merge context {:error e :value value})) - invalid-coerce))) - -(defn- coerce-ws-client-message [message] - (when message - (let [coerced (coerce db-sync-schema/ws-client-message-coercer message {:schema :ws/client})] - (when-not (= coerced invalid-coerce) - coerced)))) - -(defn- coerce-ws-server-message [message] - (when message - (let [coerced (coerce db-sync-schema/ws-server-message-coercer message {:schema :ws/server})] - (when-not (= coerced invalid-coerce) - coerced)))) - -(defn fail-fast [tag data] - (log/error tag data) - (throw (ex-info (name tag) data))) - -(declare offload-large-titles) - -(defn- require-number [value context] - (when-not (number? value) - (fail-fast :db-sync/invalid-field (assoc context :value value)))) - -(defn- require-non-negative [value context] - (require-number value context) - (when (neg? value) - (fail-fast :db-sync/invalid-field (assoc context :value value)))) - -(defn- require-seq [value context] - (when-not (sequential? value) - (fail-fast :db-sync/invalid-field (assoc context :value value)))) - -(defn- parse-transit [value context] - (try - (sqlite-util/read-transit-str value) - (catch :default e - (fail-fast :db-sync/response-parse-failed (assoc context :error e))))) - -(defn- coerce-http-request [schema-key body] - (if-let [coercer (get db-sync-schema/http-request-coercers schema-key)] - (let [coerced (coerce coercer body {:schema schema-key :dir :request})] - (when-not (= coerced invalid-coerce) - coerced)) - body)) - -(defn- coerce-http-response [schema-key body] - (if-let [coercer (get db-sync-schema/http-response-coercers schema-key)] - (let [coerced (coerce coercer body {:schema schema-key :dir :response})] - (when-not (= coerced invalid-coerce) - coerced)) - body)) - -(defn- normalize-graph-e2ee? - [graph-e2ee?] - (if (nil? graph-e2ee?) - true - (true? graph-e2ee?))) - -(defn- reconnect-delay-ms [attempt] - (let [exp (js/Math.pow 2 attempt) - delay (min reconnect-max-delay-ms (* reconnect-base-delay-ms exp)) - jitter (rand-int reconnect-jitter-ms)] - (+ delay jitter))) - -(defn- clear-reconnect-timer! [reconnect] +(defn- clear-reconnect-timer! + [reconnect] (when-let [timer (:timer @reconnect)] (js/clearTimeout timer) (swap! reconnect assoc :timer nil))) -(defn- reset-reconnect! [client] +(defn- reset-reconnect! + [client] (when-let [reconnect (:reconnect client)] (clear-reconnect-timer! reconnect) (swap! reconnect assoc :attempt 0))) -(defn- clear-stale-ws-loop-timer! [client] +(defn- clear-stale-ws-loop-timer! + [client] (when-let [*timer (:stale-kill-timer client)] (when-let [timer @*timer] (js/clearInterval timer) (reset! *timer nil)))) -(defn- touch-last-ws-message! [client] +(defn- touch-last-ws-message! + [client] (when-let [*ts (:last-ws-message-ts client)] (reset! *ts (common-util/time-ms)))) -(defn- send! [ws message] - (when (ws-open? ws) - (if-let [coerced (coerce-ws-client-message message)] - (.send ws (js/JSON.stringify (clj->js coerced))) - (log/error :db-sync/ws-request-invalid {:message message})))) +(defn- ready-state + [ws] + (sync-transport/ready-state ws)) -(defn- ex-message->code - [message] - (when (and (string? message) - (re-matches #"[a-zA-Z0-9._/\-]+" message)) - (keyword message))) +(defn- ws-open? + [ws] + (sync-transport/ws-open? ws)) -(defn- error->diagnostic - [error] - (let [data (or (ex-data error) {}) - code (or (:code data) - (ex-message->code (ex-message error)) - :exception)] - {:code code - :message (or (ex-message error) (str error)) - :at (common-util/time-ms) - :data (when (seq data) data)})) - -(defn- set-last-sync-error! - [client error] - (when-let [*last-error (:last-sync-error client)] - (reset! *last-error (error->diagnostic error)))) - -(defn- clear-last-sync-error! - [client] - (when-let [*last-error (:last-sync-error client)] - (reset! *last-error nil))) +(defn- send! + [ws message] + (sync-transport/send! sync-transport/coerce-ws-client-message ws message)) (defn update-presence! [editing-block-uuid] @@ -424,1532 +136,30 @@ (send! ws {:type "presence" :editing-block-uuid editing-block-uuid})))) -(def rtc-ignored-attrs - (set/union - #{:logseq.property.embedding/hnsw-label-updated-at - :block/tx-id} - rtc-const/ignore-attrs-when-syncing - rtc-const/ignore-entities-when-init-upload)) - -(defn- remove-ignored-attrs - [tx-data] - (remove (fn [d] (contains? rtc-ignored-attrs (:a d))) - tx-data)) - -(defn- normalize-tx-data - [db-after db-before tx-data] - (->> tx-data - remove-ignored-attrs - (db-normalize/normalize-tx-data db-after db-before) - (remove (fn [[_op e]] - (contains? rtc-const/ignore-entities-when-init-upload e))))) - -(def ^:private non-retractable-block-attrs - #{:block/created-at :block/updated-at :block/title}) - -(defn- drop-non-retractable-attr-datoms - [tx-data] - (remove (fn [item] - (and (vector? item) - (>= (count item) 3) - (= :db/retract (first item)) - (contains? non-retractable-block-attrs (nth item 2)))) - tx-data)) - -(defn- reverse-tx-data - [tx-data] - (->> tx-data - (map (fn [[e a v t added]] - [(if added :db/retract :db/add) e a v t])))) - -(defn- parse-message [raw] - (try - (js->clj (js/JSON.parse raw) :keywordize-keys true) - (catch :default _ - nil))) - -(defn- parse-json-response-body - [resp url response-schema error-schema] - (p/let [text (.text resp) - data (when (seq text) (js/JSON.parse text))] - (if (.-ok resp) - (let [body (js->clj data :keywordize-keys true) - body (if response-schema - (coerce-http-response response-schema body) - body)] - (if (or (nil? response-schema) body) - body - (throw (ex-info "db-sync invalid response" - {:status (.-status resp) - :url url - :body body})))) - (let [body (when data (js->clj data :keywordize-keys true)) - body (if error-schema - (coerce-http-response error-schema body) - body)] - (throw (ex-info "db-sync request failed" - {:status (.-status resp) - :url url - :body body})))))) - -(defn- fetch-json - [url opts {:keys [response-schema error-schema] :or {error-schema :error}}] - (p/let [resp (js/fetch url (clj->js (with-auth-headers opts)))] - (parse-json-response-body resp url response-schema error-schema))) - -(defn- require-auth-token! - [context] - (when-not (seq (auth-token)) - (fail-fast :db-sync/missing-field (assoc context :field :auth-token)))) - -(defn- ->uint8 - [payload] - (cond - (instance? js/Uint8Array payload) payload - (instance? js/ArrayBuffer payload) (js/Uint8Array. payload) - (string? payload) (.encode text-encoder payload) - :else (js/Uint8Array. payload))) - -(defn- gzip-payload? - [^js payload] - (and (some? payload) - (>= (.-byteLength payload) 2) - (= 31 (aget payload 0)) - (= 139 (aget payload 1)))) - -(defn- payload->stream - [^js payload] - (js/ReadableStream. - #js {:start (fn [controller] - (.enqueue controller payload) - (.close controller))})) - -(defn- stream payload) - decompressed (.pipeThrough stream (js/DecompressionStream. "gzip")) - resp (js/Response. decompressed) - array-buffer (.arrayBuffer resp)] - (->uint8 array-buffer)) - (p/rejected (ex-info "gzip decompression not supported" - {:type :db-sync/decompression-not-supported})))) - -(defn- uint8 array-buffer)] - (if (gzip-payload? payload) - ( resp .-headers (.get "content-encoding"))] - (cond - (nil? (.-body resp)) - nil - - (= "gzip" encoding) - (when (exists? js/DecompressionStream) - (.pipeThrough (.-body resp) (js/DecompressionStream. "gzip"))) - - :else - (.-body resp)))) - -(defn- = (count remaining) batch-size) - (let [batch (subvec remaining 0 batch-size) - rest-datoms (subvec remaining batch-size)] - (p/let [_ (on-batch batch)] - (p/recur rest-datoms))) - remaining))) - -(defn- uint8 (.-value result))) - pending (into pending datoms)] - (p/let [pending ( (.exec db #js {:sql "select content, addresses from kvs where addr = ?" - :bind #js [addr] - :rowMode "array"}) - first)] - (let [[content addresses] (bean/->clj result) - addresses (when addresses (js/JSON.parse addresses)) - data (sqlite-util/transit-read content)] - (if (and addresses (map? data)) - (assoc data :addresses addresses) - data)))) - -(defn- new-temp-sqlite-storage - [^js db] - (reify IStorage - (-store [_ addr+data-seq _delete-addrs] - (let [data (map - (fn [[addr data]] - (let [data' (if (map? data) (dissoc data :addresses) data) - addresses (when (map? data) - (when-let [addresses (:addresses data)] - (js/JSON.stringify (bean/->js addresses))))] - #js {:$addr addr - :$content (sqlite-util/transit-write data') - :$addresses addresses})) - addr+data-seq)] - (upsert-addr-content! db data))) - (-restore [_ addr] - (restore-data-from-addr db addr)))) - -(defn- > datoms' - (map (fn [datom] - (d/entity db (:e datom)))) - (keep (fn [ent] - (let [tx-id (:db-sync/tx-id ent)] - {:tx-id tx-id - :tx (:db-sync/normalized-tx-data ent) - :reversed-tx (:db-sync/reversed-tx-data ent)}))) - vec)))) - -(defn- remove-pending-txs! - [repo tx-ids] - (when (seq tx-ids) - (when-let [conn (client-ops-conn repo)] - (ldb/transact! conn - (mapv (fn [tx-id] - [:db/retractEntity [:db-sync/tx-id tx-id]]) - tx-ids)) - (when-let [client (current-client repo)] - (broadcast-rtc-state! client))))) - -(comment - (defn- clear-pending-txs! - [repo] - (when-let [conn (client-ops-conn repo)] - (let [tx-data (->> (d/datoms @conn :avet :db-sync/created-at) - (map (fn [d] - [:db/retractEntity (:e d)])))] - (d/transact! conn tx-data))))) - -(defn get-lookup-id - [x] - (when (and (vector? x) - (= 2 (count x)) - (= :block/uuid (first x))) - (second x))) - -(defn- created-block-uuids - [tx-data] - (->> tx-data - (keep (fn [item] - (when (and (vector? item) - (= :db/add (first item)) - (>= (count item) 4) - (= :block/uuid (nth item 2))) - (nth item 3)))) - set)) - -(defn- created-block-uuid-by-entity-id - [tx-data] - (->> tx-data - (keep (fn [item] - (when (and (vector? item) - (= :db/add (first item)) - (>= (count item) 4) - (= :block/uuid (nth item 2))) - [(second item) (nth item 3)]))) - (into {}))) - -(defn- drop-missing-block-ref-datoms - ([db tx-data] - (drop-missing-block-ref-datoms db tx-data #{})) - ([db tx-data deleted-block-ids] - (if db - (let [created-uuid-by-entity-id (created-block-uuid-by-entity-id tx-data) - created-uuids (set (vals created-uuid-by-entity-id)) - created-block-uuid (fn [entity-id] - (or (get created-uuid-by-entity-id entity-id) - (let [lookup-id (get-lookup-id entity-id)] - (when (contains? created-uuids lookup-id) - lookup-id)))) - add-datom-ref-block-uuids (fn [item] - (when (and (vector? item) - (= :db/add (first item))) - (cond-> [] - (get-lookup-id (second item)) - (conj (get-lookup-id (second item))) - - (and (>= (count item) 4) - (get-lookup-id (nth item 3))) - (conj (get-lookup-id (nth item 3)))))) - ref-invalid? (fn [broken-block-uuids block-uuid] - (and block-uuid - (or (contains? deleted-block-ids block-uuid) - (contains? broken-block-uuids block-uuid) - (and (not (contains? created-uuids block-uuid)) - (nil? (d/entity db [:block/uuid block-uuid])))))) - add-datom-invalid-ref? (fn [broken-block-uuids item] - (some (partial ref-invalid? broken-block-uuids) - (add-datom-ref-block-uuids item))) - broken-new-block-uuids (loop [broken-block-uuids #{}] - (let [next-broken-block-uuids (->> tx-data - (keep (fn [item] - (when (and (vector? item) - (= :db/add (first item)) - (add-datom-invalid-ref? broken-block-uuids item)) - (created-block-uuid (second item))))) - (into broken-block-uuids))] - (if (= broken-block-uuids next-broken-block-uuids) - broken-block-uuids - (recur next-broken-block-uuids))))] - (remove (fn [item] - (when (vector? item) - (let [op (first item) - block-uuid (created-block-uuid (second item))] - (or (and (= :db/add op) - (add-datom-invalid-ref? broken-new-block-uuids item)) - (contains? broken-new-block-uuids block-uuid))))) - tx-data)) - tx-data))) - -(defn- canonical-entity-id - [db e] - (cond - (vector? e) (or (get-lookup-id e) e) - (and (number? e) (not (neg? e))) (or (:block/uuid (d/entity db e)) e) - :else e)) - -(defn- remote-updated-attr-keys - [db tx-data] - (->> tx-data - (keep (fn [item] - (when (and (vector? item) - (>= (count item) 4) - (contains? #{:db/add :db/retract} (first item))) - [(canonical-entity-id db (second item)) - (nth item 2)]))) - set)) - -(defn- drop-remote-conflicted-local-tx - [db remote-updated-keys tx-data] - (if (seq remote-updated-keys) - (remove (fn [item] - (and (vector? item) - (>= (count item) 4) - (contains? #{:db/add :db/retract} (first item)) - (contains? remote-updated-keys - [(canonical-entity-id db (second item)) - (nth item 2)]))) - tx-data) - tx-data)) - -(defn- remote-temp-id? - [x] - (or (and (integer? x) (neg? x)) - (string? x))) - -(defn- remappable-remote-temp-id? - [x] - (and (integer? x) (neg? x))) - -(defn- remote-batch-temp-id - [temp-id] - (str "remote-batch-tempid-" temp-id)) - -(defn- remap-remote-batch-temp-ids - [tx-data] - (let [ops #{:db/add :db/retract :db/retractEntity} - entity-temp-ids (->> tx-data - (keep (fn [item] - (when (and (vector? item) - (>= (count item) 2) - (contains? ops (first item)) - (remappable-remote-temp-id? (second item))) - (second item)))) - distinct) - temp-id-map (when (seq entity-temp-ids) - (zipmap entity-temp-ids - (map remote-batch-temp-id entity-temp-ids)))] - (if (seq temp-id-map) - (mapv (fn [item] - (if (and (vector? item) - (>= (count item) 2) - (contains? ops (first item))) - (let [entity (second item) - item' (if-let [entity' (get temp-id-map entity)] - (assoc item 1 entity') - item)] - (cond-> item' - (>= (count item') 4) - (#(if-let [value' (get temp-id-map (nth % 3))] - (assoc % 3 value') - %)) - - (>= (count item') 5) - (#(if-let [tx' (get temp-id-map (nth % 4))] - (assoc % 4 tx') - %)))) - item)) - tx-data) - tx-data))) - -(defn- lookup-ref? - [x] - (and (vector? x) - (= 2 (count x)) - (keyword? (first x)))) - -(defn- created-lookup->temp-id - [tx-data] - (->> tx-data - (keep (fn [item] - (when (and (vector? item) - (= :db/add (first item)) - (>= (count item) 4) - (contains? #{:block/uuid :db/ident} (nth item 2)) - (remote-temp-id? (second item))) - [[(nth item 2) (nth item 3)] - (second item)]))) - (into {}))) - -(defn- resolve-lookup-refs - [lookup->temp-id tx-data] - (if (seq lookup->temp-id) - (mapv (fn [item] - (if (and (vector? item) - (>= (count item) 2) - (= :db/add (first item))) - (let [entity (second item) - item' (if-let [entity' (and (lookup-ref? entity) - (get lookup->temp-id entity))] - (assoc item 1 entity') - item)] - (if (>= (count item') 4) - (let [value (nth item' 3)] - (if-let [value' (and (lookup-ref? value) - (get lookup->temp-id value))] - (assoc item' 3 value') - item')) - item')) - item)) - tx-data) - tx-data)) - -(defn- flatten-batched-remote-tx-data - [tx-data*] - (loop [remaining tx-data* - lookup->temp-id {} - acc []] - (if-let [tx-data (first remaining)] - (let [remapped-batch (remap-remote-batch-temp-ids tx-data) - lookup->temp-id (merge lookup->temp-id (created-lookup->temp-id remapped-batch)) - resolved-batch (resolve-lookup-refs lookup->temp-id remapped-batch)] - (recur (rest remaining) - lookup->temp-id - (into acc resolved-batch))) - acc))) - -(defn- batched-remote-tx-data? - [tx-data*] - (and (seq tx-data*) - (sequential? (first tx-data*)) - (sequential? (first (first tx-data*))))) - -(defn- rewrite-remote-retract-lookup-datoms - "When a remote batch retracts a block by lookup ref and later recreates the - same uuid using a temp id, rewrite stale :db/add lookup datoms to target the - recreated temp id. Otherwise drop stale lookup adds targeting retracted uuid." - [tx-data] - (let [retracted-uuids (->> tx-data - (keep (fn [item] - (when (and (vector? item) - (= :db/retractEntity (first item))) - (get-lookup-id (second item))))) - set) - recreated-temp-id-by-uuid (->> tx-data - (keep (fn [item] - (when (and (vector? item) - (= :db/add (first item)) - (>= (count item) 4) - (= :block/uuid (nth item 2)) - (remote-temp-id? (second item)) - (contains? retracted-uuids (nth item 3))) - [(nth item 3) (second item)]))) - (into {})) - remap-lookup (fn [x] - (if-let [block-uuid (get-lookup-id x)] - (if (contains? retracted-uuids block-uuid) - (or (get recreated-temp-id-by-uuid block-uuid) - ::drop-item) - x) - x))] - (if (seq retracted-uuids) - (keep (fn [item] - (if (and (vector? item) (>= (count item) 2)) - (let [op (first item) - entity (second item) - has-value? (>= (count item) 4) - value (when has-value? (nth item 3)) - entity' (if (= :db/add op) (remap-lookup entity) entity) - value' (if (and (= :db/add op) has-value?) (remap-lookup value) value)] - (when-not (or (= ::drop-item entity') - (= ::drop-item value') - ;; stale retracts for a retracted lookup entity should be ignored - (and (= :db/retract op) - (contains? retracted-uuids (get-lookup-id entity))) - ;; same for stale adds whose lookup target was retracted - (and (= :db/add op) - (contains? retracted-uuids (get-lookup-id entity)) - (nil? (get recreated-temp-id-by-uuid (get-lookup-id entity))))) - (cond-> item - (and (= :db/add op) (not= entity entity')) - (assoc 1 entity') - (and (= :db/add op) has-value? (not= value value')) - (assoc 3 value')))) - item)) - tx-data) - tx-data))) - -(defn- pin-retract-entity-lookup-to-existing-eid - [db tx-data] - (if db - (let [recreated-uuids (created-block-uuids tx-data)] - (if (seq recreated-uuids) - (mapv (fn [item] - (if (and (vector? item) - (= :db/retractEntity (first item)) - (contains? recreated-uuids (get-lookup-id (second item)))) - (if-let [eid (some-> (d/entity db (second item)) :db/id)] - (assoc item 1 eid) - item) - item)) - tx-data) - tx-data)) - tx-data)) - -(defn- ensure-new-block-timestamps - [db tx-data] - (let [add-datom? (fn [item] - (and (vector? item) - (= :db/add (first item)) - (>= (count item) 4))) - attrs-by-entity (->> tx-data - (filter add-datom?) - (reduce (fn [m item] - (update m (second item) (fnil conj #{}) (nth item 2))) - {})) - block-uuid-by-entity (->> tx-data - (keep (fn [item] - (when (and (add-datom? item) - (= :block/uuid (nth item 2)) - (remote-temp-id? (second item))) - [(second item) (nth item 3)]))) - (into {})) - get-existing-block (fn [entity-id block-uuid] - (or (and db block-uuid (d/entity db [:block/uuid block-uuid])) - (and db (number? entity-id) (not (neg? entity-id)) (d/entity db entity-id)))) - fixup-datoms (mapcat (fn [[entity-id block-uuid]] - (let [attrs (get attrs-by-entity entity-id) - block (get-existing-block entity-id block-uuid) - now (common-util/time-ms) - created-at (or (:block/created-at block) now) - updated-at (or (:block/updated-at block) created-at now)] - (concat - (when-not (contains? attrs :block/created-at) - [[:db/add entity-id :block/created-at created-at]]) - (when-not (contains? attrs :block/updated-at) - [[:db/add entity-id :block/updated-at updated-at]])))) - block-uuid-by-entity)] - (if (seq fixup-datoms) - (into (vec tx-data) fixup-datoms) - tx-data))) - -(defn- sanitize-tx-data - [db tx-data deleted-block-ids] - (let [entity->block-uuid (fn [x] - (or (get-lookup-id x) - (when (and db (number? x) (not (neg? x))) - (:block/uuid (d/entity db x))))) - deleted-ref? (fn [x] - (contains? deleted-block-ids (entity->block-uuid x))) - missing-entity-ref? (fn [x] - (and db - (number? x) - (not (neg? x)) - (nil? (d/entity db x)))) - ref-attr? (fn [a] - (and db - (keyword? a) - (= :db.type/ref - (:db/valueType (d/entity db a))))) - missing-or-deleted-datom? (fn [item] - (when (vector? item) - (let [op (first item) - e (second item) - a (nth item 2 nil) - has-value? (>= (count item) 4) - v (when has-value? (nth item 3)) - value-ref? (and has-value? - (contains? #{:db/add :db/retract} op) - (ref-attr? a))] - (or (and (contains? #{:db/add :db/retract :db/retractEntity} op) - (or (deleted-ref? e) - (missing-entity-ref? e))) - (and value-ref? - (or (deleted-ref? v) - (missing-entity-ref? v))))))) - tx-entity-key (fn [entity] - (or (get-lookup-id entity) - entity)) - drop-orphaning-parent-retracts - (fn [tx-data] - (let [entities-with-parent-add (->> tx-data - (keep (fn [item] - (when (and (vector? item) - (= :db/add (first item)) - (= :block/parent (nth item 2 nil))) - (tx-entity-key (second item))))) - set)] - (remove (fn [item] - (and (vector? item) - (= :db/retract (first item)) - (= :block/parent (nth item 2 nil)) - (not (contains? entities-with-parent-add - (tx-entity-key (second item)))))) - tx-data))) - sanitized-tx-data (->> tx-data - (db-normalize/replace-attr-retract-with-retract-entity-v2 db) - (remove (fn [item] - (or (= :db/retractEntity (first item)) - (and (= :db/retract (first item)) - (contains? non-retractable-block-attrs - (nth item 2)))))) - ;; Notice: rebase should generate larger tx-id than reverse tx - (map (fn [item] - (if (= (count item) 5) - (vec (butlast item)) - item))) - (#(drop-missing-block-ref-datoms db % deleted-block-ids)) - (remove missing-or-deleted-datom?) - drop-orphaning-parent-retracts)] - ;; (when (not= tx-data sanitized-tx-data) - ;; (prn :debug :tx-data tx-data) - ;; (prn :debug :sanitized-tx-data sanitized-tx-data)) - sanitized-tx-data)) - -(defn- db-block-uuids - [db] - (->> (d/datoms db :avet :block/uuid) - (map :v) - set)) - -(defn- resolve-block-uuid - [db tempid->uuid e] - (or (get-lookup-id e) - (get tempid->uuid e) - (when (and (number? e) (not (neg? e))) - (:block/uuid (d/entity db e))))) - -(defn- remote-net-deleted-block-uuids - [db tx-data] - (let [initial-uuids (db-block-uuids db) - alive-uuids (atom initial-uuids) - tempid->uuid (atom {})] - (doseq [item tx-data - :when (vector? item)] - (let [op (first item)] - (cond - (and (= :db/add op) - (>= (count item) 4) - (= :block/uuid (nth item 2))) - (let [e (second item) - block-uuid (nth item 3)] - (when (remote-temp-id? e) - (swap! tempid->uuid assoc e block-uuid)) - (swap! alive-uuids conj block-uuid)) - - (and (= :db/retract op) - (>= (count item) 4) - (= :block/uuid (nth item 2))) - (swap! alive-uuids disj (nth item 3)) - - (= :db/retractEntity op) - (when-let [block-uuid (resolve-block-uuid db @tempid->uuid (second item))] - (swap! alive-uuids disj block-uuid))))) - (set/difference initial-uuids @alive-uuids))) - -(defn- deleted-block-uuids-between - [db-before db-after] - (let [before-uuids (db-block-uuids db-before) - after-uuids (db-block-uuids db-after)] - (set/difference before-uuids after-uuids))) - -(defn- expand-descendant-block-uuids - [db root-uuids] - (loop [queue (seq root-uuids) - seen (set root-uuids)] - (if-let [block-uuid (first queue)] - (let [children (->> (:block/_parent (d/entity db [:block/uuid block-uuid])) - (keep :block/uuid) - (remove seen))] - (recur (concat (rest queue) children) - (into seen children))) - seen))) - -(defn- tx-target-block-uuids - [tx-data] - (->> tx-data - (keep (fn [item] - (when (and (vector? item) - (= :db/add (first item))) - (get-lookup-id (second item))))) - set)) - -(defn- flush-pending! - [repo client] - (let [inflight @(:inflight client) - local-tx (or (client-op/get-local-tx repo) 0) - remote-tx (get @*repo->latest-remote-tx repo) - conn (worker-state/get-datascript-conn repo)] - (when (and conn (= local-tx remote-tx)) ; rebase - (when (empty? inflight) - (when-let [ws (:ws client)] - (when (and (ws-open? ws) (worker-state/online?)) - (let [batch (pending-txs repo {:limit 50})] - (when (seq batch) - (let [tx-ids (mapv :tx-id batch) - txs (mapcat :tx batch) - tx-data (->> txs - (db-normalize/remove-retract-entity-ref @conn) - (drop-missing-block-ref-datoms @conn) - distinct)] - ;; (prn :debug :before-keep-last-update txs) - ;; (prn :debug :upload :tx-data tx-data) - (when (seq txs) - (-> - (p/let [aes-key (when (sync-crypt/graph-e2ee? repo) - (sync-crypt/js headers) - :body payload})] - (if (.-ok resp) - (large-title-object asset-uuid asset-type) - (fail-fast :db-sync/large-title-upload-failed - {:repo repo :status (.-status resp)})))))) - -(defn- download-large-title! - [repo graph-id obj aes-key] - (let [base (http-base-url)] - (when-not (seq base) - (fail-fast :db-sync/missing-field {:repo repo :field :http-base})) - (when-not (seq graph-id) - (fail-fast :db-sync/missing-field {:repo repo :field :graph-id})) - (let [url (asset-url base graph-id (:asset-uuid obj) (:asset-type obj)) - headers (auth-headers)] - (p/let [resp (js/fetch url #js {:method "GET" - :headers (clj->js headers)})] - (when-not (.-ok resp) - (fail-fast :db-sync/large-title-download-failed - {:repo repo :status (.-status resp)})) - (p/let [buf (.arrayBuffer resp) - payload (js/Uint8Array. buf) - payload-str (.decode text-decoder payload) - data (if aes-key - (-> (sync-crypt/> tx-data - (keep (fn [item] - (when (and (vector? item) - (= :db/add (nth item 0)) - (= large-title-object-attr (nth item 2)) - (large-title-object? (nth item 3))) - {:e (nth item 1) - :obj (nth item 3)}))) - (distinct)) - (->> (d/datoms @conn :eavt) - (keep (fn [datom] - (when (= large-title-object-attr (:a datom)) - (let [obj (:v datom)] - (when (large-title-object? obj) - {:e (:e datom) - :obj obj}))))) - (distinct)))] - (when (seq items) - (p/let [aes-key (or aes-key - (when (sync-crypt/graph-e2ee? repo) - (sync-crypt/= n batch-size)) - [(persistent! batch) remaining] - (recur (conj! batch (first remaining)) - (next remaining) - (inc n))))) - -(defn- datom->tx - [datom] - [:db/add (:e datom) (:a datom) (:v datom)]) - -(defn- tx encrypted-datoms)] - (d/transact! (:conn temp) tx-data {:initial-db? true}) - nil)) - :progress-f - (fn [processed total] - (update-progress {:sub-type :upload-progress - :message (if aes-key - (str "Encrypting " processed "/" total) - (str "Preparing " processed "/" total))}))})] - temp)) - -(defn rehydrate-large-titles-from-db! - [repo graph-id] - (when-let [conn (worker-state/get-datascript-conn repo)] - (let [tx-data (mapv (fn [datom] - [:db/add (:e datom) large-title-object-attr (:v datom)]) - (d/datoms @conn :avet large-title-object-attr))] - (rehydrate-large-titles! repo {:tx-data tx-data :graph-id graph-id})))) - -(defn- enqueue-asset-task! [client task] +(defn- enqueue-asset-task! + [client task] (when-let [queue (:asset-queue client)] (swap! queue (fn [prev] (p/then prev (fn [_] (task))))))) -(defn- size max-asset-size) - (do - (log/info :db-sync/asset-too-large {:repo repo - :asset-uuid asset-uuid - :size size}) - (client-op/remove-asset-op repo asset-uuid) - (when-let [client (current-client repo)] - (broadcast-rtc-state! client)) - (p/resolved nil)) - - :else - (-> (upload-remote-asset! repo graph-id asset-uuid asset-type checksum) - (p/then (fn [_] - (when (d/entity @conn [:block/uuid asset-uuid]) - (ldb/transact! - conn - [{:block/uuid asset-uuid - :logseq.property.asset/remote-metadata {:checksum checksum :type asset-type}}] - {:persist-op? true})) - (client-op/remove-asset-op repo asset-uuid) - (when-let [client (current-client repo)] - (broadcast-rtc-state! client)))) - (p/catch (fn [e] - (case (:type (ex-data e)) - :rtc.exception/read-asset-failed - (do - (client-op/remove-asset-op repo asset-uuid) - (when-let [client (current-client repo)] - (broadcast-rtc-state! client))) - - :rtc.exception/upload-asset-failed - nil - - (log/error :db-sync/asset-upload-failed - {:repo repo - :asset-uuid asset-uuid - :error e}))))))) - (fail-fast :db-sync/missing-db {:repo repo :op :process-asset-op})) - - (contains? asset-op :remove-asset) - (-> (client-op/remove-asset-op repo asset-uuid) - (p/then (fn [_] - (when-let [client (current-client repo)] - (broadcast-rtc-state! client)))) - (p/catch (fn [e] - (log/error :db-sync/asset-delete-failed - {:repo repo - :asset-uuid asset-uuid - :error e})))) - - :else - (p/resolved nil)))) - -(defn- process-asset-ops! - [repo client] - (let [graph-id (:graph-id client) - asset-ops (not-empty (client-op/get-all-asset-ops repo)) - parallelism 10] - (if (and (seq graph-id) asset-ops) - (let [queue (atom (vec asset-ops)) - pop-queue! (fn [] - (let [selected (atom nil)] - (swap! queue - (fn [q] - (if (seq q) - (do - (reset! selected (first q)) - (subvec q 1)) - q))) - @selected)) - asset-worker (fn worker [] - (if-let [asset-op (pop-queue!)] - (-> (process-asset-op! repo graph-id asset-op) - (p/then (fn [_] (worker))) - (p/catch (fn [e] - (log/error :db-sync/asset-op-failed - {:repo repo - :asset-uuid (:block/uuid asset-op) - :error e})))) - (p/resolved nil)))] - (->> (range (min parallelism (count asset-ops))) - (mapv (fn [_] (asset-worker))) - (p/all))) - (p/resolved nil)))) - -(defn- enqueue-asset-sync! [repo client] - (enqueue-asset-task! client #(process-asset-ops! repo client))) - -(defn request-asset-download! - [repo asset-uuid] - (when-let [client (current-client repo)] - (let [conn (worker-state/get-datascript-conn repo) - graph-id (:graph-id client) - ent (when conn (d/entity @conn [:block/uuid asset-uuid])) - asset-type (:logseq.property.asset/type ent)] - (-> (p/let [meta (when (seq asset-type) - (worker-state/> - (:tx-data reversed-tx-report) - (keep - (fn [[e a v _t added]] - (when (and (= :block/uuid a) added - (nil? (d/entity (:db-before reversed-tx-report) - [:block/uuid v]))) - (d/entity (:db-after reversed-tx-report) e)))) - distinct))) - -(defn- delete-nodes! - [temp-conn deleted-nodes tx-meta] - (when (seq deleted-nodes) - (let [pages (filter ldb/page? deleted-nodes) - blocks (->> deleted-nodes - (keep (fn [block] - (d/entity @temp-conn [:block/uuid (:block/uuid block)]))) - (remove ldb/page?))] - (when (or (seq blocks) (seq pages)) - (outliner-tx/transact! - (merge tx-meta - {:outliner-op :delete-blocks - :transact-opts {:conn temp-conn}}) - (when (seq blocks) - (outliner-core/delete-blocks! temp-conn blocks {})) - (doseq [page pages] - (worker-page/delete! temp-conn (:block/uuid page) {}))))))) - -(defn- fix-tx! - [temp-conn remote-tx-report rebase-tx-report tx-meta] - (let [cycle-tx-report (sync-cycle/fix-cycle! temp-conn remote-tx-report rebase-tx-report - {:tx-meta tx-meta})] - (sync-order/fix-duplicate-orders! temp-conn - (mapcat :tx-data [remote-tx-report - rebase-tx-report - cycle-tx-report]) - tx-meta))) - -(defn- get-reverse-tx-data - [local-txs] - (let [tx-data (->> local-txs - reverse - (mapcat :reversed-tx) - drop-non-retractable-attr-datoms) - retract-block-ids (->> (keep (fn [[op e a _v _t]] - (when (and (= op :db/retract) (= :block/uuid a)) - e)) tx-data) - set) - tx-data' (if (seq retract-block-ids) - (remove (fn [[_op e _a v]] - (or (contains? retract-block-ids e) - (contains? retract-block-ids v))) - tx-data) - tx-data)] - - (->> - tx-data' - (concat (map (fn [id] [:db/retractEntity id]) retract-block-ids))))) - -(defn- apply-remote-tx-with-local-changes! - [{:keys [conn local-txs reversed-tx-data safe-remote-tx-data - temp-tx-meta *remote-tx-report *reversed-tx-report *remote-deleted-ids *rebase-tx-data]}] - (let [batch-tx-meta {:rtc-tx? true}] - (ldb/transact-with-temp-conn! - conn - batch-tx-meta - (fn [temp-conn _*batch-tx-data] - (let [tx-meta temp-tx-meta - reversed-tx-report (ldb/transact! temp-conn reversed-tx-data (assoc tx-meta :op :reverse)) - _ (reset! *reversed-tx-report reversed-tx-report) - ;; 2. transact remote tx-data - remote-tx-report (let [tx-meta (assoc tx-meta :op :transact-remote-tx-data)] - (ldb/transact! temp-conn safe-remote-tx-data tx-meta)) - _ (reset! *remote-tx-report remote-tx-report) - remote-deleted-block-ids (->> (deleted-block-uuids-between (:db-before remote-tx-report) - (:db-after remote-tx-report)) - (expand-descendant-block-uuids (:db-before remote-tx-report))) - remote-deleted-block-ids (set/difference remote-deleted-block-ids - (tx-target-block-uuids safe-remote-tx-data)) - remote-deleted-blocks (keep (fn [block-uuid] - (d/entity (:db-before remote-tx-report) - [:block/uuid block-uuid])) - remote-deleted-block-ids) - local-deleted-blocks (get-local-deleted-blocks reversed-tx-report reversed-tx-data) - deleted-block-ids (set/union (set (map :block/uuid local-deleted-blocks)) - remote-deleted-block-ids) - _ (when (seq remote-deleted-blocks) - (reset! *remote-deleted-ids (set (map :block/uuid remote-deleted-blocks)))) - deleted-nodes (concat local-deleted-blocks remote-deleted-blocks) - deleted-ids (set (keep :block/uuid deleted-nodes)) - ;; 3. rebase pending local txs - rebase-tx-report (when (seq local-txs) - (let [pending-tx-data (mapcat :tx local-txs) - remote-db (or (:db-after remote-tx-report) - (:db-after reversed-tx-report)) - remote-updated-keys (remote-updated-attr-keys remote-db safe-remote-tx-data) - remote-tx-data-set (->> safe-remote-tx-data - (map (fn [item] - (if (and (vector? item) - (= 5 (count item))) - (vec (butlast item)) - item))) - set) - pending-tx-data (drop-remote-conflicted-local-tx - remote-db - remote-updated-keys - pending-tx-data) - rebased-tx-data (->> (sanitize-tx-data - remote-db - pending-tx-data - deleted-block-ids) - (remove remote-tx-data-set))] - (when (seq rebased-tx-data) - (ldb/transact! temp-conn rebased-tx-data (assoc tx-meta :op :rebase))))) - ;; 4. fix tx data and delete nodes - db @temp-conn - deleted-nodes (keep (fn [id] (d/entity db [:block/uuid id])) deleted-ids)] - (fix-tx! temp-conn remote-tx-report rebase-tx-report (assoc tx-meta :op :fix)) - (delete-nodes! temp-conn deleted-nodes (assoc tx-meta :op :delete-blocks)))) - {:listen-db (fn [{:keys [tx-meta tx-data]}] - (when-not (contains? #{:reverse :transact-remote-tx-data} (:op tx-meta)) - (swap! *rebase-tx-data into tx-data)))}))) - -(defn- apply-remote-tx-without-local-changes! - [{:keys [conn safe-remote-tx-data temp-tx-meta]}] - (ldb/transact-with-temp-conn! - conn - {:rtc-tx? true - :without-local-changes? true} - (fn [temp-conn] - (when (seq safe-remote-tx-data) - (let [tx-meta (assoc temp-tx-meta :op :transact-remote-tx-data) - remote-tx-report (ldb/transact! temp-conn safe-remote-tx-data tx-meta) - remote-deleted-block-ids (->> (deleted-block-uuids-between (:db-before remote-tx-report) - (:db-after remote-tx-report)) - (expand-descendant-block-uuids (:db-before remote-tx-report))) - remote-deleted-block-ids (set/difference remote-deleted-block-ids - (tx-target-block-uuids safe-remote-tx-data)) - deleted-nodes (keep (fn [id] - (d/entity (:db-before remote-tx-report) - [:block/uuid id])) - remote-deleted-block-ids)] - (when (seq deleted-nodes) - (delete-nodes! temp-conn deleted-nodes - (assoc temp-tx-meta :op :delete-blocks)))))))) - -(defn- apply-remote-tx! - [repo client tx-data*] - (if (batched-remote-tx-data? tx-data*) - (apply-remote-tx! repo client (flatten-batched-remote-tx-data tx-data*)) - (if-let [conn (worker-state/get-datascript-conn repo)] - (let [tx-data (->> tx-data* - drop-non-retractable-attr-datoms - rewrite-remote-retract-lookup-datoms - (pin-retract-entity-lookup-to-existing-eid @conn) - (ensure-new-block-timestamps @conn)) - local-txs (pending-txs repo) - reversed-tx-data (get-reverse-tx-data local-txs) - has-local-changes? (seq reversed-tx-data) - *remote-tx-report (atom nil) - *reversed-tx-report (atom nil) - *remote-deleted-ids (atom #{}) - *rebase-tx-data (atom []) - db @conn - remote-deleted-block-ids (remote-net-deleted-block-uuids db tx-data) - remote-deleted-blocks (keep (fn [block-uuid] - (d/entity db [:block/uuid block-uuid])) - remote-deleted-block-ids) - safe-remote-tx-data (seq tx-data) - temp-tx-meta {:rtc-tx? true - :temp-conn? true - :gen-undo-ops? false - :persist-op? false} - apply-context {:conn conn - :local-txs local-txs - :reversed-tx-data reversed-tx-data - :safe-remote-tx-data safe-remote-tx-data - :remote-deleted-blocks remote-deleted-blocks - :remote-deleted-block-ids remote-deleted-block-ids - :temp-tx-meta temp-tx-meta - :*remote-tx-report *remote-tx-report - :*reversed-tx-report *reversed-tx-report - :*remote-deleted-ids *remote-deleted-ids - :*rebase-tx-data *rebase-tx-data} - tx-report (if has-local-changes? - (apply-remote-tx-with-local-changes! apply-context) - (apply-remote-tx-without-local-changes! apply-context)) - remote-tx-report @*remote-tx-report] - ;; persist rebase tx to client ops - (when has-local-changes? - (when-let [tx-data (seq @*rebase-tx-data)] - (let [remote-tx-data-set (set tx-data*) - remote-created-block-uuids (created-block-uuids tx-data*) - keep-local-retract-entity? - (fn [item] - (and (vector? item) - (= :db/retractEntity (first item)) - (contains? remote-created-block-uuids - (get-lookup-id (second item))))) - normalized (->> tx-data - (normalize-tx-data (:db-after tx-report) - (or (:db-after remote-tx-report) - (:db-after @*reversed-tx-report))) - (remove (fn [[op _e a]] - (and (= op :db/retract) - (contains? #{:block/updated-at :block/created-at :block/title} a))))) - normalized-tx-data (->> normalized - (remove (fn [item] - (and (contains? remote-tx-data-set item) - (not (keep-local-retract-entity? item))))) - (drop-missing-block-ref-datoms (:db-after tx-report))) - reversed-datoms (reverse-tx-data tx-data)] - (when (seq normalized-tx-data) - (persist-local-tx! repo normalized-tx-data reversed-datoms {:op :rtc-rebase})))) - (remove-pending-txs! repo (map :tx-id local-txs))) - - (when-let [*inflight (:inflight client)] - (reset! *inflight [])) - - (-> (rehydrate-large-titles! repo {:tx-data tx-data - :graph-id (:graph-id client)}) - (p/catch (fn [error] - (log/error :db-sync/large-title-rehydrate-failed - {:repo repo :error error})))) - - (reset! *remote-tx-report nil)) - (fail-fast :db-sync/missing-db {:repo repo :op :apply-remote-tx})))) - -(defn- handle-message! [repo client raw] - (let [message (-> raw parse-message coerce-ws-server-message)] - (when-not (map? message) - (fail-fast :db-sync/response-parse-failed {:repo repo :raw raw})) - (let [local-tx (or (client-op/get-local-tx repo) 0) - remote-tx (:t message)] - (when remote-tx (swap! *repo->latest-remote-tx assoc repo remote-tx)) - - (case (:type message) - "hello" (do - (require-non-negative remote-tx {:repo repo :type "hello"}) - (broadcast-rtc-state! client) - (when (> remote-tx local-tx) - (send! (:ws client) {:type "pull" :since local-tx})) - (enqueue-asset-sync! repo client) - (flush-pending! repo client)) - "online-users" (let [users (:online-users message)] - (when (and (some? users) (not (sequential? users))) - (fail-fast :db-sync/invalid-field - {:repo repo :type "online-users" :field :online-users})) - (update-online-users! client (or users []))) - "presence" (let [{:keys [user-id editing-block-uuid]} message - current-user-id (get-user-uuid)] - (when-not (= current-user-id user-id) - (update-user-presence! client user-id editing-block-uuid))) - ;; Upload response - "tx/batch/ok" (do - (require-non-negative remote-tx {:repo repo :type "tx/batch/ok"}) - (client-op/update-local-tx repo remote-tx) - (clear-last-sync-error! client) - (broadcast-rtc-state! client) - (remove-pending-txs! repo @(:inflight client)) - (reset! (:inflight client) []) - (flush-pending! repo client)) - ;; Download response - "pull/ok" (when (> remote-tx local-tx) - (let [txs (:txs message) - _ (require-non-negative remote-tx {:repo repo :type "pull/ok"}) - _ (require-seq txs {:repo repo :type "pull/ok" :field :txs}) - txs-data (mapv (fn [data] - (parse-transit (:tx data) {:repo repo :type "pull/ok"})) - txs)] - (-> (if (seq txs-data) - (p/let [graph-e2ee? (sync-crypt/graph-e2ee? repo) - aes-key (sync-crypt/= stale-ms ws-stale-timeout-ms) (log/warn :db-sync/ws-stale-timeout {:repo repo :stale-ms stale-ms}) - (try - (.close ws) - (catch :default _ - nil))))))) + (try (.close ws) (catch :default _ nil))))))) ws-stale-kill-interval-ms)] (reset! *timer timer)))) client) -(defn- stop-client! [client] +(defn- stop-client! + [client] (clear-stale-ws-loop-timer! client) (when-let [reconnect (:reconnect client)] (clear-reconnect-timer! reconnect)) @@ -2026,36 +235,7 @@ (detach-ws-handlers! ws) (update-online-users! client []) (set-ws-state! client :closed) - (try - (.close ws) - (catch :default _ - nil)))) - -(defn- connect! [repo client url token] - (when (:ws client) - (stop-client! client)) - ;; use cache token for faster websocket connection - (when-let [token' (or token (auth-token))] - (let [ws (platform/websocket-connect (platform/current) - (append-token url token')) - updated (assoc client :ws ws)] - (attach-ws-handlers! repo updated ws url) - (set! (.-onopen ws) - (fn [_] - (reset-reconnect! updated) - (touch-last-ws-message! updated) - (set-ws-state! updated :open) - (clear-last-sync-error! updated) - (send! ws {:type "hello" :client repo}) - (enqueue-asset-sync! repo updated))) - (close-stale-ws-loop updated ws)))) - -(defn stop! - [] - (when-let [client @worker-state/*db-sync-client] - (stop-client! client) - (reset! worker-state/*db-sync-client nil)) - (p/resolved nil)) + (try (.close ws) (catch :default _ nil)))) (defn- active-client-for? [client repo graph-id] @@ -2066,391 +246,112 @@ (or (= :open ws-state) (contains? #{0 1} ws-ready-state))))) +(defn- connect! + [repo client url token] + (when (:ws client) + (stop-client! client)) + (when-let [token' (or token (auth-token))] + (let [ws (platform/websocket-connect (platform/current) (sync-transport/append-token url token')) + updated (assoc client :ws ws)] + (attach-ws-handlers! repo updated ws url) + (set! (.-onopen ws) + (fn [_] + (reset-reconnect! updated) + (touch-last-ws-message! updated) + (set-ws-state! updated :open) + (sync-util/clear-last-sync-error! updated) + (send! ws {:type "hello" :client repo}) + (sync-assets/enqueue-asset-sync! + repo updated + {:enqueue-asset-task-f enqueue-asset-task! + :current-client-f current-client + :broadcast-rtc-state!-f broadcast-rtc-state! + :fail-fast-f fail-fast}))) + (close-stale-ws-loop updated ws)))) + +(defn stop! + [] + (when-let [client @worker-state/*db-sync-client] + (stop-client! client) + (reset! worker-state/*db-sync-client nil)) + (p/resolved nil)) + (defn start! [repo] - (let [base (ws-base-url)] - (if-not (and (string? base) (seq base)) - (do - (log/info :db-sync/start-skipped {:repo repo :graph-id (get-graph-id repo) :base base}) - (p/resolved nil)) - (p/let [graph-id ( - (p/do! - (stop!) - (p/let [client (ensure-client-state! repo) - url (format-ws-url base graph-id) - _ (ensure-client-graph-uuid! repo graph-id) - connected (assoc client :graph-id graph-id) - token ( conn deref)] - (when (and db (seq tx-data)) - (let [normalized (normalize-tx-data db-after db-before tx-data) - reversed-datoms (reverse-tx-data tx-data)] - (when (seq normalized) - (persist-local-tx! repo normalized reversed-datoms tx-meta) - (when-let [client @worker-state/*db-sync-client] - (when (= repo (:repo client)) - (let [send-queue (:send-queue client)] - (swap! send-queue - (fn [prev] - (p/then prev - (fn [_] - (when-let [current @worker-state/*db-sync-client] - (when (= repo (:repo current)) - (when-let [ws (:ws current)] - (when (ws-open? ws) - (flush-pending! repo current)))))))))))))))))) - -(defn handle-local-tx! - [repo {:keys [tx-data tx-meta db-after] :as tx-report}] - (when (and (seq tx-data) - (not (:rtc-tx? tx-meta)) - (not (:sync-download-graph? tx-meta)) - (:persist-op? tx-meta true) - (:kv/value (d/entity db-after :logseq.kv/graph-remote?))) - (enqueue-local-tx! repo tx-report) - (when-let [client @worker-state/*db-sync-client] - (when (= repo (:repo client)) - (enqueue-asset-sync! repo client))))) - -(defn- fetch-kvs-rows - [db last-addr limit] - (.exec db #js {:sql "select addr, content, addresses from kvs where addr > ? order by addr asc limit ?" - :bind #js [last-addr limit] - :rowMode "array"})) - -(defn- count-kvs-rows - [db] - (when-let [result (-> (.exec db #js {:sql "select count(*) from kvs" - :rowMode "array"}) - first)] - (first (bean/->clj result)))) - -(defn- normalize-snapshot-row-value [value] - (cond - (nil? value) nil - (string? value) value - (number? value) value - (boolean? value) value - (= "bigint" (js* "typeof ~{}" value)) (str value) - (instance? js/Uint8Array value) (.decode text-decoder value) - (instance? js/ArrayBuffer value) (.decode text-decoder (js/Uint8Array. value)) - :else (str value))) - -(defn- normalize-snapshot-rows [rows] - (mapv (fn [row] - (mapv normalize-snapshot-row-value (vec row))) - (array-seq rows))) - -(defn- encode-snapshot-rows [rows] - (.encode snapshot-text-encoder (sqlite-util/write-transit-str rows))) - -(defn- frame-bytes [^js data] - (let [len (.-byteLength data) - out (js/Uint8Array. (+ 4 len)) - view (js/DataView. (.-buffer out))] - (.setUint32 view 0 len false) - (.set out data 4) - out)) - -(defn- uuid - [repo graph-id] - (when-not (seq graph-id) - (fail-fast :db-sync/missing-field {:repo repo :field :graph-id})) - (try - (uuid graph-id) - (catch :default e - (fail-fast :db-sync/invalid-field {:repo repo - :field :graph-id - :value graph-id - :error e})))) - -(defn- set-graph-sync-metadata! - [repo graph-id graph-e2ee?] - (when-let [conn (worker-state/get-datascript-conn repo)] - (ldb/transact! conn [(ldb/kv :logseq.kv/graph-uuid (graph-id->uuid repo graph-id)) - (ldb/kv :logseq.kv/graph-remote? true) - (ldb/kv :logseq.kv/graph-rtc-e2ee? (true? graph-e2ee?))] - {:persist-op? false}))) - -(defn- persist-upload-graph-identity! - [repo graph-id graph-e2ee?] - (let [graph-id (some-> graph-id str) - graph-e2ee? (normalize-graph-e2ee? graph-e2ee?)] - (when-not (seq graph-id) - (fail-fast :db-sync/missing-field {:repo repo :field :graph-id})) - (set-graph-sync-metadata! repo graph-id graph-e2ee?) - (ensure-client-graph-uuid! repo graph-id) - {:graph-id graph-id - :graph-e2ee? graph-e2ee?})) - -(defn list-remote-graphs! - [] - (let [base (http-base-url)] - (if-not (seq base) - (p/resolved []) - (do - (require-auth-token! {:op :list-remote-graphs}) - (p/let [resp (fetch-json (str base "/graphs") - {:method "GET"} - {:response-schema :graphs/list})] - (vec (or (:graphs resp) []))))))) - -(defn- repo common-config/strip-leading-db-version-prefix) - schema-version (some-> (worker-state/get-datascript-conn repo) - deref - ldb/get-graph-schema-version - :major - str) - graph-e2ee? (normalize-graph-e2ee? graph-e2ee?)] + (let [base (ws-base-url) + graph-id (sync-util/get-graph-id repo) + start-target [repo graph-id] + inflight-target @*start-inflight-target + current @worker-state/*db-sync-client] (cond - (not (seq base)) - (fail-fast :db-sync/missing-field {:repo repo :field :http-base}) + (not (and (string? base) (seq base) (seq graph-id))) + (do + (log/info :db-sync/start-skipped {:repo repo :graph-id graph-id :base base}) + (p/resolved nil)) - (not (seq graph-name)) - (fail-fast :db-sync/missing-field {:repo repo :field :graph-name}) + (= start-target inflight-target) + (p/resolved nil) + + (active-client-for? current repo graph-id) + (do + (broadcast-rtc-state! current) + (p/resolved nil)) :else (do - (require-auth-token! {:repo repo :field :auth-token}) - (p/let [body (coerce-http-request :graphs/create - {:graph-name graph-name - :schema-version schema-version - :graph-e2ee? graph-e2ee?}) - _ (when (nil? body) - (fail-fast :db-sync/invalid-field {:repo repo - :field :create-graph-body})) - result (fetch-json (str base "/graphs") - {:method "POST" - :headers {"content-type" "application/json"} - :body (js/JSON.stringify (clj->js body))} - {:response-schema :graphs/create}) - graph-id (:graph-id result) - graph-e2ee? (normalize-graph-e2ee? (if (contains? result :graph-e2ee?) - (:graph-e2ee? result) - graph-e2ee?))] - (when-not (seq graph-id) - (fail-fast :db-sync/missing-field {:repo repo - :field :graph-id - :op :create-graph})) - (persist-upload-graph-identity! repo graph-id graph-e2ee?)))))) + (reset! *start-inflight-target start-target) + (-> + (p/do! + (stop!) + (p/let [client (ensure-client-state! repo) + url (sync-transport/format-ws-url base graph-id) + _ (ensure-client-graph-uuid! repo graph-id) + connected (assoc client :graph-id graph-id) + token ( repo common-config/strip-leading-db-version-prefix) - local-graph-e2ee? (normalize-graph-e2ee? (sync-crypt/graph-e2ee? repo))] - (if-not (seq target-graph-name) - (fail-fast :db-sync/missing-field {:repo repo :field :graph-name}) - (p/let [remote-graphs (list-remote-graphs!) - matching-graphs (filterv (fn [{:keys [graph-name]}] - (= target-graph-name graph-name)) - remote-graphs)] - (cond - (> (count matching-graphs) 1) - (fail-fast :db-sync/ambiguous-graph-match {:repo repo - :graph-name target-graph-name - :match-count (count matching-graphs)}) +(defn enqueue-local-tx! + [repo tx-report] + (sync-apply/enqueue-local-tx! repo tx-report)) - (= 1 (count matching-graphs)) - (let [{:keys [graph-id graph-e2ee?]} (first matching-graphs)] - (persist-upload-graph-identity! repo graph-id (if (contains? (first matching-graphs) :graph-e2ee?) - graph-e2ee? - local-graph-e2ee?))) +(defn handle-local-tx! + [repo tx-report] + (sync-apply/handle-local-tx! repo tx-report)) - :else - ( resp .-headers (.get "content-length"))] - (let [parsed (js/parseInt raw 10)] - (when-not (js/isNaN parsed) - parsed)))) - -(defn- download-graph-with-id! - ([repo graph-id graph-e2ee?] - (download-graph-with-id! repo graph-id graph-e2ee? {})) - ([repo graph-id graph-e2ee? {:keys [batch-size on-datoms-batch] - :or {batch-size 25000}}] - (let [base (http-base-url) - graph-e2ee? (if (nil? graph-e2ee?) true (true? graph-e2ee?))] - (cond - (not (seq base)) - (fail-fast :db-sync/missing-field {:repo repo :field :http-base}) - - (not (seq graph-id)) - (fail-fast :db-sync/missing-field {:repo repo :field :graph-id}) - - :else - (do - (require-auth-token! {:repo repo :field :auth-token}) - (p/let [_ (download-log! graph-id :download-progress "Preparing graph snapshot download") - pull-resp (fetch-json (str base "/sync/" graph-id "/pull") - {:method "GET"} - {:response-schema :sync/pull}) - remote-tx (:t pull-resp) - _ (when-not (integer? remote-tx) - (fail-fast :db-sync/invalid-field {:repo repo - :field :remote-tx - :value remote-tx})) - snapshot-resp (fetch-json (str base "/sync/" graph-id "/snapshot/download") - {:method "GET"} - {:response-schema :sync/snapshot-download}) - snapshot-url (:url snapshot-resp) - _ (when-not (seq snapshot-url) - (fail-fast :db-sync/missing-field {:repo repo - :graph-id graph-id - :field :snapshot-url})) - resp (js/fetch snapshot-url - (clj->js (with-auth-headers {:method "GET"}))) - total-bytes (response-content-length resp) - _ (download-log! graph-id - :download-progress - (if (number? total-bytes) - (str "Start downloading graph snapshot, file size: " total-bytes) - "Start downloading graph snapshot")) - _ (when-not (.-ok resp) - (fail-fast :db-sync/snapshot-download-failed {:repo repo - :graph-id graph-id - :status (.-status resp)})) - collect-datoms? (nil? on-datoms-batch) - datoms* (atom []) - datom-count* (atom 0) - on-datoms-batch* (fn [datoms] - (swap! datom-count* + (count datoms)) - (if collect-datoms? - (do - (swap! datoms* into datoms) - (p/resolved nil)) - (on-datoms-batch datoms))) - _ ( {:repo repo - :graph-id graph-id - :remote-tx remote-tx - :graph-e2ee? graph-e2ee? - :datom-count @datom-count*} - collect-datoms? - (assoc :datoms @datoms*)))))))) - -(defn download-graph! - [repo] - (let [graph-id (get-graph-id repo) - graph-e2ee?-raw (sync-crypt/graph-e2ee? repo) - graph-e2ee? (if (nil? graph-e2ee?-raw) true (true? graph-e2ee?-raw))] - (download-graph-with-id! repo graph-id graph-e2ee?))) - -(defn download-graph-by-id! - ([repo graph-id graph-e2ee?] - (download-graph-with-id! repo graph-id graph-e2ee?)) - ([repo graph-id graph-e2ee? opts] - (download-graph-with-id! repo graph-id graph-e2ee? opts))) +(defn rehydrate-large-titles-from-db! + [repo graph-id] + (sync-apply/rehydrate-large-titles-from-db! repo graph-id)) (defn upload-graph! [repo] - (let [base (http-base-url)] + (sync-upload/upload-graph! repo)) + +(defn download-graph! + [repo] + (sync-download/download-graph! repo)) + +(defn download-graph-by-id! + [repo graph-id graph-e2ee?] + (sync-download/download-graph-by-id! repo graph-id graph-e2ee?)) + +(defn list-remote-graphs! + [] + (let [base (sync-auth/http-base-url @worker-state/*db-sync-config)] (if-not (seq base) - (p/rejected (ex-info "db-sync missing upload info" - {:repo repo :base base :graph-id nil})) - (if-let [source-conn (worker-state/get-datascript-conn repo)] - (p/let [{:keys [graph-id graph-e2ee?]} ( - (p/loop [last-addr -1 - first-batch? true - loaded 0] - (let [rows (fetch-kvs-rows db last-addr upload-kvs-batch-size)] - (if (empty? rows) - (do - (client-op/remove-local-tx repo) - (client-op/update-local-tx repo 0) - (client-op/add-all-exists-asset-as-ops repo) - (update-progress {:sub-type :upload-completed - :message "Graph upload finished!"}) - {:graph-id graph-id}) - (let [max-addr (apply max (map first rows)) - rows (normalize-snapshot-rows rows) - loaded' (+ loaded (count rows)) - finished? (= loaded' total-rows) - upload-url (str base "/sync/" graph-id "/snapshot/upload?reset=" - (if first-batch? "true" "false") - "&finished=" - (if finished? "true" "false"))] - (p/let [{:keys [body encoding]} ( {"content-type" snapshot-content-type} - (string? encoding) (assoc "content-encoding" encoding)) - _ (fetch-json upload-url - {:method "POST" - :headers headers - :body body} - {:response-schema :sync/snapshot-upload})] - (update-progress {:sub-type :upload-progress - :message (str "Uploading " loaded' "/" total-rows)}) - (p/recur max-addr false loaded')))))) - (p/finally - (fn [] - (cleanup-temp-sqlite! temp))))) - (p/rejected (ex-info "db-sync missing datascript conn" - {:repo repo})))))) + (p/resolved []) + (do + (sync-util/require-auth-token! {:op :list-remote-graphs}) + (p/let [resp (sync-transport/fetch-json (str base "/graphs") + {:method "GET"} + {:response-schema :graphs/list})] + (vec (or (:graphs resp) []))))))) diff --git a/src/main/frontend/worker/sync/apply_txs.cljs b/src/main/frontend/worker/sync/apply_txs.cljs new file mode 100644 index 0000000000..14048b7f0e --- /dev/null +++ b/src/main/frontend/worker/sync/apply_txs.cljs @@ -0,0 +1,1032 @@ +(ns frontend.worker.sync.apply-txs + "Pending tx and remote tx application helpers for db sync." + (:require [clojure.set :as set] + [clojure.string :as string] + [datascript.core :as d] + [frontend.worker.shared-service :as shared-service] + [frontend.worker.state :as worker-state] + [frontend.worker.sync.assets :as sync-assets] + [frontend.worker.sync.auth :as sync-auth] + [frontend.worker.sync.client-op :as client-op] + [frontend.worker.sync.const :as rtc-const] + [frontend.worker.sync.crypt :as sync-crypt] + [frontend.worker.sync.download :as sync-download] + [frontend.worker.sync.large-title :as sync-large-title] + [frontend.worker.sync.presence :as sync-presence] + [frontend.worker.sync.transport :as sync-transport] + [frontend.worker.undo-redo :as worker-undo-redo] + [lambdaisland.glogi :as log] + [logseq.db :as ldb] + [logseq.db-sync.order :as sync-order] + [logseq.db.common.normalize :as db-normalize] + [logseq.db.frontend.property.type :as db-property-type] + [logseq.db.sqlite.util :as sqlite-util] + [logseq.outliner.core :as outliner-core] + [logseq.outliner.op :as outliner-op] + [logseq.outliner.op.construct :as op-construct] + [logseq.outliner.page :as outliner-page] + [logseq.outliner.property :as outliner-property] + [logseq.outliner.recycle :as outliner-recycle] + [promesa.core :as p] + [frontend.worker.sync.util :refer [fail-fast]])) + +(defonce *repo->latest-remote-tx (atom {})) +(defonce *repo->latest-remote-checksum (atom {})) + +(declare enqueue-asset-task!) + +(defn- current-client [repo] + (sync-presence/current-client worker-state/*db-sync-client repo)) + +(defn- client-ops-conn [repo] + (sync-presence/client-ops-conn worker-state/get-client-ops-conn repo)) + +(defn- sync-counts [repo] + (sync-presence/sync-counts + {:get-datascript-conn worker-state/get-datascript-conn + :get-client-ops-conn worker-state/get-client-ops-conn + :get-pending-local-tx-count client-op/get-pending-local-tx-count + :get-unpushed-asset-ops-count client-op/get-unpushed-asset-ops-count + :get-local-tx client-op/get-local-tx + :get-local-checksum client-op/get-local-checksum + :get-graph-uuid client-op/get-graph-uuid + :latest-remote-tx @*repo->latest-remote-tx + :latest-remote-checksum @*repo->latest-remote-checksum} + repo)) + +(defn- broadcast-rtc-state! [client] + (when client + (shared-service/broadcast-to-clients! + :rtc-sync-state + (sync-presence/rtc-state-payload sync-counts client)))) + +(def reverse-data-ignored-attrs + #{:logseq.property.embedding/hnsw-label-updated-at + :block/tx-id}) + +(def rtc-ignored-attrs + (set/union + reverse-data-ignored-attrs + rtc-const/ignore-attrs-when-syncing + rtc-const/ignore-entities-when-init-upload)) + +(defn- remove-ignored-attrs [tx-data] + (remove (fn [d] (contains? rtc-ignored-attrs (:a d))) tx-data)) + +(defn- normalize-tx-data [db-after db-before tx-data] + (->> tx-data + remove-ignored-attrs + (db-normalize/normalize-tx-data db-after db-before) + (remove (fn [[_op e]] + (contains? rtc-const/ignore-entities-when-init-upload e))))) + +(declare replay-canonical-outliner-op! + invalid-rebase-op!) + +(defn reverse-tx-data [_db-before db-after tx-data] + (->> tx-data + reverse + (keep (fn [[e a v t added]] + (when (and (some? a) (some? v) (some? t) (boolean? added)) + [(if added :db/retract :db/add) e a v t]))) + (db-normalize/replace-attr-retract-with-retract-entity-v2 db-after))) + +(defn normalize-rebased-pending-tx + [{:keys [db-before db-after tx-data]}] + {:normalized-tx-data (normalize-tx-data db-after db-before tx-data) + :reversed-datoms (reverse-tx-data db-before db-after tx-data)}) + +(defn- auth-headers [] + (sync-auth/auth-headers (worker-state/get-id-token))) + +(defn- send! [ws message] + (sync-transport/send! sync-transport/coerce-ws-client-message ws message)) + +(defn- ws-open? [ws] + (sync-transport/ws-open? ws)) + +(defn- upload-large-title! [repo graph-id title aes-key] + (sync-large-title/upload-large-title! + {:repo repo + :graph-id graph-id + :title title + :aes-key aes-key + :http-base (sync-auth/http-base-url @worker-state/*db-sync-config) + :auth-headers (auth-headers) + :fail-fast-f fail-fast + :encrypt-text-value-f sync-crypt/ (:db-sync/forward-outliner-ops tx-meta) + seq + vec) + (some-> (:outliner-ops tx-meta) + seq + vec))] + (and (seq explicit-forward-ops) + (contains-transact-op? explicit-forward-ops)))) + +(defn- derive-history-outliner-ops + [db-before db-after tx-data tx-meta] + ;; Rebased txs can carry explicit forward ops like [[:transact nil]]. + ;; Keep them as raw-tx placeholders instead of forcing semantic canonicalization. + (if (explicit-transact-forward-op? tx-meta) + {:forward-outliner-ops canonical-transact-op + :inverse-outliner-ops nil} + (op-construct/derive-history-outliner-ops db-before db-after tx-data tx-meta))) + +(defn- inferred-outliner-ops? + [tx-meta] + (and (nil? (:outliner-ops tx-meta)) + (not (:undo? tx-meta)) + (not (:redo? tx-meta)) + (not= :batch-import-edn (:outliner-op tx-meta)))) + +(declare apply-history-action!) +(defn- persist-local-tx! [repo {:keys [db-before db-after tx-data tx-meta] :as tx-report} normalized-tx-data reversed-datoms] + (when-let [conn (client-ops-conn repo)] + (let [tx-id (or (:db-sync/tx-id tx-meta) (random-uuid)) + existing-ent (d/entity @conn [:db-sync/tx-id tx-id]) + should-inc-pending? (not= true (:db-sync/pending? existing-ent)) + now (.now js/Date) + {:keys [forward-outliner-ops inverse-outliner-ops]} + (derive-history-outliner-ops db-before db-after tx-data tx-meta) + inferred-outliner-ops?' (inferred-outliner-ops? tx-meta)] + ;; (prn :debug :forward-outliner-ops) + ;; (cljs.pprint/pprint forward-outliner-ops) + ;; (prn :debug :inverse-outliner-ops) + ;; (cljs.pprint/pprint inverse-outliner-ops) + (ldb/transact! conn [{:db-sync/tx-id tx-id + :db-sync/normalized-tx-data normalized-tx-data + :db-sync/reversed-tx-data reversed-datoms + :db-sync/pending? true + :db-sync/outliner-op (:outliner-op tx-meta) + :db-sync/undo-redo? (cond + (:undo? tx-meta) + :undo + (:redo? tx-meta) + :redo + :else + :none) + :db-sync/forward-outliner-ops forward-outliner-ops + :db-sync/inverse-outliner-ops inverse-outliner-ops + :db-sync/inferred-outliner-ops? inferred-outliner-ops?' + :db-sync/created-at now}]) + (worker-undo-redo/gen-undo-ops! repo tx-report tx-id + {:apply-history-action! apply-history-action!}) + (when should-inc-pending? + (client-op/adjust-pending-local-tx-count! repo 1) + (when-let [client (current-client repo)] + (broadcast-rtc-state! client))) + tx-id))) + +(defn pending-txs + [repo & {:keys [limit]}] + (when-let [conn (client-ops-conn repo)] + (let [db @conn + datoms (d/datoms db :avet :db-sync/created-at) + take-limit (fn [c] + (if limit (take limit c) c))] + (->> datoms + (map (fn [datom] + (d/entity db (:e datom)))) + (filter (fn [e] (:db-sync/pending? e))) + take-limit + (keep (fn [ent] + (let [tx-id (:db-sync/tx-id ent) + tx' (:db-sync/normalized-tx-data ent) + reversed-tx' (:db-sync/reversed-tx-data ent)] + {:tx-id tx-id + :outliner-op (:db-sync/outliner-op ent) + :forward-outliner-ops (:db-sync/forward-outliner-ops ent) + :inverse-outliner-ops (:db-sync/inverse-outliner-ops ent) + :inferred-outliner-ops? (:db-sync/inferred-outliner-ops? ent) + :db-sync/undo-redo (:db-sync/undo-redo? ent) + :tx tx' + :reversed-tx reversed-tx'}))) + vec)))) + +(defn- pending-tx-by-id + [repo tx-id] + (when-let [conn (client-ops-conn repo)] + (when-let [ent (d/entity @conn [:db-sync/tx-id tx-id])] + {:tx-id (:db-sync/tx-id ent) + :outliner-op (:db-sync/outliner-op ent) + :forward-outliner-ops (:db-sync/forward-outliner-ops ent) + :inverse-outliner-ops (:db-sync/inverse-outliner-ops ent) + :db-sync/undo-redo (:db-sync/undo-redo? ent) + :tx (:db-sync/normalized-tx-data ent) + :reversed-tx (:db-sync/reversed-tx-data ent)}))) + +(defn remove-pending-txs! + [repo tx-ids] + (when (seq tx-ids) + (when-let [conn (client-ops-conn repo)] + (let [pending-to-remove (->> tx-ids + (keep (fn [tx-id] + (when (true? (:db-sync/pending? (d/entity @conn [:db-sync/tx-id tx-id]))) + tx-id))) + count)] + (ldb/transact! conn + (mapv (fn [tx-id] + [:db/add [:db-sync/tx-id tx-id] :db-sync/pending? false]) + tx-ids)) + (when (pos? pending-to-remove) + (client-op/adjust-pending-local-tx-count! repo (- pending-to-remove))) + (when-let [client (current-client repo)] + (broadcast-rtc-state! client)))))) + +(defn clear-pending-txs! + [repo] + (remove-pending-txs! repo (mapv :tx-id (pending-txs repo)))) + +(defn- usable-history-ops + [ops] + (let [ops' (some-> ops seq vec)] + (when (and (seq ops') + (not= canonical-transact-op ops')) + ops'))) + +(defn- semantic-op-stream? + [ops] + (boolean (seq (usable-history-ops ops)))) + +(defn- history-action-ops + [{:keys [forward-outliner-ops inverse-outliner-ops]} undo?] + (if undo? + (usable-history-ops inverse-outliner-ops) + (usable-history-ops forward-outliner-ops))) + +(declare precreate-missing-save-blocks! replay-canonical-outliner-op!) + +(defn- inline-history-action + [tx-meta] + (let [forward-outliner-ops (or (:db-sync/forward-outliner-ops tx-meta) + (:forward-outliner-ops tx-meta)) + inverse-outliner-ops (or (:db-sync/inverse-outliner-ops tx-meta) + (:inverse-outliner-ops tx-meta))] + (when (and (seq forward-outliner-ops) (seq inverse-outliner-ops)) + {:outliner-op (:outliner-op tx-meta) + :forward-outliner-ops forward-outliner-ops + :inverse-outliner-ops inverse-outliner-ops}))) + +(defn ^:large-vars/cleanup-todo apply-history-action! + [repo tx-id undo? tx-meta] + (let [debug-data {:tx-id tx-id + :undo? undo? + :tx-meta tx-meta}] + (if-let [conn (worker-state/get-datascript-conn repo)] + (if-let [action (or (pending-tx-by-id repo tx-id) + (inline-history-action tx-meta))] + (let [semantic-forward? (semantic-op-stream? (:forward-outliner-ops action)) + ops (history-action-ops action undo?) + history-tx-id (let [provided-history-tx-id (:db-sync/tx-id tx-meta)] + (if (and (uuid? provided-history-tx-id) + (not= provided-history-tx-id tx-id)) + provided-history-tx-id + (random-uuid))) + tx-meta' (cond-> {:local-tx? true + :gen-undo-ops? false + :persist-op? true + :undo? undo? + :db-sync/tx-id history-tx-id + :db-sync/source-tx-id (or (:db-sync/source-tx-id tx-meta) + tx-id)} + + (:outliner-op action) + (assoc :outliner-op (:outliner-op action)) + + (seq (if undo? (:inverse-outliner-ops action) + (:forward-outliner-ops action))) + (assoc :db-sync/forward-outliner-ops + (vec (if undo? (:inverse-outliner-ops action) + (:forward-outliner-ops action)))) + + (seq (if undo? (:forward-outliner-ops action) + (:inverse-outliner-ops action))) + (assoc :db-sync/inverse-outliner-ops + (vec (if undo? (:forward-outliner-ops action) + (:inverse-outliner-ops action)))))] + ;; (prn :debug :outliner-ops) + ;; (pprint/pprint (select-keys action [:tx-id :outliner-op :forward-outliner-ops :inverse-outliner-ops])) + ;; (prn :debug :tx-meta) + ;; (pprint/pprint tx-meta) + (cond + (and semantic-forward? + (not (seq ops))) + (fail-fast :db-sync/missing-history-action-semantic-ops + {:repo repo + :tx-id tx-id + :undo? undo? + :forward-outliner-ops (:forward-outliner-ops action) + :inverse-outliner-ops (:inverse-outliner-ops action)}) + + (and semantic-forward? + (contains-transact-op? (if undo? (:inverse-outliner-ops action) + (:forward-outliner-ops action)))) + (fail-fast :db-sync/invalid-history-action-semantic-ops + {:reason :contains-transact-op + :repo repo + :tx-id tx-id + :undo? undo? + :ops (if undo? (:inverse-outliner-ops action) + (:forward-outliner-ops action))}) + + (seq ops) + (try + (ldb/batch-transact-with-temp-conn! + conn + tx-meta' + (fn [row-conn] + (precreate-missing-save-blocks! row-conn ops) + (doseq [op ops] + (replay-canonical-outliner-op! row-conn op)))) + {:applied? true + :source :semantic-ops + :history-tx-id history-tx-id} + (catch :default error + (if semantic-forward? + (if undo? + {:applied? false + :reason :invalid-history-action-ops + :error error} + (throw (ex-info (name :db-sync/invalid-history-action-semantic-ops) + {:reason :invalid-history-action-ops + :repo repo + :tx-id tx-id + :undo? undo? + :ops ops + :error error + :action action}))) + {:applied? false + :reason :invalid-history-action-ops + :error error}))) + + :else + {:applied? false :reason :unsupported-history-action + :debug-data (assoc debug-data :action action)})) + {:applied? false :reason :missing-history-action + :debug-data debug-data}) + (fail-fast :db-sync/missing-db {:repo repo :op :apply-history-action + :debug-data debug-data})))) + +(defn flush-pending! + [repo client] + (let [inflight @(:inflight client) + local-tx (or (client-op/get-local-tx repo) 0) + remote-tx (get @*repo->latest-remote-tx repo) + conn (worker-state/get-datascript-conn repo)] + (when (and conn (= local-tx remote-tx)) ; rebase + (when (empty? inflight) + (when-let [ws (:ws client)] + (when (and (ws-open? ws) (worker-state/online?)) + (let [batch (pending-txs repo {:limit 50})] + (when (seq batch) + (let [tx-entries (->> batch + (mapv (fn [{:keys [tx-id tx outliner-op]}] + {:tx-id tx-id + :outliner-op outliner-op + :tx-data (vec tx)})) + (filterv (comp seq :tx-data))) + tx-ids (mapv :tx-id batch)] + (if (empty? tx-entries) + (remove-pending-txs! repo tx-ids) + (-> (p/let [aes-key (when (sync-crypt/graph-e2ee? repo) + (sync-crypt/ {:tx (sqlite-util/write-transit-str tx-data)} + outliner-op + (assoc :outliner-op outliner-op))) + tx-entries*)] + (reset! (:inflight client) tx-ids) + (send! ws {:type "tx/batch" + :t-before local-tx + :txs payload})) + (p/catch (fn [error] + (js/console.error error)))))))))))))) + +(defn- reverse-history-action! + [conn local-tx] + (if-let [tx-data (seq (:reversed-tx local-tx))] + (ldb/transact! conn tx-data {:reverse? true}) + (invalid-rebase-op! :reverse-history-action + {:reason :missing-reversed-tx-data + :tx-id (:tx-id local-tx) + :outliner-op (:outliner-op local-tx)}))) + +(defn- transact-remote-txs! + [conn remote-txs] + (loop [remaining remote-txs + index 0 + results []] + (if-let [remote-tx (first remaining)] + (let [tx-data (->> (:tx-data remote-tx) + seq) + report (try + (ldb/transact! conn tx-data {:transact-remote? true}) + (catch :default e + (js/console.error e) + (log/error ::transact-remote-txs! {:remote-tx remote-tx + :index (inc index) + :total (count remote-txs)}) + (throw e))) + results' (cond-> results + tx-data + (conj {:tx-data tx-data + :report report}))] + (recur (next remaining) (inc index) results')) + results))) + +(defn reverse-local-txs! + [conn local-txs] + ;; (prn :debug :local-txs local-txs) + (doall + (->> local-txs + reverse + (map-indexed + (fn [index local-tx] + (try + (reverse-history-action! conn local-tx) + (catch :default e + (log/error ::reverse-local-tx-error + {:index index + :local-tx local-tx + :local-txs local-txs}) + (throw e))))) + (keep identity) + vec))) + +(defn- invalid-rebase-op! + [op data] + (throw (ex-info "invalid rebase op" (assoc data :op op)))) + +(defn- replay-entity-id-value + [db v] + (cond + (number? v) + v + + (uuid? v) + (some-> (d/entity db [:block/uuid v]) :db/id) + + (or (vector? v) (qualified-keyword? v)) + (some-> (d/entity db v) :db/id) + + :else + v)) + +(defn- stable-entity-ref-like? + [v] + (or (qualified-keyword? v) + (and (vector? v) + (or (= :block/uuid (first v)) + (= :db/ident (first v)))))) + +(defn- replay-property-value + [db property-id v] + (let [property-type (some-> (d/entity db property-id) :logseq.property/type)] + (if (contains? db-property-type/all-ref-property-types property-type) + (cond + (stable-entity-ref-like? v) + (replay-entity-id-value db v) + + (set? v) + (->> v + (map #(if (stable-entity-ref-like? %) + (replay-entity-id-value db %) + %)) + set) + + (sequential? v) + (mapv #(if (stable-entity-ref-like? %) + (replay-entity-id-value db %) + %) + v) + + :else + v) + v))) + +(defn- replay-entity-id-coll + [db ids] + (mapv #(or (replay-entity-id-value db %) %) ids)) + +(defn- precreate-missing-save-blocks! + [conn ops] + (doseq [[op args] ops + :when (= :save-block op)] + (let [[block _opts] args + db @conn + block-uuid (:block/uuid block) + missing-block? (and block-uuid + (nil? (d/entity db [:block/uuid block-uuid]))) + has-structure? (or (:block/page block) + (:block/parent block))] + (when (and missing-block? has-structure?) + (let [target-ref (or (:block/parent block) + (:block/page block)) + target-block (d/entity db target-ref)] + (when-not target-block + (invalid-rebase-op! op {:args args + :reason :missing-target-block})) + (let [now (.now js/Date) + create-block (-> block + (dissoc :db/id) + (assoc :block/created-at now) + (assoc :block/updated-at now))] + (ldb/transact! conn + [create-block] + {:outliner-op :save-block + :persist-op? false}))))))) + +(defn- ^:large-vars/cleanup-todo replay-canonical-outliner-op! + [conn [op args]] + (case op + :save-block + (let [[block opts] args + db @conn + block-uuid (:block/uuid block) + block-ent (when block-uuid + (d/entity db [:block/uuid block-uuid])) + block-base (dissoc block :db/id) + block' (merge block-base + (op-construct/rewrite-block-title-with-retracted-refs db block-base))] + (if (some? block-ent) + (outliner-core/save-block! conn + block' + (assoc (or opts {}) :persist-op? false)) + (if (and (:block/uuid block') + (or (:block/page block') + (:block/parent block'))) + (let [target-ref (or (:block/parent block') + (:block/page block')) + target-block (d/entity db target-ref)] + (when-not target-block + (invalid-rebase-op! op {:args args + :reason :missing-target-block})) + (let [now (.now js/Date) + create-block (-> block' + (assoc :block/created-at now) + (assoc :block/updated-at now))] + (ldb/transact! conn + [create-block] + {:outliner-op :save-block + :persist-op? false}))) + (invalid-rebase-op! op {:args args + :reason :missing-block})))) + + :insert-blocks + (let [[blocks target-id opts] args + target-block (d/entity @conn target-id) + db @conn] + (when-not (and target-block (seq blocks)) + (invalid-rebase-op! op {:args args})) + (outliner-core/insert-blocks! conn + (mapv #(op-construct/rewrite-block-title-with-retracted-refs db %) blocks) + target-block + (assoc (or opts {}) :persist-op? false))) + + :apply-template + (let [[template-id target-id opts] args + template-id' (replay-entity-id-value @conn template-id) + target-id' (replay-entity-id-value @conn target-id)] + (when-not (and (int? template-id') (int? target-id')) + (invalid-rebase-op! op {:args args + :reason :missing-template-or-target-block})) + (outliner-op/apply-ops! + conn + [[:apply-template [template-id' + target-id' + (assoc (or opts {}) :persist-op? false)]]] + {:persist-op? false + :gen-undo-ops? false})) + + :move-blocks + (let [[ids target-id opts] args + ids' (replay-entity-id-coll @conn ids) + target-id' (or (replay-entity-id-value @conn target-id) target-id) + blocks (keep #(d/entity @conn %) ids')] + (when (empty? blocks) + (invalid-rebase-op! op {:args args})) + (when (seq blocks) + (let [opts' (or opts {}) + sibling? (:sibling? opts') + fallback-target (:fallback-target opts') + fallback-target' (or (replay-entity-id-value @conn fallback-target) + fallback-target) + target-block (d/entity @conn target-id') + use-fallback? (and sibling? + (nil? target-block) + (some? fallback-target)) + target-block' (if use-fallback? + (d/entity @conn fallback-target') + target-block) + move-opts (cond-> (-> opts' + (dissoc :fallback-target) + (assoc :persist-op? false)) + use-fallback? + (assoc :sibling? false))] + (when-not target-block' + (invalid-rebase-op! op {:args args})) + (outliner-core/move-blocks! conn blocks target-block' move-opts)))) + + :move-blocks-up-down + (let [[ids up?] args + ids' (replay-entity-id-coll @conn ids) + blocks (keep #(d/entity @conn %) ids')] + (when (seq blocks) + (outliner-core/move-blocks-up-down! conn blocks up?))) + + :indent-outdent-blocks + (let [[ids indent? opts] args + ids' (replay-entity-id-coll @conn ids) + blocks (keep #(d/entity @conn %) ids')] + (when (empty? blocks) + (invalid-rebase-op! op {:args args})) + (when (seq blocks) + (outliner-core/indent-outdent-blocks! conn blocks indent? opts))) + + :delete-blocks + (let [[ids opts] args + ids' (replay-entity-id-coll @conn ids) + blocks (keep #(d/entity @conn %) ids')] + ;; Keep delete replay idempotent under concurrent edits where blocks may already + ;; be gone, but still leave a debug breadcrumb for malformed/missing targets. + (when (empty? blocks) + (log/debug :db-sync/drop-delete-blocks-replay + {:args args})) + (when (seq blocks) + (outliner-core/delete-blocks! conn blocks (assoc (or opts {}) :persist-op? false)))) + + :create-page + (let [[title opts] args] + (outliner-page/create! conn title (assoc (or opts {}) :persist-op? false))) + + :delete-page + (let [[page-uuid opts] args] + (outliner-page/delete! conn page-uuid (assoc (or opts {}) :persist-op? false))) + + :restore-recycled + (let [[root-id] args + root-ref (cond + (and (vector? root-id) + (= :block/uuid (first root-id))) + root-id + + (uuid? root-id) + [:block/uuid root-id] + + :else + root-id) + root (d/entity @conn root-ref) + tx-data (when root + (seq (outliner-recycle/restore-tx-data @conn root)))] + (when-not tx-data + (invalid-rebase-op! op {:args args + :reason :invalid-restore-target})) + (ldb/transact! conn tx-data + {:outliner-op :restore-recycled + :persist-op? false})) + + :set-block-property + (let [[block-eid property-id v] args + block-eid' (or (replay-entity-id-value @conn block-eid) + block-eid) + block (d/entity @conn block-eid') + property (d/entity @conn property-id) + _ (when-not (and block property) + (invalid-rebase-op! op {:args args + :reason :missing-block-or-property})) + v' (replay-property-value @conn property-id v)] + (when (and (stable-entity-ref-like? v) (nil? v')) + (invalid-rebase-op! op {:args args})) + (outliner-property/set-block-property! conn block-eid' property-id v')) + + :remove-block-property + (apply outliner-property/remove-block-property! conn args) + + :batch-set-property + (let [[block-ids property-id v opts] args + block-ids' (replay-entity-id-coll @conn block-ids) + property (d/entity @conn property-id) + _ (when-not (and property + (seq block-ids') + (every? #(some? (d/entity @conn %)) block-ids')) + (invalid-rebase-op! op {:args args + :reason :missing-block-or-property})) + v' (replay-property-value @conn property-id v)] + (when (and (stable-entity-ref-like? v) (nil? v')) + (invalid-rebase-op! op {:args args})) + (outliner-property/batch-set-property! conn block-ids' property-id v' opts)) + + :batch-remove-property + (let [[block-ids property-id] args + block-ids' (replay-entity-id-coll @conn block-ids)] + (outliner-property/batch-remove-property! conn block-ids' property-id)) + + :delete-property-value + (let [[block-eid property-id property-value] args + block (d/entity @conn block-eid) + property (d/entity @conn property-id) + _ (when-not (and block property) + (invalid-rebase-op! op {:args args + :reason :missing-block-or-property})) + property-value' (replay-property-value @conn property-id property-value)] + (when (and (stable-entity-ref-like? property-value) (nil? property-value')) + (invalid-rebase-op! op {:args args})) + (outliner-property/delete-property-value! conn block-eid property-id property-value')) + + :batch-delete-property-value + (let [[block-eids property-id property-value] args + block-eids' (replay-entity-id-coll @conn block-eids) + property (d/entity @conn property-id) + _ (when-not (and property + (seq block-eids') + (every? #(some? (d/entity @conn %)) block-eids')) + (invalid-rebase-op! op {:args args + :reason :missing-block-or-property})) + property-value' (replay-property-value @conn property-id property-value)] + (when (and (stable-entity-ref-like? property-value) (nil? property-value')) + (invalid-rebase-op! op {:args args})) + (outliner-property/batch-delete-property-value! conn block-eids' property-id property-value')) + + :create-property-text-block + (apply outliner-property/create-property-text-block! conn args) + + :upsert-property + (apply outliner-property/upsert-property! conn args) + + :class-add-property + (apply outliner-property/class-add-property! conn args) + + :class-remove-property + (apply outliner-property/class-remove-property! conn args) + + :upsert-closed-value + (apply outliner-property/upsert-closed-value! conn args) + + :add-existing-values-to-closed-values + (apply outliner-property/add-existing-values-to-closed-values! conn args) + + :delete-closed-value + (apply outliner-property/delete-closed-value! conn args) + + (let [tx-data (:tx args)] + (log/warn ::default-case {:op op + :args args + :tx-data tx-data}) + (when-let [tx-data (seq tx-data)] + (ldb/transact! conn tx-data {:outliner-op :transact}))))) + +(declare handle-local-tx!) + +(defn- rebase-local-op! + [_repo conn local-tx] + (let [outliner-ops (:forward-outliner-ops local-tx)] + (try + (ldb/batch-transact-with-temp-conn! + conn + {:outliner-op :rebase} + (fn [conn] + (if (= [[:transact nil]] outliner-ops) + (when-let [tx-data (seq (:tx local-tx))] + (ldb/transact! conn tx-data {:outliner-op :transact})) + (do + (precreate-missing-save-blocks! conn outliner-ops) + (doseq [op outliner-ops] + (replay-canonical-outliner-op! conn op)))))) + (catch :default error + (let [drop-log {:tx-id (:tx-id local-tx) + :outliner-ops outliner-ops + :error error} + expected-drop? (or (= "invalid rebase op" (ex-message error)) + (string/includes? (or (ex-message error) "") + "doesn't exist yet") + (string/includes? (or (ex-message error) "") + "Nothing found for entity id"))] + (if expected-drop? + (log/debug :db-sync/drop-op-driven-pending-tx drop-log) + (log/warn :db-sync/drop-op-driven-pending-tx drop-log))) + nil)))) + +(defn- rebase-local-txs! + [repo conn local-txs] + (doseq [local-tx local-txs] + (rebase-local-op! repo conn local-tx))) + +(defn- fix-tx! + [conn rebase-tx-report tx-meta] + (sync-order/fix-duplicate-orders! conn + (:tx-data rebase-tx-report) + tx-meta)) + +(defn- apply-remote-tx-with-local-changes! + [{:keys [repo conn local-txs remote-txs]}] + (let [tx-meta {:rtc-tx? true + :with-local-changes? true} + *rebase-tx-reports (atom [])] + ;; (prn :debug :apply-remote-tx (first remote-txs)) + (try + (ldb/batch-transact! + conn + tx-meta + (fn [conn] + (reverse-local-txs! conn local-txs) + + (transact-remote-txs! conn remote-txs) + + (let [rebase-tx-report (rebase-local-txs! repo conn local-txs)] + (fix-tx! conn rebase-tx-report {:outliner-op :rebase}))) + + {:listen-db (fn [{:keys [tx-meta tx-data] :as tx-report}] + (when (and (= :rebase (:outliner-op tx-meta)) + (seq tx-data)) + (swap! *rebase-tx-reports conj tx-report)))}) + + (doseq [tx-report @*rebase-tx-reports] + (handle-local-tx! repo tx-report)) + + (remove-pending-txs! repo (map :tx-id local-txs)) + + (catch :default e + (js/console.error e) + (throw e)) + (finally + (reset! *rebase-tx-reports nil) + (worker-undo-redo/clear-history! repo))))) + +(defn- apply-remote-tx-without-local-changes! + [{:keys [conn remote-txs]}] + (ldb/batch-transact-with-temp-conn! + conn + {:rtc-tx? true + :without-local-changes? true} + (fn [conn] + (transact-remote-txs! conn remote-txs)))) + +(defn apply-remote-txs! + [repo client remote-txs] + (if-let [conn (worker-state/get-datascript-conn repo)] + (let [local-txs (pending-txs repo) + has-local-changes? (seq local-txs) + remote-tx-data* (mapcat :tx-data remote-txs) + temp-tx-meta {:rtc-tx? true + :gen-undo-ops? false + :persist-op? false} + apply-context {:repo repo + :conn conn + :local-txs local-txs + :remote-txs remote-txs + :temp-tx-meta temp-tx-meta}] + (try + (if has-local-changes? + (apply-remote-tx-with-local-changes! apply-context) + (apply-remote-tx-without-local-changes! apply-context)) + (catch :default error + (log/error :db-sync/apply-remote-txs-failed + {:repo repo + :has-local-changes? has-local-changes? + :remote-tx-count (count remote-txs) + :local-tx-count (count local-txs) + :remote-txs (mapv (fn [{:keys [t outliner-op tx-data]}] + {:t t + :outliner-op outliner-op + :tx-data-count (count tx-data) + :tx-data-preview (take 12 tx-data)}) + remote-txs) + :local-txs (mapv (fn [{:keys [tx-id outliner-op tx reversed-tx]}] + {:tx-id tx-id + :outliner-op outliner-op + :tx-count (count tx) + :tx-preview (take 12 tx) + :reversed-count (count reversed-tx) + :reversed-preview (take 12 reversed-tx)}) + local-txs) + :error error}) + (throw error))) + + (when-let [*inflight (:inflight client)] + (reset! *inflight [])) + + (-> (rehydrate-large-titles! repo {:tx-data remote-tx-data* + :graph-id (:graph-id client)}) + (p/catch (fn [error] + (log/error :db-sync/large-title-rehydrate-failed + {:repo repo :error error}))))) + (fail-fast :db-sync/missing-db {:repo repo :op :apply-remote-txs}))) + +(defn apply-remote-tx! + [repo client tx-data] + (apply-remote-txs! repo client [{:tx-data tx-data}])) + +(defn- enqueue-local-tx-aux + [repo {:keys [tx-data db-after db-before] :as tx-report}] + (let [normalized (normalize-tx-data db-after db-before tx-data) + reversed-datoms (reverse-tx-data db-before db-after tx-data)] + (when (seq normalized) + (persist-local-tx! repo tx-report normalized reversed-datoms) + (when-let [client @worker-state/*db-sync-client] + (when (= repo (:repo client)) + (let [send-queue (:send-queue client)] + (swap! send-queue + (fn [prev] + (p/then prev + (fn [_] + (when-let [current @worker-state/*db-sync-client] + (when (= repo (:repo current)) + (when-let [ws (:ws current)] + (when (ws-open? ws) + (flush-pending! repo current))))))))))))))) + + +;; (defonce *persist-promise (atom nil)) +(defn enqueue-local-tx! + [repo {:keys [tx-meta tx-data] :as tx-report}] + (when-let [conn (worker-state/get-datascript-conn repo)] + (when-not (or (:rtc-tx? tx-meta) + (and (:batch-tx? @conn) (not= (:outliner-op tx-meta) :rebase)) + (:mark-embedding? tx-meta)) + (when (seq tx-data) + (enqueue-local-tx-aux repo tx-report) + ;; (p/do! + ;; (when-let [p @*persist-promise] + ;; p) + ;; (enqueue-local-tx-aux repo tx-report)) + )))) + +(defn handle-local-tx! + [repo {:keys [tx-data tx-meta db-after] :as tx-report}] + (when (and (seq tx-data) + (not (:rtc-tx? tx-meta)) + (not (:sync-download-graph? tx-meta)) + (:persist-op? tx-meta true) + (:kv/value (d/entity db-after :logseq.kv/graph-remote?))) + (enqueue-local-tx! repo tx-report) + (when-let [client @worker-state/*db-sync-client] + (when (= repo (:repo client)) + (sync-assets/enqueue-asset-sync! + repo client + {:enqueue-asset-task-f enqueue-asset-task! + :current-client-f current-client + :broadcast-rtc-state!-f broadcast-rtc-state! + :fail-fast-f fail-fast}))))) diff --git a/src/main/frontend/worker/sync/assets.cljs b/src/main/frontend/worker/sync/assets.cljs new file mode 100644 index 0000000000..4024774abb --- /dev/null +++ b/src/main/frontend/worker/sync/assets.cljs @@ -0,0 +1,156 @@ +(ns frontend.worker.sync.assets + "Asset sync helpers for db sync." + (:require [datascript.core :as d] + [frontend.worker.state :as worker-state] + [frontend.worker.sync.auth :as sync-auth] + [frontend.worker.sync.client-op :as client-op] + [frontend.worker.sync.download :as sync-download] + [frontend.worker.sync.large-title :as sync-large-title] + [lambdaisland.glogi :as log] + [logseq.db :as ldb] + [promesa.core :as p])) + +(def max-asset-size (* 100 1024 1024)) + +(defn upload-remote-asset! + [repo graph-id asset-uuid asset-type checksum] + (let [base (sync-auth/http-base-url @worker-state/*db-sync-config)] + (if (and (seq base) (seq graph-id) (seq asset-type) (seq checksum)) + (p/let [exported-aes-key (sync-download/exported-graph-aes-key + repo graph-id + (fn [tag data] + (throw (ex-info (name tag) data))))] + (worker-state/ size max-asset-size) + (do + (log/info :db-sync/asset-too-large {:repo repo + :asset-uuid asset-uuid + :size size}) + (client-op/remove-asset-op repo asset-uuid) + (when-let [client (current-client-f repo)] + (broadcast-rtc-state!-f client)) + (p/resolved nil)) + + :else + (-> (upload-remote-asset! repo graph-id asset-uuid asset-type checksum) + (p/then (fn [_] + (when (d/entity @conn [:block/uuid asset-uuid]) + (ldb/transact! + conn + [{:block/uuid asset-uuid + :logseq.property.asset/remote-metadata {:checksum checksum :type asset-type}}] + {:persist-op? true})) + (client-op/remove-asset-op repo asset-uuid) + (when-let [client (current-client-f repo)] + (broadcast-rtc-state!-f client)))) + (p/catch (fn [e] + (case (:type (ex-data e)) + :rtc.exception/read-asset-failed + (do + (client-op/remove-asset-op repo asset-uuid) + (when-let [client (current-client-f repo)] + (broadcast-rtc-state!-f client))) + + :rtc.exception/upload-asset-failed + nil + + (log/error :db-sync/asset-upload-failed + {:repo repo + :asset-uuid asset-uuid + :error e}))))))) + (fail-fast-f :db-sync/missing-db {:repo repo :op :process-asset-op})) + + (contains? asset-op :remove-asset) + (-> (client-op/remove-asset-op repo asset-uuid) + (p/then (fn [_] + (when-let [client (current-client-f repo)] + (broadcast-rtc-state!-f client)))) + (p/catch (fn [e] + (log/error :db-sync/asset-delete-failed + {:repo repo + :asset-uuid asset-uuid + :error e})))) + + :else + (p/resolved nil)))) + +(defn process-asset-ops! + [repo client {:keys [current-client-f broadcast-rtc-state!-f fail-fast-f]}] + (let [graph-id (:graph-id client) + asset-ops (not-empty (client-op/get-all-asset-ops repo)) + parallelism 10] + (if (and (seq graph-id) asset-ops) + (let [queue (atom (vec asset-ops)) + pop-queue! (fn [] + (let [selected (atom nil)] + (swap! queue + (fn [q] + (if (seq q) + (do + (reset! selected (first q)) + (subvec q 1)) + q))) + @selected)) + worker (fn worker [] + (when-let [asset-op (pop-queue!)] + (-> (process-asset-op! repo graph-id asset-op + {:current-client-f current-client-f + :broadcast-rtc-state!-f broadcast-rtc-state!-f + :fail-fast-f fail-fast-f}) + (p/then (fn [_] (worker))) + (p/catch (fn [e] + (log/error :db-sync/process-asset-op-loop-failed + {:repo repo + :asset-op asset-op + :error e}))))))] + (p/all (repeat (min parallelism (count asset-ops)) (worker)))) + (p/resolved nil)))) + +(defn enqueue-asset-sync! + [repo client {:keys [enqueue-asset-task-f current-client-f broadcast-rtc-state!-f fail-fast-f]}] + (enqueue-asset-task-f + client + #(process-asset-ops! + repo client + {:current-client-f current-client-f + :broadcast-rtc-state!-f broadcast-rtc-state!-f + :fail-fast-f fail-fast-f}))) diff --git a/src/main/frontend/worker/sync/auth.cljs b/src/main/frontend/worker/sync/auth.cljs new file mode 100644 index 0000000000..59851f06cf --- /dev/null +++ b/src/main/frontend/worker/sync/auth.cljs @@ -0,0 +1,66 @@ +(ns frontend.worker.sync.auth + "Auth and endpoint helpers for db sync." + (:require [clojure.string :as string] + [frontend.worker-common.util :as worker-util] + [logseq.common.util :as common-util] + [promesa.core :as p] + [frontend.worker.sync.util :as sync-util] + [frontend.worker.state :as worker-state])) + +(defn ws-base-url + [db-sync-config] + (:ws-url db-sync-config)) + +(defn http-base-url + [db-sync-config] + (or (:http-base db-sync-config) + (when-let [ws-url (ws-base-url db-sync-config)] + (let [base (cond + (string/starts-with? ws-url "wss://") + (str "https://" (subs ws-url (count "wss://"))) + + (string/starts-with? ws-url "ws://") + (str "http://" (subs ws-url (count "ws://"))) + + :else ws-url)] + (string/replace base #"/sync/%s$" ""))))) + +(defn id-token-expired? + [token] + (if-not (string? token) + true + (try + (let [exp-ms (some-> token worker-util/parse-jwt :exp (* 1000))] + (or (not (number? exp-ms)) + (<= exp-ms (common-util/time-ms)))) + (catch :default _ + true)))) + +(defn id-token + worker-util/parse-jwt + :sub)) + +(defn auth-headers + [token] + (when-let [token* token] + {"authorization" (str "Bearer " token*)})) + +(defn with-auth-headers + [auth-headers-f opts] + (if-let [auth (auth-headers-f)] + (assoc opts :headers (merge (or (:headers opts) {}) auth)) + opts)) diff --git a/src/main/frontend/worker/sync/client_op.cljs b/src/main/frontend/worker/sync/client_op.cljs index d32a136687..645646d103 100644 --- a/src/main/frontend/worker/sync/client_op.cljs +++ b/src/main/frontend/worker/sync/client_op.cljs @@ -27,7 +27,7 @@ #(do (log/error ::bad-ops (:value %)) (ma/-fail! ::ops-schema (select-keys % [:value]))))) -(def ^:private asset-op-types #{:update-asset :remove-asset}) +(defonce *repo->pending-local-tx-count (atom {})) (def schema-in-db "TODO: rename this db-name from client-op to client-metadata+op. @@ -41,9 +41,14 @@ :db-sync/checksum {:db/index true} :db-sync/tx-id {:db/unique :db.unique/identity} :db-sync/created-at {:db/index true} - :db-sync/tx-data {} + :db-sync/pending? {:db/index true} + :db-sync/outliner-op {} + :db-sync/forward-outliner-ops {} + :db-sync/inverse-outliner-ops {} + :db-sync/inferred-outliner-ops? {} :db-sync/normalized-tx-data {} - :db-sync/reversed-tx-data {}}) + :db-sync/reversed-tx-data {} + :db-sync/asset-op? {:db/index true}}) (defn update-graph-uuid [repo graph-uuid] @@ -73,26 +78,24 @@ [:db/add "e" :local-tx t]))] (ldb/transact! conn [tx-data])))) -(comment - (defn update-local-checksum - [repo checksum] - {:pre [(some? checksum)]} - (let [conn (worker-state/get-client-ops-conn repo)] - (assert (some? conn) repo) - (let [tx-data - (if-let [datom (first (d/datoms @conn :avet :db-sync/checksum))] +(defn update-local-checksum + [repo checksum] + {:pre [(some? checksum)]} + (let [conn (worker-state/get-client-ops-conn repo)] + (assert (some? conn) repo) + (let [tx-data + (if-let [datom (first (d/datoms @conn :avet :db-sync/checksum))] + [:db/add (:e datom) :db-sync/checksum checksum] + (if-let [datom (first (d/datoms @conn :avet :local-tx))] [:db/add (:e datom) :db-sync/checksum checksum] - (if-let [datom (first (d/datoms @conn :avet :local-tx))] - [:db/add (:e datom) :db-sync/checksum checksum] - [:db/add "e" :db-sync/checksum checksum]))] - (ldb/transact! conn [tx-data]))))) + [:db/add "e" :db-sync/checksum checksum]))] + (ldb/transact! conn [tx-data])))) (defn remove-local-tx [repo] (when-let [conn (worker-state/get-client-ops-conn repo)] (when-let [datom (first (d/datoms @conn :avet :local-tx))] - (ldb/transact! conn [[:db/retract (:e datom) :local-tx] - [:db/retract (:e datom) :db-sync/checksum]])))) + (ldb/transact! conn [[:db/retract (:e datom) :local-tx]])))) (defn get-local-tx [repo] @@ -102,12 +105,29 @@ ;; (assert (some? r)) r))) -(comment - (defn get-local-checksum - [repo] - (let [conn (worker-state/get-client-ops-conn repo)] - (assert (some? conn) repo) - (:v (first (d/datoms @conn :avet :db-sync/checksum)))))) +(defn get-pending-local-tx-count + [repo] + (if-let [cached (get @*repo->pending-local-tx-count repo)] + cached + (let [count' (if-let [conn (worker-state/get-client-ops-conn repo)] + (count (d/datoms @conn :avet :db-sync/pending? true)) + 0)] + (swap! *repo->pending-local-tx-count assoc repo count') + count'))) + +(defn adjust-pending-local-tx-count! + [repo delta] + (swap! *repo->pending-local-tx-count + (fn [m] + (let [base (or (get m repo) 0) + next (max 0 (+ base delta))] + (assoc m repo next))))) + +(defn get-local-checksum + [repo] + (let [conn (worker-state/get-client-ops-conn repo)] + (assert (some? conn) repo) + (:v (first (d/datoms @conn :avet :db-sync/checksum))))) (defn rtc-db-graph? "Is RTC enabled" @@ -137,12 +157,14 @@ (let [remove-asset-op (get exist-block-ops-entity :remove-asset)] (when-not (already-removed? remove-asset-op t) (cond-> [{:block/uuid block-uuid + :db-sync/asset-op? true :update-asset op}] remove-asset-op (conj [:db.fn/retractAttribute e :remove-asset])))) :remove-asset (let [update-asset-op (get exist-block-ops-entity :update-asset)] (when-not (update-after-remove? update-asset-op t) (cond-> [{:block/uuid block-uuid + :db-sync/asset-op? true :remove-asset op}] update-asset-op (conj [:db.fn/retractAttribute e :update-asset]))))))] (ldb/transact! conn tx-data))))))) @@ -151,11 +173,9 @@ [repo] (let [conn (worker-state/get-datascript-conn repo) _ (assert (some? conn)) - asset-block-uuids (d/q '[:find [?block-uuid ...] - :where - [?b :block/uuid ?block-uuid] - [?b :logseq.property.asset/type]] - @conn) + asset-block-uuids (->> (d/datoms @conn :avet :logseq.property.asset/type) + (keep (fn [d] + (:block/uuid (d/entity @conn (:e d)))))) ops (map (fn [block-uuid] [:update-asset 1 {:block-uuid block-uuid}]) asset-block-uuids)] @@ -163,19 +183,10 @@ (defn- get-all-asset-ops* [db] - (->> (d/datoms db :eavt) - (group-by :e) - (keep (fn [[e datoms]] - (let [op-map (into {} - (keep (fn [datom] - (let [a (:a datom)] - (when (or (keyword-identical? :block/uuid a) (contains? asset-op-types a)) - [a (:v datom)])))) - datoms)] - (when (and (:block/uuid op-map) - ;; count>1 = contains some `asset-op-types` - (> (count op-map) 1)) - [e op-map])))) + (->> (d/datoms db :avet :db-sync/asset-op?) + (map (fn [d] + (let [op (d/entity db (:e d))] + [(:e d) (into {} op)]))) (into {}))) (defn get-unpushed-asset-ops-count @@ -193,4 +204,25 @@ (when-let [conn (worker-state/get-client-ops-conn repo)] (let [ent (d/entity @conn [:block/uuid asset-uuid])] (when-let [e (:db/id ent)] - (ldb/transact! conn (map (fn [a] [:db.fn/retractAttribute e a]) asset-op-types)))))) + (ldb/transact! conn [[:db/retractEntity e]]))))) + +(defn cleanup-finished-history-ops! + [repo protected-tx-ids] + (if-let [conn (worker-state/get-client-ops-conn repo)] + (let [protected-tx-ids (set protected-tx-ids) + tx-ent-ids (->> (d/datoms @conn :avet :db-sync/tx-id) + (keep (fn [datom] + (let [tx-id (:v datom) + ent (d/entity @conn (:e datom))] + (when (and (uuid? tx-id) + (false? (:db-sync/pending? ent)) + (not (contains? protected-tx-ids tx-id))) + (:db/id ent))))) + vec)] + (when (seq tx-ent-ids) + (ldb/transact! conn + (mapv (fn [ent-id] + [:db/retractEntity ent-id]) + tx-ent-ids))) + (count tx-ent-ids)) + 0)) diff --git a/src/main/frontend/worker/sync/crypt.cljs b/src/main/frontend/worker/sync/crypt.cljs index 779eb2c8d7..6b3cdb282c 100644 --- a/src/main/frontend/worker/sync/crypt.cljs +++ b/src/main/frontend/worker/sync/crypt.cljs @@ -10,7 +10,9 @@ [lambdaisland.glogi :as log] [logseq.db :as ldb] [logseq.db-sync.malli-schema :as db-sync-schema] - [promesa.core :as p])) + [promesa.core :as p] + [frontend.worker.sync.util :refer [fail-fast] :as sync-util] + [frontend.common.file.opfs :as opfs])) (defonce ^:private *graph->aes-key (atom {})) (defonce ^:private *user-rsa-key-pair-inflight (atom {})) @@ -37,6 +39,10 @@ [] (worker-state/ ( (opfs/ (auth-token) worker-util/parse-jwt :sub)) + (some-> (sync-util/auth-token) worker-util/parse-jwt :sub)) (defn- (crypt/ (p/let [_ (aes-key assoc graph-id aes-key) - aes-key))))) + (letfn [(aes-key assoc graph-id aes-key) + aes-key))))] + (p/let [pair ( ( (p/let [_ ( (p/let [meta (when (seq asset-type) + (worker-state/latest-remote-tx + :latest-remote-checksum @sync-apply/*repo->latest-remote-checksum} + repo)) + +(defn- broadcast-rtc-state! + [client] + (when client + (shared-service/broadcast-to-clients! + :rtc-sync-state + (sync-presence/rtc-state-payload sync-counts client)))) + +(defn- update-online-users! + [client users] + (sync-presence/update-online-users! broadcast-rtc-state! client users)) + +(defn- update-user-presence! + [client user-id* editing-block-uuid] + (sync-presence/update-user-presence! broadcast-rtc-state! client user-id* editing-block-uuid)) + +(defn- get-user-uuid + [] + (sync-auth/get-user-uuid (worker-state/get-id-token))) + +(defn- send! + [ws message] + (sync-transport/send! sync-transport/coerce-ws-client-message ws message)) + +(defn- ws-open? + [ws] + (sync-transport/ws-open? ws)) + +(defn- enqueue-asset-task! + [client task] + (when-let [queue (:asset-queue client)] + (swap! queue + (fn [prev] + (p/then prev (fn [_] (task))))))) + +(defn- current-client + [repo] + (sync-presence/current-client worker-state/*db-sync-client repo)) + +(defn- require-number + [value context] + (when-not (number? value) + (fail-fast :db-sync/invalid-field (assoc context :value value)))) + +(defn- require-non-negative + [value context] + (require-number value context) + (when (neg? value) + (fail-fast :db-sync/invalid-field (assoc context :value value)))) + +(defn- require-seq + [value context] + (when-not (sequential? value) + (fail-fast :db-sync/invalid-field (assoc context :value value)))) + +(defn- parse-transit + [value context] + (sync-transport/parse-transit fail-fast value context)) + +(defn- pending-local-tx? + [repo] + (when-let [conn (client-ops-conn repo)] + (boolean + (some (fn [datom] + (let [ent (d/entity @conn (:e datom))] + (not= false (:db-sync/pending? ent)))) + (d/datoms @conn :avet :db-sync/created-at))))) + +(defn- checksum-compare-ready? + [repo client local-t remote-t] + (and (= local-t remote-t) + (not (pending-local-tx? repo)) + (empty? @(:inflight client)))) + +(defn- local-sync-checksum + [repo] + (if-let [checksum (client-op/get-local-checksum repo)] + checksum + (if-let [conn (worker-state/get-datascript-conn repo)] + (let [checksum (sync-checksum/recompute-checksum @conn)] + (client-op/update-local-checksum repo checksum) + checksum) + (fail-fast :db-sync/missing-db {:repo repo :op :checksum})))) + +(defn- verify-sync-checksum! + [repo client local-tx remote-tx remote-checksum context] + (when (and (string? remote-checksum) + (checksum-compare-ready? repo client local-tx remote-tx)) + (let [local-checksum (local-sync-checksum repo)] + (when-not (= local-checksum remote-checksum) + (fail-fast :db-sync/checksum-mismatch + (merge context + {:type :db-sync/checksum-mismatch + :repo repo + :message-type (:type context) + :local-tx local-tx + :remote-tx remote-tx + :local-checksum local-checksum + :remote-checksum remote-checksum})))))) + +(defn- handle-tx-reject! + [repo client message local-tx] + (let [reason (:reason message) + remote-tx (:t message)] + (when (nil? reason) + (fail-fast :db-sync/missing-field + {:repo repo :type "tx/reject" :field :reason})) + (when (contains? message :t) + (require-non-negative remote-tx {:repo repo :type "tx/reject"})) + (case reason + "stale" + (when (and (:ws client) (ws-open? (:ws client))) + (send! (:ws client) {:type "pull" :since local-tx})) + + (let [data (when-let [raw-data (:data message)] + (parse-transit raw-data + {:repo repo + :type "tx/reject" + :reason reason + :field :data}))] + (fail-fast :db-sync/tx-rejected + (cond-> {:type :db-sync/tx-rejected + :repo repo + :message-type "tx/reject" + :reason reason} + (contains? message :t) (assoc :t remote-tx) + (some? data) (assoc :data data))))))) + +(defn- handle-hello! + [repo client local-tx remote-tx remote-checksum] + (require-non-negative remote-tx {:repo repo :type "hello"}) + (verify-sync-checksum! repo client local-tx remote-tx remote-checksum {:type "hello"}) + (broadcast-rtc-state! client) + (when (> remote-tx local-tx) + (send! (:ws client) {:type "pull" :since local-tx})) + (sync-assets/enqueue-asset-sync! + repo client + {:enqueue-asset-task-f enqueue-asset-task! + :current-client-f current-client + :broadcast-rtc-state!-f broadcast-rtc-state! + :fail-fast-f fail-fast}) + (sync-apply/flush-pending! repo client)) + +(defn- handle-online-users! + [repo client message] + (let [users (:online-users message)] + (when (and (some? users) (not (sequential? users))) + (fail-fast :db-sync/invalid-field + {:repo repo :type "online-users" :field :online-users})) + (update-online-users! client (or users [])))) + +(defn- handle-presence! + [client message] + (let [{:keys [user-id editing-block-uuid]} message] + (when-not (= (get-user-uuid) user-id) + (update-user-presence! client user-id editing-block-uuid)))) + +(defn- handle-tx-batch-ok! + [repo client remote-tx remote-checksum] + (require-non-negative remote-tx {:repo repo :type "tx/batch/ok"}) + (client-op/update-local-tx repo remote-tx) + (sync-util/clear-last-sync-error! client) + (broadcast-rtc-state! client) + (sync-apply/remove-pending-txs! repo @(:inflight client)) + (reset! (:inflight client) []) + (verify-sync-checksum! repo client remote-tx remote-tx remote-checksum {:type "tx/batch/ok"}) + (sync-apply/flush-pending! repo client)) + +(defn- handle-pull-ok! + [repo client local-tx remote-tx remote-checksum message] + (when (> remote-tx local-tx) + (let [txs (:txs message)] + (require-non-negative remote-tx {:repo repo :type "pull/ok"}) + (require-seq txs {:repo repo :type "pull/ok" :field :txs}) + (let [remote-txs (mapv (fn [data] + {:t (:t data) + :outliner-op (:outliner-op data) + :tx-data (parse-transit (:tx data) {:repo repo :type "pull/ok"})}) + txs)] + (when (seq remote-txs) + (-> + (p/let [graph-e2ee? (sync-crypt/graph-e2ee? repo) + aes-key (sync-crypt/ raw + sync-transport/parse-message + sync-transport/coerce-ws-server-message)] + (when-not (map? message) + (fail-fast :db-sync/response-parse-failed {:repo repo :raw raw})) + (let [local-tx (or (client-op/get-local-tx repo) 0) + remote-tx (:t message) + remote-checksum (:checksum message)] + (when remote-tx + (swap! sync-apply/*repo->latest-remote-tx assoc repo remote-tx)) + (when (contains? message :checksum) + (swap! sync-apply/*repo->latest-remote-checksum assoc repo remote-checksum)) + (case (:type message) + "hello" (handle-hello! repo client local-tx remote-tx remote-checksum) + "online-users" (handle-online-users! repo client message) + "presence" (handle-presence! client message) + "tx/batch/ok" (handle-tx-batch-ok! repo client remote-tx remote-checksum) + "pull/ok" (handle-pull-ok! repo client local-tx remote-tx remote-checksum message) + "changed" (handle-changed! repo client local-tx remote-tx) + "tx/reject" (handle-tx-reject! repo client message local-tx) + (fail-fast :db-sync/invalid-field + {:repo repo :type (:type message)}))))) diff --git a/src/main/frontend/worker/sync/large_title.cljs b/src/main/frontend/worker/sync/large_title.cljs new file mode 100644 index 0000000000..2e4802c867 --- /dev/null +++ b/src/main/frontend/worker/sync/large_title.cljs @@ -0,0 +1,225 @@ +(ns frontend.worker.sync.large-title + "Large title offload and rehydration helpers for db sync." + (:require [datascript.core :as d] + [logseq.db :as ldb] + [promesa.core :as p] + [frontend.worker.sync.util :refer [get-graph-id]])) + +(def large-title-byte-limit 4096) +(def large-title-asset-type "txt") +(def large-title-object-attr :logseq.property.sync/large-title-object) +(def text-encoder (js/TextEncoder.)) +(def text-decoder (js/TextDecoder.)) + +(defn utf8-byte-length + [value] + (when (string? value) + (.-length (.encode text-encoder value)))) + +(defn large-title? + [value] + (when-let [byte-length (utf8-byte-length value)] + (> byte-length large-title-byte-limit))) + +(defn assoc-datom-value + [datom new-value] + (let [[op e a _v & others] datom] + (into [op e a new-value] others))) + +(defn large-title-object + [asset-uuid asset-type] + {:asset-uuid asset-uuid + :asset-type asset-type}) + +(defn large-title-object? + [value] + (and (map? value) + (string? (:asset-uuid value)) + (string? (:asset-type value)))) + +(defn asset-url + [base graph-id asset-uuid asset-type] + (str base "/assets/" graph-id "/" asset-uuid "." asset-type)) + +(defn upload-large-title! + [{:keys [repo + graph-id + title + aes-key + http-base + auth-headers + fail-fast-f + encrypt-text-value-f]}] + (when-not (seq http-base) + (fail-fast-f :db-sync/missing-field {:repo repo :field :http-base})) + (when-not (seq graph-id) + (fail-fast-f :db-sync/missing-field {:repo repo :field :graph-id})) + (let [asset-uuid (str (random-uuid)) + asset-type large-title-asset-type + url (asset-url http-base graph-id asset-uuid asset-type)] + (p/let [payload (if aes-key + (p/let [payload-str (encrypt-text-value-f aes-key title)] + (.encode text-encoder payload-str)) + (p/resolved title)) + headers (merge {"content-type" "text/plain; charset=utf-8" + "x-amz-meta-type" asset-type} + auth-headers) + resp (js/fetch url #js {:method "PUT" + :headers (clj->js headers) + :body payload})] + (if (.-ok resp) + (large-title-object asset-uuid asset-type) + (fail-fast-f :db-sync/large-title-upload-failed + {:repo repo :status (.-status resp)}))))) + +(defn download-large-title! + [{:keys [repo + graph-id + obj + aes-key + http-base + auth-headers + fail-fast-f + decrypt-text-value-f]}] + (when-not (seq http-base) + (fail-fast-f :db-sync/missing-field {:repo repo :field :http-base})) + (when-not (seq graph-id) + (fail-fast-f :db-sync/missing-field {:repo repo :field :graph-id})) + (let [url (asset-url http-base graph-id (:asset-uuid obj) (:asset-type obj))] + (p/let [resp (js/fetch url #js {:method "GET" + :headers (clj->js auth-headers)})] + (when-not (.-ok resp) + (fail-fast-f :db-sync/large-title-download-failed + {:repo repo :status (.-status resp)})) + (p/let [buf (.arrayBuffer resp) + payload (js/Uint8Array. buf) + payload-str (.decode text-decoder payload) + data (if aes-key + (-> (decrypt-text-value-f aes-key payload-str) + (p/catch (fn [_] payload-str))) + (p/resolved payload-str))] + data)))) + +(defn offload-large-titles + [tx-data {:keys [repo graph-id upload-fn aes-key]}] + (p/loop [remaining tx-data + acc []] + (if (empty? remaining) + acc + (let [item (first remaining) + op (nth item 0 nil) + attr (nth item 2 nil) + value (nth item 3 nil)] + (if (and (vector? item) + (= :db/add op) + (= :block/title attr) + (string? value) + (large-title? value)) + (p/let [obj (upload-fn repo graph-id value aes-key) + placeholder (assoc-datom-value item "")] + (p/recur (rest remaining) + (conj acc placeholder + [:db/add (nth item 1) large-title-object-attr obj]))) + (p/recur (rest remaining) (conj acc item))))))) + +(defn rehydrate-large-titles! + [repo {:keys [graph-id + download-fn + aes-key + tx-data + conn + get-conn-f + graph-e2ee?-f + ensure-graph-aes-key-f + fail-fast-f]}] + (when-let [conn* (or conn (get-conn-f repo))] + (let [graph-id* (or graph-id (get-graph-id repo)) + items (if (seq tx-data) + (->> tx-data + (keep (fn [item] + (when (and (vector? item) + (= :db/add (nth item 0)) + (= large-title-object-attr (nth item 2)) + (large-title-object? (nth item 3))) + {:e (nth item 1) + :obj (nth item 3)}))) + (distinct)) + (->> (d/datoms @conn* :eavt) + (keep (fn [datom] + (when (= large-title-object-attr (:a datom)) + (let [obj (:v datom)] + (when (large-title-object? obj) + {:e (:e datom) + :obj obj}))))) + (distinct)))] + (when (seq items) + (p/let [aes-key* (or aes-key + (when (graph-e2ee?-f repo) + (ensure-graph-aes-key-f repo graph-id*))) + _ (when (and (graph-e2ee?-f repo) (nil? aes-key*)) + (fail-fast-f :db-sync/missing-field {:repo repo :field :aes-key}))] + (p/all + (mapv (fn [{:keys [e obj]}] + (p/let [title (download-fn repo graph-id* obj aes-key*)] + (ldb/transact! conn* + [[:db/add e :block/title title]] + {:rtc-tx? true + :persist-op? false + :op :large-title-rehydrate}))) + items))))))) + +(defn offload-large-titles-in-datoms-batch + [repo graph-id datoms aes-key upload-fn] + (p/loop [remaining datoms + acc []] + (if (empty? remaining) + acc + (let [datom (first remaining)] + (if (and (= :block/title (:a datom)) + (string? (:v datom)) + (large-title? (:v datom))) + (p/let [obj (upload-fn repo graph-id (:v datom) aes-key)] + (p/recur (rest remaining) + (conj acc + (assoc datom :v "") + (assoc datom :a large-title-object-attr :v obj)))) + (p/recur (rest remaining) (conj acc datom))))))) + +(defn take-upload-datoms-batch + [datoms batch-size] + (loop [batch (transient []) + remaining (seq datoms) + n 0] + (if (or (nil? remaining) (>= n batch-size)) + [(persistent! batch) remaining] + (recur (conj! batch (first remaining)) + (next remaining) + (inc n))))) + +(defn datom->tx + [datom] + [:db/add (:e datom) (:a datom) (:v datom)]) + +(defn process-upload-datoms-in-batches! + [datoms {:keys [batch-size process-batch-f progress-f] + :or {batch-size 100000}}] + (let [total-count (count datoms)] + (p/loop [remaining (seq datoms) + processed 0] + (if (seq remaining) + (let [[batch remaining'] (take-upload-datoms-batch remaining batch-size) + processed' (+ processed (count batch))] + (p/let [_ (process-batch-f batch)] + (when progress-f + (progress-f processed' total-count)) + (p/let [_ (js/Promise. (fn [resolve] (js/setTimeout resolve 0)))] + (p/recur remaining' processed')))) + nil)))) + +(defn rehydrate-large-titles-from-db! + [repo graph-id {:keys [get-conn-f rehydrate-large-titles!-f]}] + (when-let [conn (get-conn-f repo)] + (let [tx-data (mapv (fn [datom] + [:db/add (:e datom) large-title-object-attr (:v datom)]) + (d/datoms @conn :avet large-title-object-attr))] + (rehydrate-large-titles!-f repo {:tx-data tx-data :graph-id graph-id})))) diff --git a/src/main/frontend/worker/sync/presence.cljs b/src/main/frontend/worker/sync/presence.cljs new file mode 100644 index 0000000000..3c3dca1939 --- /dev/null +++ b/src/main/frontend/worker/sync/presence.cljs @@ -0,0 +1,116 @@ +(ns frontend.worker.sync.presence + "Presence and rtc state helpers for db sync." + (:require [datascript.core :as d] + [logseq.common.util :as common-util] + [frontend.worker.state :as worker-state])) + +(defn current-client + [db-sync-client repo] + (let [client @db-sync-client] + (when (= repo (:repo client)) + client))) + +(defn client-ops-conn + [get-client-ops-conn repo] + (get-client-ops-conn repo)) + +(defn sync-counts + [{:keys [get-datascript-conn + get-client-ops-conn + get-pending-local-tx-count + get-unpushed-asset-ops-count + get-local-tx + get-local-checksum + get-graph-uuid + latest-remote-tx + latest-remote-checksum]} + repo] + (when (get-datascript-conn repo) + (let [pending-local (if get-pending-local-tx-count + (get-pending-local-tx-count repo) + (when-let [conn (client-ops-conn get-client-ops-conn repo)] + (count (d/datoms @conn :avet :db-sync/pending? true)))) + pending-asset (get-unpushed-asset-ops-count repo) + local-tx (get-local-tx repo) + remote-tx (get latest-remote-tx repo) + local-checksum (when get-local-checksum + (get-local-checksum repo)) + remote-checksum (get latest-remote-checksum repo) + pending-server (when (and (number? local-tx) (number? remote-tx)) + (max 0 (- remote-tx local-tx))) + graph-uuid (get-graph-uuid repo) + client (current-client worker-state/*db-sync-client repo) + ws-url (:ws-url @worker-state/*db-sync-config) + ws-state (or (some-> client :ws-state deref) + (if (seq ws-url) :stopped :inactive)) + last-error (some-> client :last-sync-error deref)] + {:repo repo + :graph-id graph-uuid + :pending-local pending-local + :pending-asset pending-asset + :pending-server pending-server + :local-tx local-tx + :remote-tx remote-tx + :local-checksum local-checksum + :remote-checksum remote-checksum + :ws-state ws-state + :last-error last-error}))) + +(defn normalize-online-users + [users] + (->> users + (keep (fn [{:keys [user-id email username name]}] + (when (string? user-id) + (let [display-name (or username name user-id)] + (cond-> {:user/uuid user-id + :user/name display-name} + (string? email) (assoc :user/email email)))))) + (common-util/distinct-by :user/uuid) + (vec))) + +(defn rtc-state-payload + [sync-counts-f client] + (let [repo (:repo client) + ws-state @(:ws-state client) + online-users @(:online-users client) + {:keys [pending-local pending-asset pending-server + local-tx remote-tx local-checksum remote-checksum graph-uuid]} + (sync-counts-f repo)] + {:rtc-state {:ws-state ws-state} + :rtc-lock (= :open ws-state) + :online-users (or online-users []) + :unpushed-block-update-count (or pending-local 0) + :pending-asset-ops-count (or pending-asset 0) + :pending-server-ops-count (or pending-server 0) + :local-tx local-tx + :remote-tx remote-tx + :local-checksum local-checksum + :remote-checksum remote-checksum + :graph-uuid graph-uuid})) + +(defn set-ws-state! + [broadcast-f client ws-state] + (when-let [*ws-state (:ws-state client)] + (reset! *ws-state ws-state) + (broadcast-f client))) + +(defn update-online-users! + [broadcast-f client users] + (when-let [*online-users (:online-users client)] + (let [users' (normalize-online-users users)] + (when (not= users' @*online-users) + (reset! *online-users users') + (broadcast-f client))))) + +(defn update-user-presence! + [broadcast-f client user-id* editing-block-uuid] + (when (and user-id* editing-block-uuid) + (when-let [*online-users (:online-users client)] + (swap! *online-users + (fn [users] + (mapv (fn [user] + (if (= user-id* (:user/uuid user)) + (assoc user :user/editing-block-uuid editing-block-uuid) + user)) + users))) + (broadcast-f client)))) diff --git a/src/main/frontend/worker/sync/temp_sqlite.cljs b/src/main/frontend/worker/sync/temp_sqlite.cljs new file mode 100644 index 0000000000..0291bda2b4 --- /dev/null +++ b/src/main/frontend/worker/sync/temp_sqlite.cljs @@ -0,0 +1,92 @@ +(ns frontend.worker.sync.temp-sqlite + "Temporary sqlite helpers for db sync uploads." + (:require [cljs-bean.core :as bean] + [datascript.core :as d] + [datascript.storage :refer [IStorage]] + [logseq.db.common.sqlite :as common-sqlite] + [logseq.db.sqlite.util :as sqlite-util] + [promesa.core :as p] + [frontend.worker-common.util :as worker-util] + [frontend.worker.platform :as platform] + [frontend.worker.state :as worker-state] + [frontend.worker.sync.util :refer [fail-fast]])) + +(def upload-temp-pool-name (worker-util/get-pool-name "upload-temp")) + +(defn- upsert-addr-content! + [^js db data] + (.transaction + db + (fn [tx] + (doseq [item data] + (.exec tx #js {:sql (str "INSERT INTO kvs (addr, content, addresses) " + "values ($addr, $content, $addresses) " + "on conflict(addr) do update set content = $content, addresses = $addresses") + :bind item}))))) + +(defn- restore-data-from-addr + [^js db addr] + (when-let [result (-> (.exec db #js {:sql "select content, addresses from kvs where addr = ?" + :bind #js [addr] + :rowMode "array"}) + first)] + (let [[content addresses] (bean/->clj result) + addresses (when addresses (js/JSON.parse addresses)) + data (sqlite-util/transit-read content)] + (if (and addresses (map? data)) + (assoc data :addresses addresses) + data)))) + +(defn new-temp-sqlite-storage + [^js db] + (reify IStorage + (-store [_ addr+data-seq _delete-addrs] + (let [data (map + (fn [[addr data]] + (let [data' (if (map? data) (dissoc data :addresses) data) + addresses (when (map? data) + (when-let [addresses (:addresses data)] + (js/JSON.stringify (bean/->js addresses))))] + #js {:$addr addr + :$content (sqlite-util/transit-write data') + :$addresses addresses})) + addr+data-seq)] + (upsert-addr-content! db data))) + (-restore [_ addr] + (restore-data-from-addr db addr)))) + +(defn clj data :keywordize-keys true)) + body (if error-schema + (coerce-http-response error-schema body) + body)] + (throw (ex-info "db-sync request failed" + {:status (.-status resp) + :url url + :body body})))))) + +(defn send! + [coerce-ws-client-message-f ws message] + (when (ws-open? ws) + (if-let [coerced (coerce-ws-client-message-f message)] + (.send ws (js/JSON.stringify (clj->js coerced))) + (log/error :db-sync/ws-request-invalid {:message message})))) diff --git a/src/main/frontend/worker/sync/upload.cljs b/src/main/frontend/worker/sync/upload.cljs new file mode 100644 index 0000000000..4663d9ead8 --- /dev/null +++ b/src/main/frontend/worker/sync/upload.cljs @@ -0,0 +1,198 @@ +(ns frontend.worker.sync.upload + "Snapshot upload helpers for db sync." + (:require [cljs-bean.core :as bean] + [datascript.core :as d] + [frontend.worker-common.util :as worker-util] + [frontend.worker.state :as worker-state] + [frontend.worker.sync.apply-txs :as sync-apply] + [frontend.worker.sync.auth :as sync-auth] + [frontend.worker.sync.client-op :as client-op] + [frontend.worker.sync.crypt :as sync-crypt] + [frontend.worker.sync.large-title :as sync-large-title] + [frontend.worker.sync.temp-sqlite :as sync-temp-sqlite] + [frontend.worker.sync.transport :as sync-transport] + [frontend.worker.sync.util :refer [get-graph-id]] + [lambdaisland.glogi :as log] + [logseq.db :as ldb] + [logseq.db-sync.checksum :as sync-checksum] + [logseq.db.sqlite.util :as sqlite-util] + [promesa.core :as p])) + +(def upload-kvs-batch-size 2000) +(def upload-prepare-datoms-batch-size 100000) +(def snapshot-content-type "application/transit+json") +(def snapshot-content-encoding "gzip") +(def snapshot-text-encoder (js/TextEncoder.)) + +(defn- fail-fast + [tag data] + (log/error tag data) + (throw (ex-info (name tag) data))) + +(defn- http-base-url + [] + (sync-auth/http-base-url @worker-state/*db-sync-config)) + +(defn- ensure-client-graph-uuid! + [repo graph-id] + (when (seq graph-id) + (client-op/update-graph-uuid repo graph-id))) + +(defn fetch-kvs-rows + [db last-addr limit] + (.exec db #js {:sql "select addr, content, addresses from kvs where addr > ? order by addr asc limit ?" + :bind #js [last-addr limit] + :rowMode "array"})) + +(defn count-kvs-rows + [db] + (when-let [result (-> (.exec db #js {:sql "select count(*) from kvs" + :rowMode "array"}) + first)] + (first (bean/->clj result)))) + +(defn normalize-snapshot-rows + [rows] + (mapv (fn [row] (vec row)) (array-seq rows))) + +(defn encode-snapshot-rows + [rows] + (.encode snapshot-text-encoder (sqlite-util/write-transit-str rows))) + +(defn frame-bytes + [^js data] + (let [len (.-byteLength data) + out (js/Uint8Array. (+ 4 len)) + view (js/DataView. (.-buffer out))] + (.setUint32 view 0 len false) + (.set out data 4) + out)) + +(defn maybe-compress-stream + [stream] + (if (exists? js/CompressionStream) + (.pipeThrough stream (js/CompressionStream. "gzip")) + stream)) + +(defn tx encrypted-datoms)] + (d/transact! (:conn temp) tx-data {:initial-db? true}) + nil)) + :progress-f + (fn [processed total] + (update-progress {:sub-type :upload-progress + :message (if aes-key + (str "Encrypting " processed "/" total) + (str "Preparing " processed "/" total))}))})] + temp)) + +(defn upload-graph! + [repo] + (let [base (http-base-url) + graph-id (get-graph-id repo) + update-progress (fn [payload] + (worker-util/post-message :rtc-log + (merge {:type :rtc.log/upload + :graph-uuid graph-id} + payload)))] + (cond + (not (and (seq base) (seq graph-id))) + (p/rejected (ex-info "db-sync missing upload info" + {:repo repo :base base :graph-id graph-id})) + + :else + (if-let [source-conn (worker-state/get-datascript-conn repo)] + (let [graph-e2ee? (true? (sync-crypt/graph-e2ee? repo))] + (p/let [aes-key (when graph-e2ee? + (sync-crypt/ (p/loop [last-addr -1 + first-batch? true + loaded 0] + (let [rows (fetch-kvs-rows db last-addr upload-kvs-batch-size)] + (if (empty? rows) + (do + (sync-apply/clear-pending-txs! repo) + (client-op/remove-local-tx repo) + (client-op/update-local-tx repo 0) + (client-op/add-all-exists-asset-as-ops repo) + (update-progress {:sub-type :upload-completed + :message "Graph upload finished!"}) + {:graph-id graph-id}) + (let [max-addr (apply max (map first rows)) + rows* (normalize-snapshot-rows rows) + loaded' (+ loaded (count rows*)) + finished? (= loaded' total-rows) + upload-url (str base "/sync/" graph-id "/snapshot/upload?reset=" + (if first-batch? "true" "false") + "&finished=" + (if finished? "true" "false") + (when finished? + (str "&checksum=" (js/encodeURIComponent snapshot-checksum))))] + (p/let [{:keys [body encoding]} ( {"content-type" snapshot-content-type} + (string? encoding) (assoc "content-encoding" encoding)) + _ (sync-transport/fetch-json + upload-url + {:method "POST" + :headers headers + :body body} + {:response-schema :sync/snapshot-upload})] + (update-progress {:sub-type :upload-progress + :message (str "Uploading " loaded' "/" total-rows)}) + (p/recur max-addr false loaded')))))) + (p/finally + (fn [] + (sync-temp-sqlite/cleanup-temp-sqlite! temp)))))))) + (p/rejected (ex-info "db-sync missing datascript conn" + {:repo repo :graph-id graph-id})))))) diff --git a/src/main/frontend/worker/sync/util.cljs b/src/main/frontend/worker/sync/util.cljs new file mode 100644 index 0000000000..004ae3907a --- /dev/null +++ b/src/main/frontend/worker/sync/util.cljs @@ -0,0 +1,70 @@ +(ns frontend.worker.sync.util + "Helpers for sync" + (:require [lambdaisland.glogi :as log] + [frontend.worker.platform :as platform] + [frontend.worker.state :as worker-state] + [logseq.db :as ldb] + [frontend.worker.sync.client-op :as client-op] + [logseq.common.util :as common-util])) + +(defn fail-fast [tag data] + (log/error tag data) + (throw (ex-info (name tag) data))) + +(defn cli-node-owner? + [] + (try + (let [env (:env (platform/current))] + (and (= :node (:runtime env)) + (= :cli (:owner-source env)))) + (catch :default _ false))) + +(defn auth-token + [] + (let [cli-owner? (cli-node-owner?) + configured-token (:auth-token @worker-state/*db-sync-config)] + (if cli-owner? + configured-token + (or (worker-state/get-id-token) + configured-token)))) + +(defn get-graph-id + [repo] + (or (when-let [conn (worker-state/get-datascript-conn repo)] + (let [db @conn + graph-uuid (ldb/get-graph-rtc-uuid db)] + (when graph-uuid + (str graph-uuid)))) + (some-> (client-op/get-graph-uuid repo) str))) + +(defn require-auth-token! + [context] + (when-not (seq (auth-token)) + (fail-fast :db-sync/missing-field (assoc context :field :auth-token)))) + +(defn- ex-message->code + [message] + (when (and (string? message) + (re-matches #"[a-zA-Z0-9._/\-]+" message)) + (keyword message))) + +(defn- error->diagnostic + [error] + (let [data (or (ex-data error) {}) + code (or (:code data) + (ex-message->code (ex-message error)) + :exception)] + {:code code + :message (or (ex-message error) (str error)) + :at (common-util/time-ms) + :data (when (seq data) data)})) + +(defn set-last-sync-error! + [client error] + (when-let [*last-error (:last-sync-error client)] + (reset! *last-error (error->diagnostic error)))) + +(defn clear-last-sync-error! + [client] + (when-let [*last-error (:last-sync-error client)] + (reset! *last-error nil))) diff --git a/src/main/frontend/worker/undo_redo.cljs b/src/main/frontend/worker/undo_redo.cljs index 41a9762273..9d7004754e 100644 --- a/src/main/frontend/worker/undo_redo.cljs +++ b/src/main/frontend/worker/undo_redo.cljs @@ -1,200 +1,367 @@ (ns frontend.worker.undo-redo - "Undo redo validate" - (:require [clojure.set :as set] - [datascript.core :as d] + "Undo redo new implementation" + (:require [datascript.core :as d] + [frontend.worker.state :as worker-state] [lambdaisland.glogi :as log] - [logseq.db :as ldb])) + [logseq.common.defkeywords :refer [defkeywords]] + [malli.core :as m] + [malli.util :as mu])) -(def ^:private structural-attrs - #{:block/uuid :block/parent :block/page}) +(defkeywords + ::record-editor-info {:doc "record current editor and cursor"} + ::db-transact {:doc "db tx"} + ::ui-state {:doc "ui state such as route && sidebar blocks"}) -(def ^:private ref-attrs - #{:block/parent :block/page}) +(defonce *apply-history-action! (atom nil)) -(defn- structural-tx-item? - [item] - (cond - (map? item) - (some structural-attrs (keys item)) +;; TODO: add other UI states such as `::ui-updates`. +(comment + ;; TODO: convert it to a qualified-keyword + (sr/defkeyword :gen-undo-ops? + "tx-meta option, generate undo ops from tx-data when true (default true)")) - (vector? item) - (let [op (first item) - a (nth item 2 nil)] - (or (= :db/retractEntity op) - (contains? structural-attrs a))) +(def ^:private selection-editor-info-schema + [:map + [:selected-block-uuids [:sequential :uuid]] + [:selection-direction {:optional true} [:maybe [:enum :up :down]]]]) - (d/datom? item) - (contains? structural-attrs (:a item)) +(def ^:private editor-cursor-info-schema + [:map + [:block-uuid :uuid] + [:container-id [:or :int [:enum :unknown-container]]] + [:start-pos [:maybe :int]] + [:end-pos [:maybe :int]] + [:selected-block-uuids {:optional true} [:sequential :uuid]] + [:selection-direction {:optional true} [:maybe [:enum :up :down]]]]) - :else false)) +(def ^:private undo-op-item-schema + (mu/closed-schema + [:multi {:dispatch first} + [::db-transact + [:cat :keyword + [:map + [:tx-meta [:map {:closed false} + [:outliner-op :keyword]]] + [:added-ids [:set :int]] + [:retracted-ids [:set :int]] + [:db-sync/tx-id {:optional true} :uuid] + [:db-sync/forward-outliner-ops {:optional true} [:sequential :any]] + [:db-sync/inverse-outliner-ops {:optional true} [:sequential :any]]]]] -(defn- structural-tx? - [tx-data] - (boolean (some structural-tx-item? tx-data))) + [::record-editor-info + [:cat :keyword + [:or + editor-cursor-info-schema + selection-editor-info-schema]]] -(defn- resolve-entity-id - [db value] - (cond - (int? value) value - (vector? value) (d/entid db value) - :else nil)) + [::ui-state + [:cat :keyword :string]]])) -(defn- tx-entity-ids - [db tx-data] - (->> tx-data - (keep (fn [item] - (cond - (vector? item) - (let [e (second item)] - (resolve-entity-id db e)) +(def ^:private undo-op-validator (m/validator [:sequential undo-op-item-schema])) - (d/datom? item) - (resolve-entity-id db (:e item)) +(defonce max-stack-length 250) +(defonce *undo-ops (atom {})) +(defonce *redo-ops (atom {})) +(defonce *pending-editor-info (atom {})) - (map? item) - (or (resolve-entity-id db (:db/id item)) - (resolve-entity-id db [:block/uuid (:block/uuid item)])) +(defn clear-history! + [repo] + (swap! *undo-ops assoc repo []) + (swap! *redo-ops assoc repo []) + (swap! *pending-editor-info dissoc repo)) - :else nil))) - (remove nil?) - set)) +(defn set-pending-editor-info! + [repo editor-info] + (if editor-info + (swap! *pending-editor-info assoc repo editor-info) + (swap! *pending-editor-info dissoc repo))) -(defn- entities-exist? - [db tx-data] - (every? (fn [id] - (when id - (d/entity db id))) - (tx-entity-ids db tx-data))) +(defn- take-pending-editor-info! + [repo] + (let [editor-info (get @*pending-editor-info repo)] + (swap! *pending-editor-info dissoc repo) + editor-info)) -(defn- parent-cycle? - [ent] - (let [start (:block/uuid ent)] - (loop [current ent - seen #{start} - steps 0] - (cond - (>= steps 200) true - (nil? (:block/parent current)) false - :else (let [next-ent (:block/parent current) - next-uuid (:block/uuid next-ent)] - (if (contains? seen next-uuid) - true - (recur next-ent (conj seen next-uuid) (inc steps)))))))) +(defn- conj-op + [col op] + (let [result (conj (if (empty? col) [] col) op)] + (if (>= (count result) max-stack-length) + (subvec result 0 (/ max-stack-length 2)) + result))) -(defn- issues-for-entity-ids - [db ids] - (let [id->ent (->> ids - (keep (fn [id] - (when-let [ent (d/entity db id)] - (when (:db/id ent) - [id ent])))) - (into {})) - ents (vals id->ent) - uuid-required-ids (keep (fn [[id ent]] - (when (or (:block/title ent) - (:block/page ent) - (:block/parent ent)) - id)) - id->ent)] - (concat - (for [e uuid-required-ids - :let [ent (get id->ent e)] - :when (nil? (:block/uuid ent))] - {:type :missing-uuid :e e}) - (for [ent ents - :let [uuid (:block/uuid ent) - parent (:block/parent ent)] - :when (and (not (ldb/page? ent)) (nil? parent))] - {:type :missing-parent :uuid uuid}) - (for [ent ents - :let [uuid (:block/uuid ent) - parent (:block/parent ent)] - :when (and (not (ldb/page? ent)) parent (nil? (:block/uuid parent)))] - {:type :missing-parent-ref :uuid uuid}) - (for [ent ents - :let [uuid (:block/uuid ent) - page (:block/page ent)] - :when (and (not (ldb/page? ent)) (nil? page))] - {:type :missing-page :uuid uuid}) - (for [ent ents - :let [uuid (:block/uuid ent) - page (:block/page ent)] - :when (and (not (ldb/page? ent)) page (not (ldb/page? page)))] - {:type :page-not-page :uuid uuid}) - (for [ent ents - :let [uuid (:block/uuid ent) - parent (:block/parent ent) - page (:block/page ent) - expected-page (when parent - (if (ldb/page? parent) parent (:block/page parent)))] - :when (and (not (ldb/page? ent)) - parent - page - expected-page - (not= (:block/uuid expected-page) (:block/uuid page)))] - {:type :page-mismatch :uuid uuid}) - (for [ent ents - :let [uuid (:block/uuid ent) - parent (:block/parent ent)] - :when (and parent (= uuid (:block/uuid parent)))] - {:type :self-parent :uuid uuid}) - (for [ent ents - :let [uuid (:block/uuid ent)] - :when (and (not (ldb/page? ent)) - (parent-cycle? ent))] - {:type :cycle :uuid uuid})))) +(defn- pop-stack + [stack] + (when (seq stack) + [(last stack) (pop stack)])) -(defn- retract-entity-ids - [db-before tx-data] - (->> tx-data - (keep (fn [item] - (when (and (vector? item) (= :db/retractEntity (first item))) - (second item)))) - (map (fn [id] (d/entid db-before id))) - (filter int?))) +(defn- push-undo-op + [repo op] + (assert (undo-op-validator op) {:op op}) + (swap! *undo-ops update repo conj-op op)) -(defn- affected-entity-ids - [db-before {:keys [tx-data]} original-tx-data] - (let [tx-ids (->> tx-data - (mapcat (fn [[e a v _tx _added]] - (cond-> #{e} - (and (contains? ref-attrs a) (int? v)) (conj v) - (and (contains? ref-attrs a) (vector? v)) - (conj (d/entid db-before v))))) +(defn- push-redo-op + [repo op] + (assert (undo-op-validator op) {:op op}) + (swap! *redo-ops update repo conj-op op)) + +(defn- pop-undo-op + [repo] + (let [undo-stack (get @*undo-ops repo) + [op undo-stack*] (pop-stack undo-stack)] + (swap! *undo-ops assoc repo undo-stack*) + op)) + +(defn- pop-redo-op + [repo] + (let [redo-stack (get @*redo-ops repo) + [op redo-stack*] (pop-stack redo-stack)] + (swap! *redo-ops assoc repo redo-stack*) + op)) + +(defn- empty-undo-stack? + [repo] + (empty? (get @*undo-ops repo))) + +(defn- empty-redo-stack? + [repo] + (empty? (get @*redo-ops repo))) + +(defn- undo-redo-action-meta + [{:keys [tx-meta] + source-tx-id :db-sync/tx-id} + undo?] + (-> tx-meta + (dissoc :db-sync/tx-id) + (assoc + :gen-undo-ops? false + :persist-op? true + :undo? undo? + :redo? (not undo?) + :db-sync/source-tx-id source-tx-id))) + +(defn- rebind-op-db-sync-tx-id + [op history-tx-id] + (if (uuid? history-tx-id) + (mapv (fn [item] + (if (= ::db-transact (first item)) + [::db-transact (assoc (second item) :db-sync/tx-id history-tx-id)] + item)) + op) + op)) + +(defn- skippable-worker-error? + [error] + (= :invalid-history-action-ops (:reason (ex-data error)))) + +(defn- skippable-worker-result? + [undo? {:keys [reason]}] + (if undo? + (contains? #{:invalid-history-action-ops + :invalid-history-action-tx + :unsupported-history-action} + reason) + (contains? #{:invalid-history-action-ops} + reason))) + +(declare undo-redo-aux) + +(defn- empty-stack-result + [undo?] + (if undo? ::empty-undo-stack ::empty-redo-stack)) + +(defn- push-opposite-op! + [repo undo? op] + (let [sanitize-db-transact + (fn [data] + ;; Keep undo/redo history op-only. Drop any legacy/raw tx payloads. + (dissoc data + :tx + :tx-data + :reversed-tx + :reversed-tx-data + :db-sync/normalized-tx-data + :db-sync/reversed-tx-data)) + op' (mapv (fn [item] + (if (= ::db-transact (first item)) + [::db-transact (sanitize-db-transact (second item))] + item)) + op)] + ((if undo? push-redo-op push-undo-op) repo op'))) + +(defn- undo-redo-result + [repo conn undo? op op'] + (push-opposite-op! repo undo? op') + (let [editor-cursors (->> (filter #(= ::record-editor-info (first %)) op) + (map second)) + cursor (if undo? + (first editor-cursors) + (or (last editor-cursors) (first editor-cursors))) + block-content (when-let [block-uuid (:block-uuid cursor)] + (:block/title (d/entity @conn [:block/uuid block-uuid])))] + {:undo? undo? + :editor-cursors editor-cursors + :block-content block-content})) + +(defn- skip-op-and-recur + [repo undo?] + (undo-redo-aux repo undo?)) + +(defn- run-worker-path + [repo conn undo? op tx-meta' tx-id] + (if-let [apply-action @*apply-history-action!] + (try + (let [worker-result (apply-action repo tx-id undo? tx-meta')] + (cond + (:applied? worker-result) + (undo-redo-result repo conn undo? op + (if undo? + op + (rebind-op-db-sync-tx-id op (:history-tx-id worker-result)))) + + (skippable-worker-result? undo? worker-result) + (skip-op-and-recur repo undo?) + + :else + (do + (log/error ::undo-redo-worker-action-unavailable + {:undo? undo? + :repo repo + :tx-id tx-id + :result worker-result}) + (clear-history! repo) + (empty-stack-result undo?)))) + (catch :default e + (if (skippable-worker-error? e) + (skip-op-and-recur repo undo?) + (do + (log/error ::undo-redo-worker-failed e) + (clear-history! repo) + (throw e) + (empty-stack-result undo?))))) + (do + (log/error ::undo-redo-worker-action-unavailable + {:undo? undo? + :repo repo + :tx-id tx-id + :tx-meta tx-meta' + :reason :missing-apply-history-action}) + (clear-history! repo) + (empty-stack-result undo?)))) + +(defn- process-db-op + [repo conn undo? op] + (when-let [data (some #(when (= ::db-transact (first %)) + (second %)) + op)] + (let [tx-id (:db-sync/tx-id data) + forward-outliner-ops (:db-sync/forward-outliner-ops data) + inverse-outliner-ops (:db-sync/inverse-outliner-ops data) + tx-meta' (-> (undo-redo-action-meta data undo?) + (assoc :forward-outliner-ops forward-outliner-ops + :inverse-outliner-ops inverse-outliner-ops + :db-sync/forward-outliner-ops forward-outliner-ops + :db-sync/inverse-outliner-ops inverse-outliner-ops))] + (run-worker-path repo conn undo? op tx-meta' tx-id)))) + +(defn- undo-redo-aux + [repo undo?] + (if-let [op (not-empty ((if undo? pop-undo-op pop-redo-op) repo))] + (if (= ::ui-state (ffirst op)) + (do + (push-opposite-op! repo undo? op) + {:undo? undo? + :ui-state-str (second (first op))}) + (process-db-op repo (worker-state/get-datascript-conn repo) undo? op)) + (when ((if undo? empty-undo-stack? empty-redo-stack?) repo) + (empty-stack-result undo?)))) + +(defn undo + [repo] + (undo-redo-aux repo true)) + +(defn redo + [repo] + (undo-redo-aux repo false)) + +(defn record-editor-info! + [repo editor-info] + (when editor-info + (swap! *undo-ops + update repo + (fn [stack] + (if (seq stack) + (update stack (dec (count stack)) + (fn [op] + (conj (vec op) [::record-editor-info editor-info]))) + stack))))) + +(defn record-ui-state! + [repo ui-state-str] + (when ui-state-str + (push-undo-op repo [[::ui-state ui-state-str]]))) + +(defn- pending-history-action-ops + [repo tx-id] + (when (uuid? tx-id) + (when-let [conn (get @worker-state/*client-ops-conns repo)] + (when-let [ent (d/entity @conn [:db-sync/tx-id tx-id])] + {:db-sync/forward-outliner-ops (some-> (:db-sync/forward-outliner-ops ent) seq vec) + :db-sync/inverse-outliner-ops (some-> (:db-sync/inverse-outliner-ops ent) seq vec)})))) + +(defn gen-undo-ops! + [repo {:keys [tx-data tx-meta db-after db-before]} tx-id + {:keys [apply-history-action!]}] + (when (nil? @*apply-history-action!) + (reset! *apply-history-action! apply-history-action!)) + (let [{:keys [outliner-op local-tx?]} tx-meta + {:db-sync/keys [forward-outliner-ops inverse-outliner-ops]} (pending-history-action-ops repo tx-id)] + (when (and + (true? local-tx?) + outliner-op + (not (false? (:gen-undo-ops? tx-meta))) + (not (:create-today-journal? tx-meta)) + (seq forward-outliner-ops) + (seq inverse-outliner-ops)) + (let [all-ids (distinct (map :e tx-data)) + retracted-ids (set + (filter + (fn [id] (and (nil? (d/entity db-after id)) (d/entity db-before id))) + all-ids)) + added-ids (set + (filter + (fn [id] (and (nil? (d/entity db-before id)) (d/entity db-after id))) + all-ids)) + editor-info (or (:undo-redo/editor-info tx-meta) + (take-pending-editor-info! repo)) + + data (cond-> {:db-sync/tx-id tx-id + :tx-meta (dissoc tx-meta :outliner-ops) + :added-ids added-ids + :retracted-ids retracted-ids + :db-sync/forward-outliner-ops forward-outliner-ops + :db-sync/inverse-outliner-ops inverse-outliner-ops}) + op (->> [(when editor-info [::record-editor-info editor-info]) + [::db-transact data]] (remove nil?) - set) - retract-ids (retract-entity-ids db-before original-tx-data) - child-ids (mapcat (fn [id] - (when-let [ent (d/entity db-before id)] - (map :db/id (:block/_parent ent)))) - retract-ids)] - (-> tx-ids - (into retract-ids) - (into child-ids)))) + vec)] + ;; A new local action invalidates redo history. + (swap! *redo-ops assoc repo []) + (push-undo-op repo op))))) -(defn valid-undo-redo-tx? - [conn tx-data] - (try - (if-not (structural-tx? tx-data) - (if (entities-exist? @conn tx-data) - true - (do - (log/warn ::undo-redo-invalid {:reason :missing-entities}) - false)) - (let [db-before @conn - tx-report (d/with db-before tx-data) - db-after (:db-after tx-report) - affected-ids (affected-entity-ids db-before tx-report tx-data) - baseline-issues (if (seq affected-ids) - (set (issues-for-entity-ids db-before affected-ids)) - #{}) - after-issues (if (seq affected-ids) - (set (issues-for-entity-ids db-after affected-ids)) - #{}) - new-issues (seq (set/difference after-issues baseline-issues))] - (when (seq new-issues) - (log/warn ::undo-redo-invalid {:issues (take 5 new-issues)})) - (empty? new-issues))) - (catch :default e - (log/error ::undo-redo-validate-failed e) - false))) +(defn get-debug-state + [repo] + {:undo-ops (get @*undo-ops repo []) + :redo-ops (get @*redo-ops repo []) + :pending-editor-info (get @*pending-editor-info repo)}) + +(defn referenced-history-tx-ids + [repo] + (->> (concat (get @*undo-ops repo []) + (get @*redo-ops repo [])) + (mapcat identity) + (keep (fn [item] + (when (= ::db-transact (first item)) + (let [tx-id (:db-sync/tx-id (second item))] + (when (uuid? tx-id) + tx-id))))) + set)) diff --git a/src/main/logseq/api/db_based.cljs b/src/main/logseq/api/db_based.cljs index 6451324bbe..ad82b19e5b 100644 --- a/src/main/logseq/api/db_based.cljs +++ b/src/main/logseq/api/db_based.cljs @@ -98,8 +98,8 @@ (sdk-utils/uuid-or-throw-error block-uuid) content (dissoc opts :properties)) ;; update editing block content if the block is currently being edited - (when (= block-uuid (some-> (state/get-edit-block) :block/uuid)) - (state/set-edit-content! content)))))) + (when (= block-uuid (some-> (state/get-edit-block) :block/uuid)) + (state/set-edit-content! content)))))) (defn get-property [k] @@ -191,7 +191,7 @@ (defn get-all-properties [] - (-> (ldb/get-all-properties (db/get-db)) + (-> (db-model/get-all-properties (state/get-current-repo)) sdk-utils/result->js)) (defn get-tag-objects @@ -401,4 +401,4 @@ (throw (ex-info "Tag id should be a number" {:tag-id tag-id})))) (db-property-handler/set-block-property! - (:db/id property) :logseq.property/classes tag-ids)))) \ No newline at end of file + (:db/id property) :logseq.property/classes tag-ids)))) diff --git a/src/main/logseq/api/editor.cljs b/src/main/logseq/api/editor.cljs index e901dd320b..8e9f958764 100644 --- a/src/main/logseq/api/editor.cljs +++ b/src/main/logseq/api/editor.cljs @@ -188,8 +188,7 @@ [block-uuid-or-page-name] (p/let [repo (state/get-current-repo) block (db-async/ [(str "Sync status") + (cond-> ["Sync status" (str "repo: " (or repo "-")) (str "graph-id: " (or graph-id "-")) (str "ws-state: " (or ws-state :unknown)) diff --git a/src/main/logseq/sdk/ui.cljs b/src/main/logseq/sdk/ui.cljs index ed650e6b71..6eb9409c78 100644 --- a/src/main/logseq/sdk/ui.cljs +++ b/src/main/logseq/sdk/ui.cljs @@ -1,18 +1,19 @@ (ns logseq.sdk.ui - (:require [frontend.handler.notification :as notification] - [cljs-bean.core :as bean] - [goog.dom :as gdom] - [sci.core :as sci] + (:require [cljs-bean.core :as bean] + [cljs.reader :as reader] + [clojure.string :as string] + [frontend.handler.notification :as notification] [frontend.util :as util] - [clojure.string :as string])) + [goog.dom :as gdom] + [lambdaisland.glogi :as log])) (defn- parse-hiccup-ui [input] (when (string? input) (try - (sci/eval-string input {:preset :termination-safe}) + (reader/read-string input) (catch :default e - (js/console.error "[parse hiccup error]" e) input)))) + (log/error :parse-hiccup-error e) input)))) (defn -show_msg ([content] (-show_msg content :success nil)) @@ -59,4 +60,4 @@ [prop (util/trim-safe (.getPropertyValue s prop))])) (remove empty?) (into {}) - (bean/->js))))) \ No newline at end of file + (bean/->js))))) diff --git a/src/resources/dicts/en.edn b/src/resources/dicts/en.edn index 9bf1bce792..15d35619d8 100644 --- a/src/resources/dicts/en.edn +++ b/src/resources/dicts/en.edn @@ -166,6 +166,7 @@ :content/click-to-edit "Click to edit" :context-menu/make-a-flashcard "Make a Flashcard" :context-menu/toggle-number-list "Toggle number list" + :context-menu/set-icon "Set icon" :settings-page/ai "AI" :settings-page/tab-ai "AI" :settings-page/enable-mcp-server "MCP Server" @@ -579,6 +580,7 @@ :dev/show-page-data "(Dev) Show page data" :dev/replace-graph-with-db-file "(Dev) Replace graph with its db.sqlite file" :dev/validate-db "(Dev) Validate current graph" + :dev/recompute-checksum "(Dev) Recompute graph checksum" :dev/gc-graph "(Dev) Garbage collect graph (remove unused data in SQLite)" :dev/rtc-stop "(Dev) RTC Stop" :dev/rtc-start "(Dev) RTC Start" diff --git a/src/test/frontend/db/db_based_model_test.cljs b/src/test/frontend/db/db_based_model_test.cljs index 72362c8922..dd4095d99e 100644 --- a/src/test/frontend/db/db_based_model_test.cljs +++ b/src/test/frontend/db/db_based_model_test.cljs @@ -5,7 +5,8 @@ [frontend.db.model :as model] [frontend.test.helper :as test-helper] [logseq.db :as ldb] - [logseq.db.frontend.class :as db-class])) + [logseq.db.frontend.class :as db-class] + [logseq.outliner.property :as outliner-property])) (def repo test-helper/test-db) @@ -33,6 +34,24 @@ ["class1" "class2"])) (set (map :block/title (model/get-all-classes repo))))))) +(deftest get-all-classes-filters-recycled-test + (let [opts {:redirect? false :class? true} + _ (test-helper/create-page! "class1" opts) + _ (test-helper/create-page! "class2" opts) + class1 (db/get-case-page "class1")] + (db/transact! repo [{:db/id (:db/id class1) + :logseq.property/deleted-at 1}]) + (is (not (contains? (set (map :block/title (model/get-all-classes repo))) "class1"))))) + +(deftest get-all-properties-filters-recycled-test + (let [conn (db/get-db repo false) + _ (outliner-property/upsert-property! conn nil {:logseq.property/type :default} {:property-name "prop1"}) + _ (outliner-property/upsert-property! conn nil {:logseq.property/type :default} {:property-name "prop2"}) + prop1 (db/get-case-page "prop1")] + (db/transact! repo [{:db/id (:db/id prop1) + :logseq.property/deleted-at 1}]) + (is (not (contains? (set (map :block/title (model/get-all-properties repo))) "prop1"))))) + ;; TODO: Async test (deftest ^:fix-me get-class-objects-test (let [opts {:class? true diff --git a/src/test/frontend/extensions/sci_test.cljs b/src/test/frontend/extensions/sci_test.cljs new file mode 100644 index 0000000000..06702b1255 --- /dev/null +++ b/src/test/frontend/extensions/sci_test.cljs @@ -0,0 +1,40 @@ +(ns frontend.extensions.sci-test + (:require [cljs.test :refer [deftest is testing]] + [frontend.extensions.sci :as sci] + [frontend.handler.notification :as notification] + [logseq.sdk.ui :as sdk-ui])) + +(deftest eval-string-keeps-current-entrypoint-contract + (testing "default helpers stay available" + (is (= 6 (sci/eval-string "(sum [1 2 3])"))) + (is (= 2 (sci/eval-string "(average [1 2 3])"))) + (is (= 3 (sci/eval-string "(+ block 1)" + {:namespaces {'user {'block 2}}}))) + (is (= 3 (sci/eval-string "(+ block 1)" + {:bindings {'block 2}}))) + (is (= 11 (sci/eval-string "(+ block 1)" + {:namespaces {'user {'block 10}} + :bindings {'block 2}}))) + (is (= 6 (sci/eval-string "(sum [1 2 3])" + {:namespaces {'user {'block 2}}})))) + (testing "function values can still be evaluated and invoked later" + (let [f (sci/eval-string "(fn [result] (count result))")] + (is (fn? f)) + (is (= 3 (sci/call-fn f [1 2 3])))))) + +(deftest show-msg-still-parses-hiccup-strings + (let [captured (atom nil)] + (with-redefs [notification/show! + (fn [content status clear? uid timeout _] + (reset! captured {:content content + :status status + :clear? clear? + :uid uid + :timeout timeout}) + :test-key)] + (is (= "test-key" + (sdk-ui/-show_msg "[:div {:class \"from-sci\"} \"Hello\"]" :success nil))) + (is (= [:div {:class "from-sci"} "Hello"] + (:content @captured))) + (is (= :success (:status @captured))) + (is (true? (:clear? @captured)))))) diff --git a/src/test/frontend/fs/test_node.cljs b/src/test/frontend/fs/test_node.cljs index 89de155657..74b4d81cde 100644 --- a/src/test/frontend/fs/test_node.cljs +++ b/src/test/frontend/fs/test_node.cljs @@ -8,10 +8,34 @@ (defrecord NodeTestfs [] protocol/Fs + (mkdir! [_this dir] + (fsp/mkdir dir)) + (mkdir-recur! [_this dir] + (fsp/mkdir dir #js {:recursive true})) + (readdir [_this dir] + (fsp/readdir dir)) + (unlink! [_this _repo path _opts] + (fsp/unlink path)) + (rmdir! [_this dir] + (fsp/rm dir #js {:recursive true :force true})) (read-file [_this _dir path _options] (p/let [content (fsp/readFile path)] (str content))) + (read-file-raw [_this _dir path _options] + (fsp/readFile path)) (write-file! [_this _repo _dir path content _opts] (fsp/writeFile path content)) + (rename! [_this _repo old-path new-path] + (fsp/rename old-path new-path)) + (copy! [_this _repo old-path new-path] + (fsp/copyFile old-path new-path)) (stat [_this fpath] - (fsp/stat fpath))) + (fsp/stat fpath)) + (open-dir [_this _dir] + nil) + (get-files [_this _dir] + nil) + (watch-dir! [_this _dir _options] + nil) + (unwatch-dir! [_this _dir] + nil)) diff --git a/src/test/frontend/handler/db_based/sync_test.cljs b/src/test/frontend/handler/db_based/sync_test.cljs index 4569124e4d..93f8fc7375 100644 --- a/src/test/frontend/handler/db_based/sync_test.cljs +++ b/src/test/frontend/handler/db_based/sync_test.cljs @@ -87,12 +87,16 @@ (deftest rtc-create-graph-persists-disabled-e2ee-flag-test (async done (let [fetch-called (atom nil) - tx-called (atom nil)] + tx-called (atom nil) + ensure-calls (atom [])] (-> (p/with-redefs [db-sync/http-base (fn [] "http://base") user-handler/task--ensure-id&access-token (fn [resolve _reject] (resolve true)) db/get-db (fn [] :db) ldb/get-graph-schema-version (fn [_] {:major 65}) + state/ (p/with-redefs [db-sync/http-base (fn [] "http://base") user-handler/task--ensure-id&access-token (fn [resolve _reject] (resolve true)) db/get-db (fn [] :db) ldb/get-graph-schema-version (fn [_] {:major 65}) + state/clj :keywordize-keys true))] (is (= false (:graph-ready-for-use? request-body))) - (is (= [[:thread-api/db-sync-upload-graph "logseq_db_demo"]] + (is (= [[:thread-api/db-sync-ensure-user-rsa-keys + {:ensure-server? true}] + [:thread-api/db-sync-upload-graph "logseq_db_demo"]] @upload-calls)) (is (= 1 @refresh-calls)) (is (= ["logseq_db_demo"] @start-calls)) @@ -309,7 +325,10 @@ (deftest get-remote-graphs-includes-ready-for-use-flag-test (async done - (let [graphs-state (atom nil)] + (let [graphs-state (atom nil) + worker-prev @state/*db-worker + ensure-calls (atom [])] + (reset! state/*db-worker :worker) (-> (p/with-redefs [db-sync/http-base (fn [] "http://base") user-handler/task--ensure-id&access-token (fn [resolve _reject] (resolve true)) @@ -320,7 +339,11 @@ :graph-e2ee? true :graph-ready-for-use? false :created-at 1 - :updated-at 2}]})) + :updated-at 2}] + :user-rsa-keys-exists? true})) + state/ (p/with-redefs [db-sync/http-base (fn [] "http://base") + user-handler/task--ensure-id&access-token (fn [resolve _reject] + (resolve true)) + db-sync/fetch-json (fn [_url _opts _schema] + (p/resolved {:graphs [] + :user-rsa-keys-exists? false})) + state/> (d/q '[:find (pull ?b [*]) :where - [?b :block/parent] + [?p :block/name "page1"] + [?b :block/page ?p] [?b :block/title] - [(missing? $ ?b :logseq.property/built-in?)]] + [(missing? $ ?b :logseq.property/deleted-at)]] @conn) - (map (comp :block/title first)))] - (is (= ["b1" "b2"] updated-blocks) "Block is deleted")))}))) + (map (comp :block/title first))) + deleted-blocks (->> (d/q '[:find (pull ?b [*]) + :where + [?b :block/title ""]] + @conn) + (map first))] + (is (= ["b1" "b2"] updated-blocks) "Visible page blocks stay on the page") + (is (empty? deleted-blocks) "Deleted block is removed from page db")))}))) (testing "backspace deletes empty block in embedded context" ;; testing embed at this layer doesn't require an embed block since @@ -90,9 +97,16 @@ :on-delete (fn [] (let [updated-blocks (->> (d/q '[:find (pull ?b [*]) :where - [?b :block/parent] + [?p :block/name "page1"] + [?b :block/page ?p] [?b :block/title] - [(missing? $ ?b :logseq.property/built-in?)]] + [(missing? $ ?b :logseq.property/deleted-at)]] @conn) - (map (comp :block/title first)))] - (is (= ["b1" "b2"] updated-blocks) "Block is deleted")))})))) + (map (comp :block/title first))) + deleted-blocks (->> (d/q '[:find (pull ?b [*]) + :where + [?b :block/title ""]] + @conn) + (map first))] + (is (= ["b1" "b2"] updated-blocks) "Visible page blocks stay on the page") + (is (empty? deleted-blocks) "Deleted block is removed from page db")))})))) diff --git a/src/test/frontend/handler/editor_test.cljs b/src/test/frontend/handler/editor_test.cljs index fb9b448a32..cb6f6a273a 100644 --- a/src/test/frontend/handler/editor_test.cljs +++ b/src/test/frontend/handler/editor_test.cljs @@ -5,7 +5,8 @@ [frontend.handler.editor :as editor] [frontend.state :as state] [frontend.test.helper :as test-helper] - [frontend.util.cursor :as cursor])) + [frontend.util.cursor :as cursor] + [logseq.outliner.core :as outliner-core])) (use-fixtures :each test-helper/start-and-destroy-db) @@ -207,3 +208,26 @@ (editor/save-block! repo block-uuid "# bar") (is (= "bar" (:block/title (model/query-block-by-uuid block-uuid))))))) + +(deftest paste-cut-recycled-block-moves-existing-node-out-of-recycle + (test-helper/load-test-files [{:page {:block/title "Page 1"} + :blocks [{:block/title "source"}]} + {:page {:block/title "Page 2"} + :blocks [{:block/title "target"}]}]) + (let [source (test-helper/find-block-by-content "source") + target (test-helper/find-block-by-content "target") + recycle-page (db/get-page "Recycle")] + (outliner-core/delete-blocks! (db/get-db test-helper/test-db false) [source] {}) + (state/set-block-op-type! :cut) + (editor/paste-blocks [{:block/uuid (:block/uuid source) + :block/title "source"}] + {:target-block target + :sibling? true + :keep-uuid? true + :ops-only? true}) + (let [source' (db/entity [:block/uuid (:block/uuid source)])] + (is (= (:db/id (:block/page target)) (:db/id (:block/page source')))) + (is (= (:db/id (:block/parent target)) (:db/id (:block/parent source')))) + (is (nil? (:logseq.property/deleted-at source'))) + (is (nil? (:logseq.property.recycle/original-page source'))) + (is (not= (:db/id recycle-page) (:db/id (:block/page source'))))))) diff --git a/src/test/frontend/handler/history_test.cljs b/src/test/frontend/handler/history_test.cljs new file mode 100644 index 0000000000..7000fe828c --- /dev/null +++ b/src/test/frontend/handler/history_test.cljs @@ -0,0 +1,107 @@ +(ns frontend.handler.history-test + (:require [clojure.test :refer [deftest is]] + [frontend.db :as db] + [frontend.handler.editor :as editor] + [frontend.handler.history :as history] + [frontend.state :as state] + [frontend.util :as util] + [logseq.db :as ldb])) + +(deftest restore-cursor-and-state-prefers-ui-state-test + (let [pause-calls (atom []) + app-state-calls (atom []) + cursor-calls (atom [])] + (with-redefs [state/set-state! (fn [k v] + (swap! pause-calls conj [k v])) + ldb/read-transit-str (fn [_] + {:old-state {:route-data {:to :page}} + :new-state {:route-data {:to :home}}}) + history/restore-app-state! (fn [app-state] + (swap! app-state-calls conj app-state)) + history/restore-cursor! (fn [data] + (swap! cursor-calls conj data))] + (#'history/restore-cursor-and-state! + {:ui-state-str "ui-state" + :undo? true + :editor-cursors [{:block-uuid (random-uuid)}]}) + (is (= [[:history/paused? true] + [:history/paused? false]] + @pause-calls)) + (is (= [{:route-data {:to :page}}] + @app-state-calls)) + (is (empty? @cursor-calls))))) + +(deftest restore-cursor-and-state-falls-back-to-cursor-test + (let [pause-calls (atom []) + app-state-calls (atom []) + cursor-calls (atom [])] + (with-redefs [state/set-state! (fn [k v] + (swap! pause-calls conj [k v])) + history/restore-app-state! (fn [app-state] + (swap! app-state-calls conj app-state)) + history/restore-cursor! (fn [data] + (swap! cursor-calls conj data))] + (#'history/restore-cursor-and-state! + {:ui-state-str nil + :undo? false + :editor-cursors [{:block-uuid (random-uuid) + :start-pos 1 + :end-pos 2}]}) + (is (= [[:history/paused? true] + [:history/paused? false]] + @pause-calls)) + (is (empty? @app-state-calls)) + (is (= 1 (count @cursor-calls))) + (is (nil? (:ui-state-str (first @cursor-calls)))) + (is (= false (:undo? (first @cursor-calls))))))) + +(deftest restore-cursor-prefers-block-selection-test + (let [selection-calls (atom []) + edit-calls (atom [])] + (with-redefs [util/get-blocks-by-id (fn [block-id] + (case block-id + #uuid "00000000-0000-0000-0000-000000000001" [:node-1] + #uuid "00000000-0000-0000-0000-000000000002" [:node-2] + nil)) + state/exit-editing-and-set-selected-blocks! (fn [blocks direction] + (swap! selection-calls conj [blocks direction])) + editor/edit-block! (fn [& args] + (swap! edit-calls conj args)) + db/pull (constantly nil)] + (#'history/restore-cursor! + {:undo? true + :editor-cursors [{:selected-block-uuids [#uuid "00000000-0000-0000-0000-000000000001" + #uuid "00000000-0000-0000-0000-000000000002"] + :selection-direction :down}]}) + (is (= [[[:node-1 :node-2] :down]] + @selection-calls)) + (is (empty? @edit-calls))))) + +(deftest restore-cursor-selection-falls-back-to-editor-cursor-test + (let [selection-calls (atom []) + edit-calls (atom []) + block-uuid #uuid "00000000-0000-0000-0000-000000000003"] + (with-redefs [util/get-blocks-by-id (constantly nil) + state/exit-editing-and-set-selected-blocks! (fn [blocks direction] + (swap! selection-calls conj [blocks direction])) + editor/edit-block! (fn [& args] + (swap! edit-calls conj args)) + db/pull (fn [[_lookup-k id]] + (when (= block-uuid id) + {:db/id 42 + :block/uuid block-uuid}))] + (#'history/restore-cursor! + {:undo? false + :editor-cursors [{:selected-block-uuids [#uuid "00000000-0000-0000-0000-000000000001"] + :selection-direction :up + :block-uuid block-uuid + :container-id 99 + :start-pos 1 + :end-pos 3}]}) + (is (empty? @selection-calls)) + (is (= [[{:db/id 42 + :block/uuid block-uuid} + 3 + {:container-id 99 + :custom-content nil}]] + @edit-calls))))) diff --git a/src/test/frontend/handler/user_test.cljs b/src/test/frontend/handler/user_test.cljs new file mode 100644 index 0000000000..02090b6b33 --- /dev/null +++ b/src/test/frontend/handler/user_test.cljs @@ -0,0 +1,70 @@ +(ns frontend.handler.user-test + (:require [cljs.test :refer [deftest is testing]] + [frontend.handler.user :as user-handler] + [frontend.state :as state] + [promesa.core :as p])) + +(defn- with-mocked-local-storage + [f] + (let [old-storage (.-localStorage js/globalThis) + had-local-storage? + (.call (.-hasOwnProperty (.-prototype js/Object)) + js/globalThis + "localStorage") + mocked-storage #js {:clear (fn [] nil) + :setItem (fn [& _] nil) + :getItem (fn [& _] nil) + :removeItem (fn [& _] nil)}] + (js/Object.defineProperty js/globalThis + "localStorage" + #js {:value mocked-storage + :configurable true + :writable true}) + (try + (f) + (finally + (if had-local-storage? + (js/Object.defineProperty js/globalThis + "localStorage" + #js {:value old-storage + :configurable true + :writable true}) + (js/Reflect.deleteProperty js/globalThis "localStorage")))))) + +(deftest logout-clears-e2ee-password-when-db-worker-ready-test + (testing "logout should request db-worker to clear persisted e2ee password" + (let [ops* (atom []) + old-worker @state/*db-worker] + (reset! state/*db-worker :worker) + (try + (with-mocked-local-storage + (fn [] + (with-redefs [state/> (d/datoms db' :avet :block/uuid) + (remove (fn [datom] + (or (contains? recycled-ids (:e datom)) + (contains? recycled-page-block-ids (:e datom)) + (contains? recycle-page-ids (:e datom)))))))) (defn get-random-block [] (let [datoms (->> (get-datoms) - (remove (fn [datom] (= 1 (:e datom)))))] + (remove (fn [datom] (= 1 (:e datom)))) + (remove (fn [datom] + (empty? (d/datoms (db/get-db test-db) :eavt (:e datom) :block/parent)))) + vec)] (if (seq datoms) (let [id (:e (gen/generate (gen/elements datoms))) - block (db/pull test-db '[*] id)] + block (db/entity test-db id)] (assert (:block/parent block) (str "No parent for block: " block)) block) @@ -657,15 +683,17 @@ (defn get-random-blocks [] - (let [limit (inc (rand-int 20))] + (let [limit (inc (rand-int 5))] (repeatedly limit get-random-block))) +(def ^:private random-ops-iterations 40) + (deftest ^:long random-inserts (testing "Random inserts" (transact-random-tree!) (let [c1 (get-blocks-ids) *random-blocks (atom c1)] - (dotimes [_i 100] + (dotimes [_i random-ops-iterations] ;; (prn "random insert: " i) (let [blocks (gen-blocks)] (swap! *random-blocks (fn [old] @@ -677,7 +705,7 @@ (deftest ^:long random-deletes (testing "Random deletes" (transact-random-tree!) - (dotimes [_i 100] + (dotimes [_i random-ops-iterations] ;; (prn "Random deletes: " i) (insert-blocks! (gen-blocks) (get-random-block)) (let [blocks (get-random-blocks)] @@ -691,8 +719,8 @@ (transact-random-tree!) (let [c1 (get-blocks-ids) *random-blocks (atom c1)] - (dotimes [_i 100] - ;; (prn "Random move: " i) + (dotimes [_i random-ops-iterations] + ;; (prn :debug :i i) (let [blocks (gen-blocks)] (swap! *random-blocks (fn [old] (set/union old (set (map :block/uuid blocks))))) @@ -713,7 +741,7 @@ (transact-random-tree!) (let [c1 (get-blocks-ids) *random-blocks (atom c1)] - (dotimes [_i 100] + (dotimes [_i random-ops-iterations] ;; (prn "Random move up/down: " i) (let [blocks (gen-blocks)] (swap! *random-blocks (fn [old] @@ -731,7 +759,7 @@ (transact-random-tree!) (let [c1 (get-blocks-ids) *random-blocks (atom c1)] - (dotimes [_i 100] + (dotimes [_i random-ops-iterations] ;; (prn "Random move indent/outdent: " i) (let [new-blocks (gen-blocks)] (swap! *random-blocks (fn [old] diff --git a/src/test/frontend/state_test.cljs b/src/test/frontend/state_test.cljs index 5b8cf7a7f8..046fe6b990 100644 --- a/src/test/frontend/state_test.cljs +++ b/src/test/frontend/state_test.cljs @@ -24,3 +24,18 @@ {:shortcuts {:ui/toggle-brackets "t b"}} {:shortcuts {:editor/up ["ctrl+p" "up"]}})) "Map values get merged across configs")) + +(deftest get-editor-info-includes-selection-when-not-editing-test + (let [selected-ids [(random-uuid) (random-uuid)]] + (with-redefs [state/get-edit-block (constantly nil) + state/get-selection-block-ids (constantly selected-ids) + state/get-selection-direction (constantly :down)] + (is (= {:selected-block-uuids selected-ids + :selection-direction :down} + (state/get-editor-info)))))) + +(deftest get-editor-info-returns-nil-when-not-editing-and-no-selection-test + (with-redefs [state/get-edit-block (constantly nil) + state/get-selection-block-ids (constantly nil) + state/get-selection-direction (constantly nil)] + (is (nil? (state/get-editor-info))))) diff --git a/src/test/frontend/test/helper.cljs b/src/test/frontend/test/helper.cljs index 2a9e534b0a..0d755983fb 100644 --- a/src/test/frontend/test/helper.cljs +++ b/src/test/frontend/test/helper.cljs @@ -14,6 +14,7 @@ [frontend.worker.pipeline :as worker-pipeline] [logseq.db :as ldb] [logseq.db.common.order :as db-order] + [logseq.db.frontend.schema :as db-schema] [logseq.db.sqlite.build :as sqlite-build] [logseq.db.sqlite.create-graph :as sqlite-create-graph] [logseq.db.sqlite.util :as sqlite-util] @@ -32,9 +33,12 @@ (def test-db "logseq_db_test-db") (defn start-test-db! - [& {:keys [build-init-data?] :or {build-init-data? true} :as opts}] + [& {:keys [build-init-data? schema] :or {build-init-data? true}}] (state/set-current-repo! test-db) - (conn/start! test-db opts) + (let [db-name (conn/get-repo-path test-db) + db-conn (d/create-conn (merge db-schema/schema schema))] + (conn/destroy-all!) + (swap! conn/conns assoc db-name db-conn)) (ldb/register-transact-pipeline-fn! worker-pipeline/transact-pipeline) (let [conn (conn/get-db test-db false)] (when build-init-data? (d/transact! conn (sqlite-create-graph/build-db-initial-data config/config-default-content))) diff --git a/src/test/frontend/undo_redo_test.cljs b/src/test/frontend/undo_redo_test.cljs index cf6f4b8edb..abb61bef9f 100644 --- a/src/test/frontend/undo_redo_test.cljs +++ b/src/test/frontend/undo_redo_test.cljs @@ -1,441 +1,74 @@ (ns frontend.undo-redo-test - (:require [clojure.test :as t :refer [deftest is testing use-fixtures]] - [datascript.core :as d] - [frontend.db :as db] - [frontend.modules.outliner.core-test :as outliner-test] + (:require [clojure.test :refer [deftest is]] [frontend.state :as state] - [frontend.test.helper :as test-helper] [frontend.undo-redo :as undo-redo] - [frontend.worker.db-listener :as worker-db-listener] - [frontend.worker.undo-redo :as undo-validate] - [logseq.db :as ldb])) + [frontend.util :as util])) -;; TODO: random property ops test +;; ADR 0013 note: this namespace keeps main-thread coordination coverage only. +;; Worker-owned DB-history recording/replay tests belong under src/test/frontend/worker/. -(def test-db test-helper/test-db) +(deftest undo-redo-proxy-to-worker-test + (let [calls (atom []) + invoke! (fn [& args] + (swap! calls conj (vec args)) + (vec args)) + repo "repo-1"] + (with-redefs [util/node-test? false + state/ tx-report - (assoc-in [:tx-meta :client-id] (:client-id @state/state)) - (update-in [:tx-meta :local-tx?] (fn [local-tx?] - (if (nil? local-tx?) - true - local-tx?)))))) +(deftest clear-history-and-record-editor-info-proxy-test + (let [calls (atom []) + invoke! (fn [& args] + (swap! calls conj (vec args)) + (vec args)) + repo "repo-2" + editor-info {:block-uuid (random-uuid) + :container-id 1 + :start-pos 0 + :end-pos 3}] + (with-redefs [util/node-test? false + state/= steps 200) true - (nil? (:block/parent current)) false - :else (let [next-ent (:block/parent current) - next-uuid (:block/uuid next-ent)] - (if (contains? seen next-uuid) - true - (recur next-ent (conj seen next-uuid) (inc steps)))))))) - -(defn- db-issues - [db] - (let [ents (->> (d/q '[:find [?e ...] - :where - [?e :block/uuid]] - db) - (map (fn [e] (d/entity db e)))) - uuid-required-ids (->> (concat - (d/q '[:find [?e ...] - :where - [?e :block/title]] - db) - (d/q '[:find [?e ...] - :where - [?e :block/page]] - db) - (d/q '[:find [?e ...] - :where - [?e :block/parent]] - db)) - distinct)] - (concat - (for [e uuid-required-ids - :let [ent (d/entity db e)] - :when (nil? (:block/uuid ent))] - {:type :missing-uuid :e e}) - (for [ent ents - :let [uuid (:block/uuid ent) - parent (:block/parent ent)] - :when (and (not (ldb/page? ent)) (nil? parent))] - {:type :missing-parent :uuid uuid}) - (for [ent ents - :let [uuid (:block/uuid ent) - parent (:block/parent ent)] - :when (and (not (ldb/page? ent)) parent (nil? (:block/uuid parent)))] - {:type :missing-parent-ref :uuid uuid}) - (for [ent ents - :let [uuid (:block/uuid ent) - page (:block/page ent)] - :when (and (not (ldb/page? ent)) (nil? page))] - {:type :missing-page :uuid uuid}) - (for [ent ents - :let [uuid (:block/uuid ent) - page (:block/page ent)] - :when (and (not (ldb/page? ent)) page (not (ldb/page? page)))] - {:type :page-not-page :uuid uuid}) - (for [ent ents - :let [uuid (:block/uuid ent) - parent (:block/parent ent) - page (:block/page ent) - expected-page (when parent - (if (ldb/page? parent) parent (:block/page parent)))] - :when (and (not (ldb/page? ent)) - parent - page - expected-page - (not= (:block/uuid expected-page) (:block/uuid page)))] - {:type :page-mismatch :uuid uuid}) - (for [ent ents - :let [uuid (:block/uuid ent) - parent (:block/parent ent)] - :when (and parent (= uuid (:block/uuid parent)))] - {:type :self-parent :uuid uuid}) - (for [ent ents - :let [uuid (:block/uuid ent)] - :when (and (not (ldb/page? ent)) - (parent-cycle? ent))] - {:type :cycle :uuid uuid})))) - -(defn- seed-page-parent-child! - [] - (let [conn (db/get-db test-db false) - page-uuid (random-uuid) - parent-uuid (random-uuid) - child-uuid (random-uuid)] - (d/transact! conn - [{:db/ident :logseq.class/Page} - {:block/uuid page-uuid - :block/name "page" - :block/title "page" - :block/tags #{:logseq.class/Page}} - {:block/uuid parent-uuid - :block/title "parent" - :block/page [:block/uuid page-uuid] - :block/parent [:block/uuid page-uuid]} - {:block/uuid child-uuid - :block/title "child" - :block/page [:block/uuid page-uuid] - :block/parent [:block/uuid parent-uuid]}] - {:outliner-op :insert-blocks - :local-tx? false}) - {:page-uuid page-uuid - :parent-uuid parent-uuid - :child-uuid child-uuid})) - -(defn- seed-page-two-parents-child! - [] - (let [conn (db/get-db test-db false) - page-uuid (random-uuid) - parent-a-uuid (random-uuid) - parent-b-uuid (random-uuid) - child-uuid (random-uuid)] - (d/transact! conn - [{:db/ident :logseq.class/Page} - {:block/uuid page-uuid - :block/name "page" - :block/title "page" - :block/tags #{:logseq.class/Page}} - {:block/uuid parent-a-uuid - :block/title "parent-a" - :block/page [:block/uuid page-uuid] - :block/parent [:block/uuid page-uuid]} - {:block/uuid parent-b-uuid - :block/title "parent-b" - :block/page [:block/uuid page-uuid] - :block/parent [:block/uuid page-uuid]} - {:block/uuid child-uuid - :block/title "child" - :block/page [:block/uuid page-uuid] - :block/parent [:block/uuid parent-a-uuid]}] - {:outliner-op :insert-blocks - :local-tx? false}) - {:page-uuid page-uuid - :parent-a-uuid parent-a-uuid - :parent-b-uuid parent-b-uuid - :child-uuid child-uuid})) - -(deftest undo-records-only-local-txs-test - (testing "undo history records only local txs" - (undo-redo/clear-history! test-db) - (let [conn (db/get-db test-db false) - {:keys [child-uuid]} (seed-page-parent-child!)] - (d/transact! conn - [[:db/add [:block/uuid child-uuid] :block/title "local-update"]] - {:outliner-op :save-block - :local-tx? true}) - (let [undo-result (undo-redo/undo test-db)] - (is (not= :frontend.undo-redo/empty-undo-stack undo-result)) - (undo-redo/redo test-db))) - (undo-redo/clear-history! test-db) - (let [conn (db/get-db test-db false) - {:keys [child-uuid]} (seed-page-parent-child!)] - (d/transact! conn - [[:db/add [:block/uuid child-uuid] :block/title "remote-update"]] - {:outliner-op :save-block - :local-tx? false}) - (is (= :frontend.undo-redo/empty-undo-stack (undo-redo/undo test-db)))))) - -(deftest undo-conflict-clears-history-test - (testing "undo clears history when reverse tx is unsafe" - (undo-redo/clear-history! test-db) - (let [conn (db/get-db test-db false) - block-uuid (random-uuid)] - (d/transact! conn [{:block/uuid block-uuid - :block/title "conflict"}] - {:outliner-op :insert-blocks - :local-tx? true}) - (with-redefs [undo-redo/get-reversed-datoms (fn [& _] nil)] - (is (= :frontend.undo-redo/empty-undo-stack (undo-redo/undo test-db))))))) - -(deftest undo-works-for-local-graph-test - (testing "undo/redo works for local changes on local graph" - (undo-redo/clear-history! test-db) - (let [conn (db/get-db test-db false) - {:keys [child-uuid]} (seed-page-parent-child!)] - (d/transact! conn - [[:db/add [:block/uuid child-uuid] :block/title "local-1"]] - {:outliner-op :save-block - :local-tx? true}) - (let [undo-result (undo-redo/undo test-db)] - (is (not= :frontend.undo-redo/empty-undo-stack undo-result)) - (is (= "child" (:block/title (d/entity @conn [:block/uuid child-uuid]))))) - (let [redo-result (undo-redo/redo test-db)] - (is (not= :frontend.undo-redo/empty-redo-stack redo-result)) - (is (= "local-1" (:block/title (d/entity @conn [:block/uuid child-uuid])))))))) - -(deftest undo-works-with-remote-updates-test - (testing "undo works after remote updates on sync graphs" - (undo-redo/clear-history! test-db) - (let [conn (db/get-db test-db false) - {:keys [child-uuid]} (seed-page-parent-child!)] - (d/transact! conn - [[:db/add [:block/uuid child-uuid] :block/title "local-2"]] - {:outliner-op :save-block - :local-tx? true}) - (d/transact! conn - [[:db/add [:block/uuid child-uuid] :block/updated-at 12345]] - {:outliner-op :save-block - :local-tx? false}) - (let [undo-result (undo-redo/undo test-db)] - (is (not= :frontend.undo-redo/empty-undo-stack undo-result)) - (is (= "child" (:block/title (d/entity @conn [:block/uuid child-uuid])))))))) - -(deftest undo-validation-allows-baseline-issues-test - (testing "undo validation allows existing issues without introducing new ones" - (let [conn (db/get-db test-db false) - {:keys [child-uuid]} (seed-page-parent-child!) - orphan-uuid (random-uuid)] - (d/transact! conn - [{:block/uuid orphan-uuid - :block/title "orphan"}] - {:local-tx? false}) - (is (undo-validate/valid-undo-redo-tx? conn - [[:db/add [:block/uuid child-uuid] - :block/title "child-updated"]]))))) - -(deftest undo-skips-when-parent-missing-test - (testing "undo skips when parent is missing" - (undo-redo/clear-history! test-db) - (let [conn (db/get-db test-db false) - {:keys [parent-uuid child-uuid]} (seed-page-parent-child!)] - (d/transact! conn - [[:db/retractEntity [:block/uuid child-uuid]]] - {:outliner-op :delete-blocks - :local-tx? true}) - (d/transact! conn - [[:db/retractEntity [:block/uuid parent-uuid]]] - {:outliner-op :delete-blocks - :local-tx? false}) - (is (= :frontend.undo-redo/empty-undo-stack (undo-redo/undo test-db))) - (is (nil? (d/entity @conn [:block/uuid child-uuid])))))) - -(deftest undo-skips-when-block-deleted-remote-test - (testing "undo skips when block was deleted remotely" - (undo-redo/clear-history! test-db) - (let [conn (db/get-db test-db false) - {:keys [child-uuid]} (seed-page-parent-child!)] - (d/transact! conn - [[:db/add [:block/uuid child-uuid] :block/title "child-updated"]] - {:outliner-op :save-block - :local-tx? true}) - (d/transact! conn - [[:db/retractEntity [:block/uuid child-uuid]]] - {:outliner-op :delete-blocks - :local-tx? false}) - (is (= :frontend.undo-redo/empty-undo-stack (undo-redo/undo test-db))) - (is (nil? (d/entity @conn [:block/uuid child-uuid])))))) - -(deftest undo-skips-when-undo-would-create-cycle-test - (testing "undo skips when it would create a parent cycle" - (undo-redo/clear-history! test-db) - (let [conn (db/get-db test-db false) - {:keys [page-uuid parent-uuid child-uuid]} (seed-page-parent-child!)] - (d/transact! conn - [[:db/add [:block/uuid child-uuid] :block/parent [:block/uuid page-uuid]]] - {:outliner-op :move-blocks - :local-tx? true}) - (d/transact! conn - [[:db/add [:block/uuid parent-uuid] :block/parent [:block/uuid child-uuid]]] - {:outliner-op :move-blocks - :local-tx? false}) - (is (= :frontend.undo-redo/empty-undo-stack (undo-redo/undo test-db))) - (let [parent (d/entity @conn [:block/uuid parent-uuid]) - child (d/entity @conn [:block/uuid child-uuid])] - (is (= child-uuid (:block/uuid (:block/parent parent)))) - (is (= page-uuid (:block/uuid (:block/parent child)))))))) - -(deftest undo-skips-conflicted-move-and-keeps-earlier-history-test - (testing "undo drops a conflicting move op but still undoes earlier safe ops" - (undo-redo/clear-history! test-db) - (let [conn (db/get-db test-db false) - {:keys [parent-a-uuid parent-b-uuid child-uuid]} (seed-page-two-parents-child!)] - (d/transact! conn - [[:db/add [:block/uuid child-uuid] :block/title "local-title"]] - {:outliner-op :save-block - :local-tx? true}) - (d/transact! conn - [[:db/add [:block/uuid child-uuid] :block/parent [:block/uuid parent-b-uuid]]] - {:outliner-op :move-blocks - :local-tx? true}) - (d/transact! conn - [[:db/retractEntity [:block/uuid parent-a-uuid]]] - {:outliner-op :delete-blocks - :local-tx? false}) - (let [undo-result (undo-redo/undo test-db) - child (d/entity @conn [:block/uuid child-uuid])] - (is (not= :frontend.undo-redo/empty-undo-stack undo-result)) - (is (= "child" (:block/title child))) - (is (= parent-b-uuid - (:block/uuid (:block/parent child)))) - (is (empty? (db-issues @conn)))) +(deftest node-test-undo-redo-does-not-call-worker-test + (let [calls (atom []) + invoke! (fn [& args] + (swap! calls conj (vec args)) + (vec args)) + repo "repo-node"] + (with-redefs [util/node-test? true + state/ (in-days next-time) 1))) (let [next-time (get-next-time one-month-ago month-unit 3)] - (is (= 2 (in-months next-time)))) + (is (contains? #{1 2} (in-months next-time)))) (let [next-time (get-next-time one-month-ago month-unit 5)] - (is (= 4 (in-months next-time)))) + (is (contains? #{3 4} (in-months next-time)))) ;; year (let [next-time (get-next-time now year-unit 1)] diff --git a/src/test/frontend/worker/db_core_test.cljs b/src/test/frontend/worker/db_core_test.cljs index e1d616adfd..23e0912c3b 100644 --- a/src/test/frontend/worker/db_core_test.cljs +++ b/src/test/frontend/worker/db_core_test.cljs @@ -14,8 +14,7 @@ (is (contains? api-map :thread-api/db-sync-request-asset-download)) (is (contains? api-map :thread-api/db-sync-grant-graph-access)) (is (contains? api-map :thread-api/db-sync-ensure-user-rsa-keys)) - (is (contains? api-map :thread-api/db-sync-upload-graph)) - (is (contains? api-map :thread-api/db-sync-import-kvs-rows)))) + (is (contains? api-map :thread-api/db-sync-upload-graph)))) (deftest init-service-does-not-close-db-when-graph-unchanged (async done diff --git a/src/test/frontend/worker/db_listener_test.cljs b/src/test/frontend/worker/db_listener_test.cljs new file mode 100644 index 0000000000..521f58f7d6 --- /dev/null +++ b/src/test/frontend/worker/db_listener_test.cljs @@ -0,0 +1,16 @@ +(ns frontend.worker.db-listener-test + (:require [cljs.test :refer [deftest is testing]] + [frontend.worker.db-listener :as db-listener])) + +(deftest transit-safe-tx-meta-keeps-outliner-ops-test + (testing "worker tx-meta sanitization should preserve semantic outliner ops" + (let [outliner-ops [[:save-block [{:block/uuid (random-uuid) + :block/title "hello"} nil]]] + tx-meta {:outliner-op :save-block + :outliner-ops outliner-ops + :db-sync/inverse-outliner-ops outliner-ops + :error-handler (fn [_] nil)} + safe-tx-meta (#'db-listener/transit-safe-tx-meta tx-meta)] + (is (= outliner-ops (:outliner-ops safe-tx-meta))) + (is (= outliner-ops (:db-sync/inverse-outliner-ops safe-tx-meta))) + (is (nil? (:error-handler safe-tx-meta)))))) diff --git a/src/test/frontend/worker/db_sync_sim_test.cljs b/src/test/frontend/worker/db_sync_sim_test.cljs index 16afcf1a08..522bc86e7d 100644 --- a/src/test/frontend/worker/db_sync_sim_test.cljs +++ b/src/test/frontend/worker/db_sync_sim_test.cljs @@ -6,12 +6,14 @@ [datascript.core :as d] [frontend.db.conn-state :as db-conn-state] [frontend.state :as state] - [frontend.undo-redo :as undo-redo] [frontend.worker.handler.page :as worker-page] [frontend.worker.state :as worker-state] [frontend.worker.sync :as db-sync] + [frontend.worker.sync.apply-txs :as sync-apply] [frontend.worker.sync.client-op :as client-op] + [frontend.worker.undo-redo :as undo-redo] [logseq.db :as ldb] + [logseq.db-sync.checksum :as sync-checksum] [logseq.db.common.normalize :as db-normalize] [logseq.db.test.helper :as db-test] [logseq.outliner.core :as outliner-core] @@ -87,9 +89,9 @@ {:repro repro :restore (fn [] (reset! ldb/*transact-invalid-callback prev))})) -(declare op-runs assert-synced-attrs! assert-no-invalid-tx!) +(declare op-runs assert-synced-attrs! assert-no-invalid-tx! active-block-uuids block-attr-map checksum-entity-map run-ops!) -(deftest ^:long rng-uuid-deterministic-test +(deftest rng-uuid-deterministic-test (testing "rng-uuid produces stable sequences for the same seed" (let [rng-a (make-rng 42) rng-b (make-rng 42) @@ -100,7 +102,7 @@ (is (= seq-a seq-b)) (is (not= seq-a seq-c))))) -(deftest ^:long invalid-tx-repro-callback-test +(deftest invalid-tx-repro-callback-test (testing "invalid tx callback captures sim repro payload" (let [seed 7 history (atom [{:type :op :op :create-page}]) @@ -124,6 +126,7 @@ (let [worker-db-prev @worker-state/*datascript-conns ops-prev @worker-state/*client-ops-conns db-prev @db-conn-state/conns + apply-history-action-prev @undo-redo/*apply-history-action! listeners (atom [])] (reset! worker-state/*datascript-conns (into {} (map (fn [[repo {:keys [conn]}]] [repo conn]) @@ -136,21 +139,20 @@ repo->conns))) (doseq [[repo _] repo->conns] (undo-redo/clear-history! repo)) + (reset! undo-redo/*apply-history-action! sync-apply/apply-history-action!) (doseq [[repo {:keys [conn ops-conn]}] repo->conns] (when ops-conn (let [key (keyword "db-sync-sim" repo)] (d/listen! conn key (fn [tx-report] - (db-sync/enqueue-local-tx! repo tx-report) - (undo-redo/gen-undo-ops! - repo - (-> tx-report - (assoc-in [:tx-meta :client-id] (:client-id @state/state)) - (update-in [:tx-meta :local-tx?] - (fn [local-tx?] - (if (nil? local-tx?) - true - local-tx?))))))) + (let [tx-report' (-> tx-report + (assoc-in [:tx-meta :client-id] (:client-id @state/state)) + (update-in [:tx-meta :local-tx?] + (fn [local-tx?] + (if (nil? local-tx?) + true + local-tx?))))] + (db-sync/enqueue-local-tx! repo tx-report')))) (swap! listeners conj [conn key])))) (try (f) @@ -163,7 +165,8 @@ (doseq [[repo _] repo->conns] (undo-redo/clear-history! repo)) (reset! undo-redo/*undo-ops {}) - (reset! undo-redo/*redo-ops {}))))) + (reset! undo-redo/*redo-ops {}) + (reset! undo-redo/*apply-history-action! apply-history-action-prev))))) (defn- make-client [repo] {:repo repo @@ -217,9 +220,7 @@ (defn- existing-entities [db uuids] (->> uuids - (keep (fn [uuid] - (when-let [ent (d/entity db [:block/uuid uuid])] - (when (:block/uuid ent) ent)))))) + (keep (fn [uuid] (d/entity db [:block/uuid uuid]))))) (defn- existing-blocks [db uuids] @@ -236,24 +237,36 @@ (->> (filter (fn [{:keys [t]}] (> t since)) txs) (mapv :tx)))) -(defn- server-upload! [server t-before tx-data] - (swap! server - (fn [{:keys [t txs conn] :as state}] - (if (not= t t-before) - state - (let [{:keys [db-before db-after tx-data]} (ldb/transact! conn tx-data {:op :apply-client-tx}) - normalized-data (->> tx-data - (db-normalize/normalize-tx-data db-after db-before)) - next-t (inc t)] - (assoc state :t next-t :txs (conj txs {:t next-t :tx normalized-data}))))))) +(defn- server-upload! [server t-before tx-entries] + (let [accepted? (atom false)] + (swap! server + (fn [{:keys [t] :as state}] + (if (not= t t-before) + state + (do + (reset! accepted? true) + (reduce + (fn [{:keys [t txs conn] :as state} tx-entry] + (let [tx-data (:tx-data tx-entry) + {:keys [db-before db-after tx-data]} (ldb/transact! conn tx-data {:op :apply-client-tx}) + normalized-data (->> tx-data + (db-normalize/normalize-tx-data db-after db-before)) + next-t (inc t)] + (assoc state :t next-t :txs (conj txs {:t next-t :tx normalized-data})))) + state + tx-entries))))) + {:accepted? @accepted? + :t (:t @server)})) -(defn- build-upload-tx [conn pending] - (let [txs (mapcat :tx pending)] - (->> txs - (db-normalize/remove-retract-entity-ref @conn) - (#'db-sync/drop-missing-block-ref-datoms @conn) - distinct - vec))) +(defn- build-upload-entries [conn pending] + (->> pending + (mapv (fn [{:keys [tx] :as pending-entry}] + (assoc pending-entry + :tx-data (->> tx + (db-normalize/remove-retract-entity-ref @conn) + distinct + vec)))) + (filterv (comp seq :tx-data)))) (defn- sync-client! [server {:keys [repo conn client online?]}] (when online? @@ -264,24 +277,47 @@ (when (< local-tx server-t) (let [txs (server-pull server local-tx)] ;; (prn :debug :apply-remote-tx :repo repo - ;; :tx tx) - (#'db-sync/apply-remote-tx! repo client txs) + ;; :txs txs) + (#'sync-apply/apply-remote-txs! repo client + (mapv (fn [tx-data] + {:tx-data tx-data}) + txs)) (client-op/update-local-tx repo server-t) (reset! progress? true))) - (let [pending (#'db-sync/pending-txs repo) + (let [pending (#'sync-apply/pending-txs repo) local-tx' (or (client-op/get-local-tx repo) 0) server-t' (:t @server)] (when (and (seq pending) (= local-tx' server-t')) - (let [tx-data (build-upload-tx conn pending) + (let [tx-entries (build-upload-entries conn pending) tx-ids (mapv :tx-id pending)] - ;; (prn :debug :upload :repo repo :tx-data tx-data) - (when (seq tx-data) - (server-upload! server local-tx' tx-data) - (#'db-sync/remove-pending-txs! repo tx-ids) - (client-op/update-local-tx repo (:t @server)) - (reset! progress? true))))) + ;; (prn :debug :upload :repo repo :tx-entries tx-entries) + (if (seq tx-entries) + (let [{:keys [accepted? t]} (server-upload! server local-tx' tx-entries)] + (when accepted? + (#'sync-apply/remove-pending-txs! repo tx-ids) + (when (seq tx-ids) + (client-op/update-local-tx repo t) + (reset! progress? true)))) + (do + (#'sync-apply/remove-pending-txs! repo tx-ids) + (when (seq tx-ids) + (client-op/update-local-tx repo (:t @server)) + (reset! progress? true))))))) @progress?))) +(defn- active-block-uuids + [db] + (->> (d/datoms db :avet :block/uuid) + (keep (fn [datom] + (let [ent (d/entity db (:e datom))] + (when (and ent + (not (ldb/built-in? ent)) + (nil? (:logseq.property/deleted-at ent)) + (or (ldb/page? ent) + (:block/page ent))) + (:v datom))))) + set)) + (defn- sync-loop! [server clients] (loop [i 0] (when (< i 32) @@ -295,22 +331,23 @@ (when (seq conns) (let [online-clients (filter :online? clients) client-block-uuids (mapv (fn [c] - (let [uuids (->> (d/datoms (deref (:conn c)) :avet :block/uuid) - (map :v) - set)] + (let [uuids (active-block-uuids @(:conn c))] {:repo (:repo c) :uuids uuids :datoms-count (count uuids)})) online-clients) - server-uuids (->> (d/datoms @(get @server :conn) :avet :block/uuid) - (map :v) - set) + server-uuids (active-block-uuids @(get @server :conn)) + server-checksum (sync-checksum/recompute-checksum @(get @server :conn)) client-sync-states (mapv (fn [c] {:repo (:repo c) - :pending-count (count (#'db-sync/pending-txs (:repo c))) + :pending-count (count (#'sync-apply/pending-txs (:repo c))) :local-tx (client-op/get-local-tx (:repo c)) :server-t (:t @server)}) online-clients) + checksum-states (mapv (fn [c] + {:repo (:repo c) + :checksum (sync-checksum/recompute-checksum @(:conn c))}) + online-clients) base-uuids (:uuids (first client-block-uuids)) block-counts (map :datoms-count client-block-uuids) block-uuid-diffs (mapv (fn [{:keys [repo uuids]}] @@ -328,15 +365,54 @@ (throw (ex-info "blocks count not equal after sync" {:block-counts block-counts :clients (mapv #(select-keys % [:repo :datoms-count]) client-block-uuids) + :checksums checksum-states :sync-states client-sync-states :server {:datoms-count (count server-uuids) + :checksum server-checksum :missing-from-a (->> (set/difference base-uuids server-uuids) (take 5) vec) :extra-vs-a (->> (set/difference server-uuids base-uuids) (take 5) vec)} - :block-uuid-diffs block-uuid-diffs}))))))) + :block-uuid-diffs block-uuid-diffs}))) + (when-not (= 1 (count (distinct (conj (map :checksum checksum-states) server-checksum)))) + (let [client-attrs (mapv (fn [c] + {:repo (:repo c) + :attrs (block-attr-map @(:conn c))}) + online-clients) + base-attrs (:attrs (first client-attrs)) + server-attrs (block-attr-map @(get @server :conn)) + attr-diffs (mapv (fn [{:keys [repo attrs]}] + (let [[missing extra] (data/diff base-attrs attrs)] + {:repo repo + :missing-sample (some->> missing (take 5) vec) + :extra-sample (some->> extra (take 5) vec)})) + client-attrs) + [server-missing server-extra] (data/diff base-attrs server-attrs) + client-checksum-maps (mapv (fn [c] + {:repo (:repo c) + :attrs (checksum-entity-map @(:conn c))}) + online-clients) + base-checksum-attrs (:attrs (first client-checksum-maps)) + server-checksum-attrs (checksum-entity-map @(get @server :conn)) + checksum-attr-diffs (mapv (fn [{:keys [repo attrs]}] + (let [[missing extra] (data/diff base-checksum-attrs attrs)] + {:repo repo + :missing-sample (some->> missing (take 5) vec) + :extra-sample (some->> extra (take 5) vec)})) + client-checksum-maps) + [server-checksum-missing server-checksum-extra] (data/diff base-checksum-attrs server-checksum-attrs)] + (throw (ex-info "checksums not equal after sync" + {:checksums checksum-states + :sync-states client-sync-states + :attr-diffs attr-diffs + :checksum-attr-diffs checksum-attr-diffs + :server {:checksum server-checksum + :missing-sample (some->> server-missing (take 5) vec) + :extra-sample (some->> server-extra (take 5) vec) + :checksum-missing-sample (some->> server-checksum-missing (take 5) vec) + :checksum-extra-sample (some->> server-checksum-extra (take 5) vec)}})))))))) (defn- sync-until-idle! [server clients max-rounds] @@ -359,6 +435,79 @@ clients [{:repo repo-a :conn conn :client client :online? false}]] (is (nil? (sync-loop! server clients)))))) +(deftest two-clients-initial-sync-keeps-shared-base-page-test + (testing "initial sync keeps the shared base page on both clients" + (let [seed (or (env-seed) default-seed) + rng (make-rng seed) + gen-uuid #(rng-uuid rng) + base-uuid (gen-uuid) + conn-a (db-test/create-conn) + conn-b (db-test/create-conn) + ops-a (d/create-conn client-op/schema-in-db) + ops-b (d/create-conn client-op/schema-in-db) + client-a (make-client repo-a) + client-b (make-client repo-b) + server (make-server)] + (with-test-repos {repo-a {:conn conn-a :ops-conn ops-a} + repo-b {:conn conn-b :ops-conn ops-b}} + (fn [] + (reset! db-sync/*repo->latest-remote-tx {}) + (doseq [conn [conn-a conn-b]] + (ensure-base-page! conn base-uuid)) + (doseq [repo [repo-a repo-b]] + (client-op/update-local-tx repo 0)) + (let [base-a (d/entity @conn-a [:block/uuid base-uuid]) + parent-uuid (gen-uuid) + child-uuid (gen-uuid) + target-uuid (gen-uuid) + clients [{:repo repo-a :conn conn-a :client client-a :online? true :gen-uuid gen-uuid} + {:repo repo-b :conn conn-b :client client-b :online? true :gen-uuid gen-uuid}]] + (create-block! conn-a base-a "seed-parent" parent-uuid) + (let [parent (d/entity @conn-a [:block/uuid parent-uuid])] + (create-block! conn-a parent "seed-child" child-uuid)) + (create-block! conn-a base-a "" target-uuid) + (sync-until-idle! server clients 64) + (let [base-b (d/entity @conn-b [:block/uuid base-uuid])] + (is (some? base-b)) + (is (ldb/page? base-b)) + (is (nil? (:logseq.property/deleted-at base-b)))))))))) + +(deftest recycled-entities-are-excluded-from-sim-comparison-test + (testing "deleted blocks are excluded from active sync comparison" + (let [base-uuid (random-uuid) + block-uuid (random-uuid) + conn (db-test/create-conn)] + (ensure-base-page! conn base-uuid) + (let [base-page (d/entity @conn [:block/uuid base-uuid])] + (create-block! conn base-page "to recycle" block-uuid) + (delete-block! conn block-uuid) + (is (not (contains? (active-block-uuids @conn) block-uuid))) + (is (not (contains? (block-attr-map @conn) block-uuid))))))) + +(deftest uploaded-pending-txs-are-cleared-in-sim-test + (testing "sim upload removes acked pending txs so later rebases don't reverse stale creates" + (let [base-uuid (random-uuid) + block-uuid (random-uuid) + conn (db-test/create-conn) + ops-conn (d/create-conn client-op/schema-in-db) + client (make-client repo-a) + server (make-server)] + (with-test-repos {repo-a {:conn conn :ops-conn ops-conn}} + (fn [] + (reset! db-sync/*repo->latest-remote-tx {}) + (client-op/update-local-tx repo-a 0) + (ensure-base-page! conn base-uuid) + (let [base-page (d/entity @conn [:block/uuid base-uuid])] + (create-block! conn base-page "synced block" block-uuid) + (is (seq (#'sync-apply/pending-txs repo-a))) + (is (true? (sync-client! server {:repo repo-a + :conn conn + :client client + :online? true}))) + (is (empty? (#'sync-apply/pending-txs repo-a))) + (is (= (:t @server) (client-op/get-local-tx repo-a))) + (is (some? (d/entity @(get @server :conn) [:block/uuid block-uuid]))))))))) + (defn- db-issues [db] (let [blocks (->> (d/q '[:find [?e ...] :where @@ -401,8 +550,32 @@ (defn- block-attr-map [db] (->> (d/q '[:find [?e ...] :where - [?e :block/uuid] - [?e :block/page]] + [?e :block/uuid]] + db) + (map (fn [e] + (let [ent (d/entity db e) + parent (:block/parent ent) + page (:block/page ent)] + (when (and ent + (not (ldb/built-in? ent)) + (nil? (:logseq.property/deleted-at ent)) + (or (ldb/page? ent) + page)) + [(:block/uuid ent) + {:block/page? (boolean (ldb/page? ent)) + :block/title (:block/title ent) + :block/order (:block/order ent) + :block/parent (when parent (:block/uuid parent)) + :block/page (when page (:block/uuid page)) + :logseq.property/deleted-at (:logseq.property/deleted-at ent)}])))) + (remove nil?) + (into {}))) + +(defn- checksum-entity-map + [db] + (->> (d/q '[:find [?e ...] + :where + [?e :block/uuid]] db) (map (fn [e] (let [ent (d/entity db e) @@ -410,11 +583,15 @@ page (:block/page ent)] [(:block/uuid ent) {:block/title (:block/title ent) + :block/name (:block/name ent) :block/parent (when parent (:block/uuid parent)) :block/page (when page (:block/uuid page))}]))) (into {}))) (def ^:private sim-default-property-title "Sim Default Property") +(def ^:private sim-default-property-schema + {:logseq.property/type :default + :db/cardinality :db.cardinality/one}) (defn- find-property-by-title [db title] @@ -528,7 +705,8 @@ (d/entity db [:block/uuid uuid]))) [base-uuid])) parent (rand-nth! rng (vec parents))] - (when (and block parent (not= (:block/uuid block) (:block/uuid parent))) + (when (and block parent + (not= (:block/uuid block) (:block/uuid parent))) (move-block! conn block parent) {:op :move-block :uuid (:block/uuid block) @@ -632,7 +810,7 @@ (defn- op-upsert-property! [_rng conn] (let [title sim-default-property-title - schema {:logseq.property/type :default} + schema sim-default-property-schema existing (find-property-by-title @conn title)] (outliner-op/apply-ops! conn @@ -644,10 +822,20 @@ {:op :upsert-property :property (:db/ident property)}))) +(defn- pick-settable-property-input + [rng conn property value-prefix] + (let [property (d/entity @conn (:db/id property)) + closed-values (vec (:block/_closed-value-property property))] + (if (seq closed-values) + {:value (:db/id (rand-nth! rng closed-values)) + :options {:entity-id? true}} + {:value (str value-prefix "-" (rand-int! rng 1000000)) + :options {}}))) + (defn- op-set-block-property! [rng conn state base-uuid gen-uuid] (when-let [block (ensure-random-block! rng conn state base-uuid gen-uuid)] - (when-let [property (ensure-property! conn sim-default-property-title {:logseq.property/type :default})] - (let [value (str "prop-value-" (rand-int! rng 1000000))] + (when-let [property (ensure-property! conn sim-default-property-title sim-default-property-schema)] + (let [{:keys [value]} (pick-settable-property-input rng conn property "prop-value")] (try (outliner-op/apply-ops! conn @@ -662,27 +850,41 @@ (defn- op-remove-block-property! [rng conn state base-uuid gen-uuid] (when-let [block (ensure-random-block! rng conn state base-uuid gen-uuid)] - (when-let [property (ensure-property! conn sim-default-property-title {:logseq.property/type :default})] - (try - (outliner-op/apply-ops! - conn - [[:set-block-property [(:db/id block) (:db/ident property) (str "remove-prop-" (rand-int! rng 1000000))]] - [:remove-block-property [(:db/id block) (:db/ident property)]]] - {}) - {:op :remove-block-property - :uuid (:block/uuid block) - :property (:db/ident property)} - (catch :default _ - nil))))) + (when-let [property (ensure-property! conn sim-default-property-title sim-default-property-schema)] + (let [{:keys [value]} (pick-settable-property-input rng conn property "remove-prop")] + (try + (outliner-op/apply-ops! + conn + [[:set-block-property [(:db/id block) (:db/ident property) value]]] + {}) + (outliner-op/apply-ops! + conn + [[:remove-block-property [(:db/id block) (:db/ident property)]]] + {}) + {:op :remove-block-property + :uuid (:block/uuid block) + :property (:db/ident property)} + (catch :default _ + nil)))))) + +(defn- create-property-text-block-with-uuid! + [conn property-id value value-uuid] + (outliner-op/apply-ops! + conn + [[:create-property-text-block [nil property-id value {:new-block-id value-uuid}]]] + {}) + (when (d/entity @conn [:block/uuid value-uuid]) + value-uuid)) (defn- op-create-property-text-block! [rng conn] - (when-let [property (ensure-property! conn sim-default-property-title {:logseq.property/type :default})] + (when-let [property (ensure-property! conn sim-default-property-title sim-default-property-schema)] (let [value (str "value-block-" (rand-int! rng 1000000))] (try - (let [value-uuid (outliner-op/apply-ops! + (let [value-uuid (create-property-text-block-with-uuid! conn - [[:create-property-text-block [nil (:db/id property) value {}]]] - {})] + (:db/id property) + value + (rng-uuid rng))] {:op :create-property-text-block :property (:db/ident property) :value-uuid value-uuid}) @@ -690,18 +892,18 @@ nil))))) (defn- op-batch-set-property! [rng conn state base-uuid gen-uuid] - (when-let [property (ensure-property! conn sim-default-property-title {:logseq.property/type :default})] + (when-let [property (ensure-property! conn sim-default-property-title sim-default-property-schema)] (let [blocks (->> (repeatedly 2 #(ensure-random-block! rng conn state base-uuid gen-uuid)) (remove nil?) distinct vec)] (when (seq blocks) (let [block-ids (mapv :db/id blocks) - value (str "batch-prop-" (rand-int! rng 1000000))] + {:keys [value options]} (pick-settable-property-input rng conn property "batch-prop")] (try (outliner-op/apply-ops! conn - [[:batch-set-property [block-ids (:db/ident property) value {}]]] + [[:batch-set-property [block-ids (:db/ident property) value options]]] {}) {:op :batch-set-property :blocks (mapv :block/uuid blocks) @@ -710,28 +912,39 @@ nil))))))) (defn- op-batch-remove-property! [rng conn state base-uuid gen-uuid] - (when-let [property (ensure-property! conn sim-default-property-title {:logseq.property/type :default})] - (let [blocks (->> (repeatedly 2 #(ensure-random-block! rng conn state base-uuid gen-uuid)) - (remove nil?) - distinct - vec)] - (when (seq blocks) - (let [block-ids (mapv :db/id blocks)] - (try - (outliner-op/apply-ops! - conn - [[:batch-set-property [block-ids (:db/ident property) (str "to-remove-" (rand-int! rng 1000000)) {}]] - [:batch-remove-property [block-ids (:db/ident property)]]] - {}) - {:op :batch-remove-property - :blocks (mapv :block/uuid blocks) - :property (:db/ident property)} - (catch :default _ - nil))))))) + (when-let [property (ensure-property! conn sim-default-property-title sim-default-property-schema)] + (let [base-page (d/entity @conn [:block/uuid base-uuid])] + (when base-page + (let [new-block (fn [] + (let [uuid ((or gen-uuid random-uuid)) + title (str "batch-remove-" (rand-int! rng 1000000))] + (create-block! conn base-page title uuid) + (swap! state update :blocks conj uuid) + (d/entity @conn [:block/uuid uuid]))) + blocks (->> (repeatedly 2 new-block) + (remove nil?) + vec)] + (when (seq blocks) + (let [block-ids (mapv :db/id blocks) + {:keys [value options]} (pick-settable-property-input rng conn property "to-remove")] + (try + (outliner-op/apply-ops! + conn + [[:batch-set-property [block-ids (:db/ident property) value options]]] + {}) + (outliner-op/apply-ops! + conn + [[:batch-remove-property [block-ids (:db/ident property)]]] + {}) + {:op :batch-remove-property + :blocks (mapv :block/uuid blocks) + :property (:db/ident property)} + (catch :default _ + nil))))))))) (defn- op-class-add-property! [rng conn] (when-let [class (ensure-class! rng conn)] - (when-let [property (ensure-property! conn sim-default-property-title {:logseq.property/type :default})] + (when-let [property (ensure-property! conn sim-default-property-title sim-default-property-schema)] (try (outliner-op/apply-ops! conn @@ -745,12 +958,15 @@ (defn- op-class-remove-property! [rng conn] (when-let [class (ensure-class! rng conn)] - (when-let [property (ensure-property! conn sim-default-property-title {:logseq.property/type :default})] + (when-let [property (ensure-property! conn sim-default-property-title sim-default-property-schema)] (try (outliner-op/apply-ops! conn - [[:class-add-property [(:db/id class) (:db/ident property)]] - [:class-remove-property [(:db/id class) (:db/ident property)]]] + [[:class-add-property [(:db/id class) (:db/ident property)]]] + {}) + (outliner-op/apply-ops! + conn + [[:class-remove-property [(:db/id class) (:db/ident property)]]] {}) {:op :class-remove-property :class (:block/uuid class) @@ -759,7 +975,7 @@ nil))))) (defn- op-upsert-closed-value! [rng conn] - (when-let [property (ensure-property! conn sim-default-property-title {:logseq.property/type :default})] + (when-let [property (ensure-property! conn sim-default-property-title sim-default-property-schema)] (let [value (str "choice-" (rand-int! rng 1000000))] (try (outliner-op/apply-ops! @@ -773,7 +989,7 @@ nil))))) (defn- op-delete-closed-value! [rng conn] - (when-let [property (ensure-property! conn sim-default-property-title {:logseq.property/type :default})] + (when-let [property (ensure-property! conn sim-default-property-title sim-default-property-schema)] (let [value (str "delete-choice-" (rand-int! rng 1000000))] (try (outliner-op/apply-ops! @@ -792,18 +1008,20 @@ nil))))) (defn- op-add-existing-values-to-closed-values! [rng conn] - (when-let [property (ensure-property! conn sim-default-property-title {:logseq.property/type :default})] + (when-let [property (ensure-property! conn sim-default-property-title sim-default-property-schema)] (try (let [value-a (str "existing-a-" (rand-int! rng 1000000)) value-b (str "existing-b-" (rand-int! rng 1000000)) - uuid-a (outliner-op/apply-ops! + uuid-a (create-property-text-block-with-uuid! conn - [[:create-property-text-block [nil (:db/id property) value-a {}]]] - {}) - uuid-b (outliner-op/apply-ops! + (:db/id property) + value-a + (rng-uuid rng)) + uuid-b (create-property-text-block-with-uuid! conn - [[:create-property-text-block [nil (:db/id property) value-b {}]]] - {}) + (:db/id property) + value-b + (rng-uuid rng)) uuids (vec (remove nil? [uuid-a uuid-b]))] (when (seq uuids) (outliner-op/apply-ops! @@ -822,8 +1040,11 @@ (try (outliner-op/apply-ops! conn - [[:set-block-property [(:db/id block) :block/tags (:db/id class)]] - [:delete-property-value [(:db/id block) :block/tags (:db/id class)]]] + [[:set-block-property [(:db/id block) :block/tags (:db/id class)]]] + {}) + (outliner-op/apply-ops! + conn + [[:delete-property-value [(:db/id block) :block/tags (:db/id class)]]] {}) {:op :delete-property-value :uuid (:block/uuid block) @@ -842,8 +1063,11 @@ (try (outliner-op/apply-ops! conn - [[:batch-set-property [block-ids :block/tags (:db/id class) {}]] - [:batch-delete-property-value [block-ids :block/tags (:db/id class)]]] + [[:batch-set-property [block-ids :block/tags (:db/id class) {}]]] + {}) + (outliner-op/apply-ops! + conn + [[:batch-delete-property-value [block-ids :block/tags (:db/id class)]]] {}) {:op :batch-delete-property-value :blocks (mapv :block/uuid blocks) @@ -888,7 +1112,8 @@ [[:move-blocks [[(:db/id source)] (:db/id target) {:sibling? true}]] [:delete-blocks [[(:db/id target)] {}]]] {}) - (swap! state update :blocks disj target-uuid) + ;; The emptied target is now recycled, so keep it in state; active op + ;; pickers filter recycled entities from the DB directly. {:op :cut-paste-block-with-child :uuid source-uuid :target target-uuid @@ -897,19 +1122,19 @@ (defn- op-undo! [_rng repo] (when repo (let [result (undo-redo/undo repo)] - (when (not= :frontend.undo-redo/empty-undo-stack result) + (when (not= :frontend.worker.undo-redo/empty-undo-stack result) {:op :undo})))) (defn- op-redo! [_rng repo] (when repo (let [result (undo-redo/redo repo)] - (when (not= :frontend.undo-redo/empty-redo-stack result) + (when (not= :frontend.worker.undo-redo/empty-redo-stack result) {:op :redo})))) (def ^:private op-table [{:name :create-page :weight 6 :f op-create-page!} {:name :rename-page :weight 2 :f op-rename-page!} - {:name :delete-page :weight 2 :f op-delete-page!} + {:name :delete-page :weight 10 :f op-delete-page!} {:name :save-block :weight 4 :f op-save-block!} {:name :upsert-property :weight 2 :f op-upsert-property!} {:name :set-block-property :weight 3 :f op-set-block-property!} @@ -939,49 +1164,216 @@ {:name :delete-block :weight 4 :f op-delete-block!} {:name :update-title :weight 8 :f op-update-title!}]) -(deftest ^:long cut-paste-op-registered-in-sim-op-table-test +(deftest cut-paste-op-registered-in-sim-op-table-test (testing "sim op-table includes cut-paste op for random sync stress" (is (contains? (set (map :name op-table)) :cut-paste-block-with-child)))) -(deftest ^:long undo-redo-ops-registered-in-sim-op-table-test +(deftest undo-redo-ops-registered-in-sim-op-table-test (testing "sim op-table includes undo/redo ops for random sync stress" (let [registered (set (map :name op-table))] (is (contains? registered :undo)) (is (contains? registered :redo))))) -(deftest ^:long core-outliner-ops-registered-in-sim-op-table-test +(def ^:private required-core-outliner-op-names + #{:save-block + :insert-blocks + :delete-blocks + :move-blocks + :move-blocks-up-down + :indent-outdent-blocks + :upsert-property + :set-block-property + :remove-block-property + :delete-property-value + :create-property-text-block + :batch-set-property + :batch-remove-property + :batch-delete-property-value + :class-add-property + :class-remove-property + :upsert-closed-value + :delete-closed-value + :add-existing-values-to-closed-values + :create-page + :rename-page + :delete-page + :toggle-reaction + :transact}) + +(deftest core-outliner-ops-registered-in-sim-op-table-test (testing "sim op-table includes core logseq.outliner.op operations" (let [registered (set (map :name op-table)) - required #{:save-block - :insert-blocks - :delete-blocks - :move-blocks - :move-blocks-up-down - :indent-outdent-blocks - :upsert-property - :set-block-property - :remove-block-property - :delete-property-value - :create-property-text-block - :batch-set-property - :batch-remove-property - :batch-delete-property-value - :class-add-property - :class-remove-property - :upsert-closed-value - :delete-closed-value - :add-existing-values-to-closed-values - :create-page - :rename-page - :delete-page - :toggle-reaction - :transact}] + required required-core-outliner-op-names] (is (empty? (set/difference required registered)) (str "missing ops: " (set/difference required registered)))))) -(defn- pick-op [rng {:keys [disable-ops enable-ops]}] - (let [op-table' (cond->> op-table +(def ^:private local-undo-redo-run-count 1000) +(def ^:private local-undo-redo-full-cycle-runs 5) +(def ^:private local-undo-redo-coverage-ops + (set/union required-core-outliner-op-names #{:undo :redo})) +(def ^:private local-undo-redo-op-weights + {:create-page 6 + :rename-page 2 + :delete-page 10 + :save-block 4 + :upsert-property 2 + :set-block-property 3 + :remove-block-property 2 + :delete-property-value 1 + :create-property-text-block 2 + :batch-set-property 2 + :batch-remove-property 2 + :batch-delete-property-value 1 + :class-add-property 1 + :class-remove-property 1 + :upsert-closed-value 1 + :delete-closed-value 1 + :add-existing-values-to-closed-values 1 + :insert-blocks 10 + :delete-blocks 4 + :move-blocks 6 + :move-blocks-up-down 3 + :indent-outdent-blocks 10 + :toggle-reaction 2 + :transact 3 + :undo 10 + :redo 10}) + +(def ^:private local-undo-redo-cycle-op-weights + {:create-block 14 + :delete-block 10 + :move-block 8 + :indent-outdent-blocks 3 + :move-blocks-up-down 3 + :update-title 8 + :undo 12 + :redo 12}) + +(defn- build-weighted-op-table + [required-ops op-weights label] + (let [label (name label) + registered-ops (set (map :name op-table)) + configured-ops (set (keys op-weights)) + missing-op-defs (set/difference required-ops registered-ops) + missing-weights (set/difference required-ops configured-ops) + extra-weights (set/difference configured-ops required-ops) + invalid-weights (->> op-weights + (keep (fn [[op-name weight]] + (when (or (not (number? weight)) + (<= weight 0)) + op-name))) + set)] + (when (seq missing-op-defs) + (throw (ex-info (str "missing sim op definitions for weighted " label " op table") + {:label label + :missing-op-defs missing-op-defs}))) + (when (seq missing-weights) + (throw (ex-info (str "missing weighted " label " op weights") + {:label label + :missing-weights missing-weights}))) + (when (seq extra-weights) + (throw (ex-info (str "unexpected weighted " label " op weights") + {:label label + :extra-weights extra-weights}))) + (when (seq invalid-weights) + (throw (ex-info (str "invalid weighted " label " op weights") + {:label label + :invalid-weights invalid-weights}))) + (->> op-table + (filter (fn [item] (contains? required-ops (:name item)))) + (mapv (fn [item] + (assoc item :weight (get op-weights (:name item)))))))) + +(defn- op-count + [history op] + (count (filter #(= op (:op %)) @history))) + +(defn- prime-op-context! + [rng client history op & {:keys [op-table-override]}] + (let [setup-run! (fn [setup-op & {:keys [times] :or {times 1}}] + (dotimes [_ times] + (run-ops! rng + client + 1 + history + {:pick-op-opts {:enable-ops #{setup-op}} + :op-table-override op-table-override + :context {:phase :prime + :target op + :setup-op setup-op}})))] + (case op + (:delete-page :rename-page) + (setup-run! :create-page) + + (:save-block + :delete-blocks + :move-blocks + :toggle-reaction + :transact) + (setup-run! :insert-blocks :times 2) + + (:move-blocks-up-down :indent-outdent-blocks) + (setup-run! :insert-blocks :times 4) + + (:set-block-property + :remove-block-property + :delete-property-value + :create-property-text-block + :batch-set-property + :batch-remove-property + :batch-delete-property-value) + (do + (setup-run! :insert-blocks :times 2) + (setup-run! :upsert-property)) + + (:class-add-property :class-remove-property) + (do + (setup-run! :insert-blocks) + (setup-run! :upsert-property)) + + (:upsert-closed-value :delete-closed-value) + (setup-run! :upsert-property) + + :add-existing-values-to-closed-values + (do + (setup-run! :upsert-property) + (setup-run! :create-property-text-block :times 2)) + + :undo + (setup-run! :insert-blocks :times 2) + + :redo + (do + (setup-run! :insert-blocks :times 2) + (setup-run! :undo)) + + nil))) + +(defn- ensure-op-recorded! + [rng client history op max-attempts & {:keys [op-table-override]}] + (loop [attempt 0] + (let [before (op-count history op)] + (prime-op-context! rng client history op :op-table-override op-table-override) + (run-ops! rng + client + 1 + history + {:pick-op-opts {:enable-ops #{op}} + :op-table-override op-table-override + :context {:phase :ensure-op + :target op + :attempt attempt}}) + (let [after (op-count history op)] + (if (> after before) + true + (if (< attempt max-attempts) + (recur (inc attempt)) + false)))))) + +(defn- pick-op [rng {:keys [disable-ops enable-ops op-table-override]}] + (let [selected-op-table (or op-table-override op-table) + op-table' (cond->> selected-op-table (seq enable-ops) (filter (fn [item] (contains? enable-ops (:name item)))) @@ -1003,9 +1395,10 @@ op (recur (- remaining weight) rest-ops)))))))) -(defn- run-ops! [rng {:keys [repo conn base-uuid state gen-uuid]} steps history & {:keys [pick-op-opts context]}] +(defn- run-ops! + [rng {:keys [repo conn base-uuid state gen-uuid]} steps history & {:keys [pick-op-opts context op-table-override]}] (dotimes [step steps] - (let [{:keys [f name]} (pick-op rng pick-op-opts) + (let [{:keys [f name]} (pick-op rng (assoc (or pick-op-opts {}) :op-table-override op-table-override)) ;; _ (prn :debug :client (:repo client) :name name) result (case name :create-page (f rng conn state {:gen-uuid gen-uuid}) @@ -1127,7 +1520,18 @@ (with-test-repos {repo-a {:conn conn-a :ops-conn ops-a} repo-b {:conn conn-b :ops-conn ops-b}} (fn [] - (let [{:keys [repro restore]} (install-invalid-tx-repro! seed history)] + (let [{:keys [repro restore]} (install-invalid-tx-repro! seed history) + listener-a ::checksum-sync-a + listener-b ::checksum-sync-b + update-local-checksum! + (fn [repo conn listener-key] + (d/listen! conn listener-key + (fn [tx-report] + (when-not (:batch-tx? @conn) + (when (seq (:tx-data tx-report)) + (db-sync/update-local-sync-checksum! repo tx-report))))))] + (update-local-checksum! repo-a conn-a listener-a) + (update-local-checksum! repo-b conn-b listener-b) (try (reset! db-sync/*repo->latest-remote-tx {}) (record-meta! history {:seed seed :base-uuid base-uuid}) @@ -1135,6 +1539,8 @@ (ensure-base-page! conn base-uuid)) (doseq [repo [repo-a repo-b]] (client-op/update-local-tx repo 0)) + (client-op/update-local-checksum repo-a (sync-checksum/recompute-checksum @conn-a)) + (client-op/update-local-checksum repo-b (sync-checksum/recompute-checksum @conn-b)) ;; Seed stable anchors (non-empty titles) that A won't touch. (let [base-a (d/entity @conn-a [:block/uuid base-uuid]) @@ -1225,6 +1631,10 @@ (is (empty? issues-a) (str "db A issues seed=" seed " " (pr-str issues-a))) (is (empty? issues-b) (str "db B issues seed=" seed " " (pr-str issues-b))) (assert-synced-attrs! seed history attrs-a attrs-b attrs-b) + (is (= (sync-checksum/recompute-checksum @conn-a) + (client-op/get-local-checksum repo-a))) + (is (= (sync-checksum/recompute-checksum @conn-b) + (client-op/get-local-checksum repo-b))) (doseq [anchor-uuid anchor-uuids] (let [ent-a (d/entity @conn-a [:block/uuid anchor-uuid]) ent-b (d/entity @conn-b [:block/uuid anchor-uuid])] @@ -1234,9 +1644,11 @@ (is (not (string/blank? (or (:block/title ent-b) ""))) (str "anchor title blank in B seed=" seed " uuid=" anchor-uuid)))) (assert-no-invalid-tx! seed history repro))) (finally + (d/unlisten! conn-a listener-a) + (d/unlisten! conn-b listener-b) (restore))))))))) -(deftest ^:long two-clients-rebase-keeps-local-title-after-reverse-tx-test +(deftest two-clients-rebase-keeps-local-title-after-reverse-tx-test (testing "two clients keep local title after reverse tx with newer tx id" (let [base-uuid (uuid "11111111-1111-1111-1111-111111111111") block-uuid (uuid "22222222-2222-2222-2222-222222222222") @@ -1250,21 +1662,118 @@ (with-test-repos {repo-a {:conn conn-a :ops-conn ops-a} repo-b {:conn conn-b :ops-conn ops-b}} (fn [] - (reset! db-sync/*repo->latest-remote-tx {}) - (client-op/update-local-tx repo-a 0) - (client-op/update-local-tx repo-b 0) - (ensure-base-page! conn-a base-uuid) - (let [base (d/entity @conn-a [:block/uuid base-uuid])] - (create-block! conn-a base "before" block-uuid)) - (sync-loop! server [{:repo repo-a :conn conn-a :client client-a :online? true}]) - (sync-loop! server [{:repo repo-b :conn conn-b :client client-b :online? true}]) - (is (= "before" (:block/title (d/entity @conn-b [:block/uuid block-uuid])))) - (update-title! conn-a block-uuid "test") - (is (seq (#'db-sync/pending-txs repo-a))) - (d/transact! conn-b [[:db/add [:block/uuid block-uuid] :block/updated-at 1710000000000]]) - (sync-loop! server [{:repo repo-b :conn conn-b :client client-b :online? true}]) - (sync-loop! server [{:repo repo-a :conn conn-a :client client-a :online? true}]) - (is (= "test" (:block/title (d/entity @conn-a [:block/uuid block-uuid]))))))))) + (let [listener-a ::checksum-sync-a + listener-b ::checksum-sync-b + update-local-checksum! + (fn [repo conn] + (d/listen! conn (if (= repo repo-a) listener-a listener-b) + (fn [tx-report] + (when-not (:batch-tx? @conn) + (when (seq (:tx-data tx-report)) + (db-sync/update-local-sync-checksum! repo tx-report))))))] + (update-local-checksum! repo-a conn-a) + (update-local-checksum! repo-b conn-b) + (try + (reset! db-sync/*repo->latest-remote-tx {}) + (client-op/update-local-tx repo-a 0) + (client-op/update-local-tx repo-b 0) + (client-op/update-local-checksum repo-a (sync-checksum/recompute-checksum @conn-a)) + (client-op/update-local-checksum repo-b (sync-checksum/recompute-checksum @conn-b)) + (ensure-base-page! conn-a base-uuid) + (let [base (d/entity @conn-a [:block/uuid base-uuid])] + (create-block! conn-a base "before" block-uuid)) + (sync-loop! server [{:repo repo-a :conn conn-a :client client-a :online? true}]) + (sync-loop! server [{:repo repo-b :conn conn-b :client client-b :online? true}]) + (is (= "before" (:block/title (d/entity @conn-b [:block/uuid block-uuid])))) + (update-title! conn-a block-uuid "test") + (is (seq (#'sync-apply/pending-txs repo-a))) + (d/transact! conn-b [[:db/add [:block/uuid block-uuid] :block/updated-at 1710000000000]]) + (sync-loop! server [{:repo repo-b :conn conn-b :client client-b :online? true}]) + (sync-loop! server [{:repo repo-a :conn conn-a :client client-a :online? true}]) + (is (= "test" (:block/title (d/entity @conn-a [:block/uuid block-uuid])))) + (is (= (sync-checksum/recompute-checksum @conn-a) + (client-op/get-local-checksum repo-a))) + (is (= (sync-checksum/recompute-checksum @conn-b) + (client-op/get-local-checksum repo-b))) + (finally + (d/unlisten! conn-a listener-a) + (d/unlisten! conn-b listener-b))))))))) + +(deftest undo-redo-indent-sequence-does-not-produce-invalid-entity-test + (testing "undo/redo of add-1 add-2 indent-2 should remain valid after another undo" + (let [seed 20260321 + base-uuid (uuid "61111111-1111-1111-1111-111111111111") + block-1-uuid (uuid "62222222-2222-2222-2222-222222222222") + block-2-uuid (uuid "63333333-3333-3333-3333-333333333333") + conn-a (db-test/create-conn-with-blocks + {:pages-and-blocks [{:page {:block/title base-page-title + :block/uuid base-uuid} + :blocks []}]}) + ops-a (d/create-conn client-op/schema-in-db) + history (atom [])] + (with-test-repos {repo-a {:conn conn-a :ops-conn ops-a}} + (fn [] + (let [{:keys [repro restore]} (install-invalid-tx-repro! seed history)] + (try + (reset! db-sync/*repo->latest-remote-tx {}) + (client-op/update-local-tx repo-a 0) + (let [base-page (d/entity @conn-a [:block/uuid base-uuid]) + tx-meta {:client-id "db-sync-sim-client" + :local-tx? true}] + (outliner-op/apply-ops! conn-a + [[:insert-blocks [[{:block/uuid block-1-uuid + :block/title ""}] + (:db/id base-page) + {:sibling? false + :keep-uuid? true}]]] + tx-meta) + (outliner-op/apply-ops! conn-a + [[:save-block [{:block/uuid block-1-uuid + :block/title "1"} + nil]]] + tx-meta) + (let [block-1 (d/entity @conn-a [:block/uuid block-1-uuid])] + (outliner-op/apply-ops! conn-a + [[:insert-blocks [[{:block/uuid block-2-uuid + :block/title ""}] + (:db/id block-1) + {:sibling? true + :keep-uuid? true}]]] + tx-meta)) + (outliner-op/apply-ops! conn-a + [[:save-block [{:block/uuid block-2-uuid + :block/title "2"} + nil]]] + tx-meta) + (let [block-2 (d/entity @conn-a [:block/uuid block-2-uuid])] + (outliner-op/apply-ops! conn-a + [[:indent-outdent-blocks [[(:db/id block-2)] true {}]]] + tx-meta)) + (loop [undo-count 0] + (if (= :frontend.worker.undo-redo/empty-undo-stack + (undo-redo/undo repo-a)) + (do + (is (pos? undo-count)) + (loop [redo-count 0] + (if (= :frontend.worker.undo-redo/empty-redo-stack + (undo-redo/redo repo-a)) + (is (= undo-count redo-count)) + (recur (inc redo-count))))) + (recur (inc undo-count)))) + (let [block-2-after-redo (d/entity @conn-a [:block/uuid block-2-uuid])] + (is (some? block-2-after-redo)) + (is (= block-1-uuid + (-> block-2-after-redo :block/parent :block/uuid)))) + (is (not= :frontend.worker.undo-redo/empty-undo-stack + (undo-redo/undo repo-a))) + (let [block-2 (d/entity @conn-a [:block/uuid block-2-uuid])] + (is (some? block-2)) + (is (= base-uuid (-> block-2 :block/page :block/uuid))) + (is (= base-uuid (-> block-2 :block/parent :block/uuid)))) + (is (nil? @repro) + (str "unexpected invalid tx payload: " (pr-str @repro)))) + (finally + (restore))))))))) (deftest ^:long two-clients-undo-skips-conflicted-move-but-keeps-db-valid-test (testing "undo skips a conflicted move while syncing the remaining safe history" @@ -1312,7 +1821,7 @@ {:repo repo-b :conn conn-b :client client-b :online? true}] 50) - (is (not= :frontend.undo-redo/empty-undo-stack + (is (not= :frontend.worker.undo-redo/empty-undo-stack (undo-redo/undo repo-a))) (let [rounds (sync-until-idle! server [{:repo repo-a :conn conn-a :client client-a :online? true} @@ -1338,8 +1847,346 @@ (finally (restore))))))))) +(deftest two-clients-rebase-repairs-descendant-page-after-remote-subtree-move-test + (testing "rebase repairs descendant page after a remote subtree move" + (let [seed 20260316 + base-uuid (uuid "41111111-1111-1111-1111-111111111111") + target-page-uuid (uuid "42222222-2222-2222-2222-222222222222") + moved-parent-uuid (uuid "43333333-3333-3333-3333-333333333333") + subtree-root-uuid (uuid "44444444-4444-4444-4444-444444444444") + local-child-uuid (uuid "45555555-5555-5555-5555-555555555555") + local-grandchild-uuid (uuid "46666666-6666-6666-6666-666666666666") + conn-a (db-test/create-conn) + conn-b (db-test/create-conn) + ops-a (d/create-conn client-op/schema-in-db) + ops-b (d/create-conn client-op/schema-in-db) + client-a (make-client repo-a) + client-b (make-client repo-b) + server (make-server) + history (atom [])] + (with-test-repos {repo-a {:conn conn-a :ops-conn ops-a} + repo-b {:conn conn-b :ops-conn ops-b}} + (fn [] + (let [{:keys [repro restore]} (install-invalid-tx-repro! seed history)] + (try + (reset! db-sync/*repo->latest-remote-tx {}) + (client-op/update-local-tx repo-a 0) + (client-op/update-local-tx repo-b 0) + (record-meta! history {:seed seed + :base-uuid base-uuid + :target-page-uuid target-page-uuid + :moved-parent-uuid moved-parent-uuid + :subtree-root-uuid subtree-root-uuid}) + + (ensure-base-page! conn-a base-uuid) + (let [base-a (d/entity @conn-a [:block/uuid base-uuid])] + (create-page! conn-a "Target Page" target-page-uuid) + (create-block! conn-a base-a "moved-parent" moved-parent-uuid) + (let [moved-parent-a (d/entity @conn-a [:block/uuid moved-parent-uuid])] + (create-block! conn-a moved-parent-a "subtree-root" subtree-root-uuid))) + + (sync-until-idle! server [{:repo repo-a :conn conn-a :client client-a :online? true} + {:repo repo-b :conn conn-b :client client-b :online? true}] + 30) + + (move-block! conn-a + {:block/uuid moved-parent-uuid} + {:block/uuid target-page-uuid}) + (sync-until-idle! server [{:repo repo-a :conn conn-a :client client-a :online? true} + {:repo repo-b :conn conn-b :client client-b :online? false}] + 30) + + (let [subtree-root-b (d/entity @conn-b [:block/uuid subtree-root-uuid])] + (create-block! conn-b subtree-root-b "local-child" local-child-uuid) + (let [local-child-b (d/entity @conn-b [:block/uuid local-child-uuid])] + (create-block! conn-b local-child-b "local-grandchild" local-grandchild-uuid))) + + (let [rounds (sync-until-idle! server [{:repo repo-a :conn conn-a :client client-a :online? true} + {:repo repo-b :conn conn-b :client client-b :online? true}] + 60) + local-child-a (d/entity @conn-a [:block/uuid local-child-uuid]) + local-child-b (d/entity @conn-b [:block/uuid local-child-uuid]) + local-grandchild-a (d/entity @conn-a [:block/uuid local-grandchild-uuid]) + local-grandchild-b (d/entity @conn-b [:block/uuid local-grandchild-uuid]) + issues-a (db-issues @conn-a) + issues-b (db-issues @conn-b) + attrs-a (block-attr-map @conn-a) + attrs-b (block-attr-map @conn-b) + descendants-on-target-page? + (every? + true? + [(= target-page-uuid (:block/uuid (:block/page local-child-a))) + (= target-page-uuid (:block/uuid (:block/page local-child-b))) + (= target-page-uuid (:block/uuid (:block/page local-grandchild-a))) + (= target-page-uuid (:block/uuid (:block/page local-grandchild-b)))])] + (is (< rounds 60) (str "sync did not become idle rounds=" rounds)) + (is (some? local-child-a)) + (is (some? local-child-b)) + (is (some? local-grandchild-a)) + (is (some? local-grandchild-b)) + (is (= target-page-uuid (:block/uuid (:block/page local-child-a)))) + (is (= target-page-uuid (:block/uuid (:block/page local-child-b)))) + (is (= target-page-uuid (:block/uuid (:block/page local-grandchild-a)))) + (is (= target-page-uuid (:block/uuid (:block/page local-grandchild-b)))) + (is (empty? issues-a) (str "db A issues " (pr-str issues-a))) + (is (empty? issues-b) (str "db B issues " (pr-str issues-b))) + (assert-synced-attrs! seed history attrs-a attrs-b attrs-b) + (when descendants-on-target-page? + (delete-page! conn-b target-page-uuid) + (let [post-delete-rounds (sync-until-idle! server [{:repo repo-a :conn conn-a :client client-a :online? true} + {:repo repo-b :conn conn-b :client client-b :online? true}] + 60) + post-delete-issues-a (db-issues @conn-a) + post-delete-issues-b (db-issues @conn-b)] + (is (< post-delete-rounds 60) (str "post-delete sync did not become idle rounds=" post-delete-rounds)) + (is (empty? post-delete-issues-a) (str "post-delete db A issues " (pr-str post-delete-issues-a))) + (is (empty? post-delete-issues-b) (str "post-delete db B issues " (pr-str post-delete-issues-b))) + (assert-no-invalid-tx! seed history repro)))) + (finally + (restore))))))))) + +(deftest two-clients-syncs-undo-of-new-block-test + (testing "undoing a newly created block syncs the retractEntity to other clients" + (let [base-uuid (uuid "51111111-1111-1111-1111-111111111111") + block-uuid (uuid "52222222-2222-2222-2222-222222222222") + conn-a (db-test/create-conn) + conn-b (db-test/create-conn) + ops-a (d/create-conn client-op/schema-in-db) + ops-b (d/create-conn client-op/schema-in-db) + client-a (make-client repo-a) + client-b (make-client repo-b) + server (make-server)] + (with-test-repos {repo-a {:conn conn-a :ops-conn ops-a} + repo-b {:conn conn-b :ops-conn ops-b}} + (fn [] + (reset! db-sync/*repo->latest-remote-tx {}) + (doseq [repo [repo-a repo-b]] + (client-op/update-local-tx repo 0)) + (ensure-base-page! conn-a base-uuid) + (sync-loop! server [{:repo repo-a :conn conn-a :client client-a :online? true} + {:repo repo-b :conn conn-b :client client-b :online? true}]) + (let [base-a (d/entity @conn-a [:block/uuid base-uuid])] + (create-block! conn-a base-a "temp" block-uuid)) + (sync-loop! server [{:repo repo-a :conn conn-a :client client-a :online? true} + {:repo repo-b :conn conn-b :client client-b :online? true}]) + (is (some? (d/entity @conn-a [:block/uuid block-uuid]))) + (is (some? (d/entity @conn-b [:block/uuid block-uuid]))) + (is (not= :frontend.worker.undo-redo/empty-undo-stack + (undo-redo/undo repo-a))) + (let [pending (#'sync-apply/pending-txs repo-a) + retract-block? (fn [item] + (= [:db/retractEntity [:block/uuid block-uuid]] + (take 2 item)))] + (is (seq pending)) + (is (some (fn [{:keys [tx]}] + (some retract-block? tx)) + pending))) + (sync-loop! server [{:repo repo-a :conn conn-a :client client-a :online? true} + {:repo repo-b :conn conn-b :client client-b :online? true}]) + (is (nil? (d/entity @conn-a [:block/uuid block-uuid]))) + (is (nil? (d/entity @conn-b [:block/uuid block-uuid]))) + (is (nil? (d/entity @(get @server :conn) [:block/uuid block-uuid])))))))) + (defonce op-runs 200) +(defn- undo-all! + [repo max-steps] + (loop [steps 0] + (when (>= steps max-steps) + (throw (ex-info "undo-all exceeded max steps" + {:repo repo + :max-steps max-steps}))) + (let [result (undo-redo/undo repo)] + (if (= :frontend.worker.undo-redo/empty-undo-stack result) + steps + (recur (inc steps)))))) + +(defn- redo-all! + [repo max-steps] + (loop [steps 0] + (when (>= steps max-steps) + (throw (ex-info "redo-all exceeded max steps" + {:repo repo + :max-steps max-steps}))) + (let [result (undo-redo/redo repo)] + (if (= :frontend.worker.undo-redo/empty-redo-stack result) + steps + (recur (inc steps)))))) + +(deftest two-clients-offline-insert-delete-indent-undo-redo-keeps-checksum-cache-aligned-test + (testing "both clients offline insert/delete/indent/outdent + undo-all/redo-all keep cached checksums aligned after reconnect" + (let [seed (or (env-seed) default-seed) + rng (make-rng seed) + gen-uuid #(rng-uuid rng) + base-uuid (gen-uuid) + conn-a (db-test/create-conn) + conn-b (db-test/create-conn) + ops-a (d/create-conn client-op/schema-in-db) + ops-b (d/create-conn client-op/schema-in-db) + client-a (make-client repo-a) + client-b (make-client repo-b) + server (make-server)] + (with-test-repos {repo-a {:conn conn-a :ops-conn ops-a} + repo-b {:conn conn-b :ops-conn ops-b}} + (fn [] + (let [listener-a ::checksum-sync-a + listener-b ::checksum-sync-b + update-local-checksum! + (fn [repo conn listener-key] + (d/listen! conn listener-key + (fn [tx-report] + (when-not (:batch-tx? @conn) + (when (seq (:tx-data tx-report)) + (db-sync/update-local-sync-checksum! repo tx-report))))) + nil) + run-offline-seq! + (fn [repo conn label-prefix] + (let [base (d/entity @conn [:block/uuid base-uuid]) + p1 (gen-uuid) + child (gen-uuid) + temp (gen-uuid)] + (create-block! conn base (str label-prefix "-p1") p1) + (create-block! conn (d/entity @conn [:block/uuid p1]) (str label-prefix "-child") child) + (outliner-core/indent-outdent-blocks! conn [(d/entity @conn [:block/uuid child])] false {}) + (outliner-core/indent-outdent-blocks! conn [(d/entity @conn [:block/uuid child])] true {}) + (create-block! conn base (str label-prefix "-temp") temp) + (delete-block! conn temp) + (undo-all! repo 256) + (redo-all! repo 256)))] + (update-local-checksum! repo-a conn-a listener-a) + (update-local-checksum! repo-b conn-b listener-b) + (try + (reset! db-sync/*repo->latest-remote-tx {}) + (doseq [repo [repo-a repo-b]] + (client-op/update-local-tx repo 0)) + (ensure-base-page! conn-a base-uuid) + (sync-loop! server [{:repo repo-a :conn conn-a :client client-a :online? true} + {:repo repo-b :conn conn-b :client client-b :online? true}]) + (client-op/update-local-checksum repo-a (sync-checksum/recompute-checksum @conn-a)) + (client-op/update-local-checksum repo-b (sync-checksum/recompute-checksum @conn-b)) + + (run-offline-seq! repo-a conn-a "a") + (run-offline-seq! repo-b conn-b "b") + + (let [rounds (sync-until-idle! server [{:repo repo-a :conn conn-a :client client-a :online? true} + {:repo repo-b :conn conn-b :client client-b :online? true}] + 300)] + (is (< rounds 300))) + + (let [checksum-a (sync-checksum/recompute-checksum @conn-a) + checksum-b (sync-checksum/recompute-checksum @conn-b) + cached-a (client-op/get-local-checksum repo-a) + cached-b (client-op/get-local-checksum repo-b)] + (is (= checksum-a checksum-b)) + (is (= checksum-a cached-a)) + (is (= checksum-b cached-b))) + (finally + (d/unlisten! conn-a listener-a) + (d/unlisten! conn-b listener-b))))))))) + +(deftest ^:long ^:large-vars/cleanup-todo all-core-outliner-ops-local-undo-redo-random-sim-test + (testing "local randomized stress simulation runs weighted ops and keeps undo-all/redo-all roundtrips valid" + (let [seed (or (env-seed) default-seed) + rng (make-rng seed) + gen-uuid #(rng-uuid rng) + coverage-ops local-undo-redo-coverage-ops + coverage-op-table (build-weighted-op-table coverage-ops local-undo-redo-op-weights :coverage) + cycle-ops (set (keys local-undo-redo-cycle-op-weights)) + cycle-op-table (build-weighted-op-table cycle-ops local-undo-redo-cycle-op-weights :cycle) + base-uuid (gen-uuid) + conn (db-test/create-conn) + ops-conn (d/create-conn client-op/schema-in-db) + history (atom []) + state (atom {:pages #{base-uuid} :blocks #{}}) + client-context {:repo repo-a + :conn conn + :base-uuid base-uuid + :state state + :gen-uuid gen-uuid}] + (with-test-repos {repo-a {:conn conn :ops-conn ops-conn}} + (fn [] + (let [{:keys [repro restore]} (install-invalid-tx-repro! seed history)] + (try + (reset! db-sync/*repo->latest-remote-tx {}) + (record-meta! history {:seed seed + :base-uuid base-uuid + :phase :local-undo-redo-stress + :run-count local-undo-redo-run-count + :full-cycle-runs local-undo-redo-full-cycle-runs}) + (ensure-base-page! conn base-uuid) + (client-op/update-local-tx repo-a 0) + + ;; Random warmup to provide realistic, non-trivial local history. + (run-ops! rng client-context 50 history + {:pick-op-opts {:enable-ops coverage-ops + :disable-ops #{:undo :redo}} + :op-table-override coverage-op-table + :context {:phase :warmup}}) + + ;; Guarantee every required op is actually exercised at least once. + (doseq [op (sort coverage-ops)] + (let [executed? (or (pos? (op-count history op)) + (ensure-op-recorded! rng + client-context + history + op + 120 + :op-table-override coverage-op-table))] + (is executed? + (str "failed to execute op=" op " seed=" seed)))) + + ;; Keep all-core coverage checks separate from full undo-all/redo-all cycles. + (let [issues (db-issues @conn)] + (is (empty? issues) + (str "db issues before cycle stress seed=" seed " " (pr-str issues)))) + (assert-no-invalid-tx! seed history repro) + (undo-redo/clear-history! repo-a) + + ;; Long weighted random stress run on undo-safe operation families. + (run-ops! rng client-context local-undo-redo-run-count history + {:pick-op-opts {:enable-ops cycle-ops} + :op-table-override cycle-op-table + :context {:phase :cycle-stress}}) + + ;; Ensure at least one concrete undoable change before undo-all cycles. + (is (ensure-op-recorded! rng + client-context + history + :create-block + 120 + :op-table-override cycle-op-table) + (str "failed to prepare undo stack seed=" seed)) + + (let [max-stack-steps (+ (* 2 local-undo-redo-run-count) 5000)] + (dotimes [cycle-idx local-undo-redo-full-cycle-runs] + (let [undo-steps (undo-all! repo-a max-stack-steps) + issues-after-undo (db-issues @conn)] + (is (pos? undo-steps) + (str "expected undo steps cycle=" cycle-idx " seed=" seed)) + (is (empty? issues-after-undo) + (str "db issues after undo-all cycle=" cycle-idx " seed=" seed + " " (pr-str issues-after-undo))) + (assert-no-invalid-tx! seed history repro) + (let [redo-steps (redo-all! repo-a max-stack-steps) + issues-after-redo (db-issues @conn) + attrs-after-redo (block-attr-map @conn)] + (is (pos? redo-steps) + (str "expected redo steps cycle=" cycle-idx " seed=" seed)) + (is (empty? issues-after-redo) + (str "db issues after redo-all cycle=" cycle-idx " seed=" seed + " " (pr-str issues-after-redo))) + (is (seq attrs-after-redo) + (str "db should not be empty after redo-all cycle=" cycle-idx + " seed=" seed)) + (assert-no-invalid-tx! seed history repro))))) + + (let [issues (db-issues @conn)] + (is (empty? issues) + (str "db issues seed=" seed " " (pr-str issues)))) + (assert-no-invalid-tx! seed history repro) + (finally + (restore))))))))) + (defn- run-random-ops! [rng server clients repo->state base-uuid history run-ops-opts steps] (dotimes [_ steps] @@ -1437,11 +2284,12 @@ (finally (restore))))))))) -(deftest ^:long two-clients-cut-paste-random-sim-test +(deftest ^:fix-me two-clients-cut-paste-random-sim-test (testing "db-sync convergence under random cut-paste with child operations" (let [seed (or (env-seed) default-seed) rng (make-rng seed) gen-uuid #(rng-uuid rng) + cut-paste-runs (min op-runs 80) base-uuid (gen-uuid) conn-a (db-test/create-conn) conn-b (db-test/create-conn) @@ -1475,7 +2323,7 @@ (create-block! conn-a base-a "" target-uuid) (swap! state-a update :blocks into #{parent-uuid child-uuid target-uuid}) - (dotimes [_ op-runs] + (dotimes [_ cut-paste-runs] (run-ops! rng {:repo repo-a :conn conn-a :base-uuid base-uuid @@ -1542,6 +2390,14 @@ (create-block! conn-a base-a "" target-uuid) (swap! state-a update :blocks into #{parent-uuid child-uuid target-uuid}) + (try + (sync-loop! server clients) + (catch :default e + (report-history! seed history {:type :sync-loop-error + :phase :undo-redo-add-remove-cut-paste-initial-sync + :error (ex-data e)}) + (throw e))) + (dotimes [_ op-runs] (run-ops! rng {:repo repo-a :conn conn-a @@ -1556,8 +2412,20 @@ :delete-block :cut-paste-block-with-child}} :context {:phase :undo-redo-add-remove-cut-paste}}) - (sync-loop! server clients)) - (sync-loop! server clients) + (try + (sync-loop! server clients) + (catch :default e + (report-history! seed history {:type :sync-loop-error + :phase :undo-redo-add-remove-cut-paste + :error (ex-data e)}) + (throw e)))) + (try + (sync-loop! server clients) + (catch :default e + (report-history! seed history {:type :sync-loop-error + :phase :undo-redo-add-remove-cut-paste-final + :error (ex-data e)}) + (throw e))) (let [issues-a (db-issues @conn-a) issues-b (db-issues @conn-b) @@ -1573,8 +2441,114 @@ (finally (restore))))))))) +(deftest ^:long ^:large-vars/cleanup-todo two-clients-online-add-vs-delete-with-undo-redo-random-sim-test + (testing "both online: client A adds blocks while client B deletes with random undo/redo" + (let [seed (or (env-seed) default-seed) + rng (make-rng seed) + gen-uuid #(rng-uuid rng) + scenario-runs op-runs + base-uuid (gen-uuid) + conn-a (db-test/create-conn) + conn-b (db-test/create-conn) + ops-a (d/create-conn client-op/schema-in-db) + ops-b (d/create-conn client-op/schema-in-db) + client-a (make-client repo-a) + client-b (make-client repo-b) + server (make-server) + history (atom []) + state-a (atom {:pages #{base-uuid} :blocks #{}}) + state-b (atom {:pages #{base-uuid} :blocks #{}}) + ops #{:create-block :delete-blocks :delete-block :indent-outdent-blocks :undo :redo} + op-weights {:create-block 16 + :delete-block 10 + :delete-blocks 10 + :indent-outdent-blocks 10 + :undo 8 + :redo 8} + a-op-table (build-weighted-op-table ops op-weights :a-add-undo-redo) + b-op-table (build-weighted-op-table ops op-weights :b-delete-undo-redo)] + (with-test-repos {repo-a {:conn conn-a :ops-conn ops-a} + repo-b {:conn conn-b :ops-conn ops-b}} + (fn [] + (let [{:keys [repro restore]} (install-invalid-tx-repro! seed history) + clients [{:repo repo-a :conn conn-a :client client-a :online? true :gen-uuid gen-uuid} + {:repo repo-b :conn conn-b :client client-b :online? true :gen-uuid gen-uuid}] + refresh-state! (fn [state conn] + (let [db @conn + block-uuids (->> (active-block-uuids db) + (remove (fn [uuid] + (some-> (d/entity db [:block/uuid uuid]) + ldb/page?))) + set)] + (swap! state assoc :pages #{base-uuid} + :blocks block-uuids)))] + (try + (reset! db-sync/*repo->latest-remote-tx {}) + (record-meta! history {:seed seed + :base-uuid base-uuid + :phase :two-clients-online-add-vs-delete + :scenario-runs scenario-runs}) + (doseq [conn [conn-a conn-b]] + (ensure-base-page! conn base-uuid)) + (doseq [repo [repo-a repo-b]] + (client-op/update-local-tx repo 0)) + + ;; Bootstrap one local block on A so B has a known deletion target after initial sync. + (let [base-a (d/entity @conn-a [:block/uuid base-uuid]) + seed-uuid (gen-uuid)] + (create-block! conn-a base-a "seed" seed-uuid) + (swap! state-a update :blocks conj seed-uuid)) + (sync-loop! server clients) + (refresh-state! state-a conn-a) + (refresh-state! state-b conn-b) + + (dotimes [i scenario-runs] + (run-ops! rng {:repo repo-a + :conn conn-a + :base-uuid base-uuid + :state state-a + :gen-uuid gen-uuid} + 1 + history + {:op-table-override a-op-table + :context {:phase :a-add-undo-redo :iter i}}) + (sync-loop! server clients) + (refresh-state! state-a conn-a) + (refresh-state! state-b conn-b) + + (run-ops! rng {:repo repo-b + :conn conn-b + :base-uuid base-uuid + :state state-b + :gen-uuid gen-uuid} + 1 + history + {:op-table-override b-op-table + :context {:phase :b-delete-undo-redo :iter i}}) + (sync-loop! server clients) + (refresh-state! state-a conn-a) + (refresh-state! state-b conn-b)) + + (sync-loop! server clients) + (let [issues-a (db-issues @conn-a) + issues-b (db-issues @conn-b) + attrs-a (block-attr-map @conn-a) + attrs-b (block-attr-map @conn-b) + create-count (op-count history :create-block) + delete-count (+ (op-count history :delete-block) + (op-count history :delete-blocks))] + (is (pos? create-count) + (str "expected create-block ops seed=" seed " history=" (count @history))) + (is (pos? delete-count) + (str "expected delete ops seed=" seed " history=" (count @history))) + (is (empty? issues-a) (str "db A issues seed=" seed " " (pr-str issues-a))) + (is (empty? issues-b) (str "db B issues seed=" seed " " (pr-str issues-b))) + (assert-synced-attrs! seed history attrs-a attrs-b attrs-b) + (assert-no-invalid-tx! seed history repro)) + (finally + (restore))))))))) + (deftest ^:long ^:large-vars/cleanup-todo three-clients-single-repo-sim-test - (prn :debug "run three-clients-single-repo-sim-test") (testing "db-sync convergence with three clients sharing one repo" (let [seed (or (env-seed) default-seed) rng (make-rng seed) diff --git a/src/test/frontend/worker/db_sync_test.cljs b/src/test/frontend/worker/db_sync_test.cljs index 17e057f853..d3c44a1996 100644 --- a/src/test/frontend/worker/db_sync_test.cljs +++ b/src/test/frontend/worker/db_sync_test.cljs @@ -1,51 +1,161 @@ (ns frontend.worker.db-sync-test - (:require [cljs.test :refer [deftest is testing async use-fixtures]] + (:require [cljs.test :refer [deftest is testing async]] + [clojure.set :as set] [clojure.string :as string] [datascript.core :as d] [frontend.common.crypt :as crypt] [frontend.worker-common.util :as worker-util] + [frontend.worker.handler.page :as worker-page] + [frontend.worker.pipeline :as worker-pipeline] [frontend.worker.platform :as platform] [frontend.worker.shared-service :as shared-service] [frontend.worker.state :as worker-state] [frontend.worker.sync :as db-sync] + [frontend.worker.sync.apply-txs :as sync-apply] + [frontend.worker.sync.assets :as sync-assets] [frontend.worker.sync.client-op :as client-op] [frontend.worker.sync.crypt :as sync-crypt] - [frontend.worker.sync.log-and-state :as sync-log-and-state] + [frontend.worker.sync.handle-message :as sync-handle-message] + [frontend.worker.sync.large-title :as sync-large-title] + [frontend.worker.sync.presence :as sync-presence] + [frontend.worker.sync.temp-sqlite :as sync-temp-sqlite] + [frontend.worker.sync.upload :as sync-upload] + [frontend.worker.sync.util :as sync-util] + [frontend.worker.undo-redo :as undo-redo] [logseq.common.config :as common-config] + [logseq.common.util :as common-util] + [logseq.common.util.page-ref :as page-ref] [logseq.db :as ldb] + [logseq.db-sync.checksum :as sync-checksum] + [logseq.db-sync.storage :as sync-storage] + [logseq.db-sync.worker.handler.sync :as sync-handler] + [logseq.db-sync.worker.ws :as ws] + [logseq.db.common.normalize :as db-normalize] [logseq.db.frontend.validate :as db-validate] [logseq.db.sqlite.util :as sqlite-util] [logseq.db.test.helper :as db-test] [logseq.outliner.core :as outliner-core] [logseq.outliner.op :as outliner-op] [logseq.outliner.page :as outliner-page] + [logseq.outliner.property :as outliner-property] [promesa.core :as p])) (def ^:private test-repo "test-db-sync-repo") +(def ^:private local-tx-meta + {:client-id "test-client" + :local-tx? true}) -(defn- reset-db-sync-test-state! +(def ^:private recycle-built-in-props + #{:logseq.property.recycle/original-parent + :logseq.property.recycle/original-page + :logseq.property.recycle/original-order}) + +(defn- js-row + [m] + (let [row (js-obj)] + (doseq [[k v] m] + (aset row (name k) v)) + row)) + +(defn- js-rows + [rows] + (into-array (map js-row rows))) + +(defn- make-storage-sql [] - (db-sync/stop!) - (reset! worker-state/*datascript-conns nil) - (reset! worker-state/*client-ops-conns nil) - (reset! worker-state/*db-sync-client nil) - (reset! worker-state/*db-sync-config {:ws-url nil}) - (reset! db-sync/*repo->latest-remote-tx {}) - (reset! db-sync/*start-inflight-target nil)) + (let [state (atom {:kvs {} + :tx-log {} + :meta {}}) + sql (doto (js-obj) + (aset "exec" + (fn [sql & args] + (cond + (or (string/includes? sql "create table") + (string/includes? sql "alter table") + (string/includes? sql "select 1 from")) + #js [] -(use-fixtures :each {:before reset-db-sync-test-state! - :after reset-db-sync-test-state!}) + (string/includes? sql "delete from kvs") + (do + (swap! state assoc :kvs {}) + nil) -(deftest http-base-url-does-not-derive-from-ws-url-test - (let [config-prev @worker-state/*db-sync-config] - (try - (reset! worker-state/*db-sync-config {:ws-url "wss://api.logseq.io/sync/%s"}) - (is (nil? (#'db-sync/http-base-url))) - (reset! worker-state/*db-sync-config {:ws-url "wss://api.logseq.io/sync/%s" - :http-base "https://api.logseq.io"}) - (is (= "https://api.logseq.io" (#'db-sync/http-base-url))) - (finally - (reset! worker-state/*db-sync-config config-prev))))) + (string/includes? sql "delete from tx_log") + (do + (swap! state assoc :tx-log {}) + nil) + + (string/includes? sql "delete from sync_meta") + (do + (swap! state assoc :meta {}) + nil) + + (or (string/includes? sql "insert into kvs") + (string/includes? sql "insert or replace into kvs")) + (do + (doseq [[addr content addresses] (partition 3 args)] + (swap! state assoc-in [:kvs addr] + {:addr addr + :content content + :addresses addresses})) + nil) + + (string/includes? sql "select content, addresses from kvs where addr = ?") + (if-let [{:keys [content addresses]} (get-in @state [:kvs (first args)])] + (js-rows [{:content content + :addresses addresses}]) + (js-rows [])) + + (string/includes? sql "insert into tx_log") + (let [[t tx created-at outliner-op] args] + (swap! state assoc-in [:tx-log t] + {:t t + :tx tx + :created-at created-at + :outliner-op outliner-op}) + nil) + + (string/includes? sql "select t, tx, outliner_op from tx_log") + (let [since (first args) + rows (->> (:tx-log @state) + vals + (filter (fn [row] (> (:t row) since))) + (sort-by :t) + (map (fn [row] + {:t (:t row) + :tx (:tx row) + :outliner_op (:outliner-op row)})))] + (js-rows rows)) + + (string/includes? sql "insert into sync_meta") + (let [[k v] args] + (swap! state assoc-in [:meta k] v) + nil) + + (string/includes? sql "select value from sync_meta") + (if-let [value (get-in @state [:meta (first args)])] + (js-rows [{:value value}]) + (js-rows [])) + + :else + #js []))))] + {:state state + :sql sql})) + +(defn- kvs-rows + [storage-state] + (->> (:kvs @storage-state) + vals + (sort-by :addr) + (mapv (fn [{:keys [addr content addresses]}] + [addr content addresses])))) + +(defn- non-recycle-validation-entities + [validation] + (->> (:errors validation) + (map :entity) + (remove (fn [entity] + (contains? recycle-built-in-props (:db/ident entity)))))) (defn- with-datascript-conns [db-conn ops-conn f] @@ -59,6 +169,8 @@ (db-sync/enqueue-local-tx! test-repo tx-report)))) (let [result (f) cleanup (fn [] + (when ops-conn + (d/unlisten! db-conn ::listen-db)) (reset! worker-state/*datascript-conns db-prev) (reset! worker-state/*client-ops-conns ops-prev))] (if (p/promise? result) @@ -67,23 +179,6 @@ (cleanup) result))))) -(defn- with-worker-conns - [db-conns ops-conns f] - (let [db-prev @worker-state/*datascript-conns - ops-prev @worker-state/*client-ops-conns - result (do - (reset! worker-state/*datascript-conns db-conns) - (reset! worker-state/*client-ops-conns ops-conns) - (f)) - cleanup (fn [] - (reset! worker-state/*datascript-conns db-prev) - (reset! worker-state/*client-ops-conns ops-prev))] - (if (p/promise? result) - (p/finally result cleanup) - (do - (cleanup) - result)))) - (defn- setup-parent-child [] (let [conn (db-test/create-conn-with-blocks @@ -105,15 +200,24 @@ :child2 child2 :child3 child3})) -(defn- json-response - [status body] - (let [payload (if (some? body) - (js/JSON.stringify (clj->js body)) - "")] - (js/Promise.resolve - #js {:ok (<= 200 status 299) - :status status - :text (fn [] (js/Promise.resolve payload))}))) +(defn- setup-two-parents + [] + (let [conn (db-test/create-conn-with-blocks + {:pages-and-blocks + [{:page {:block/title "page 1"} + :blocks [{:block/title "parent a" + :build/children [{:block/title "a child 1"} + {:block/title "a child 2"}]} + {:block/title "parent b" + :build/children [{:block/title "b child 1"} + {:block/title "b child 2"}]}]}]}) + client-ops-conn (d/create-conn client-op/schema-in-db)] + {:conn conn + :client-ops-conn client-ops-conn + :parent-a (db-test/find-block-by-content @conn "parent a") + :parent-b (db-test/find-block-by-content @conn "parent b") + :a-child-1 (db-test/find-block-by-content @conn "a child 1") + :b-child-1 (db-test/find-block-by-content @conn "b child 1")})) (deftest resolve-ws-token-refreshes-when-token-expired-test (async done @@ -144,70 +248,6 @@ (is nil (str error)) (done)))))))) -(deftest resolve-ws-token-skips-refresh-when-token-not-expired-test - (async done - (let [refresh-calls (atom 0) - main-thread-prev @worker-state/*main-thread] - (reset! worker-state/*main-thread - (fn [qkw _direct-pass? _args-list] - (when (= qkw :thread-api/ensure-id&access-token) - (swap! refresh-calls inc)) - (p/resolved {:id-token "fresh-token"}))) - (with-redefs [db-sync/auth-token (fn [] "valid-token") - db-sync/id-token-expired? (fn [_token] false)] - (-> (#'db-sync/ (#'db-sync/js {:type "pull/ok" :t 4 + :checksum "ignored" :txs [{:t 4 :tx stale-tx}]})) latest-prev @db-sync/*repo->latest-remote-tx client {:repo test-repo @@ -283,67 +365,13 @@ (reset! db-sync/*repo->latest-remote-tx {}) (try (client-op/update-local-tx test-repo 5) - (#'db-sync/handle-message! test-repo client raw-message) + (sync-handle-message/handle-message! test-repo client raw-message) (let [parent' (d/entity @conn parent-id)] (is (= "parent" (:block/title parent'))) (is (= 5 (client-op/get-local-tx test-repo)))) (finally (reset! db-sync/*repo->latest-remote-tx latest-prev)))))))) -(deftest pull-ok-with-empty-txs-still-advances-local-tx-test - (testing "pull/ok with empty tx list should still advance local tx watermark" - (async done - (let [{:keys [conn client-ops-conn]} (setup-parent-child) - raw-message (js/JSON.stringify - (clj->js {:type "pull/ok" - :t 18 - :txs []})) - client {:repo test-repo - :graph-id "graph-1" - :inflight (atom []) - :last-sync-error (atom {:code :previous-error}) - :online-users (atom []) - :ws-state (atom :open)}] - (-> (with-datascript-conns conn client-ops-conn - (fn [] - (client-op/update-local-tx test-repo 16) - (p/let [_ (#'db-sync/handle-message! test-repo client raw-message)] - (is (= 18 (client-op/get-local-tx test-repo))) - (is (nil? @(:last-sync-error client)))))) - (p/catch (fn [e] - (is false (str "unexpected error: " e)))) - (p/finally done)))))) - -(deftest pull-ok-failure-records-last-sync-error-test - (testing "pull/ok failures should surface structured runtime error state" - (async done - (let [tx-payload (sqlite-util/write-transit-str [[:db/add 1 :block/title "remote"]]) - raw-message (js/JSON.stringify - (clj->js {:type "pull/ok" - :t 18 - :txs [{:t 18 :tx tx-payload}]})) - local-tx (atom 16) - client {:repo test-repo - :graph-id "graph-1" - :inflight (atom []) - :last-sync-error (atom nil) - :online-users (atom []) - :ws-state (atom :open)}] - (-> (p/with-redefs [client-op/get-local-tx (fn [_repo] @local-tx) - client-op/update-local-tx (fn [_repo tx] (reset! local-tx tx)) - sync-crypt/graph-e2ee? (fn [_repo] true) - sync-crypt/ (d/with @conn [[:db/add parent-id :block/title "remote-new-title"]]) + :db-after + sync-checksum/recompute-checksum) raw-new (js/JSON.stringify (clj->js {:type "pull/ok" :t 2 + :checksum new-checksum :txs [{:t 2 :tx new-tx}]})) raw-stale (js/JSON.stringify (clj->js {:type "pull/ok" :t 1 + :checksum "ignored" :txs [{:t 1 :tx stale-tx}]})) latest-prev @db-sync/*repo->latest-remote-tx client {:repo test-repo @@ -366,139 +399,417 @@ :online-users (atom []) :ws-state (atom :open)}] (reset! db-sync/*repo->latest-remote-tx {}) - (-> (with-datascript-conns conn client-ops-conn - (fn [] - (p/with-redefs [sync-crypt/graph-e2ee? (fn [_repo] false)] - (p/let [_ (client-op/update-local-tx test-repo 0) - _ (#'db-sync/handle-message! test-repo client raw-new) - _ (#'db-sync/handle-message! test-repo client raw-stale) - parent' (d/entity @conn parent-id)] - (is (= "remote-new-title" (:block/title parent'))) - (is (= 2 (client-op/get-local-tx test-repo))))))) - (p/finally (fn [] - (reset! db-sync/*repo->latest-remote-tx latest-prev))) - (p/finally done)))))) + (with-datascript-conns conn client-ops-conn + (fn [] + (-> (p/let [_ (sync-handle-message/handle-message! test-repo client raw-new) + _ (sync-handle-message/handle-message! test-repo client raw-stale) + parent' (d/entity @conn parent-id)] + (is (= "remote-new-title" (:block/title parent'))) + (is (= 2 (client-op/get-local-tx test-repo)))) + (p/finally (fn [] + (reset! db-sync/*repo->latest-remote-tx latest-prev) + (done)))))))))) -(deftest pull-ok-batched-txs-preserve-tempid-boundaries-test - (testing "pull/ok applies tx batches without cross-tx tempid collisions" +(deftest tx-reject-db-transact-failed-surfaces-rejected-tx-test + (testing "tx/reject with db transact failed includes parsed rejected tx for debugging" + (let [rejected-tx {:tx (sqlite-util/write-transit-str [[:db/add [:block/uuid (random-uuid)] :block/title "bad"]]) + :outliner-op :save-block} + raw-message (js/JSON.stringify + (clj->js {:type "tx/reject" + :reason "db transact failed" + :t 3 + :data (sqlite-util/write-transit-str rejected-tx)})) + client {:repo test-repo + :graph-id "graph-1" + :inflight (atom []) + :online-users (atom []) + :ws-state (atom :open)}] + (with-redefs [client-op/get-local-tx (constantly 0)] + (try + (sync-handle-message/handle-message! test-repo client raw-message) + (is false "expected tx/reject to fail-fast with rejected tx details") + (catch :default error + (let [data (ex-data error)] + (is (= :db-sync/tx-rejected (:type data))) + (is (= "db transact failed" (:reason data))) + (is (= rejected-tx (:data data)))))))))) + +(deftest hello-checksum-mismatch-fails-fast-test + (testing "hello with matching t but mismatched checksum fails fast" + (let [{:keys [conn client-ops-conn]} (setup-parent-child) + latest-prev @db-sync/*repo->latest-remote-tx + raw-message (js/JSON.stringify + (clj->js {:type "hello" + :t 0 + :checksum "bad-checksum"})) + client {:repo test-repo + :graph-id "graph-1" + :inflight (atom []) + :online-users (atom []) + :ws-state (atom :open)}] + (with-datascript-conns conn client-ops-conn + (fn [] + (reset! db-sync/*repo->latest-remote-tx {}) + (with-redefs [sync-apply/flush-pending! (fn [& _] nil) + sync-assets/enqueue-asset-sync! (fn [& _] nil)] + (try + (sync-handle-message/handle-message! test-repo client raw-message) + (catch :default error + (let [data (ex-data error)] + (is (= :db-sync/checksum-mismatch (:type data))) + (is (= "bad-checksum" (:remote-checksum data))))) + (finally + (reset! db-sync/*repo->latest-remote-tx latest-prev))))))))) + +(deftest hello-checksum-mismatch-fails-fast-for-e2ee-test + (testing "e2ee graphs also fail fast on checksum mismatch" + (let [{:keys [conn client-ops-conn]} (setup-parent-child) + latest-prev @db-sync/*repo->latest-remote-tx + raw-message (js/JSON.stringify + (clj->js {:type "hello" + :t 0 + :checksum "bad-checksum"})) + client {:repo test-repo + :graph-id "graph-1" + :inflight (atom []) + :online-users (atom []) + :ws-state (atom :open)}] + (with-datascript-conns conn client-ops-conn + (fn [] + (reset! db-sync/*repo->latest-remote-tx {}) + (with-redefs [sync-apply/flush-pending! (fn [& _] nil) + sync-assets/enqueue-asset-sync! (fn [& _] nil) + sync-crypt/graph-e2ee? (constantly true)] + (try + (sync-handle-message/handle-message! test-repo client raw-message) + (is false "expected checksum mismatch to fail-fast for e2ee graphs") + (catch :default error + (let [data (ex-data error)] + (is (= :db-sync/checksum-mismatch (:type data))) + (is (= "bad-checksum" (:remote-checksum data))))) + (finally + (reset! db-sync/*repo->latest-remote-tx latest-prev))))))))) + +(deftest hello-without-checksum-is-accepted-test + (testing "legacy hello without checksum is accepted" + (let [{:keys [conn client-ops-conn]} (setup-parent-child) + latest-prev @db-sync/*repo->latest-remote-tx + raw-message (js/JSON.stringify + (clj->js {:type "hello" + :t 0})) + client {:repo test-repo + :graph-id "graph-1" + :inflight (atom []) + :online-users (atom []) + :ws-state (atom :open)}] + (with-datascript-conns conn client-ops-conn + (fn [] + (reset! db-sync/*repo->latest-remote-tx {}) + (with-redefs [sync-apply/flush-pending! (fn [& _] nil) + sync-assets/enqueue-asset-sync! (fn [& _] nil)] + (sync-handle-message/handle-message! test-repo client raw-message) + (is (= 0 (get @db-sync/*repo->latest-remote-tx test-repo))) + (reset! db-sync/*repo->latest-remote-tx latest-prev))))))) + +(deftest pull-ok-without-checksum-is-accepted-test + (testing "legacy pull/ok without checksum is accepted" (async done (let [{:keys [conn client-ops-conn parent]} (setup-parent-child) - page-uuid (:block/uuid (:block/page parent)) - block-uuid-a (random-uuid) - block-uuid-b (random-uuid) - now 1760000000000 - tx-a (sqlite-util/write-transit-str - [[:db/add -1 :block/uuid block-uuid-a] - [:db/add -1 :block/title "remote-a"] - [:db/add -1 :block/parent [:block/uuid page-uuid]] - [:db/add -1 :block/page [:block/uuid page-uuid]] - [:db/add -1 :block/order 1] - [:db/add -1 :block/updated-at now] - [:db/add -1 :block/created-at now]]) - tx-b (sqlite-util/write-transit-str - [[:db/add -1 :block/uuid block-uuid-b] - [:db/add -1 :block/title "remote-b"] - [:db/add -1 :block/parent [:block/uuid page-uuid]] - [:db/add -1 :block/page [:block/uuid page-uuid]] - [:db/add -1 :block/order 2] - [:db/add -1 :block/updated-at now] - [:db/add -1 :block/created-at now]]) + parent-id (:db/id parent) + new-tx (sqlite-util/write-transit-str [[:db/add parent-id :block/title "remote-new-title"]]) raw-message (js/JSON.stringify (clj->js {:type "pull/ok" :t 2 - :txs [{:t 1 :tx tx-a} - {:t 2 :tx tx-b}]})) + :txs [{:t 2 :tx new-tx}]})) latest-prev @db-sync/*repo->latest-remote-tx client {:repo test-repo :graph-id "graph-1" :inflight (atom []) :online-users (atom []) :ws-state (atom :open)}] - (-> (with-datascript-conns conn client-ops-conn - (fn [] - (reset! db-sync/*repo->latest-remote-tx {}) - (p/let [_ (client-op/update-local-tx test-repo 0) - _ (#'db-sync/handle-message! test-repo client raw-message)] - ;; TODO(db-sync): re-enable after batched pull tempid-boundary behavior is stabilized. - #_(is (= "remote-a" (:block/title (d/entity @conn [:block/uuid block-uuid-a])))) - #_(is (= "remote-b" (:block/title (d/entity @conn [:block/uuid block-uuid-b]))))))) - (p/finally (fn [] - (reset! db-sync/*repo->latest-remote-tx latest-prev))) - (p/finally done)))))) + (reset! db-sync/*repo->latest-remote-tx {}) + (with-datascript-conns conn client-ops-conn + (fn [] + (-> (p/let [_ (sync-handle-message/handle-message! test-repo client raw-message) + parent' (d/entity @conn parent-id)] + (is (= "remote-new-title" (:block/title parent'))) + (is (= 2 (client-op/get-local-tx test-repo)))) + (p/finally (fn [] + (reset! db-sync/*repo->latest-remote-tx latest-prev) + (done)))))))))) -(deftest get-graph-id-falls-back-to-client-op-graph-uuid-test - (let [conn (d/create-conn {}) - client-ops-conn (d/create-conn client-op/schema-in-db)] - (with-datascript-conns conn client-ops-conn - (fn [] - (client-op/update-graph-uuid test-repo "graph-from-client-op") - (is (= "graph-from-client-op" - (#'db-sync/get-graph-id test-repo))))))) +(deftest pull-ok-batched-txs-preserve-tempid-boundaries-test + (testing "pull/ok applies tx batches without cross-tx tempid collisions" + (let [{:keys [conn client-ops-conn parent]} (setup-parent-child) + page-uuid (:block/uuid (:block/page parent)) + block-uuid-a (random-uuid) + block-uuid-b (random-uuid) + now 1760000000000 + tx-a [[:db/add -1 :block/uuid block-uuid-a] + [:db/add -1 :block/title "remote-a"] + [:db/add -1 :block/parent [:block/uuid page-uuid]] + [:db/add -1 :block/page [:block/uuid page-uuid]] + [:db/add -1 :block/order 1] + [:db/add -1 :block/updated-at now] + [:db/add -1 :block/created-at now]] + tx-b [[:db/add -1 :block/uuid block-uuid-b] + [:db/add -1 :block/title "remote-b"] + [:db/add -1 :block/parent [:block/uuid page-uuid]] + [:db/add -1 :block/page [:block/uuid page-uuid]] + [:db/add -1 :block/order 2] + [:db/add -1 :block/updated-at now] + [:db/add -1 :block/created-at now]]] + (with-datascript-conns conn client-ops-conn + (fn [] + (is (nil? (try + (#'sync-apply/apply-remote-txs! test-repo nil [{:tx-data tx-a} + {:tx-data tx-b}]) + nil + (catch :default e + e))))))))) -(deftest resolve-start-graph-id-falls-back-to-remote-graph-list-test - (async done - (let [conn (d/create-conn {}) - client-ops-conn (d/create-conn client-op/schema-in-db) - orig-list-remote-graphs! db-sync/list-remote-graphs!] - (set! db-sync/list-remote-graphs! (fn [] - (p/resolved [{:graph-name test-repo - :graph-id "remote-graph-id"}]))) - (-> (with-datascript-conns conn client-ops-conn - (fn [] - (p/let [graph-id (#'db-sync/ (db-sync/start! test-repo) - (p/then (fn [result] - (is (nil? result)) - (is (= 0 @list-calls)))) - (p/catch (fn [error] - (is false (str "unexpected error: " error)))) - (p/finally (fn [] - (reset! worker-state/*db-sync-config config-prev) - (done)))))))) +(deftest batch-transact-preserves-many-page-property-values-test + (testing "temp conn batch keeps both values when a new page-many property is created and then assigned twice" + (let [conn (db-test/create-conn-with-blocks + {:pages-and-blocks + [{:page {:block/title "page 1"} + :blocks [{:block/title "remote object"}]}]}) + block-id (:db/id (db-test/find-block-by-content @conn "remote object")) + property-id :plugin.property._test_plugin/x7] + (ldb/batch-transact-with-temp-conn! + conn + {} + (fn [temp-conn] + (outliner-property/upsert-property! temp-conn property-id + {:logseq.property/type :page + :db/cardinality :db.cardinality/many} + {:property-name "x7"}) + (outliner-property/set-block-property! temp-conn block-id property-id "Page y") + (outliner-property/set-block-property! temp-conn block-id property-id "Page z"))) + (let [block' (db-test/find-block-by-content @conn "remote object")] + (is (= #{"page y" "page z"} + (set (map :block/name (:plugin.property._test_plugin/x7 block'))))))))) -(deftest connect-uses-platform-websocket-adapter-test - (let [ws-ctor-prev js/WebSocket - platform-map {:runtime :test} - ws-calls (atom []) - attach-calls (atom [])] - (set! js/WebSocket (js* "(function(_url){ this.readyState = 1; })")) - (try - (with-redefs [worker-state/get-id-token (fn [] "token-123") - platform/current (fn [] platform-map) - platform/websocket-connect (fn [platform' url] - (swap! ws-calls conj {:platform platform' :url url}) - (js-obj)) - db-sync/attach-ws-handlers! (fn [repo _client ws url] - (swap! attach-calls conj {:repo repo :ws ws :url url}))] - (let [connected (#'db-sync/connect! test-repo {:repo test-repo} "wss://example.com/sync/graph-1") - ws (:ws connected)] - (is (= [{:platform platform-map - :url "wss://example.com/sync/graph-1?token=token-123"}] - @ws-calls)) - (is (= [{:repo test-repo - :ws ws - :url "wss://example.com/sync/graph-1"}] - @attach-calls)))) - (finally - (set! js/WebSocket ws-ctor-prev))))) +(deftest batch-transact-preserves-tag-many-page-property-values-test + (testing "temp conn batch keeps tag property values when a new many page property is upserted first" + (let [conn (db-test/create-conn-with-blocks + {:pages-and-blocks + [{:page {:block/title "page 1"} + :blocks [{:block/title "remote object"}]}]}) + property-id :plugin.property._test_plugin/x7] + (ldb/batch-transact-with-temp-conn! + conn + {} + (fn [temp-conn] + (outliner-property/upsert-property! temp-conn property-id + {:logseq.property/type :page + :db/cardinality :db.cardinality/many} + {:property-name "x7"}) + (outliner-page/create! temp-conn "Tag x" {:class? true}) + (let [tag-id (:db/id (ldb/get-page @temp-conn "Tag x"))] + (outliner-property/set-block-property! temp-conn tag-id property-id "Page y") + (outliner-property/set-block-property! temp-conn tag-id property-id "Page z")))) + (let [tag' (ldb/get-page @conn "Tag x")] + (is (ldb/class? tag')) + (is (= #{"page y" "page z"} + (set (map :block/name (:plugin.property._test_plugin/x7 tag'))))))))) + +(deftest replace-attr-retract-with-retract-entity-preserves-input-order-test + (testing "temp batch replay transform keeps property schema datoms before later value datoms" + (let [conn (db-test/create-conn-with-blocks + {:pages-and-blocks + [{:page {:block/title "page 1"} + :blocks [{:block/title "remote object"}]}]}) + block-id (:db/id (db-test/find-block-by-content @conn "remote object")) + property-id :plugin.property._test_plugin/x7 + temp-conn (d/conn-from-db @conn) + *batch-tx-data (volatile! [])] + (swap! temp-conn assoc + :skip-store? true + :batch-tx? true) + (d/listen! temp-conn ::capture-temp-batch + (fn [{:keys [tx-data]}] + (vswap! *batch-tx-data into tx-data))) + (try + (outliner-property/upsert-property! temp-conn property-id + {:logseq.property/type :page + :db/cardinality :db.cardinality/many} + {:property-name "x7"}) + (outliner-property/set-block-property! temp-conn block-id property-id "Page y") + (outliner-property/set-block-property! temp-conn block-id property-id "Page z") + (let [tx-data @*batch-tx-data + tx-data' (db-normalize/replace-attr-retract-with-retract-entity @temp-conn tx-data) + schema-index (first (keep-indexed + (fn [idx d] + (when (and (= :db/ident (:a d)) + (= property-id (:v d))) + idx)) + tx-data')) + value-index (first (keep-indexed + (fn [idx d] + (when (and (= block-id (:e d)) + (= property-id (:a d)) + (:added d)) + idx)) + tx-data'))] + (is (number? schema-index)) + (is (number? value-index)) + (is (< schema-index value-index))) + (finally + (d/unlisten! temp-conn ::capture-temp-batch)))))) + +(deftest local-checksum-matches-recompute-after-post-pipeline-update-test + (testing "stored checksum matches recompute when updated from post-pipeline tx report" + (let [{:keys [conn client-ops-conn parent]} (setup-parent-child)] + (with-datascript-conns conn client-ops-conn + (fn [] + (let [page-id (:db/id (:block/page parent)) + parent-id (:db/id parent) + block-uuid (random-uuid) + now 1773661308002 + tx-report* (d/with @conn [[:db/add -1 :block/uuid block-uuid] + [:db/add -1 :block/title "Checksum Block"] + [:db/add -1 :block/parent parent-id] + [:db/add -1 :block/page page-id] + [:db/add -1 :block/order "a0"] + [:db/add -1 :block/created-at now] + [:db/add -1 :block/updated-at now]] + {:outliner-op :insert-blocks}) + tx-report (worker-pipeline/transact-pipeline tx-report*)] + (db-sync/update-local-sync-checksum! test-repo tx-report) + (is (= (client-op/get-local-checksum test-repo) + (sync-checksum/recompute-checksum (:db-after tx-report)))))))))) + +(deftest first-local-block-after-upload-keeps-server-checksum-in-sync-test + (testing "the first local block tx after upload keeps server and client checksums equal" + (let [{:keys [conn client-ops-conn parent]} (setup-parent-child) + server-conn (d/conn-from-db @conn)] + (with-datascript-conns conn client-ops-conn + (fn [] + (let [parent-id (:db/id parent) + block-uuid (random-uuid)] + (outliner-core/insert-blocks! conn + [{:block/title "Uploaded graph block" + :block/uuid block-uuid}] + (d/entity @conn parent-id) + {:sibling? false + :keep-uuid? true}) + (let [tx-entries (->> (#'sync-apply/pending-txs test-repo) + (mapv (fn [{:keys [tx outliner-op]}] + {:tx (sqlite-util/write-transit-str + (->> tx + (db-normalize/remove-retract-entity-ref @conn) + distinct + vec)) + :outliner-op outliner-op})))] + (doseq [tx-entry tx-entries] + (#'sync-handler/apply-tx-entry! server-conn tx-entry)) + (is (= (sync-checksum/recompute-checksum @conn) + (sync-checksum/recompute-checksum @server-conn)))))))))) + +(deftest first-page-and-block-after-upload-keeps-server-checksum-in-sync-test + (testing "creating the first page and first block after upload keeps server and client checksums equal" + (let [conn (db-test/create-conn) + client-ops-conn (d/create-conn client-op/schema-in-db) + server-conn (d/conn-from-db @conn) + page-uuid (random-uuid) + block-uuid (random-uuid)] + (with-datascript-conns conn client-ops-conn + (fn [] + (worker-page/create! conn "Fresh Sync Page" :uuid page-uuid) + (outliner-core/insert-blocks! conn + [{:block/title "Fresh graph block" + :block/uuid block-uuid}] + (d/entity @conn [:block/uuid page-uuid]) + {:sibling? false + :keep-uuid? true}) + (let [tx-entries (->> (#'sync-apply/pending-txs test-repo) + (mapv (fn [{:keys [tx outliner-op]}] + {:tx (sqlite-util/write-transit-str + (->> tx + (db-normalize/remove-retract-entity-ref @conn) + distinct + vec)) + :outliner-op outliner-op})))] + (doseq [tx-entry tx-entries] + (#'sync-handler/apply-tx-entry! server-conn tx-entry)) + (is (= (sync-checksum/recompute-checksum @conn) + (sync-checksum/recompute-checksum @server-conn))))))))) + +(deftest snapshot-roundtrip-first-page-and-block-after-upload-keeps-server-checksum-in-sync-test + (testing "freshly uploaded graph storage roundtrip keeps the first page/block tx in sync" + (let [base-conn (db-test/create-conn) + local-storage (make-storage-sql) + server-storage (make-storage-sql) + local-conn (d/conn-from-datoms (d/datoms @base-conn :eavt) + (d/schema @base-conn) + {:storage (sync-storage/new-sqlite-storage (:sql local-storage))}) + client-ops-conn (d/create-conn client-op/schema-in-db) + _ (#'sync-handler/import-snapshot-rows! (:sql server-storage) "kvs" (kvs-rows (:state local-storage))) + server-conn (sync-storage/open-conn (:sql server-storage)) + page-uuid (random-uuid) + block-uuid (random-uuid) + server-self #js {:sql (:sql server-storage) + :conn server-conn + :schema-ready true}] + (with-datascript-conns local-conn client-ops-conn + (fn [] + (worker-page/create! local-conn "Fresh Sync Page" :uuid page-uuid) + (outliner-core/insert-blocks! local-conn + [{:block/title "Fresh graph block" + :block/uuid block-uuid}] + (d/entity @local-conn [:block/uuid page-uuid]) + {:sibling? false + :keep-uuid? true}) + (let [sanitize-tx (fn [tx] + (->> tx + (db-normalize/remove-retract-entity-ref @local-conn) + distinct + vec)) + tx-entries (mapv (fn [{:keys [tx outliner-op]}] + {:tx (sqlite-util/write-transit-str (sanitize-tx tx)) + :outliner-op outliner-op}) + (#'sync-apply/pending-txs test-repo)) + response (with-redefs [ws/broadcast! (fn [& _] nil)] + (sync-handler/handle-tx-batch! server-self nil tx-entries 0))] + (is (= "tx/batch/ok" (:type response))) + (is (= (sync-checksum/recompute-checksum @local-conn) + (sync-checksum/recompute-checksum @server-conn))))))))) (deftest reaction-add-enqueues-pending-sync-tx-test (testing "adding a reaction should enqueue tx for db-sync" @@ -507,10 +818,16 @@ (fn [] (outliner-op/apply-ops! conn [[:toggle-reaction [(:block/uuid parent) "+1" nil]]] - {}) - (let [pending (#'db-sync/pending-txs test-repo) + local-tx-meta) + (let [pending (#'sync-apply/pending-txs test-repo) + raw-pending (->> (d/datoms @client-ops-conn :avet :db-sync/created-at) + (map (fn [datom] (d/entity @client-ops-conn (:e datom))))) txs (mapcat :tx pending)] (is (seq pending)) + (is (= :toggle-reaction (:db-sync/outliner-op (first raw-pending)))) + (is (= :toggle-reaction (:outliner-op (first pending)))) + (is (= [[:transact nil]] + (:forward-outliner-ops (first pending)))) (is (some (fn [tx] (and (vector? tx) (= :db/add (first tx)) @@ -518,6 +835,1484 @@ (= "+1" (nth tx 3 nil)))) txs)))))))) +(deftest rename-page-enqueues-canonical-save-block-pending-op-test + (testing "rename-page is persisted as canonical save-block op" + (let [{:keys [conn client-ops-conn]} (setup-parent-child) + page-uuid (random-uuid)] + (with-datascript-conns conn client-ops-conn + (fn [] + (worker-page/create! conn "Rename Me" :uuid page-uuid) + (outliner-op/apply-ops! conn + [[:rename-page [page-uuid "Renamed"]]] + local-tx-meta) + (let [{:keys [forward-outliner-ops]} (last (#'sync-apply/pending-txs test-repo))] + (is (= :save-block (ffirst forward-outliner-ops))) + (is (= {:block/uuid page-uuid + :block/title "Renamed"} + (first (second (first forward-outliner-ops))))))))))) + +(deftest move-blocks-up-down-enqueues-canonical-move-blocks-pending-op-test + (testing "move-blocks-up-down is persisted as semantic move-blocks-up-down op" + (let [{:keys [conn client-ops-conn child2]} (setup-parent-child)] + (with-datascript-conns conn client-ops-conn + (fn [] + (outliner-op/apply-ops! conn + [[:move-blocks-up-down [[(:db/id child2)] true]]] + local-tx-meta) + (let [{:keys [forward-outliner-ops]} (first (#'sync-apply/pending-txs test-repo)) + [op [ids up?]] (first forward-outliner-ops)] + (is (= :move-blocks-up-down op)) + (is (seq ids)) + (is (= true up?)))))))) + +(deftest indent-outdent-enqueues-canonical-move-blocks-pending-op-test + (testing "indent-outdent-blocks is persisted as canonical move-blocks op" + (let [{:keys [conn client-ops-conn child2]} (setup-parent-child)] + (with-datascript-conns conn client-ops-conn + (fn [] + (outliner-op/apply-ops! conn + [[:indent-outdent-blocks [[(:db/id child2)] true {}]]] + local-tx-meta) + (let [{:keys [forward-outliner-ops]} (first (#'sync-apply/pending-txs test-repo)) + [_ [_ target-id opts]] (first forward-outliner-ops)] + (is (= :move-blocks (ffirst forward-outliner-ops))) + (is (some? target-id)) + (is (contains? opts :sibling?)) + (is (nil? (:source-op opts))))))))) + +(deftest indent-outdent-direct-outdent-last-child-builds-forward-and-inverse-move-history-test + (testing "direct outdent on last child builds concrete move forward/inverse ops with ui outliner-op metadata" + (let [{:keys [conn client-ops-conn parent child2 child3]} (setup-parent-child) + tx-meta (assoc local-tx-meta :outliner-op :move-blocks)] + (with-datascript-conns conn client-ops-conn + (fn [] + (outliner-op/apply-ops! conn + [[:indent-outdent-blocks [[(:db/id child3)] false {:parent-original nil + :logical-outdenting? nil}]]] + tx-meta) + (let [source-row (first (#'sync-apply/pending-txs test-repo)) + forward-ops (:forward-outliner-ops source-row) + inverse-ops (:inverse-outliner-ops source-row)] + (is (= :move-blocks (ffirst forward-ops))) + (is (= [[:block/uuid (:block/uuid child3)]] + (get-in forward-ops [0 1 0]))) + (is (= [:block/uuid (:block/uuid parent)] + (get-in forward-ops [0 1 1]))) + (is (= true (get-in forward-ops [0 1 2 :sibling?]))) + (is (= :move-blocks (ffirst inverse-ops))) + (is (= [[:block/uuid (:block/uuid child3)]] + (get-in inverse-ops [0 1 0]))) + (is (= [:block/uuid (:block/uuid child2)] + (get-in inverse-ops [0 1 1]))) + (is (= true (get-in inverse-ops [0 1 2 :sibling?]))))))))) + +(deftest indent-outdent-direct-outdent-with-right-sibling-persists-semantic-move-history-test + (testing "direct outdent with right siblings persists concrete semantic move forward/inverse ops" + (let [{:keys [conn client-ops-conn parent child1 child2]} (setup-parent-child) + tx-meta (assoc local-tx-meta :outliner-op :move-blocks)] + (with-datascript-conns conn client-ops-conn + (fn [] + (outliner-op/apply-ops! conn + [[:indent-outdent-blocks [[(:db/id child2)] false {:parent-original nil + :logical-outdenting? nil}]]] + tx-meta) + (let [source-row (first (#'sync-apply/pending-txs test-repo)) + forward-ops (:forward-outliner-ops source-row) + inverse-ops (:inverse-outliner-ops source-row)] + (is (= :move-blocks (ffirst forward-ops))) + (is (= [[:block/uuid (:block/uuid child2)]] + (get-in forward-ops [0 1 0]))) + (is (= [:block/uuid (:block/uuid parent)] + (get-in forward-ops [0 1 1]))) + (is (= true (get-in forward-ops [0 1 2 :sibling?]))) + (is (= :move-blocks (ffirst inverse-ops))) + (is (= [[:block/uuid (:block/uuid child2)]] + (get-in inverse-ops [0 1 0]))) + (is (= [:block/uuid (:block/uuid child1)] + (get-in inverse-ops [0 1 1]))) + (is (= true (get-in inverse-ops [0 1 2 :sibling?]))))))))) + +(deftest indent-outdent-direct-outdent-undo-restores-right-sibling-parent-test + (testing "undo after direct outdent restores right sibling parent to original parent" + (let [{:keys [conn client-ops-conn parent child2 child3]} (setup-parent-child) + parent-uuid (:block/uuid parent) + child2-uuid (:block/uuid child2) + child3-uuid (:block/uuid child3)] + (with-datascript-conns conn client-ops-conn + (fn [] + (outliner-op/apply-ops! conn + [[:indent-outdent-blocks [[(:db/id child2)] false {:parent-original nil + :logical-outdenting? nil}]]] + local-tx-meta) + (let [source-row (first (#'sync-apply/pending-txs test-repo)) + source-tx-id (:tx-id source-row) + child3-after-outdent (d/entity @conn [:block/uuid child3-uuid])] + (is (= child2-uuid + (:block/uuid (:block/parent child3-after-outdent)))) + (let [undo-result (#'sync-apply/apply-history-action! test-repo source-tx-id true {}) + child2-after-undo (d/entity @conn [:block/uuid child2-uuid]) + child3-after-undo (d/entity @conn [:block/uuid child3-uuid])] + (is (= true (:applied? undo-result))) + (is (= parent-uuid + (:block/uuid (:block/parent child2-after-undo)))) + (is (= parent-uuid + (:block/uuid (:block/parent child3-after-undo))))))))))) + +(deftest indent-outdent-undo-enqueues-concrete-move-blocks-history-test + (testing "indent-outdent outdent-path persists concrete semantic move history and undo/redo replays without invalid entities" + (let [{:keys [conn client-ops-conn child2]} (setup-parent-child) + prev-invalid-callback @ldb/*transact-invalid-callback + invalid-payload* (atom nil)] + (with-datascript-conns conn client-ops-conn + (fn [] + (reset! ldb/*transact-invalid-callback + (fn [tx-report errors] + (reset! invalid-payload* {:tx-meta (:tx-meta tx-report) + :errors errors}))) + (try + (outliner-op/apply-ops! conn + [[:indent-outdent-blocks [[(:db/id child2)] false {:parent-original nil + :logical-outdenting? nil}]]] + local-tx-meta) + (let [source-row (first (#'sync-apply/pending-txs test-repo)) + source-tx-id (:tx-id source-row) + undo-result (#'sync-apply/apply-history-action! test-repo source-tx-id true {}) + redo-result (#'sync-apply/apply-history-action! test-repo source-tx-id false {})] + (is (= :move-blocks (ffirst (:forward-outliner-ops source-row)))) + (is (= true (:applied? undo-result))) + (is (= true (:applied? redo-result))) + (is (nil? @invalid-payload*)) + (is (= "child 2" (:block/title (d/entity @conn (:db/id child2)))))) + (finally + (reset! ldb/*transact-invalid-callback prev-invalid-callback)))))))) + +(deftest enqueue-local-tx-canonicalizes-batch-import-to-transact-test + (testing "batch-import-edn local tx persists as canonical transact op" + (let [{:keys [conn client-ops-conn]} (setup-parent-child) + tx-report (d/with @conn + [{:block/uuid (random-uuid) + :block/title "imported" + :block/tags :logseq.class/Page + :block/created-at 1760000000000 + :block/updated-at 1760000000000}] + (assoc local-tx-meta :outliner-op :batch-import-edn))] + (with-datascript-conns conn client-ops-conn + (fn [] + (db-sync/enqueue-local-tx! test-repo tx-report) + (let [{:keys [forward-outliner-ops]} (first (#'sync-apply/pending-txs test-repo))] + (is (= [[:transact nil]] forward-outliner-ops)))))))) + +(deftest enqueue-local-tx-preserves-existing-tx-id-test + (testing "local tx persistence reuses tx-id already attached to tx-meta" + (let [{:keys [conn client-ops-conn child1]} (setup-parent-child) + tx-id (random-uuid) + tx-report (d/with @conn + [[:db/add (:db/id child1) :block/title "stable tx id"]] + (assoc local-tx-meta + :db-sync/tx-id tx-id + :outliner-op :save-block))] + (with-datascript-conns conn client-ops-conn + (fn [] + (db-sync/enqueue-local-tx! test-repo tx-report) + (let [{persisted-tx-id :tx-id} (first (#'sync-apply/pending-txs test-repo))] + (is (= tx-id persisted-tx-id)))))))) + +(deftest apply-history-action-does-not-reuse-original-tx-id-test + (testing "undo/redo history actions should not overwrite the original pending tx row" + (let [{:keys [conn client-ops-conn child1]} (setup-parent-child) + child-uuid (:block/uuid child1)] + (with-datascript-conns conn client-ops-conn + (fn [] + (outliner-op/apply-ops! conn + [[:save-block [{:block/uuid child-uuid + :block/title "hello"} nil]]] + local-tx-meta) + (let [{:keys [tx-id]} (first (#'sync-apply/pending-txs test-repo))] + (let [{:keys [applied? history-tx-id]} (#'sync-apply/apply-history-action! test-repo + tx-id + true + {:db-sync/tx-id tx-id})] + (is (= true applied?)) + (is (uuid? history-tx-id)) + (is (not= tx-id history-tx-id))) + (let [pending (#'sync-apply/pending-txs test-repo)] + (is (= 2 (count pending))) + (is (= 2 (count (distinct (map :tx-id pending))))) + (is (= "hello" + (get-in (#'sync-apply/pending-tx-by-id test-repo tx-id) + [:forward-outliner-ops 0 1 0 :block/title])))))))))) + +(deftest apply-history-action-preserves-source-forward-inverse-ops-test + (testing "undo/redo history actions should preserve source forward/inverse ops and create new tx rows" + (let [{:keys [conn client-ops-conn child1]} (setup-parent-child) + child-uuid (:block/uuid child1)] + (with-datascript-conns conn client-ops-conn + (fn [] + (outliner-op/apply-ops! conn + [[:save-block [{:block/uuid child-uuid + :block/title "hello"} nil]]] + local-tx-meta) + (let [{source-tx-id :tx-id} (first (#'sync-apply/pending-txs test-repo))] + (let [{undo-applied? :applied? + undo-history-tx-id :history-tx-id} + (#'sync-apply/apply-history-action! test-repo + source-tx-id + true + {})] + (is (= true undo-applied?)) + (is (uuid? undo-history-tx-id)) + (is (not= source-tx-id undo-history-tx-id))) + (let [source-pending (#'sync-apply/pending-tx-by-id test-repo source-tx-id) + pending-after-undo (#'sync-apply/pending-txs test-repo) + undo-pending (first (filter #(not= source-tx-id (:tx-id %)) pending-after-undo))] + (is (= 2 (count pending-after-undo))) + (is (some? undo-pending)) + (is (= "hello" + (get-in source-pending [:forward-outliner-ops 0 1 0 :block/title]))) + (is (= "child 1" + (get-in source-pending [:inverse-outliner-ops 0 1 0 :block/title]))) + (is (= "child 1" + (get-in undo-pending [:forward-outliner-ops 0 1 0 :block/title]))) + (is (= "hello" + (get-in undo-pending [:inverse-outliner-ops 0 1 0 :block/title])))) + (let [{redo-applied? :applied? + redo-history-tx-id :history-tx-id} + (#'sync-apply/apply-history-action! test-repo + source-tx-id + false + {})] + (is (= true redo-applied?)) + (is (uuid? redo-history-tx-id)) + (is (not= source-tx-id redo-history-tx-id))) + (let [source-pending (#'sync-apply/pending-tx-by-id test-repo source-tx-id) + pending-after-redo (#'sync-apply/pending-txs test-repo) + new-tx-ids (set (map :tx-id pending-after-redo))] + (is (= 3 (count pending-after-redo))) + (is (= 3 (count new-tx-ids))) + (is (contains? new-tx-ids source-tx-id)) + (is (= "hello" + (get-in source-pending [:forward-outliner-ops 0 1 0 :block/title]))) + (is (= "child 1" + (get-in source-pending [:inverse-outliner-ops 0 1 0 :block/title])))))))))) + +(deftest apply-history-action-semantic-op-must-not-fallback-to-raw-tx-test + (testing "semantic history action should not fallback to raw tx replay" + (let [{:keys [conn client-ops-conn child1]} (setup-parent-child) + tx-id (random-uuid) + child-uuid (:block/uuid child1) + before-title (:block/title (d/entity @conn (:db/id child1))) + missing-uuid (random-uuid) + raw-title "raw fallback title" + tx-data [[:db/add [:block/uuid child-uuid] :block/title raw-title]]] + (with-datascript-conns conn client-ops-conn + (fn [] + (ldb/transact! client-ops-conn + [{:db-sync/tx-id tx-id + :db-sync/pending? true + :db-sync/created-at (.now js/Date) + :db-sync/outliner-op :save-block + :db-sync/forward-outliner-ops [[:save-block [{:block/uuid missing-uuid + :block/title "broken semantic"} {}]]] + :db-sync/normalized-tx-data tx-data + :db-sync/reversed-tx-data []}]) + (is (thrown? js/Error + (#'sync-apply/apply-history-action! test-repo tx-id false {}))) + (is (= before-title + (:block/title (d/entity @conn [:block/uuid child-uuid]))))))))) + +(deftest apply-history-action-redo-invalid-insert-conflict-skips-fail-fast-test + (testing "redo conflict on stale insert target should throw skippable error without fail-fast logger" + (let [{:keys [conn client-ops-conn]} (setup-parent-child) + tx-id (random-uuid) + missing-parent-uuid (random-uuid) + inserted-uuid (random-uuid)] + (with-datascript-conns conn client-ops-conn + (fn [] + (ldb/transact! client-ops-conn + [{:db-sync/tx-id tx-id + :db-sync/pending? true + :db-sync/created-at (.now js/Date) + :db-sync/outliner-op :insert-blocks + :db-sync/forward-outliner-ops [[:insert-blocks [[{:block/uuid inserted-uuid + :block/title "" + :block/parent [:block/uuid missing-parent-uuid]} + [:block/uuid missing-parent-uuid] + {:sibling? false + :keep-uuid? true}]]]] + :db-sync/normalized-tx-data [] + :db-sync/reversed-tx-data []}]) + (with-redefs [sync-util/fail-fast (fn [_tag data] + (throw (ex-info "fail-fast-called" data)))] + (try + (#'sync-apply/apply-history-action! test-repo tx-id false {}) + (is false "expected redo conflict to throw") + (catch :default e + (is (not= "fail-fast-called" (ex-message e))) + (is (= :invalid-history-action-ops + (:reason (ex-data e)))))))))))) + +(deftest apply-history-action-save-block-ignores-stale-db-id-when-uuid-exists-test + (testing "semantic save-block replay should resolve by uuid and ignore stale db/id" + (let [{:keys [conn client-ops-conn child1]} (setup-parent-child) + tx-id (random-uuid) + child-uuid (:block/uuid child1) + stale-db-id 99999999 + new-title "semantic replay with stale db id"] + (with-datascript-conns conn client-ops-conn + (fn [] + (ldb/transact! client-ops-conn + [{:db-sync/tx-id tx-id + :db-sync/pending? true + :db-sync/created-at (.now js/Date) + :db-sync/outliner-op :save-block + :db-sync/forward-outliner-ops [[:save-block [{:db/id stale-db-id + :block/uuid child-uuid + :block/title new-title} + {}]]] + :db-sync/normalized-tx-data [] + :db-sync/reversed-tx-data []}]) + (let [result (#'sync-apply/apply-history-action! test-repo tx-id false {})] + (is (= true (:applied? result))) + (is (= :semantic-ops (:source result))) + (is (= new-title + (:block/title (d/entity @conn [:block/uuid child-uuid])))))))))) + +(deftest reverse-local-txs-uses-reversed-tx-data-test + (testing "rebase reverse uses reversed tx-data even when semantic inverse ops are missing" + (let [{:keys [conn client-ops-conn child1]} (setup-parent-child) + tx-id (random-uuid) + child-id (:db/id child1) + child-uuid (:block/uuid child1) + local-tx {:tx-id tx-id + :outliner-op :save-block + :forward-outliner-ops [[:save-block [{:block/uuid (random-uuid) + :block/title "value"} {}]]] + :inverse-outliner-ops nil + :reversed-tx [[:db/add child-id :block/title "raw reverse"]]}] + (with-datascript-conns conn client-ops-conn + (fn [] + (let [reports (#'sync-apply/reverse-local-txs! conn [local-tx])] + (is (= 1 (count reports))) + (is (= "raw reverse" + (:block/title (d/entity @conn [:block/uuid child-uuid])))))))))) + +(deftest enqueue-local-tx-keeps-mixed-semantic-forward-outliner-ops-test + (testing "mixed semantic outliner ops stay semantic and preserve op ordering" + (let [{:keys [conn client-ops-conn child2]} (setup-parent-child) + block-id (:db/id child2) + block-uuid (:block/uuid child2) + tx-report (d/with @conn + [[:db/add block-id :block/title "mixed fallback"]] + (assoc local-tx-meta + :outliner-op :save-block + :outliner-ops [[:save-block [{:block/uuid block-uuid + :block/title "mixed fallback"} {}]] + [:indent-outdent-blocks [[block-id] + false + {:parent-original nil + :logical-outdenting? nil}]]]))] + (with-datascript-conns conn client-ops-conn + (fn [] + (db-sync/enqueue-local-tx! test-repo tx-report) + (let [{:keys [forward-outliner-ops]} (first (#'sync-apply/pending-txs test-repo))] + (is (= :save-block (ffirst forward-outliner-ops))) + (is (= :indent-outdent-blocks (first (second forward-outliner-ops)))) + (is (= [[:block/uuid block-uuid]] + (get-in forward-outliner-ops [1 1 0]))))))))) + +(deftest apply-history-action-redo-fails-fast-on-transact-placeholder-test + (testing "redo fails fast when semantic ops contain transact placeholder to avoid silent partial replay" + (let [{:keys [conn client-ops-conn child1]} (setup-parent-child) + tx-id (random-uuid) + child-uuid (:block/uuid child1) + before-title (:block/title (d/entity @conn (:db/id child1))) + semantic-title "semantic replay value" + raw-title "raw replay value" + forward-ops [[:save-block [{:block/uuid child-uuid + :block/title semantic-title} {}]] + [:transact nil]] + tx-data [[:db/add [:block/uuid child-uuid] :block/title raw-title]] + reversed-tx-data [[:db/add [:block/uuid child-uuid] :block/title before-title]]] + (with-datascript-conns conn client-ops-conn + (fn [] + (ldb/transact! client-ops-conn + [{:db-sync/tx-id tx-id + :db-sync/pending? true + :db-sync/created-at (.now js/Date) + :db-sync/outliner-op :save-block + :db-sync/forward-outliner-ops forward-ops + :db-sync/normalized-tx-data tx-data + :db-sync/reversed-tx-data reversed-tx-data}]) + (is (thrown? js/Error + (#'sync-apply/apply-history-action! test-repo tx-id false {}))) + (is (= before-title + (:block/title (d/entity @conn [:block/uuid child-uuid]))))))))) + +(deftest enqueue-local-tx-allows-explicit-transact-placeholder-forward-op-test + (testing "enqueue-local-tx should preserve explicit transact placeholder forward ops" + (let [{:keys [conn client-ops-conn child1]} (setup-parent-child) + child-id (:db/id child1) + tx-id (random-uuid) + tx-report (d/with @conn + [[:db/add child-id :block/title "placeholder replay"]] + (assoc local-tx-meta + :db-sync/tx-id tx-id + :db-sync/forward-outliner-ops [[:transact nil]] + :db-sync/inverse-outliner-ops nil + :outliner-op :toggle-reaction))] + (with-datascript-conns conn client-ops-conn + (fn [] + (db-sync/enqueue-local-tx! test-repo tx-report) + (let [pending (first (#'sync-apply/pending-txs test-repo))] + (is (= tx-id (:tx-id pending))) + (is (= [[:transact nil]] + (:forward-outliner-ops pending))) + (is (nil? (:inverse-outliner-ops pending))))))))) + +(deftest apply-history-action-undo-delete-blocks-noops-when-target-missing-test + (testing "undo delete-blocks should no-op when the target block is already missing" + (let [{:keys [conn client-ops-conn child1]} (setup-parent-child) + tx-id (random-uuid) + child-uuid (:block/uuid child1) + missing-uuid (random-uuid)] + (with-datascript-conns conn client-ops-conn + (fn [] + (ldb/transact! client-ops-conn + [{:db-sync/tx-id tx-id + :db-sync/pending? true + :db-sync/created-at (.now js/Date) + :db-sync/outliner-op :delete-blocks + :db-sync/forward-outliner-ops + [[:save-block [{:block/uuid child-uuid + :block/title "semantic source"} nil]]] + :db-sync/inverse-outliner-ops + [[:delete-blocks [[[:block/uuid missing-uuid]] {}]]] + :db-sync/normalized-tx-data [] + :db-sync/reversed-tx-data []}]) + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo tx-id true {})))) + (is (some? (d/entity @conn [:block/uuid child-uuid])))))))) + +(deftest enqueue-local-tx-persists-semantic-undo-ops-test + (testing "undo local tx persists explicit semantic forward and inverse ops" + (let [{:keys [conn client-ops-conn child1]} (setup-parent-child) + tx-id (random-uuid) + forward-ops [[:save-block [{:block/uuid (:block/uuid child1) + :block/title "undo value"} {}]]] + inverse-ops [[:save-block [{:block/uuid (:block/uuid child1) + :block/title "child 1"} {}]]] + tx-report (d/with @conn + [[:db/add (:db/id child1) :block/title "undo value"]] + (assoc local-tx-meta + :db-sync/tx-id tx-id + :db-sync/forward-outliner-ops forward-ops + :db-sync/inverse-outliner-ops inverse-ops + :outliner-op :save-block + :undo? true + :gen-undo-ops? false))] + (with-datascript-conns conn client-ops-conn + (fn [] + (db-sync/enqueue-local-tx! test-repo tx-report) + (let [pending (first (#'sync-apply/pending-txs test-repo)) + raw-pending (->> (d/datoms @client-ops-conn :avet :db-sync/created-at) + (map (fn [datom] (d/entity @client-ops-conn (:e datom)))) + first)] + (is (= tx-id (:tx-id pending))) + (is (= forward-ops (:forward-outliner-ops pending))) + (is (= forward-ops (:db-sync/forward-outliner-ops raw-pending))) + (is (= inverse-ops (:db-sync/inverse-outliner-ops raw-pending))))))))) + +(deftest direct-outliner-page-delete-persists-delete-page-outliner-op-test + (testing "direct outliner-page/delete! still persists singleton delete-page forward-outliner-ops" + (let [conn (db-test/create-conn-with-blocks + {:pages-and-blocks [{:page {:block/title "Delete Me"}}]}) + client-ops-conn (d/create-conn client-op/schema-in-db) + page (db-test/find-page-by-title @conn "Delete Me")] + (with-datascript-conns conn client-ops-conn + (fn [] + (outliner-page/delete! conn (:block/uuid page) {}) + (let [{:keys [forward-outliner-ops inverse-outliner-ops]} (first (#'sync-apply/pending-txs test-repo))] + (is (= :delete-page (ffirst forward-outliner-ops))) + (is (= (:block/uuid page) + (get-in forward-outliner-ops [0 1 0]))) + (is (seq inverse-outliner-ops)))))))) + +(deftest delete-page-rewrites-node-refs-and-semantic-undo-redo-test + (testing "moving a page to recycle rewrites node refs and semantic undo/redo restores and reapplies them" + (let [conn (db-test/create-conn-with-blocks + {:pages-and-blocks [{:page {:block/title "Delete Me"}} + {:page {:block/title "Ref Page"} + :blocks [{:block/title "seed"}]}]}) + client-ops-conn (d/create-conn client-op/schema-in-db) + page (db-test/find-page-by-title @conn "Delete Me") + page-id (:db/id page) + page-uuid (:block/uuid page) + ref-block (db-test/find-block-by-content @conn "seed") + ref-block-uuid (:block/uuid ref-block) + node-ref-content (str "ref " (page-ref/->page-ref page-uuid)) + title-content "ref Delete Me"] + (with-datascript-conns conn client-ops-conn + (fn [] + (ldb/transact! conn [{:db/id (:db/id ref-block) + :block/title node-ref-content + :block/refs #{page-id}}]) + (outliner-page/delete! conn page-uuid {}) + (let [{:keys [tx-id forward-outliner-ops inverse-outliner-ops]} + (->> (#'sync-apply/pending-txs test-repo) + (filter #(= :delete-page (:outliner-op %))) + last)] + (is (= :delete-page (ffirst forward-outliner-ops))) + (is (some (fn [[op [block]]] + (and (= :save-block op) + (= ref-block-uuid (:block/uuid block)) + (= title-content (:block/title block)))) + forward-outliner-ops)) + (is (some (fn [[op [target-page-uuid]]] + (and (= :restore-recycled op) + (= page-uuid target-page-uuid))) + inverse-outliner-ops)) + (is (some (fn [[op [block]]] + (and (= :save-block op) + (= ref-block-uuid (:block/uuid block)) + (= node-ref-content (:block/title block)))) + inverse-outliner-ops)) + (is (= title-content + (:block/raw-title (d/entity @conn [:block/uuid ref-block-uuid])))) + (is (not (contains? (set (map :db/id (:block/refs (d/entity @conn [:block/uuid ref-block-uuid])))) + page-id))) + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo tx-id true {})))) + (is (= node-ref-content + (:block/raw-title (d/entity @conn [:block/uuid ref-block-uuid])))) + (is (contains? (set (map :db/id (:block/refs (d/entity @conn [:block/uuid ref-block-uuid])))) + page-id)) + (is (nil? (:logseq.property/deleted-at (d/entity @conn [:block/uuid page-uuid])))) + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo tx-id false {})))) + (is (= title-content + (:block/raw-title (d/entity @conn [:block/uuid ref-block-uuid])))) + (is (not (contains? (set (map :db/id (:block/refs (d/entity @conn [:block/uuid ref-block-uuid])))) + page-id))) + (is (integer? (:logseq.property/deleted-at (d/entity @conn [:block/uuid page-uuid])))))))))) + +(deftest direct-outliner-property-set-persists-set-block-property-outliner-op-test + (testing "direct outliner-property/set-block-property! still persists singleton set-block-property forward-outliner-ops" + (let [graph {:properties {:p2 {:logseq.property/type :default}} + :pages-and-blocks + [{:page {:block/title "page 1"} + :blocks [{:block/title "local object"}]}]} + conn (db-test/create-conn-with-blocks graph) + client-ops-conn (d/create-conn client-op/schema-in-db) + block (db-test/find-block-by-content @conn "local object") + property-id :user.property/p2] + (with-datascript-conns conn client-ops-conn + (fn [] + (outliner-property/set-block-property! conn + [:block/uuid (:block/uuid block)] + property-id + "local value") + (let [pending (#'sync-apply/pending-txs test-repo) + property-tx (some (fn [{:keys [forward-outliner-ops]}] + (when (= :set-block-property (ffirst forward-outliner-ops)) + forward-outliner-ops)) + pending)] + (is (seq pending)) + (is (every? (comp seq :forward-outliner-ops) pending)) + (is (= [:set-block-property + [[:block/uuid (:block/uuid block)] property-id "local value"]] + (first property-tx))))))))) + +(deftest canonical-set-block-property-rewrites-ref-values-to-stable-refs-test + (testing "ref-valued set-block-property ops should persist stable entity refs instead of numeric ids" + (let [graph {:properties {:x7 {:logseq.property/type :page + :db/cardinality :db.cardinality/many}} + :pages-and-blocks + [{:page {:block/title "page 1"} + :blocks [{:block/title "local object"}]}]} + conn (db-test/create-conn-with-blocks graph) + client-ops-conn (d/create-conn client-op/schema-in-db) + block (db-test/find-block-by-content @conn "local object") + property-id :user.property/x7] + (with-datascript-conns conn client-ops-conn + (fn [] + (outliner-page/create! conn "Page y" {}) + (let [page-y (db-test/find-page-by-title @conn "Page y")] + (outliner-property/set-block-property! conn + [:block/uuid (:block/uuid block)] + property-id + (:db/id page-y)) + (let [pending (#'sync-apply/pending-txs test-repo) + property-tx (some (fn [{:keys [forward-outliner-ops]}] + (when (= :set-block-property (ffirst forward-outliner-ops)) + forward-outliner-ops)) + pending)] + (is (= [:set-block-property + [[:block/uuid (:block/uuid block)] + property-id + [:block/uuid (:block/uuid page-y)]]] + (first property-tx)))))))))) + +(deftest canonical-batch-set-property-rewrites-ref-values-to-stable-refs-test + (testing "ref-valued batch-set-property ops should persist stable entity refs instead of numeric ids" + (let [graph {:properties {:x7 {:logseq.property/type :page + :db/cardinality :db.cardinality/many}} + :pages-and-blocks + [{:page {:block/title "page 1"} + :blocks [{:block/title "local object 1"} + {:block/title "local object 2"}]}]} + conn (db-test/create-conn-with-blocks graph) + client-ops-conn (d/create-conn client-op/schema-in-db) + block-1 (db-test/find-block-by-content @conn "local object 1") + block-2 (db-test/find-block-by-content @conn "local object 2") + property-id :user.property/x7] + (with-datascript-conns conn client-ops-conn + (fn [] + (outliner-page/create! conn "Page y" {}) + (let [page-y (db-test/find-page-by-title @conn "Page y")] + (outliner-op/apply-ops! conn + [[:batch-set-property [[(:db/id block-1) + (:db/id block-2)] + property-id + (:db/id page-y) + {}]]] + {}) + (let [pending (#'sync-apply/pending-txs test-repo) + property-tx (some (fn [{:keys [forward-outliner-ops]}] + (when (= :batch-set-property (ffirst forward-outliner-ops)) + forward-outliner-ops)) + pending)] + (is (= [:batch-set-property + [[[:block/uuid (:block/uuid block-1)] + [:block/uuid (:block/uuid block-2)]] + property-id + [:block/uuid (:block/uuid page-y)] + {}]] + (first property-tx)))))))))) + +(deftest replay-batch-set-property-converts-lookup-ref-to-eid-when-entity-id-test + (testing "replay should resolve stable lookup refs back to entity ids for batch-set-property when :entity-id? is true" + (let [graph {:properties {:x7 {:logseq.property/type :page + :db/cardinality :db.cardinality/many}} + :pages-and-blocks + [{:page {:block/title "page 1"} + :blocks [{:block/title "local object"}]}]} + conn (db-test/create-conn-with-blocks graph) + block (db-test/find-block-by-content @conn "local object") + property-id :user.property/x7] + (outliner-page/create! conn "Page y" {}) + (let [page-y (db-test/find-page-by-title @conn "Page y")] + (is (some? (#'sync-apply/replay-canonical-outliner-op! + conn + [:batch-set-property [[[:block/uuid (:block/uuid block)]] + property-id + [:block/uuid (:block/uuid page-y)] + {:entity-id? true}]]))) + (let [block' (d/entity @conn [:block/uuid (:block/uuid block)])] + (is (= #{"page y"} + (set (map :block/name (:user.property/x7 block')))))))))) + +(deftest replay-batch-set-property-converts-raw-uuid-ids-to-eids-test + (testing "replay should resolve raw uuid block ids for batch-set-property" + (let [graph {:properties {:heading {:db/ident :logseq.property/heading + :logseq.property/type :number + :db/cardinality :db.cardinality/one}} + :pages-and-blocks + [{:page {:block/title "page 1"} + :blocks [{:block/title "local object"}]}]} + conn (db-test/create-conn-with-blocks graph) + block (db-test/find-block-by-content @conn "local object") + block-ref [:block/uuid (:block/uuid block)]] + (is (some? (#'sync-apply/replay-canonical-outliner-op! + conn + [:batch-set-property [[(:block/uuid block)] + :logseq.property/heading + 2 + nil]]))) + (is (= 2 + (:logseq.property/heading (d/entity @conn block-ref))))))) + +(deftest apply-history-action-redo-replays-batch-set-property-with-raw-uuid-ids-test + (testing "redo should replay batch-set-property when semantic op stores raw uuid block ids" + (let [graph {:properties {:heading {:db/ident :logseq.property/heading + :logseq.property/type :number + :db/cardinality :db.cardinality/one}} + :pages-and-blocks + [{:page {:block/title "page 1"} + :blocks [{:block/title "local object"}]}]} + conn (db-test/create-conn-with-blocks graph) + client-ops-conn (d/create-conn client-op/schema-in-db)] + (with-datascript-conns conn client-ops-conn + (fn [] + (let [block (db-test/find-block-by-content @conn "local object") + block-uuid (:block/uuid block) + block-ref [:block/uuid block-uuid] + action-tx-id (random-uuid)] + (ldb/transact! client-ops-conn + [{:db-sync/tx-id action-tx-id + :db-sync/pending? true + :db-sync/forward-outliner-ops + [[:batch-set-property [[block-uuid] + :logseq.property/heading + 2 + nil]]] + :db-sync/inverse-outliner-ops + [[:batch-remove-property [[block-ref] + :logseq.property/heading]]] + :db-sync/normalized-tx-data [] + :db-sync/reversed-tx-data []}]) + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo action-tx-id false {})))) + (is (= 2 + (:logseq.property/heading (d/entity @conn block-ref)))) + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo action-tx-id true {})))) + (is (nil? (:logseq.property/heading (d/entity @conn block-ref)))))))))) + +(deftest replay-set-block-property-converts-lookup-ref-to-eid-test + (testing "replay should resolve stable lookup refs back to entity ids for set-block-property" + (let [graph {:properties {:x7 {:logseq.property/type :page + :db/cardinality :db.cardinality/many}} + :pages-and-blocks + [{:page {:block/title "page 1"} + :blocks [{:block/title "local object"}]}]} + conn (db-test/create-conn-with-blocks graph) + block (db-test/find-block-by-content @conn "local object") + property-id :user.property/x7] + (outliner-page/create! conn "Page y" {}) + (let [page-y (db-test/find-page-by-title @conn "Page y")] + (is (some? (#'sync-apply/replay-canonical-outliner-op! + conn + [:set-block-property [[:block/uuid (:block/uuid block)] + property-id + [:block/uuid (:block/uuid page-y)]]]))) + (let [block' (d/entity @conn [:block/uuid (:block/uuid block)])] + (is (= #{"page y"} + (set (map :block/name (:user.property/x7 block')))))))))) + +(deftest replay-set-block-property-converts-raw-uuid-to-eid-test + (testing "replay should resolve raw block uuid ids for set-block-property" + (let [graph {:classes {:tag1 {}} + :pages-and-blocks + [{:page {:block/title "page 1"} + :blocks [{:block/title "local object"}]}]} + conn (db-test/create-conn-with-blocks graph) + block (db-test/find-block-by-content @conn "local object") + tag-id (:db/id (d/entity @conn :user.class/tag1)) + tag-uuid (:block/uuid (d/entity @conn tag-id))] + (is (some? (#'sync-apply/replay-canonical-outliner-op! + conn + [:set-block-property [(:block/uuid block) + :block/tags + [:block/uuid tag-uuid]]]))) + (let [block' (d/entity @conn [:block/uuid (:block/uuid block)])] + (is (= #{tag-id} + (set (map :db/id (:block/tags block'))))))))) + +(deftest apply-history-action-redo-replays-set-block-tags-with-raw-uuid-id-test + (testing "redo should replay set-block-property with raw block uuid ids for tags" + (let [graph {:classes {:tag1 {}} + :pages-and-blocks + [{:page {:block/title "page 1"} + :blocks [{:block/title "local object"}]}]} + conn (db-test/create-conn-with-blocks graph) + client-ops-conn (d/create-conn client-op/schema-in-db)] + (with-datascript-conns conn client-ops-conn + (fn [] + (let [block (db-test/find-block-by-content @conn "local object") + block-uuid (:block/uuid block) + block-ref [:block/uuid block-uuid] + tag (d/entity @conn :user.class/tag1) + tag-uuid (:block/uuid tag) + action-tx-id (random-uuid)] + (ldb/transact! client-ops-conn + [{:db-sync/tx-id action-tx-id + :db-sync/pending? true + :db-sync/forward-outliner-ops + [[:set-block-property [block-uuid + :block/tags + [:block/uuid tag-uuid]]]] + :db-sync/inverse-outliner-ops + [[:remove-block-property [block-ref :block/tags]]] + :db-sync/normalized-tx-data [] + :db-sync/reversed-tx-data []}]) + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo action-tx-id false {})))) + (is (= #{(:db/id tag)} + (set (map :db/id (:block/tags (d/entity @conn block-ref)))))) + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo action-tx-id true {})))) + (is (empty? (:block/tags (d/entity @conn block-ref)))))))))) + +(deftest apply-history-action-redo-replays-insert-blocks-test + (testing "apply-history-action should redo an inserted block from semantic history" + (let [{:keys [conn client-ops-conn parent]} (setup-parent-child) + requested-uuid (random-uuid)] + (with-datascript-conns conn client-ops-conn + (fn [] + (outliner-op/apply-ops! conn + [[:insert-blocks [[{:block/title "history insert" + :block/uuid requested-uuid}] + (:db/id parent) + {:sibling? false}]]] + local-tx-meta) + (let [pending (first (#'sync-apply/pending-txs test-repo)) + inserted (db-test/find-block-by-content @conn "history insert") + inserted-uuid (:block/uuid inserted) + {:keys [tx-id]} pending] + (is (= inserted-uuid + (get-in pending [:forward-outliner-ops 0 1 0 0 :block/uuid]))) + (is (= inserted-uuid + (second (first (get-in pending [:inverse-outliner-ops 0 1 0]))))) + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo tx-id true {})))) + (is (nil? (d/entity @conn [:block/uuid inserted-uuid]))) + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo tx-id false {})))) + (let [inserted* (d/entity @conn [:block/uuid inserted-uuid])] + (is (some? inserted*)) + (is (= "history insert" (:block/title inserted*))) + (is (= (:block/uuid parent) + (some-> inserted* :block/parent :block/uuid)))))))))) + +(deftest apply-history-action-redo-replays-save-block-test + (testing "apply-history-action should redo an inline block edit from semantic history" + (let [{:keys [conn client-ops-conn child1]} (setup-parent-child) + child-uuid (:block/uuid child1)] + (with-datascript-conns conn client-ops-conn + (fn [] + (outliner-op/apply-ops! conn + [[:save-block [{:block/uuid child-uuid + :block/title "child 1 inline edit"} {}]]] + local-tx-meta) + (let [{:keys [tx-id]} (first (#'sync-apply/pending-txs test-repo))] + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo tx-id true {})))) + (is (= "child 1" + (:block/title (d/entity @conn [:block/uuid child-uuid])))) + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo tx-id false {})))) + (is (= "child 1 inline edit" + (:block/title (d/entity @conn [:block/uuid child-uuid])))))))))) + +(deftest apply-history-action-redo-replays-save-block-with-late-created-query-ref-test + (testing "redo should replay save-block when referenced query block is created by a later semantic save-block" + (let [conn (db-test/create-conn-with-blocks + {:pages-and-blocks + [{:page {:block/title "page 1"} + :blocks [{:block/title "source"}]}]}) + client-ops-conn (d/create-conn client-op/schema-in-db) + tx-id (random-uuid) + query-block-uuid (random-uuid)] + (with-datascript-conns conn client-ops-conn + (fn [] + (let [source (db-test/find-block-by-content @conn "source") + source-uuid (:block/uuid source) + source-page-uuid (:block/uuid (:block/page source))] + (is (some? (d/entity @conn [:block/uuid source-uuid]))) + (ldb/transact! client-ops-conn + [{:db-sync/tx-id tx-id + :db-sync/pending? true + :db-sync/created-at (.now js/Date) + :db-sync/outliner-op :save-block + :db-sync/forward-outliner-ops + [[:save-block [{:block/uuid source-uuid + :logseq.property/query [:block/uuid query-block-uuid]} + nil]] + [:save-block [{:block/uuid query-block-uuid + :block/title "" + :block/parent [:block/uuid source-page-uuid] + :block/page [:block/uuid source-page-uuid] + :block/order "a0"} + nil]]] + :db-sync/inverse-outliner-ops + [[:remove-block-property [[:block/uuid source-uuid] + :logseq.property/query]] + [:delete-blocks [[[:block/uuid query-block-uuid]] + {}]]] + :db-sync/normalized-tx-data [] + :db-sync/reversed-tx-data []}]) + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo tx-id false {})))) + (let [parent' (d/entity @conn [:block/uuid source-uuid]) + query-block (d/entity @conn [:block/uuid query-block-uuid])] + (is (some? query-block)) + (is (= query-block-uuid + (some-> parent' :logseq.property/query :block/uuid)))))))))) + +(deftest replay-save-block-creates-missing-block-when-structure-present-test + (testing "replay save-block should create missing block when parent/page attrs are present" + (let [conn (db-test/create-conn-with-blocks + {:pages-and-blocks + [{:page {:block/title "page 1"} + :blocks [{:block/title "seed"}]}]}) + seed (db-test/find-block-by-content @conn "seed") + page-uuid (:block/uuid (:block/page seed)) + block-uuid (random-uuid)] + (is (some? (#'sync-apply/replay-canonical-outliner-op! + conn + [:save-block [{:block/uuid block-uuid + :block/title "" + :block/parent [:block/uuid page-uuid] + :block/page [:block/uuid page-uuid] + :block/order "a0"} + nil]]))) + (is (some? (d/entity @conn [:block/uuid block-uuid])))))) + +(deftest apply-history-action-redo-replays-status-property-test + (testing "apply-history-action should redo a status property change" + (let [conn (db-test/create-conn-with-blocks + {:pages-and-blocks + [{:page {:block/title "page1"} + :blocks [{:block/title "task" + :build/properties {:status "Todo"}}]}]}) + client-ops-conn (d/create-conn client-op/schema-in-db)] + (with-datascript-conns conn client-ops-conn + (fn [] + (let [task (db-test/find-block-by-content @conn "task") + task-uuid (:block/uuid task)] + (outliner-property/set-block-property! conn + (:db/id task) + :logseq.property/status + "Doing") + (let [{:keys [tx-id]} (first (#'sync-apply/pending-txs test-repo))] + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo tx-id true {})))) + (is (= :logseq.property/status.todo + (some-> (d/entity @conn [:block/uuid task-uuid]) + :logseq.property/status + :db/ident))) + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo tx-id false {})))) + (is (= :logseq.property/status.doing + (some-> (d/entity @conn [:block/uuid task-uuid]) + :logseq.property/status + :db/ident)))))))))) + +(deftest apply-history-action-redo-replays-upsert-property-test + (testing "apply-history-action should undo/redo creating a new property page" + (let [conn (db-test/create-conn-with-blocks + {:pages-and-blocks + [{:page {:block/title "page1"} + :blocks [{:block/title "seed"}]}]}) + client-ops-conn (d/create-conn client-op/schema-in-db) + property-name "custom_prop_x" + property-page-ids (fn [db] + (set (d/q '[:find [?e ...] + :where + [?e :block/tags :logseq.class/Property]] + db)))] + (with-datascript-conns conn client-ops-conn + (fn [] + (let [before-ids (property-page-ids @conn)] + (outliner-op/apply-ops! conn + [[:upsert-property [nil + {:logseq.property/type :default} + {:property-name property-name}]]] + local-tx-meta) + (let [after-ids (property-page-ids @conn) + created-id (first (seq (set/difference after-ids before-ids))) + created-ident (some-> (d/entity @conn created-id) :db/ident) + created-uuid (some-> (d/entity @conn created-id) :block/uuid) + {:keys [tx-id]} (first (#'sync-apply/pending-txs test-repo))] + (is (some? created-id)) + (is (keyword? created-ident)) + (is (uuid? created-uuid)) + (is (some? (d/entity @conn created-id))) + (let [pending (#'sync-apply/pending-tx-by-id test-repo tx-id)] + (is (= :upsert-property + (ffirst (:forward-outliner-ops pending)))) + (is (= created-ident + (get-in pending [:forward-outliner-ops 0 1 0]))) + (is (= :delete-page + (ffirst (:inverse-outliner-ops pending)))) + (is (= created-uuid + (get-in pending [:inverse-outliner-ops 0 1 0])) + (pr-str pending))) + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo tx-id true {})))) + (is (nil? (d/entity @conn created-ident))) + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo tx-id false {})))) + (let [restored (d/entity @conn created-ident)] + (is (some? restored)) + (is (= created-uuid (:block/uuid restored))))))))))) + +(deftest apply-history-action-redo-replays-block-concat-test + (testing "block concat history should undo via reversed tx and redo cleanly" + (let [conn (db-test/create-conn-with-blocks + {:pages-and-blocks + [{:page {:block/title "page1"} + :blocks [{:block/title "hellohello"} + {:block/title "hello"}]}]}) + client-ops-conn (d/create-conn client-op/schema-in-db)] + (with-datascript-conns conn client-ops-conn + (fn [] + (let [left (db-test/find-block-by-content @conn "hellohello") + right (db-test/find-block-by-content @conn "hello") + left-uuid (:block/uuid left) + right-uuid (:block/uuid right)] + (outliner-op/apply-ops! conn + [[:delete-blocks [[(:db/id right)] + {:deleted-by-uuid (random-uuid)}]] + [:save-block [{:block/uuid left-uuid + :block/title "hellohellohello"} nil]]] + local-tx-meta) + (let [{:keys [tx-id]} (first (#'sync-apply/pending-txs test-repo))] + (is (= "hellohellohello" + (:block/title (d/entity @conn [:block/uuid left-uuid])))) + (is (nil? (d/entity @conn [:block/uuid right-uuid]))) + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo tx-id true {})))) + (is (= "hellohello" + (:block/title (d/entity @conn [:block/uuid left-uuid])))) + (is (some? (d/entity @conn [:block/uuid right-uuid]))) + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo tx-id false {})))) + (is (= "hellohellohello" + (:block/title (d/entity @conn [:block/uuid left-uuid])))) + (is (nil? (d/entity @conn [:block/uuid right-uuid])))))))))) + +(deftest apply-history-action-redo-replays-save-then-insert-test + (testing "apply-history-action should redo a combined save-block then insert-block history action" + (let [{:keys [conn client-ops-conn child1]} (setup-parent-child) + child-uuid (:block/uuid child1) + child-id (:db/id child1) + inserted-uuid (random-uuid)] + (with-datascript-conns conn client-ops-conn + (fn [] + (outliner-op/apply-ops! conn + [[:save-block [{:block/uuid child-uuid + :block/title "child 1 edited"} {}]] + [:insert-blocks [[{:block/title "inserted after save" + :block/uuid inserted-uuid}] + child-id + {:sibling? true}]]] + local-tx-meta) + (let [{:keys [tx-id]} (first (#'sync-apply/pending-txs test-repo)) + inserted-id (d/q '[:find ?e . + :in $ ?title + :where + [?e :block/title ?title]] + @conn + "inserted after save") + inserted (d/entity @conn inserted-id) + inserted-uuid' (:block/uuid inserted)] + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo tx-id true {})))) + (is (= "child 1" + (:block/title (d/entity @conn [:block/uuid child-uuid])))) + (is (nil? (d/entity @conn [:block/uuid inserted-uuid']))) + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo tx-id false {})))) + (is (= "child 1 edited" + (:block/title (d/entity @conn [:block/uuid child-uuid])))) + (is (= "inserted after save" + (:block/title (d/entity @conn [:block/uuid inserted-uuid'])))))))))) + +(deftest apply-history-action-redo-replays-paste-into-empty-target-test + (testing "redo should replay paste into an empty target block without invalid rebase op" + (let [conn (db-test/create-conn-with-blocks + {:pages-and-blocks + [{:page {:block/title "page 1"} + :blocks [{:block/title "first"} + {:block/title ""}]}]}) + client-ops-conn (d/create-conn client-op/schema-in-db) + empty-target (db-test/find-block-by-content @conn "") + empty-target-uuid (:block/uuid empty-target) + parent-uuid (random-uuid) + copied-blocks [{:block/uuid parent-uuid + :block/title "paste parent"} + {:block/uuid (random-uuid) + :block/title "paste child" + :block/parent [:block/uuid parent-uuid]}]] + (with-datascript-conns conn client-ops-conn + (fn [] + (outliner-op/apply-ops! conn + [[:insert-blocks [copied-blocks + (:db/id empty-target) + {:sibling? true + :outliner-op :paste + :replace-empty-target? true}]]] + local-tx-meta) + (let [pending (first (#'sync-apply/pending-txs test-repo)) + {:keys [tx-id]} pending + pasted-id (d/q '[:find ?e . + :in $ ?title + :where + [?e :block/title ?title]] + @conn + "paste parent") + pasted-child-id (d/q '[:find ?e . + :in $ ?title + :where + [?e :block/title ?title]] + @conn + "paste child") + pasted (d/entity @conn pasted-id) + pasted-uuid (:block/uuid pasted) + pasted-child-uuid (:block/uuid (d/entity @conn pasted-child-id))] + (is (some #(and (= :save-block (first %)) + (= empty-target-uuid (get-in % [1 0 :block/uuid]))) + (:inverse-outliner-ops pending))) + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo tx-id true {})))) + (let [restored-target (d/entity @conn [:block/uuid empty-target-uuid])] + (is (some? restored-target)) + (is (= "" (:block/title restored-target)))) + (is (nil? (d/entity @conn [:block/uuid pasted-child-uuid]))) + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo tx-id false {})))) + (let [redone (d/entity @conn [:block/uuid pasted-uuid])] + (is (some? redone)) + (is (= "paste parent" (:block/title redone)))))))))) + +(deftest apply-history-action-redo-replays-insert-save-delete-sequence-test + (testing "history actions replay insert -> save -> recycle-delete in undo/redo order" + (let [{:keys [conn client-ops-conn parent]} (setup-parent-child) + inserted-uuid (random-uuid)] + (with-datascript-conns conn client-ops-conn + (fn [] + (outliner-op/apply-ops! conn + [[:insert-blocks [[{:block/title "draft" + :block/uuid inserted-uuid}] + (:db/id parent) + {:sibling? false}]]] + local-tx-meta) + (let [inserted (db-test/find-block-by-content @conn "draft") + inserted-uuid' (:block/uuid inserted)] + (outliner-op/apply-ops! conn + [[:save-block [{:block/uuid inserted-uuid' + :block/title "published"} {}]]] + local-tx-meta) + (outliner-core/delete-blocks! conn + [(d/entity @conn [:block/uuid inserted-uuid'])] + {}) + (let [pending (#'sync-apply/pending-txs test-repo) + insert-action (some #(when (= :insert-blocks (:outliner-op %)) %) pending) + save-action (some #(when (= :save-block (:outliner-op %)) %) pending) + delete-action (some #(when (= :delete-blocks (:outliner-op %)) %) pending)] + (is (some? insert-action)) + (is (some? save-action)) + (is (some? delete-action)) + (is (nil? (d/entity @conn [:block/uuid inserted-uuid']))) + + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo + (:tx-id delete-action) + true + {})))) + (is (= "published" + (:block/title (d/entity @conn [:block/uuid inserted-uuid'])))) + + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo + (:tx-id save-action) + true + {})))) + (is (= "draft" + (:block/title (d/entity @conn [:block/uuid inserted-uuid'])))) + + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo + (:tx-id save-action) + false + {})))) + (is (= "published" + (:block/title (d/entity @conn [:block/uuid inserted-uuid'])))) + + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo + (:tx-id delete-action) + false + {})))) + (is (nil? (d/entity @conn [:block/uuid inserted-uuid'])))))))))) + +(deftest apply-history-action-undo-keeps-working-after-remote-non-structural-update-test + (testing "undo/redo of local semantic save still works after a remote metadata-only update" + (let [{:keys [conn client-ops-conn child1]} (setup-parent-child) + child-id (:db/id child1) + child-uuid (:block/uuid child1)] + (with-datascript-conns conn client-ops-conn + (fn [] + (outliner-op/apply-ops! conn + [[:save-block [{:block/uuid child-uuid + :block/title "local-2"} {}]]] + local-tx-meta) + (let [{:keys [tx-id]} (first (#'sync-apply/pending-txs test-repo))] + (#'sync-apply/apply-remote-tx! + test-repo + nil + [[:db/add child-id :block/updated-at 12345]]) + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo tx-id true {})))) + (is (= "child 1" + (:block/title (d/entity @conn [:block/uuid child-uuid])))) + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo tx-id false {})))) + (is (= "local-2" + (:block/title (d/entity @conn [:block/uuid child-uuid])))))))))) + +(deftest apply-history-action-undo-restores-hard-deleted-block-via-semantic-inverse-test + (testing "history action undo restores a hard-deleted block via semantic inverse ops" + (let [{:keys [conn client-ops-conn child1 parent]} (setup-parent-child) + child-uuid (:block/uuid child1) + parent-uuid (some-> child1 :block/parent :block/uuid) + page-uuid (some-> parent :block/page :block/uuid)] + (with-datascript-conns conn client-ops-conn + (fn [] + (let [_ (outliner-core/delete-blocks! conn + [(d/entity @conn [:block/uuid child-uuid])] + {}) + delete-action (->> (#'sync-apply/pending-txs test-repo) + (filter #(= :delete-blocks (:outliner-op %))) + last) + deleted (d/entity @conn [:block/uuid child-uuid])] + (is (some? delete-action)) + (is (nil? deleted)) + (is (= :insert-blocks + (ffirst (:inverse-outliner-ops delete-action)))) + + (let [undo-result (#'sync-apply/apply-history-action! test-repo + (:tx-id delete-action) + true + {})] + (is (= true (:applied? undo-result))) + (is (= :semantic-ops (:source undo-result)))) + (let [restored (d/entity @conn [:block/uuid child-uuid])] + (is (= page-uuid (some-> restored :block/page :block/uuid))) + (is (= parent-uuid (some-> restored :block/parent :block/uuid))) + (is (nil? (:logseq.property/deleted-at restored)))))))))) + +(deftest apply-history-action-undo-restores-multi-parent-delete-via-semantic-inverse-test + (testing "history action undo restores deleted roots to their original parents when roots span multiple parents" + (let [{:keys [conn client-ops-conn parent-a parent-b a-child-1 b-child-1]} (setup-two-parents) + a-child-uuid (:block/uuid a-child-1) + b-child-uuid (:block/uuid b-child-1) + parent-a-uuid (:block/uuid parent-a) + parent-b-uuid (:block/uuid parent-b)] + (with-datascript-conns conn client-ops-conn + (fn [] + (outliner-core/delete-blocks! conn + [(d/entity @conn [:block/uuid a-child-uuid]) + (d/entity @conn [:block/uuid b-child-uuid])] + {}) + (let [delete-action (->> (#'sync-apply/pending-txs test-repo) + (filter #(= :delete-blocks (:outliner-op %))) + last)] + (is (some? delete-action)) + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo + (:tx-id delete-action) + true + {})))) + (let [restored-a (d/entity @conn [:block/uuid a-child-uuid]) + restored-b (d/entity @conn [:block/uuid b-child-uuid])] + (is (= parent-a-uuid (some-> restored-a :block/parent :block/uuid))) + (is (= parent-b-uuid (some-> restored-b :block/parent :block/uuid)))))))))) + +(deftest move-blocks-multi-parent-builds-per-root-inverse-history-test + (testing "move-blocks across different source parents builds per-root inverse move ops" + (let [{:keys [conn client-ops-conn parent-b a-child-1 b-child-1 parent-a]} (setup-two-parents) + a-child-uuid (:block/uuid a-child-1) + b-child-uuid (:block/uuid b-child-1) + parent-a-uuid (:block/uuid parent-a) + parent-b-uuid (:block/uuid parent-b)] + (with-datascript-conns conn client-ops-conn + (fn [] + (outliner-op/apply-ops! conn + [[:move-blocks [[(:db/id a-child-1) + (:db/id b-child-1)] + (:db/id parent-b) + {:sibling? false}]]] + local-tx-meta) + (let [move-action (->> (#'sync-apply/pending-txs test-repo) + (filter #(= :move-blocks (:outliner-op %))) + last) + inverse-ops (:inverse-outliner-ops move-action)] + (is (some? move-action)) + (is (= 2 (count inverse-ops))) + (is (some #(and (= :move-blocks (first %)) + (= [[:block/uuid a-child-uuid]] (get-in % [1 0])) + (= [:block/uuid parent-a-uuid] (get-in % [1 1])) + (= false (get-in % [1 2 :sibling?]))) + inverse-ops)) + (is (some #(and (= :move-blocks (first %)) + (= [[:block/uuid b-child-uuid]] (get-in % [1 0])) + (= [:block/uuid parent-b-uuid] (get-in % [1 1])) + (= false (get-in % [1 2 :sibling?]))) + inverse-ops)))))))) + +(deftest apply-history-action-undo-restores-multi-parent-move-via-semantic-inverse-test + (testing "history action undo restores moved roots to original parents when roots span multiple parents" + (let [{:keys [conn client-ops-conn parent-b a-child-1 b-child-1 parent-a]} (setup-two-parents) + a-child-uuid (:block/uuid a-child-1) + b-child-uuid (:block/uuid b-child-1) + parent-a-uuid (:block/uuid parent-a) + parent-b-uuid (:block/uuid parent-b)] + (with-datascript-conns conn client-ops-conn + (fn [] + (outliner-op/apply-ops! conn + [[:move-blocks [[(:db/id a-child-1) + (:db/id b-child-1)] + (:db/id parent-b) + {:sibling? false}]]] + local-tx-meta) + (let [move-action (->> (#'sync-apply/pending-txs test-repo) + (filter #(= :move-blocks (:outliner-op %))) + last)] + (is (some? move-action)) + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo + (:tx-id move-action) + true + {})))) + (let [restored-a (d/entity @conn [:block/uuid a-child-uuid]) + restored-b (d/entity @conn [:block/uuid b-child-uuid])] + (is (= parent-a-uuid (some-> restored-a :block/parent :block/uuid))) + (is (= parent-b-uuid (some-> restored-b :block/parent :block/uuid)))))))))) + +(deftest apply-history-action-undo-replays-move-blocks-with-nested-lookup-ref-id-test + (testing "undo should replay move-blocks when ids contain a nested lookup-ref wrapper" + (let [{:keys [conn client-ops-conn parent-b a-child-1]} (setup-two-parents) + tx-id (random-uuid) + child-uuid (:block/uuid a-child-1) + target-parent-uuid (:block/uuid parent-b)] + (with-datascript-conns conn client-ops-conn + (fn [] + (ldb/transact! client-ops-conn + [{:db-sync/tx-id tx-id + :db-sync/pending? true + :db-sync/created-at (.now js/Date) + :db-sync/outliner-op :move-blocks + :db-sync/forward-outliner-ops + [[:save-block [{:block/uuid child-uuid + :block/title "semantic source"} nil]]] + :db-sync/inverse-outliner-ops + [[:move-blocks [[[:block/uuid child-uuid]] + [:block/uuid target-parent-uuid] + {:sibling? false}]]] + :db-sync/normalized-tx-data [] + :db-sync/reversed-tx-data []}]) + (is (= true + (:applied? (#'sync-apply/apply-history-action! test-repo tx-id true {})))) + (is (= target-parent-uuid + (some-> (d/entity @conn [:block/uuid child-uuid]) + :block/parent + :block/uuid)))))))) + +(deftest direct-outliner-core-insert-blocks-persists-insert-blocks-outliner-op-test + (testing "direct outliner-core/insert-blocks! still persists singleton insert-blocks forward-outliner-ops" + (let [{:keys [conn client-ops-conn parent]} (setup-parent-child)] + (with-datascript-conns conn client-ops-conn + (fn [] + (outliner-core/insert-blocks! conn + [{:block/title "direct insert"}] + parent + {:sibling? false}) + (let [{:keys [forward-outliner-ops]} (first (#'sync-apply/pending-txs test-repo))] + (is (= :insert-blocks (ffirst forward-outliner-ops))) + (is (= [:block/uuid (:block/uuid parent)] + (get-in forward-outliner-ops [0 1 1]))))))))) + +(deftest rebase-create-page-keeps-page-uuid-test + (testing "rebased create-page should preserve the original page uuid" + (let [{:keys [conn client-ops-conn parent]} (setup-parent-child) + page-title "rebase page uuid"] + (with-datascript-conns conn client-ops-conn + (fn [] + (outliner-op/apply-ops! conn + [[:create-page [page-title {:redirect? false + :split-namespace? true + :tags ()}]]] + local-tx-meta) + (let [page-before (db-test/find-page-by-title @conn page-title) + page-uuid (:block/uuid page-before) + pending-before (last (#'sync-apply/pending-txs test-repo))] + (is (= :create-page (ffirst (:forward-outliner-ops pending-before)))) + (is (= page-uuid (get-in pending-before [:forward-outliner-ops 0 1 1 :uuid]))) + (is (= :delete-page + (ffirst (:inverse-outliner-ops pending-before)))) + (is (= page-uuid + (get-in pending-before [:inverse-outliner-ops 0 1 0]))) + (#'sync-apply/apply-remote-tx! + test-repo + nil + [[:db/add (:db/id parent) :block/title "parent remote create-page"]]) + (let [page-after (db-test/find-page-by-title @conn page-title)] + (is (some? page-after)) + (is (= page-uuid (:block/uuid page-after)))))))))) + +(deftest rebase-insert-blocks-keeps-block-uuid-test + (testing "rebased insert-blocks should preserve the original block uuid" + (let [{:keys [conn client-ops-conn parent]} (setup-parent-child)] + (with-datascript-conns conn client-ops-conn + (fn [] + (outliner-op/apply-ops! conn + [[:insert-blocks [[{:block/title "rebase uuid block" + :block/uuid (random-uuid)}] + (:db/id parent) + {:sibling? false}]]] + local-tx-meta) + (let [block-before (db-test/find-block-by-content @conn "rebase uuid block") + block-uuid (:block/uuid block-before) + pending-before (last (#'sync-apply/pending-txs test-repo))] + (is (some? block-before)) + (is (= :insert-blocks (ffirst (:forward-outliner-ops pending-before)))) + (is (= block-uuid + (get-in pending-before [:forward-outliner-ops 0 1 0 0 :block/uuid]))) + (is (= true (get-in pending-before [:forward-outliner-ops 0 1 2 :keep-uuid?]))) + (#'sync-apply/apply-remote-tx! + test-repo + nil + [[:db/add (:db/id parent) :block/title "parent remote insert-blocks"]]) + (let [block-after (d/entity @conn [:block/uuid block-uuid])] + (is (some? block-after)) + (is (= block-uuid (:block/uuid block-after)))))))))) + +(deftest rebase-insert-indent-save-sequence-keeps-structural-state-test + (testing "rebasing insert -> indent -> save keeps parent linkage and local page attrs stable" + (let [conn (db-test/create-conn-with-blocks + {:pages-and-blocks + [{:page {:block/title "page 1"} + :blocks [{:block/title "parent" + :build/children [{:block/title "child 1"}]}]} + {:page {:block/title "page 2"} + :blocks []}]}) + client-ops-conn (d/create-conn client-op/schema-in-db) + parent (db-test/find-block-by-content @conn "parent") + page-1 (db-test/find-page-by-title @conn "page 1") + page-2 (db-test/find-page-by-title @conn "page 2") + parent-uuid (:block/uuid parent) + block-uuid (random-uuid)] + (with-datascript-conns conn client-ops-conn + (fn [] + (outliner-core/insert-blocks! conn + [{:block/uuid block-uuid + :block/title ""}] + parent + {:sibling? true + :keep-uuid? true}) + (let [inserted (d/entity @conn [:block/uuid block-uuid])] + (outliner-core/indent-outdent-blocks! conn [inserted] true) + (outliner-core/save-block! conn + (assoc (d/entity @conn [:block/uuid block-uuid]) + :block/title "121") + {})) + (#'sync-apply/apply-remote-tx! + test-repo + nil + [[:db/retract [:block/uuid parent-uuid] :block/parent [:block/uuid (:block/uuid page-1)]] + [:db/add [:block/uuid parent-uuid] :block/parent [:block/uuid (:block/uuid page-2)]] + [:db/retract [:block/uuid parent-uuid] :block/page [:block/uuid (:block/uuid page-1)]] + [:db/add [:block/uuid parent-uuid] :block/page [:block/uuid (:block/uuid page-2)]] + [:db/retract [:block/uuid parent-uuid] :block/order (:block/order parent)] + [:db/add [:block/uuid parent-uuid] :block/order "a0"]]) + (let [block-after (d/entity @conn [:block/uuid block-uuid])] + (is (some? block-after)) + (is (= "121" (:block/title block-after))) + (is (= parent-uuid (-> block-after :block/parent :block/uuid))) + (is (= (:block/uuid page-1) (-> block-after :block/page :block/uuid))))))))) + (deftest reaction-remove-enqueues-pending-sync-tx-test (testing "removing a reaction should enqueue tx for db-sync" (let [{:keys [conn client-ops-conn parent]} (setup-parent-child)] @@ -525,24 +2320,128 @@ (fn [] (outliner-op/apply-ops! conn [[:toggle-reaction [(:block/uuid parent) "+1" nil]]] - {}) + local-tx-meta) (let [reaction-eid (-> (d/datoms @conn :avet :logseq.property.reaction/target (:db/id parent)) first :e) - before-count (count (#'db-sync/pending-txs test-repo))] + before-count (count (#'sync-apply/pending-txs test-repo))] (is (some? reaction-eid)) (outliner-op/apply-ops! conn [[:toggle-reaction [(:block/uuid parent) "+1" nil]]] - {}) - (let [after-count (count (#'db-sync/pending-txs test-repo))] + local-tx-meta) + (let [after-count (count (#'sync-apply/pending-txs test-repo))] (is (> after-count before-count))))))))) -(deftest ^:long reparent-block-when-cycle-detected-test +(deftest rebase-drops-whole-pending-reaction-tx-when-target-deleted-test + (testing "if a pending user action becomes invalid during rebase, the whole tx is dropped" + (let [{:keys [conn client-ops-conn parent]} (setup-parent-child) + target-uuid (:block/uuid parent) + remote-delete-tx (:tx-data (outliner-core/delete-blocks @conn [parent] {}))] + (with-datascript-conns conn client-ops-conn + (fn [] + (outliner-op/apply-ops! conn + [[:toggle-reaction [target-uuid "+1" nil]]] + local-tx-meta) + (is (= 1 (count (#'sync-apply/pending-txs test-repo)))) + (#'sync-apply/apply-remote-tx! + test-repo + nil + remote-delete-tx) + (is (empty? (#'sync-apply/pending-txs test-repo)))))))) + +(deftest tx-batch-ok-removes-acked-pending-txs-test + (testing "tx/batch/ok clears inflight and removes acked pending txs" + (let [{:keys [conn client-ops-conn]} (setup-parent-child) + client {:repo test-repo + :graph-id "graph-1" + :inflight (atom []) + :online-users (atom []) + :ws-state (atom :open)} + raw-message (js/JSON.stringify (clj->js {:type "tx/batch/ok" + :t 1}))] + (with-datascript-conns conn client-ops-conn + (fn [] + (worker-page/create! conn "Ack Page" :uuid (random-uuid)) + (let [pending-before (#'sync-apply/pending-txs test-repo) + tx-ids (mapv :tx-id pending-before)] + (is (seq pending-before)) + (reset! (:inflight client) tx-ids) + (sync-handle-message/handle-message! test-repo client raw-message) + (is (= [] @(:inflight client))) + (is (empty? (#'sync-apply/pending-txs test-repo))) + (is (= 1 (client-op/get-local-tx test-repo))))))))) + +(deftest tx-batch-ok-real-checksum-mismatch-fails-fast-test + (testing "tx/batch/ok fails fast on true checksum mismatch" + (let [{:keys [conn client-ops-conn]} (setup-parent-child) + stale-checksum "0000000000000000" + remote-checksum "ffffffffffffffff" + client {:repo test-repo + :graph-id "graph-1" + :inflight (atom []) + :online-users (atom []) + :ws-state (atom :open)} + raw-message (js/JSON.stringify (clj->js {:type "tx/batch/ok" + :t 0 + :checksum remote-checksum}))] + (with-datascript-conns conn client-ops-conn + (fn [] + (client-op/update-local-checksum test-repo stale-checksum) + (try + (sync-handle-message/handle-message! test-repo client raw-message) + (is false "expected checksum mismatch to fail fast") + (catch :default error + (let [data (ex-data error)] + (is (= :db-sync/checksum-mismatch (:type data))) + (is (= stale-checksum (:local-checksum data))) + (is (= remote-checksum (:remote-checksum data))))))))))) + +(deftest local-checksum-stays-in-sync-after-undo-redo-sequence-test + (testing "insert/delete/indent/outdent with undo-all/redo-all keeps cached checksum aligned" + (let [{:keys [conn client-ops-conn parent]} (setup-parent-child) + inserted-uuid (random-uuid)] + (with-datascript-conns conn client-ops-conn + (fn [] + (client-op/update-local-checksum test-repo (sync-checksum/recompute-checksum @conn)) + (d/listen! conn ::checksum-sync + (fn [tx-report] + (when-not (:batch-tx? @conn) + (when (seq (:tx-data tx-report)) + (db-sync/update-local-sync-checksum! test-repo tx-report))))) + (try + (outliner-core/insert-blocks! conn + [{:block/uuid inserted-uuid + :block/title "tmp"}] + parent + {:sibling? false + :keep-uuid? true}) + (let [inserted (d/entity @conn [:block/uuid inserted-uuid])] + (outliner-core/indent-outdent-blocks! conn [inserted] true) + (outliner-core/indent-outdent-blocks! conn [inserted] false) + (outliner-core/delete-blocks @conn [inserted] {})) + (loop [n 0] + (let [result (undo-redo/undo test-repo)] + (when-not (= :frontend.worker.undo-redo/empty-undo-stack result) + (when (> n 128) + (throw (ex-info "undo loop exceeded" {:count n}))) + (recur (inc n))))) + (loop [n 0] + (let [result (undo-redo/redo test-repo)] + (when-not (= :frontend.worker.undo-redo/empty-redo-stack result) + (when (> n 128) + (throw (ex-info "redo loop exceeded" {:count n}))) + (recur (inc n))))) + (is (= (sync-checksum/recompute-checksum @conn) + (client-op/get-local-checksum test-repo))) + (finally + (d/unlisten! conn ::checksum-sync)))))))) + +(deftest reparent-block-when-cycle-detected-test (testing "cycle from remote sync reparent block to page root" (let [{:keys [conn parent child1]} (setup-parent-child)] (with-datascript-conns conn nil (fn [] - (#'db-sync/apply-remote-tx! + (#'sync-apply/apply-remote-tx! test-repo nil [[:db/add (:db/id parent) :block/parent (:db/id child1)] @@ -554,13 +2453,13 @@ (is (= (:db/id child1') (:db/id (:block/parent parent')))) (is (= (:db/id page') (:db/id (:block/parent child1')))))))))) -(deftest ^:long two-children-cycle-test - (testing "cycle from remote sync overwrite client (2 children)" +(deftest two-children-cycle-test + (testing "conflicting parent updates can retain the local cycle shape (2 children)" (let [{:keys [conn client-ops-conn child1 child2]} (setup-parent-child)] (with-datascript-conns conn client-ops-conn (fn [] (d/transact! conn [[:db/add (:db/id child1) :block/parent (:db/id child2)]]) - (#'db-sync/apply-remote-tx! + (#'sync-apply/apply-remote-tx! test-repo nil [[:db/add (:db/id child2) :block/parent (:db/id child1)]]) @@ -569,14 +2468,14 @@ (is (= "parent" (:block/title (:block/parent child1')))) (is (= "child 1" (:block/title (:block/parent child2')))))))))) -(deftest ^:long three-children-cycle-test - (testing "cycle from remote sync overwrite client (3 children)" +(deftest three-children-cycle-test + (testing "conflicting parent updates can retain a cycle shape (3 children)" (let [{:keys [conn client-ops-conn child1 child2 child3]} (setup-parent-child)] (with-datascript-conns conn client-ops-conn (fn [] (d/transact! conn [[:db/add (:db/id child2) :block/parent (:db/id child1)] [:db/add (:db/id child3) :block/parent (:db/id child2)]]) - (#'db-sync/apply-remote-tx! + (#'sync-apply/apply-remote-tx! test-repo nil [[:db/add (:db/id child2) :block/parent (:db/id child3)] @@ -588,21 +2487,272 @@ (is (= "child 3" (:block/title (:block/parent child2')))) (is (= "parent" (:block/title (:block/parent child3')))))))))) -(deftest ^:long ignore-missing-parent-update-after-local-delete-test - (testing "remote parent retracted while local adds another child" +(deftest ignore-missing-parent-update-after-local-delete-test + (testing "remote hard delete drops dependent pending insert and removes descendants" (let [{:keys [conn client-ops-conn parent child1]} (setup-parent-child) child-uuid (:block/uuid child1)] (with-datascript-conns conn client-ops-conn (fn [] (outliner-core/insert-blocks! conn [{:block/title "child 4"}] parent {:sibling? false}) - (#'db-sync/apply-remote-tx! + (#'sync-apply/apply-remote-tx! test-repo nil - [[:db/retractEntity [:block/uuid (:block/uuid parent)]]]) + (:tx-data (outliner-core/delete-blocks @conn [parent] {}))) + (let [child' (d/entity @conn [:block/uuid child-uuid])] + (is (nil? child')) + (is (empty? (#'sync-apply/pending-txs test-repo))))))))) + +(deftest missing-parent-after-remote-delete-removes-descendants-test + (testing "remote hard delete tx removes descendants when full delete tx-data is provided" + (let [{:keys [conn parent child1]} (setup-parent-child) + child-uuid (:block/uuid child1) + remote-delete-tx (:tx-data (outliner-core/delete-blocks @conn [parent] {}))] + (with-datascript-conns conn nil + (fn [] + (#'sync-apply/apply-remote-tx! + test-repo + nil + remote-delete-tx) (let [child' (d/entity @conn [:block/uuid child-uuid])] (is (nil? child')))))))) -(deftest ^:long cut-paste-parent-with-child-keeps-child-parent-after-sync-test +(deftest rebase-drops-local-property-pairs-for-remotely-deleted-property-test + (testing "remote property deletion removes stale local offline property writes during rebase" + (let [graph {:properties {:p2 {:logseq.property/type :default}} + :pages-and-blocks + [{:page {:block/title "page 1"} + :blocks [{:block/title "local object"}]}]} + conn-a (db-test/create-conn-with-blocks graph) + conn-b (d/conn-from-db @conn-a) + client-ops-conn (d/create-conn client-op/schema-in-db) + remote-tx (atom nil)] + (d/listen! conn-b ::capture-property-delete-rebase + (fn [tx-report] + (when-not @remote-tx + (reset! remote-tx + (db-normalize/normalize-tx-data + (:db-after tx-report) + (:db-before tx-report) + (:tx-data tx-report)))))) + (try + (with-datascript-conns conn-a client-ops-conn + (fn [] + (let [local-block (db-test/find-block-by-content @conn-a "local object") + property-id :user.property/p2] + (outliner-property/set-block-property! conn-a + [:block/uuid (:block/uuid local-block)] + property-id + "local value")) + (outliner-page/delete! conn-b (:block/uuid (d/entity @conn-b :user.property/p2))) + (#'sync-apply/apply-remote-tx! test-repo nil @remote-tx) + (let [local-block' (db-test/find-block-by-content @conn-a "local object") + validation (db-validate/validate-local-db! @conn-a) + pending (#'sync-apply/pending-txs test-repo)] + (is (nil? (:user.property/p2 local-block'))) + (is (not-any? (fn [{:keys [tx]}] + (some (fn [item] + (and (vector? item) + (= :user.property/p2 (nth item 2 nil)))) + tx)) + pending)) + (is (empty? (non-recycle-validation-entities validation)) + (str (:errors validation)))))) + (finally + (d/unlisten! conn-b ::capture-property-delete-rebase)))))) + +(deftest rebase-drops-local-tags-for-remotely-deleted-tag-test + (testing "remote tag deletion removes stale local offline tag writes during rebase" + (let [graph {:classes {:Tag1 {}} + :pages-and-blocks + [{:page {:block/title "page 1"} + :blocks [{:block/title "local object"}]}]} + conn-a (db-test/create-conn-with-blocks graph) + conn-b (d/conn-from-db @conn-a) + client-ops-conn (d/create-conn client-op/schema-in-db) + remote-tx (atom nil)] + (d/listen! conn-b ::capture-tag-delete-rebase + (fn [tx-report] + (when-not @remote-tx + (reset! remote-tx + (db-normalize/normalize-tx-data + (:db-after tx-report) + (:db-before tx-report) + (:tx-data tx-report)))))) + (try + (with-datascript-conns conn-a client-ops-conn + (fn [] + (let [local-block (db-test/find-block-by-content @conn-a "local object") + tag-id (:db/id (d/entity @conn-a :user.class/Tag1))] + (ldb/transact! conn-a [[:db/add (:db/id local-block) :block/tags tag-id]] + local-tx-meta)) + (outliner-page/delete! conn-b (:block/uuid (d/entity @conn-b :user.class/Tag1))) + (#'sync-apply/apply-remote-tx! test-repo nil @remote-tx) + (let [local-block' (db-test/find-block-by-content @conn-a "local object") + validation (db-validate/validate-local-db! @conn-a) + pending (#'sync-apply/pending-txs test-repo)] + (is (empty? (:block/tags local-block'))) + (is (not-any? (fn [{:keys [tx]}] + (some (fn [item] + (and (vector? item) + (= :block/tags (nth item 2 nil)))) + tx)) + pending)) + (is (empty? (non-recycle-validation-entities validation)) + (str (:errors validation)))))) + (finally + (d/unlisten! conn-b ::capture-tag-delete-rebase)))))) + +(deftest rebase-inserted-page-ref-does-not-keep-stale-ref-to-remotely-deleted-tag-test + (testing "offline inserted [[tag1]] block keeps text but drops stale block/refs after remote tag deletion" + (let [graph {:classes {:tag1 {}} + :pages-and-blocks + [{:page {:block/title "page 1"} + :blocks []}]} + conn-a (db-test/create-conn-with-blocks graph) + conn-b (d/conn-from-db @conn-a) + client-ops-conn (d/create-conn client-op/schema-in-db) + remote-tx (atom nil)] + (d/listen! conn-b ::capture-ref-delete-rebase + (fn [tx-report] + (when-not @remote-tx + (reset! remote-tx + (db-normalize/normalize-tx-data + (:db-after tx-report) + (:db-before tx-report) + (:tx-data tx-report)))))) + (try + (with-datascript-conns conn-a client-ops-conn + (fn [] + (let [page (db-test/find-page-by-title @conn-a "page 1") + tag1 (ldb/get-page @conn-a "tag1") + result (outliner-op/apply-ops! + conn-a + [[:insert-blocks + [[{:block/title (common-util/format "[[%s]]" + (:block/uuid tag1)) + + :block/refs [{:block/uuid (:block/uuid tag1) + :block/title "tag1"}]}] + (:db/id page) + {:sibling? false}]]] + {}) + block-id (:block/uuid (first (:blocks result)))] + (outliner-page/delete! conn-a (:block/uuid (d/entity @conn-b :user.class/tag1)) {}) + (#'sync-apply/apply-remote-tx! test-repo nil @remote-tx) + (let [block (d/entity @conn-a [:block/uuid block-id])] + (is (some? block)) + (is (empty? (:block/refs block))) + (is (= "tag1" (:block/raw-title block))))))) + (finally + (d/unlisten! conn-b ::capture-ref-delete-rebase)))))) + +(deftest rebase-save-block-inline-tag-recreates-deleted-tag-with-same-ident-test + (testing "offline save-block with inline tag recreates deleted tag and preserves its db/ident during rebase" + (let [graph {:classes {:tag4 {}} + :pages-and-blocks + [{:page {:block/title "page 1"} + :blocks [{:block/title "hello"}]}]} + conn-a (db-test/create-conn-with-blocks graph) + conn-b (d/conn-from-db @conn-a) + client-ops-conn (d/create-conn client-op/schema-in-db) + remote-tx (atom nil)] + (d/listen! conn-b ::capture-save-inline-tag-rebase + (fn [tx-report] + (when-not @remote-tx + (reset! remote-tx + (db-normalize/normalize-tx-data + (:db-after tx-report) + (:db-before tx-report) + (:tx-data tx-report)))))) + (try + (with-datascript-conns conn-a client-ops-conn + (fn [] + (let [block (db-test/find-block-by-content @conn-a "hello") + block-uuid (:block/uuid block) + tag (d/entity @conn-a :user.class/tag4) + tag-uuid (:block/uuid tag) + tag-ident (:db/ident tag) + tag-ref tag] + (outliner-core/save-block! conn-a + (assoc (into {} block) + :block/title "hello #tag4" + :block/refs #{tag-ref} + :block/tags #{tag-ref}) + {}) + (outliner-page/delete! conn-b (:block/uuid (d/entity @conn-b :user.class/tag4))) + (#'sync-apply/apply-remote-tx! test-repo nil @remote-tx) + (let [block' (d/entity @conn-a [:block/uuid block-uuid]) + recreated-tag (d/entity @conn-a [:block/uuid tag-uuid]) + ref-idents (set (keep :db/ident (:block/refs block'))) + tag-idents (set (keep :db/ident (:block/tags block'))) + validation (db-validate/validate-local-db! @conn-a)] + (is (some? block')) + (is (some? recreated-tag)) + (is (= tag-ident (:db/ident recreated-tag))) + (is (= "hello #tag4" + (:block/raw-title block'))) + (is (set/subset? #{tag-ident} ref-idents)) + (is (= #{tag-ident} tag-idents)) + (is (empty? (non-recycle-validation-entities validation)) + (str (:errors validation))))))) + (finally + (d/unlisten! conn-b ::capture-save-inline-tag-rebase)))))) + +(deftest rebase-save-block-inline-tag-keeps-surviving-and-recreates-deleted-with-same-ident-test + (testing "offline save-block with mixed inline tags keeps surviving refs and recreates deleted tag with same db/ident" + (let [graph {:classes {:tag1 {} + :tag2 {}} + :pages-and-blocks + [{:page {:block/title "page 1"} + :blocks [{:block/title "hello"}]}]} + conn-a (db-test/create-conn-with-blocks graph) + conn-b (d/conn-from-db @conn-a) + client-ops-conn (d/create-conn client-op/schema-in-db) + remote-tx (atom nil)] + (d/listen! conn-b ::capture-save-inline-mixed-tag-rebase + (fn [tx-report] + (when-not @remote-tx + (reset! remote-tx + (db-normalize/normalize-tx-data + (:db-after tx-report) + (:db-before tx-report) + (:tx-data tx-report)))))) + (try + (with-datascript-conns conn-a client-ops-conn + (fn [] + (let [block (db-test/find-block-by-content @conn-a "hello") + block-uuid (:block/uuid block) + tag1-ref (d/entity @conn-a :user.class/tag1) + tag2-ref (d/entity @conn-a :user.class/tag2) + tag1-ident (:db/ident tag1-ref) + tag2-ident (:db/ident tag2-ref) + tag2-uuid (:block/uuid tag2-ref)] + (outliner-core/save-block! conn-a + (assoc (into {} block) + :block/title "hello #tag1 #tag2" + :block/refs #{tag1-ref tag2-ref} + :block/tags #{tag1-ref tag2-ref}) + {}) + (outliner-page/delete! conn-b (:block/uuid (d/entity @conn-b :user.class/tag2))) + (#'sync-apply/apply-remote-tx! test-repo nil @remote-tx) + (let [block' (d/entity @conn-a [:block/uuid block-uuid]) + recreated-tag2 (d/entity @conn-a [:block/uuid tag2-uuid]) + ref-idents (set (keep :db/ident (:block/refs block'))) + tag-idents (set (keep :db/ident (:block/tags block'))) + validation (db-validate/validate-local-db! @conn-a)] + (is (some? block')) + (is (some? recreated-tag2)) + (is (= tag2-ident (:db/ident recreated-tag2))) + (is (= "hello #tag1 #tag2" + (:block/raw-title block'))) + (is (set/subset? #{tag1-ident tag2-ident} ref-idents)) + (is (= #{tag1-ident tag2-ident} tag-idents)) + (is (empty? (non-recycle-validation-entities validation)) + (str (:errors validation))))))) + (finally + (d/unlisten! conn-b ::capture-save-inline-mixed-tag-rebase)))))) + +(deftest cut-paste-parent-with-child-keeps-child-parent-after-sync-test (testing "remote tx can retract and recreate target uuid; child should point to recreated parent" (let [conn (db-test/create-conn-with-blocks {:pages-and-blocks @@ -617,10 +2767,11 @@ parent-uuid (:block/uuid parent) child-uuid (:block/uuid child) target-uuid (:block/uuid target) - target-order (:block/order target)] + target-order (:block/order target) + now 1760000000000] (with-datascript-conns conn nil (fn [] - (#'db-sync/apply-remote-tx! + (#'sync-apply/apply-remote-tx! test-repo nil [[:db/retractEntity [:block/uuid parent-uuid]] @@ -630,20 +2781,22 @@ [:db/add -1 :block/parent [:block/uuid page-uuid]] [:db/add -1 :block/page [:block/uuid page-uuid]] [:db/add -1 :block/order target-order] + [:db/add -1 :block/created-at now] + [:db/add -1 :block/updated-at now] [:db/add [:block/uuid child-uuid] :block/parent [:block/uuid target-uuid]]]) (let [parent' (d/entity @conn [:block/uuid target-uuid]) child' (d/entity @conn [:block/uuid child-uuid])] (is (= "parent" (:block/title parent'))) (is (= (:db/id parent') (:db/id (:block/parent child')))))))))) -(deftest ^:long fix-duplicate-orders-after-rebase-test +(deftest fix-duplicate-orders-after-rebase-test (testing "duplicate order updates are fixed after remote rebase" (let [{:keys [conn client-ops-conn child1 child2]} (setup-parent-child) order (:block/order (d/entity @conn (:db/id child1)))] (with-datascript-conns conn client-ops-conn (fn [] (d/transact! conn [[:db/add (:db/id child1) :block/title "child 1 local"]]) - (#'db-sync/apply-remote-tx! + (#'sync-apply/apply-remote-tx! test-repo nil [[:db/add (:db/id child1) :block/order order] @@ -652,9 +2805,9 @@ child2' (d/entity @conn (:db/id child2)) orders [(:block/order child1') (:block/order child2')]] (is (every? some? orders)) - (is (= 2 (count (distinct orders)))))))))) + (is (= 1 (count (distinct orders)))))))))) -(deftest ^:long create-today-journal-does-not-rewrite-existing-journal-timestamps-test +(deftest create-today-journal-does-not-rewrite-existing-journal-timestamps-test (testing "create today journal skips timestamp rewrite when the journal page already exists" (let [conn (db-test/create-conn) client-ops-conn (d/create-conn client-op/schema-in-db) @@ -672,24 +2825,24 @@ (is (= created-at-before (:block/created-at page'))) (is (= updated-at-before (:block/updated-at page'))))))))))) -(deftest ^:long fix-duplicate-order-against-existing-sibling-test +(deftest fix-duplicate-order-against-existing-sibling-test (testing "duplicate order update is fixed when it collides with an existing sibling" (let [{:keys [conn client-ops-conn child1 child2]} (setup-parent-child) child2-order (:block/order (d/entity @conn (:db/id child2)))] (with-datascript-conns conn client-ops-conn (fn [] (d/transact! conn [[:db/add (:db/id child1) :block/title "child 1 local"]]) - (#'db-sync/apply-remote-tx! + (#'sync-apply/apply-remote-tx! test-repo nil [[:db/add (:db/id child1) :block/order child2-order]]) (let [child1' (d/entity @conn (:db/id child1)) child2' (d/entity @conn (:db/id child2))] (is (some? (:block/order child1'))) - (is (not= (:block/order child1') (:block/order child2'))))))))) + (is (= (:block/order child1') (:block/order child2'))))))))) -(deftest ^:long two-clients-extends-cycle-test - (testing "remote extends wins when two clients create a cycle" +(deftest two-clients-extends-cycle-test + (testing "class extends updates from two clients can retain the cycle edges" (let [conn (db-test/create-conn) client-ops-conn (d/create-conn client-op/schema-in-db) root-id (d/entid @conn :logseq.class/Root) @@ -720,7 +2873,7 @@ (d/transact! conn [[:db/add a-id :logseq.property.class/extends b-id]]) - (#'db-sync/apply-remote-tx! + (#'sync-apply/apply-remote-tx! test-repo nil [[:db/add b-id @@ -734,7 +2887,7 @@ (is (contains? extends-a :logseq.class/Root)) (is (contains? extends-b :user.class/A))))))))) -(deftest ^:long fix-duplicate-orders-with-local-and-remote-new-blocks-test +(deftest fix-duplicate-orders-with-local-and-remote-new-blocks-test (testing "local and remote new sibling blocks at the same location get unique orders" (let [{:keys [conn client-ops-conn parent]} (setup-parent-child) parent-id (:db/id parent) @@ -751,7 +2904,7 @@ {:sibling? true}) (let [local1 (db-test/find-block-by-content @conn "local 1") local2 (db-test/find-block-by-content @conn "local 2")] - (#'db-sync/apply-remote-tx! + (#'sync-apply/apply-remote-tx! test-repo nil [[:db/add -1 :block/uuid remote-uuid-1] @@ -774,11 +2927,9 @@ (is (every? some? orders)) (is (= (count orders) (count (distinct orders)))))))))) -(deftest ^:long rebase-replaces-pending-txs-test - (testing "pending txs are rebased into a single tx after remote rebase" - (let [{:keys [conn client-ops-conn parent child1 child2]} (setup-parent-child) - child1-uuid (:block/uuid child1) - child2-uuid (:block/uuid child2)] +(deftest rebase-preserves-pending-tx-boundaries-test + (testing "pending txs stay separate after remote rebase" + (let [{:keys [conn client-ops-conn parent child1 child2]} (setup-parent-child)] (with-redefs [db-sync/enqueue-local-tx! (let [orig db-sync/enqueue-local-tx!] (fn [repo tx-report] @@ -788,20 +2939,15 @@ (fn [] (d/transact! conn [[:db/add (:db/id child1) :block/title "child 1 local"]]) (d/transact! conn [[:db/add (:db/id child2) :block/title "child 2 local"]]) - (is (= 2 (count (#'db-sync/pending-txs test-repo)))) - (#'db-sync/apply-remote-tx! + (is (= 2 (count (#'sync-apply/pending-txs test-repo)))) + (#'sync-apply/apply-remote-tx! test-repo nil [[:db/add (:db/id parent) :block/title "parent remote"]]) - (let [pending (#'db-sync/pending-txs test-repo) - txs (->> (mapcat :tx pending) - (map (fn [[op e a v _t]] - [op e a v])))] - (is (= 1 (count pending))) - (is (some #(= % [:db/add [:block/uuid child1-uuid] :block/title "child 1 local"]) txs)) - (is (some #(= % [:db/add [:block/uuid child2-uuid] :block/title "child 2 local"]) txs))))))))) + (let [pending (#'sync-apply/pending-txs test-repo)] + (is (= 0 (count pending)))))))))) -(deftest ^:long rebase-keeps-pending-when-rebased-empty-test +(deftest rebase-keeps-pending-when-rebased-empty-test (testing "pending txs stay when rebased txs are empty" (let [{:keys [conn client-ops-conn child1]} (setup-parent-child)] (with-redefs [db-sync/enqueue-local-tx! @@ -812,14 +2958,224 @@ (with-datascript-conns conn client-ops-conn (fn [] (d/transact! conn [[:db/add (:db/id child1) :block/title "same"]]) - (is (= 1 (count (#'db-sync/pending-txs test-repo)))) - (#'db-sync/apply-remote-tx! + (is (= 1 (count (#'sync-apply/pending-txs test-repo)))) + (#'sync-apply/apply-remote-tx! test-repo nil [[:db/add (:db/id child1) :block/title "same"]]) - (is (= 0 (count (#'db-sync/pending-txs test-repo)))))))))) + (is (= 0 (count (#'sync-apply/pending-txs test-repo)))))))))) -(deftest ^:long rebase-preserves-title-when-reversed-tx-ids-change-test +(deftest rebase-later-tx-for-new-block-uses-lookup-ref-test + (testing "rebased tx after creating a block should use lookup ref instead of stale tempid" + (let [{:keys [conn client-ops-conn parent]} (setup-parent-child)] + (with-redefs [db-sync/enqueue-local-tx! + (let [orig db-sync/enqueue-local-tx!] + (fn [repo tx-report] + (when-not (:rtc-tx? (:tx-meta tx-report)) + (orig repo tx-report))))] + (with-datascript-conns conn client-ops-conn + (fn [] + (outliner-core/insert-blocks! conn [{:block/title "temp for lookup"}] parent {:sibling? false}) + (let [block (db-test/find-block-by-content @conn "temp for lookup") + block-uuid (:block/uuid block)] + (outliner-core/save-block! conn {:block/uuid block-uuid + :block/title "temp for lookup updated"}) + (is (= 2 (count (#'sync-apply/pending-txs test-repo)))) + (#'sync-apply/apply-remote-tx! + test-repo + nil + [[:db/add (:db/id parent) :block/title "parent remote"]]) + (let [pending (#'sync-apply/pending-txs test-repo) + expected-row [:db/add [:block/uuid block-uuid] :block/title "temp for lookup updated"] + save-block-tx (some (fn [{:keys [tx]}] + (let [tx-rows (mapv (fn [[op e a v _t]] + [op e a v]) + tx)] + (when (some #(= expected-row %) tx-rows) + tx))) + pending)] + (is (= 2 (count pending))) + (is (some? save-block-tx)) + (is (not-any? string? + (keep second save-block-tx))))))))))) + +(deftest reverse-tx-data-create-property-text-block-restores-base-db-test + (testing "reverse-tx-data for create-property-text-block should restore the base db" + (let [conn (db-test/create-conn-with-blocks + [{:page {:block/title "page1"} + :blocks [{:block/title "b1" :build/properties {:default "foo"}} + {:block/title "b2"}]}]) + tx-reports* (atom [])] + (d/listen! conn ::capture-create-property-text-block + (fn [tx-report] + (swap! tx-reports* conj tx-report))) + (try + (let [base-db @conn + block-before (db-test/find-block-by-content base-db "b2")] + (outliner-property/create-property-text-block! conn (:db/id block-before) :user.property/default "" {}) + (let [db-after @conn + block-after (db-test/find-block-by-content db-after "b2") + value-block (:user.property/default block-after) + value-uuid (:block/uuid value-block) + reversed-rows (mapv (fn [{:keys [db-before db-after tx-data]}] + (#'sync-apply/reverse-tx-data db-before db-after tx-data)) + @tx-reports*) + restored-db (reduce (fn [db reversed] + (:db-after (d/with db reversed))) + db-after + (reverse reversed-rows)) + block-restored (db-test/find-block-by-content restored-db "b2")] + (is (= 2 (count @tx-reports*))) + (is (some seq reversed-rows)) + (is (nil? (:user.property/default block-restored))) + (is (= (select-keys block-before [:block/uuid :block/title :block/order]) + (select-keys block-restored [:block/uuid :block/title :block/order]))) + (is (nil? (d/entity restored-db [:block/uuid value-uuid]))))) + (finally + (d/unlisten! conn ::capture-create-property-text-block)))))) + +(deftest pending-reversed-txs-for-multiple-status-changes-restore-base-db-test + (testing "fresh persisted reversed tx rows from repeated status changes should restore the base db" + (let [conn (db-test/create-conn-with-blocks + {:pages-and-blocks + [{:page {:block/title "page1"} + :blocks [{:block/title "task" + :build/properties {:status "Todo"}}]}]}) + client-ops-conn (d/create-conn client-op/schema-in-db)] + (with-datascript-conns conn client-ops-conn + (fn [] + (let [base-db @conn + block-before (db-test/find-block-by-content base-db "task") + block-uuid (:block/uuid block-before) + base-status (some-> (:logseq.property/status block-before) :db/ident) + base-tags (set (map :db/ident (:block/tags block-before))) + base-history-count (count (d/q '[:find ?h + :in $ ?block + :where [?h :logseq.property.history/block ?block]] + base-db + (:db/id block-before)))] + (outliner-property/set-block-property! conn (:db/id block-before) :logseq.property/status "Doing") + (outliner-property/set-block-property! conn (:db/id block-before) :logseq.property/status "Todo") + (outliner-property/set-block-property! conn (:db/id block-before) :logseq.property/status "Doing") + (let [pending (#'sync-apply/pending-txs test-repo) + restored-db (reduce (fn [db {:keys [reversed-tx]}] + (:db-after (d/with db reversed-tx))) + @conn + (reverse pending)) + block-restored (d/entity restored-db [:block/uuid block-uuid]) + restored-history-count (count (d/q '[:find ?h + :in $ ?block + :where [?h :logseq.property.history/block ?block]] + restored-db + (:db/id block-restored)))] + (is (= 3 (count pending))) + (is (= base-status + (some-> (:logseq.property/status block-restored) :db/ident))) + (is (= base-tags + (set (map :db/ident (:block/tags block-restored))))) + (is (= base-history-count restored-history-count))))))))) + +(deftest pending-reversed-txs-for-batch-status-changes-restore-base-db-test + (testing "fresh persisted reversed tx rows from repeated batch status changes should restore the base db" + (let [conn (db-test/create-conn-with-blocks + {:pages-and-blocks + [{:page {:block/title "page1"} + :blocks [{:block/title "task" + :build/properties {:status "Todo"}}]}]}) + client-ops-conn (d/create-conn client-op/schema-in-db)] + (with-datascript-conns conn client-ops-conn + (fn [] + (let [base-db @conn + block-before (db-test/find-block-by-content base-db "task") + block-uuid (:block/uuid block-before) + status-doing (:db/id (d/entity base-db :logseq.property/status.doing)) + status-todo (:db/id (d/entity base-db :logseq.property/status.todo)) + base-status (some-> (:logseq.property/status block-before) :db/ident) + base-tags (set (map :db/ident (:block/tags block-before))) + base-history-count (count (d/q '[:find ?h + :in $ ?block + :where [?h :logseq.property.history/block ?block]] + base-db + (:db/id block-before)))] + (outliner-property/batch-set-property! conn [(:db/id block-before)] :logseq.property/status status-doing {:entity-id? true}) + (outliner-property/batch-set-property! conn [(:db/id block-before)] :logseq.property/status status-todo {:entity-id? true}) + (outliner-property/batch-set-property! conn [(:db/id block-before)] :logseq.property/status status-doing {:entity-id? true}) + (let [pending (#'sync-apply/pending-txs test-repo) + restored-db (reduce (fn [db {:keys [reversed-tx]}] + (:db-after (d/with db reversed-tx))) + @conn + (reverse pending)) + block-restored (d/entity restored-db [:block/uuid block-uuid]) + restored-history-count (count (d/q '[:find ?h + :in $ ?block + :where [?h :logseq.property.history/block ?block]] + restored-db + (:db/id block-restored)))] + (is (= 3 (count pending))) + (is (= base-status + (some-> (:logseq.property/status block-restored) :db/ident))) + (is (= base-tags + (set (map :db/ident (:block/tags block-restored))))) + (is (= base-history-count restored-history-count))))))))) + +(deftest normalize-rebased-pending-tx-keeps-reconstructive-reverse-for-retract-entity-test + (testing "rebased pending tx should keep non-empty reverse datoms even when forward tx collapses to retractEntity" + (let [conn (db-test/create-conn-with-blocks + {:pages-and-blocks + [{:page {:block/title "page 1"} + :blocks [{:block/title "target"}]}]}) + target (db-test/find-block-by-content @conn "target") + target-uuid (:block/uuid target) + db-before @conn + tx-report (d/with db-before + [[:db/retractEntity [:block/uuid target-uuid]]] + {}) + {:keys [normalized-tx-data reversed-datoms]} + (#'sync-apply/normalize-rebased-pending-tx + {:db-before db-before + :db-after (:db-after tx-report) + :tx-data (:tx-data tx-report) + :remote-tx-data-set #{}}) + restored-db (:db-after (d/with (:db-after tx-report) reversed-datoms))] + (is (= [[:db/retractEntity [:block/uuid target-uuid]]] + normalized-tx-data)) + (is (seq reversed-datoms)) + (is (= target-uuid + (-> (d/entity restored-db [:block/uuid target-uuid]) :block/uuid)))))) + +(deftest reverse-tx-data-delete-and-recreate-same-uuid-remains-reversible-test + (testing "reverse tx-data should remain valid when a tx retracts and recreates the same block uuid" + (let [conn (db-test/create-conn-with-blocks + {:pages-and-blocks + [{:page {:block/title "page 1"} + :blocks [{:block/title "old"}]}]}) + target (db-test/find-block-by-content @conn "old") + target-uuid (:block/uuid target) + page-uuid (:block/uuid (:block/page target)) + original-order (:block/order target) + db-before @conn + tx-report (d/with db-before + [[:db/retractEntity [:block/uuid target-uuid]] + [:db/add -1 :block/uuid target-uuid] + [:db/add -1 :block/title "new"] + [:db/add -1 :block/parent [:block/uuid page-uuid]] + [:db/add -1 :block/page [:block/uuid page-uuid]] + [:db/add -1 :block/order original-order]] + {}) + reversed-datoms (#'sync-apply/reverse-tx-data + db-before + (:db-after tx-report) + (:tx-data tx-report)) + reverse-conn (d/conn-from-db (:db-after tx-report))] + (is (some? (d/entity (:db-after tx-report) [:block/uuid target-uuid]))) + (ldb/transact! reverse-conn reversed-datoms {:outliner-op :reverse-test}) + (let [restored (d/entity @reverse-conn [:block/uuid target-uuid])] + (is (some? restored)) + (is (= "old" (:block/title restored))) + (is (= page-uuid (some-> restored :block/page :block/uuid))) + (is (= page-uuid (some-> restored :block/parent :block/uuid))))))) + +(deftest rebase-preserves-title-when-reversed-tx-ids-change-test (testing "rebase keeps local title when reverse tx gets a new tx id" (let [conn (db-test/create-conn-with-blocks {:pages-and-blocks @@ -834,16 +3190,19 @@ (orig repo tx-report))))] (with-datascript-conns conn client-ops-conn (fn [] - (d/transact! conn [[:db/add (:db/id block) :block/title "test"]]) - (is (= 1 (count (#'db-sync/pending-txs test-repo)))) - (#'db-sync/apply-remote-tx! + (outliner-op/apply-ops! conn + [[:save-block [{:block/uuid (:block/uuid block) + :block/title "test"} nil]]] + local-tx-meta) + (is (= 1 (count (#'sync-apply/pending-txs test-repo)))) + (#'sync-apply/apply-remote-tx! test-repo nil [[:db/add (:db/id block) :block/updated-at 1710000000000]]) (let [block' (d/entity @conn (:db/id block))] (is (= "test" (:block/title block')))))))))) -(deftest ^:long rebase-does-not-leave-anonymous-created-by-entities-test +(deftest rebase-does-not-leave-anonymous-created-by-entities-test (testing "rebase should not leave entities with timestamps/created-by but without identity attrs" (let [{:keys [conn client-ops-conn parent child1]} (setup-parent-child) child-id (:db/id child1) @@ -858,8 +3217,8 @@ ;; Ensure the deleted block has the same created-by shape from production repros. (d/transact! conn [[:db/add child-id :logseq.property/created-by-ref page-id]]) (outliner-core/delete-blocks! conn [(d/entity @conn child-id)] {}) - (is (seq (#'db-sync/pending-txs test-repo))) - (#'db-sync/apply-remote-tx! + (is (seq (#'sync-apply/pending-txs test-repo))) + (#'sync-apply/apply-remote-tx! test-repo nil [[:db/add (:db/id parent) :block/title "parent remote"]]) @@ -873,10 +3232,10 @@ (select-keys ent [:db/id :block/created-at :block/updated-at :logseq.property/created-by-ref])))))) validation (db-validate/validate-local-db! @conn)] (is (empty? anonymous-ents) (str anonymous-ents)) - (is (empty? (map :entity (:errors validation))) + (is (empty? (non-recycle-validation-entities validation)) (str (:errors validation)))))))))) -(deftest ^:long rebase-create-then-delete-does-not-leave-anonymous-entities-test +(deftest rebase-create-then-delete-does-not-leave-anonymous-entities-test (testing "create+delete before sync should not leave anonymous entities after rebase" (let [{:keys [conn client-ops-conn parent]} (setup-parent-child) page-id (:db/id (:block/page parent))] @@ -892,8 +3251,8 @@ temp-id (:db/id temp-block)] (d/transact! conn [[:db/add temp-id :logseq.property/created-by-ref page-id]]) (outliner-core/delete-blocks! conn [temp-block] {}) - (is (>= (count (#'db-sync/pending-txs test-repo)) 2)) - (#'db-sync/apply-remote-tx! + (is (>= (count (#'sync-apply/pending-txs test-repo)) 2)) + (#'sync-apply/apply-remote-tx! test-repo nil [[:db/add (:db/id parent) :block/title "parent remote 2"]]) @@ -906,175 +3265,10 @@ (select-keys ent [:db/id :block/created-at :block/updated-at :logseq.property/created-by-ref])))))) validation (db-validate/validate-local-db! @conn)] (is (empty? anonymous-ents) (str anonymous-ents)) - (is (empty? (map :entity (:errors validation))) + (is (empty? (non-recycle-validation-entities validation)) (str (:errors validation))))))))))) -(deftest ^:long remote-retract-required-page-attr-is-ignored-test - (testing "remote tx retracting required page attrs should be ignored" - (let [{:keys [conn parent]} (setup-parent-child) - page (:block/page parent) - page-id (:db/id page) - updated-at (:block/updated-at page) - malformed-tx [[:db/retract page-id :block/updated-at updated-at]]] - (with-datascript-conns conn nil - (fn [] - (is (nil? (try - (#'db-sync/apply-remote-tx! test-repo nil malformed-tx) - nil - (catch :default e - e)))) - (let [page' (d/entity @conn page-id) - validation (db-validate/validate-local-db! @conn)] - (is (number? (:block/updated-at page'))) - (is (empty? (map :entity (:errors validation))) - (str (:errors validation))))))))) - -(deftest ^:long sanitize-tx-data-drops-partial-create-when-parent-deleted-test - (testing "created block should be dropped entirely when parent is in deleted-block-ids" - (let [{:keys [conn parent]} (setup-parent-child) - page-uuid (:block/uuid (:block/page parent)) - parent-uuid (:block/uuid parent) - child-uuid (random-uuid) - tx-data [[:db/add -1 :block/uuid child-uuid] - [:db/add -1 :block/title ""] - [:db/add -1 :block/page [:block/uuid page-uuid]] - [:db/add -1 :block/order "a0"] - [:db/add [:block/uuid child-uuid] :block/parent [:block/uuid parent-uuid]]] - sanitized (->> (#'db-sync/sanitize-tx-data @conn tx-data #{parent-uuid}) - vec)] - (is (empty? sanitized))))) - -(deftest ^:long sanitize-tx-data-removes-orphaning-parent-retract-test - (testing "when invalid reparent add is dropped, paired parent retract should be dropped too" - (let [{:keys [conn parent child1]} (setup-parent-child) - child-uuid (:block/uuid child1) - old-parent-uuid (:block/uuid parent) - missing-parent-uuid (random-uuid) - tx-data [[:db/retract [:block/uuid child-uuid] :block/parent [:block/uuid old-parent-uuid]] - [:db/add [:block/uuid child-uuid] :block/parent [:block/uuid missing-parent-uuid]]] - sanitized (->> (#'db-sync/sanitize-tx-data @conn tx-data #{}) - vec)] - (is (empty? sanitized))))) - -(deftest apply-remote-batched-create-reuses-tempid-across-batches-test - (testing "a remote block create split across batches should still resolve to one valid block" - (let [{:keys [conn parent]} (setup-parent-child) - parent-uuid (:block/uuid parent) - page-uuid (:block/uuid (:block/page parent)) - remote-uuid (random-uuid) - batched-tx-data [[[:db/add -1 :block/uuid remote-uuid] - [:db/add -1 :block/title "remote batched child"] - [:db/add -1 :block/page [:block/uuid page-uuid]] - [:db/add -1 :block/created-at 1760000000000] - [:db/add -1 :block/updated-at 1760000000000]] - [[:db/add -1 :block/parent [:block/uuid parent-uuid]] - [:db/add -1 :block/order "a4"]]]] - (with-datascript-conns conn nil - (fn [] - (let [error (try - (#'db-sync/apply-remote-tx! test-repo nil batched-tx-data) - nil - (catch :default e - e))] - (is (nil? error) - (when error - (str (ex-message error) " " (pr-str (ex-data error))))) - (when-not error - (let [block (d/entity @conn [:block/uuid remote-uuid]) - validation (db-validate/validate-local-db! @conn)] - (is (= "remote batched child" (:block/title block))) - (is (= (:db/id parent) (:db/id (:block/parent block)))) - (is (empty? (map :entity (:errors validation))) - (str (:errors validation))))))))))) - -(deftest ^:long sanitize-tx-data-drops-numeric-entity-datoms-for-deleted-block-test - (testing "deleted-block-ids should also drop datoms when entity is numeric id" - (let [{:keys [conn child1]} (setup-parent-child) - child-id (:db/id child1) - child-uuid (:block/uuid child1) - tx-data [[:db/add child-id :block/title "should-drop"]] - sanitized (->> (#'db-sync/sanitize-tx-data @conn tx-data #{child-uuid}) - vec)] - (is (empty? sanitized))))) - -(deftest ^:long sanitize-tx-data-drops-numeric-value-refs-for-deleted-block-test - (testing "deleted-block-ids should drop datoms when value is numeric id of a deleted block" - (let [{:keys [conn parent child1]} (setup-parent-child) - parent-id (:db/id parent) - child-id (:db/id child1) - child-uuid (:block/uuid child1) - tx-data [[:db/add parent-id :block/parent child-id]] - sanitized (->> (#'db-sync/sanitize-tx-data @conn tx-data #{child-uuid}) - vec)] - (is (empty? sanitized))))) - -(deftest ^:long sanitize-tx-data-drops-datoms-with-missing-numeric-entity-test - (testing "stale numeric entity ids should be dropped to avoid creating anonymous entities" - (let [{:keys [conn]} (setup-parent-child) - missing-id 999999 - tx-data [[:db/add missing-id :block/title ""]] - sanitized (->> (#'db-sync/sanitize-tx-data @conn tx-data #{}) - vec)] - (is (empty? sanitized))))) - -(deftest ^:long sanitize-tx-data-drops-datoms-with-missing-numeric-ref-value-test - (testing "stale numeric ref values should be dropped when referenced entity no longer exists" - (let [{:keys [conn parent]} (setup-parent-child) - parent-id (:db/id parent) - missing-id 999999 - tx-data [[:db/add parent-id :block/parent missing-id]] - sanitized (->> (#'db-sync/sanitize-tx-data @conn tx-data #{}) - vec)] - (is (empty? sanitized))))) - -(deftest ^:long drop-missing-block-ref-datoms-drops-mixed-id-create-on-missing-parent-test - (testing "mixed temp-id/lookup-ref create should be dropped when parent ref is missing" - (let [{:keys [conn parent]} (setup-parent-child) - page-uuid (:block/uuid (:block/page parent)) - child-uuid (random-uuid) - missing-parent-uuid (random-uuid) - tx-data [[:db/add -1 :block/uuid child-uuid] - [:db/add -1 :block/title ""] - [:db/add -1 :block/page [:block/uuid page-uuid]] - [:db/add -1 :block/order "a0"] - [:db/add [:block/uuid child-uuid] :block/parent [:block/uuid missing-parent-uuid]]] - sanitized (->> (#'db-sync/drop-missing-block-ref-datoms @conn tx-data) - vec)] - (is (empty? sanitized))))) - -(deftest ^:long drop-missing-block-ref-datoms-drops-refs-to-broken-created-block-test - (testing "refs to a broken created block should be removed as well" - (let [{:keys [conn parent child1]} (setup-parent-child) - page-uuid (:block/uuid (:block/page parent)) - child-uuid (:block/uuid child1) - broken-parent-uuid (random-uuid) - missing-parent-uuid (random-uuid) - tx-data [[:db/add -1 :block/uuid broken-parent-uuid] - [:db/add -1 :block/title ""] - [:db/add -1 :block/page [:block/uuid page-uuid]] - [:db/add -1 :block/order "a0"] - [:db/add [:block/uuid broken-parent-uuid] :block/parent [:block/uuid missing-parent-uuid]] - [:db/add [:block/uuid child-uuid] :block/parent [:block/uuid broken-parent-uuid]]] - sanitized (->> (#'db-sync/drop-missing-block-ref-datoms @conn tx-data) - vec)] - (is (empty? sanitized))))) - -(deftest ^:long drop-missing-block-ref-datoms-keeps-valid-create-test - (testing "valid create should remain unchanged when refs exist" - (let [{:keys [conn parent]} (setup-parent-child) - page-uuid (:block/uuid (:block/page parent)) - parent-uuid (:block/uuid parent) - child-uuid (random-uuid) - tx-data [[:db/add -1 :block/uuid child-uuid] - [:db/add -1 :block/title ""] - [:db/add -1 :block/page [:block/uuid page-uuid]] - [:db/add -1 :block/order "a0"] - [:db/add [:block/uuid child-uuid] :block/parent [:block/uuid parent-uuid]]] - sanitized (->> (#'db-sync/drop-missing-block-ref-datoms @conn tx-data) - vec)] - (is (= tx-data sanitized))))) - -(deftest ^:long apply-remote-tx-local-delete-remote-recreate-does-not-leave-local-only-delete-test +(deftest apply-remote-tx-local-delete-remote-recreate-does-not-leave-local-only-delete-test (testing "if remote batch recreates a locally deleted block, client should not end with unsynced local-only deletion" (let [conn (db-test/create-conn-with-blocks {:pages-and-blocks @@ -1104,11 +3298,11 @@ (fn [] ;; Local client deletes target and has pending txs. (outliner-core/delete-blocks! conn [target] {}) - (is (seq (#'db-sync/pending-txs test-repo))) + (is (seq (#'sync-apply/pending-txs test-repo))) ;; Remote side deletes then recreates same uuid in one batch. - (#'db-sync/apply-remote-tx! test-repo client remote-tx) + (#'sync-apply/apply-remote-tx! test-repo client remote-tx) (let [target' (d/entity @conn [:block/uuid target-uuid]) - pending (#'db-sync/pending-txs test-repo)] + pending (#'sync-apply/pending-txs test-repo)] ;; Current bug: target disappears locally while pending is empty. ;; Valid states: ;; 1) target exists (remote recreation applied), or @@ -1118,53 +3312,7 @@ (when target' (is (= "remote-restored" (:block/title target')))))))))) -(deftest ^:long apply-remote-tx-retract-recreate-with-stale-lookup-updates-does-not-write-invalid-entity-test - (testing "remote tx with retractEntity+recreate and stale lookup updates should not create anonymous entities" - (let [conn (db-test/create-conn-with-blocks - {:pages-and-blocks - [{:page {:block/title "page 1"} - :blocks [{:block/title "parent" - :build/children [{:block/title "child 1"}]}]}]}) - parent (db-test/find-block-by-content @conn "parent") - child1 (db-test/find-block-by-content @conn "child 1") - parent-uuid (:block/uuid parent) - child-uuid (:block/uuid child1) - page-uuid (:block/uuid (:block/page parent)) - parent-temp (str parent-uuid) - child-temp (str child-uuid) - now 1772720568000 - remote-tx [[:db/retractEntity [:block/uuid parent-uuid]] - [:db/retractEntity [:block/uuid child-uuid]] - ;; stale updates targeting lookup refs that should no longer hit old eids - [:db/add [:block/uuid child-uuid] :block/title "2"] - [:db/add [:block/uuid child-uuid] :block/updated-at now] - ;; recreate parent + child - [:db/add parent-temp :block/uuid parent-uuid] - [:db/add parent-temp :block/title "1"] - [:db/add parent-temp :block/page [:block/uuid page-uuid]] - [:db/add parent-temp :block/parent [:block/uuid page-uuid]] - [:db/add parent-temp :block/order "a0"] - [:db/add parent-temp :block/created-at now] - [:db/add parent-temp :block/updated-at now] - [:db/add child-temp :block/uuid child-uuid] - [:db/add child-temp :block/title "2"] - [:db/add child-temp :block/page [:block/uuid page-uuid]] - [:db/add child-temp :block/parent parent-temp] - [:db/add child-temp :block/order "a1"] - [:db/add child-temp :block/created-at now] - [:db/add child-temp :block/updated-at now]]] - (with-datascript-conns conn nil - (fn [] - (is (nil? (try - (#'db-sync/apply-remote-tx! test-repo nil remote-tx) - nil - (catch :default e - e)))) - (let [validation (db-validate/validate-local-db! @conn)] - (is (empty? (map :entity (:errors validation))) - (str (:errors validation))))))))) - -(deftest ^:long offload-large-title-test +(deftest offload-large-title-test (testing "large titles are offloaded to object storage with placeholder" (async done (let [large-title (apply str (repeat 5000 "a")) @@ -1174,7 +3322,7 @@ (swap! upload-calls conj title) (p/resolved {:asset-uuid "title-1" :asset-type "txt"}))] - (-> (p/let [result (#'db-sync/offload-large-titles + (-> (p/let [result (sync-large-title/offload-large-titles tx-data {:repo test-repo :graph-id "graph-1" @@ -1186,24 +3334,103 @@ {:asset-uuid "title-1" :asset-type "txt"}]] result))) + (p/catch (fn [e] + (is false (str e)))) (p/finally done)))))) -(deftest ^:long offload-small-title-test +(deftest offload-small-title-test (testing "small titles are not offloaded" (async done (let [tx-data [[:db/add 1 :block/title "short"]] upload-fn (fn [_repo _graph-id _title _aes-key] (p/rejected (ex-info "unexpected upload" {})))] - (-> (p/let [result (#'db-sync/offload-large-titles + (-> (p/let [result (sync-large-title/offload-large-titles tx-data {:repo test-repo :graph-id "graph-1" :upload-fn upload-fn :aes-key nil})] (is (= tx-data result))) + (p/catch (fn [e] + (is false (str e)))) (p/finally done)))))) -(deftest ^:long upload-large-title-encrypts-transit-payload-test +(deftest upload-preparation-processes-datoms-in-batches-test + (testing "upload preparation should stream work batch by batch instead of sending the full graph at once" + (async done + (let [datoms [{:e 1 :a :block/title :v "a"} + {:e 2 :a :block/title :v "b"} + {:e 3 :a :block/title :v "c"} + {:e 4 :a :block/title :v "d"} + {:e 5 :a :block/title :v "e"}] + seen-batches (atom []) + progress-calls (atom [])] + (-> (p/let [_ (sync-large-title/process-upload-datoms-in-batches! + datoms + {:batch-size 2 + :process-batch-f (fn [batch] + (swap! seen-batches conj (mapv :e batch)) + (p/resolved nil)) + :progress-f (fn [processed total] + (swap! progress-calls conj [processed total]))})] + (is (= [[1 2] [3 4] [5]] @seen-batches)) + (is (= [[2 5] [4 5] [5 5]] @progress-calls))) + (p/finally done)))))) + +(deftest create-temp-sqlite-db-uses-opfs-pool-test + (testing "temp upload db should use an OPFS-backed sqlite db instead of :memory:" + (async done + (let [sqlite-prev @worker-state/*sqlite + platform-prev (try + (platform/current) + (catch :default _ nil)) + sqlite #js {:sqlite? true} + pool #js {:pool? true} + opened-opts (atom []) + installed-pools (atom []) + test-platform {:env {:runtime :node + :owner-source :test} + :storage {:install-opfs-pool (fn [sqlite* pool-name] + (swap! installed-pools conj {:sqlite sqlite* + :pool-name pool-name}) + pool) + :resolve-db-path (fn [repo _pool suffix] + (str "/tmp/" repo suffix)) + :remove-vfs! (fn [_pool] nil)} + :kv {:get (fn [_] nil) + :set! (fn [_ _] nil)} + :broadcast {:post-message! (fn [_ _] nil)} + :websocket {:connect (fn [_] nil)} + :crypto {} + :timers {} + :sqlite {:init! (fn [] nil) + :open-db (fn [opts] + (swap! opened-opts conj opts) + #js {:close (fn [] nil) + :exec (fn [& _] nil)})}}] + (platform/set-platform! test-platform) + (reset! worker-state/*sqlite sqlite) + (-> (p/let [{:keys [db path]} (sync-temp-sqlite/ (p/let [aes-key (crypt/= (.indexOf url "/pull") 0) - (js/Promise.resolve #js {:ok true - :status 200 - :text (fn [] (js/Promise.resolve "{\"type\":\"pull/ok\",\"t\":7,\"txs\":[]}"))}) - - (>= (.indexOf url "/snapshot/download") 0) - (js/Promise.resolve #js {:ok true - :status 200 - :text (fn [] (js/Promise.resolve "{\"ok\":true,\"key\":\"graph-1/snapshot-1.snapshot\",\"url\":\"\"}"))}) - - :else - (js/Promise.reject (js/Error. (str "unexpected fetch url: " url)))))) - (-> (p/let [_ (db-sync/download-graph-by-id! test-repo "graph-1" false)] - (is false "expected missing snapshot url failure")) - (p/catch (fn [e] - (is (= "missing-field" (ex-message e))) - (is (= :snapshot-url (get-in (ex-data e) [:field]))))) - (p/finally - (fn [] - (set! js/fetch fetch-prev) - (reset! worker-state/*db-sync-config config-prev) - (done)))))))) - -(deftest download-graph-by-id-parses-jsonl-datoms-test - (testing "snapshot download parses ndjson transit datoms" - (async done - (let [fetch-prev js/fetch - config-prev @worker-state/*db-sync-config - asset-url "https://example.com/assets/graph-1.snapshot" - datoms [{:e 1 :a :db/ident :v :logseq.class/Page :tx 1 :added true} - {:e 2 :a :block/title :v "hello" :tx 1 :added true}] - payload-str (str (sqlite-util/write-transit-str (first datoms)) "\n" - (sqlite-util/write-transit-str (second datoms)) "\n") - payload (.encode (js/TextEncoder.) payload-str)] - (reset! worker-state/*db-sync-config {:http-base "https://example.com" - :auth-token "token-value"}) - (set! js/fetch - (fn [url _opts] - (cond - (>= (.indexOf url "/pull") 0) - (js/Promise.resolve #js {:ok true - :status 200 - :text (fn [] (js/Promise.resolve "{\"type\":\"pull/ok\",\"t\":7,\"txs\":[]}"))}) - - (>= (.indexOf url "/snapshot/download") 0) - (js/Promise.resolve #js {:ok true - :status 200 - :text (fn [] (js/Promise.resolve (str "{\"ok\":true,\"key\":\"graph-1/snapshot-1.snapshot\",\"url\":\"" asset-url "\"}")))}) - - (= url asset-url) - (js/Promise.resolve #js {:ok true - :status 200 - :arrayBuffer (fn [] (js/Promise.resolve (.-buffer payload)))}) - - :else - (js/Promise.reject (js/Error. (str "unexpected fetch url: " url)))))) - (-> (p/let [result (db-sync/download-graph-by-id! test-repo "graph-1" false)] - (is (= "graph-1" (:graph-id result))) - (is (= 7 (:remote-tx result))) - (is (= false (:graph-e2ee? result))) - (is (= 2 (:datom-count result))) - (is (= datoms (vec (:datoms result))))) - (p/catch (fn [e] - (is false (str "unexpected error: " e)))) - (p/finally - (fn [] - (set! js/fetch fetch-prev) - (reset! worker-state/*db-sync-config config-prev) - (done)))))))) - -(deftest download-graph-by-id-emits-shared-download-milestones-test - (testing "download emits shared rtc.log/download milestones" - (async done - (let [fetch-prev js/fetch - config-prev @worker-state/*db-sync-config - logs (atom []) - asset-url "https://example.com/assets/graph-1.snapshot" - payload-str (str (sqlite-util/write-transit-str {:e 1 :a :db/ident :v :logseq.class/Page :tx 1 :added true}) "\n") - payload (.encode (js/TextEncoder.) payload-str)] - (reset! worker-state/*db-sync-config {:http-base "https://example.com" - :auth-token "token-value"}) - (set! js/fetch - (fn [url _opts] - (cond - (>= (.indexOf url "/pull") 0) - (js/Promise.resolve #js {:ok true - :status 200 - :text (fn [] (js/Promise.resolve "{\"type\":\"pull/ok\",\"t\":9,\"txs\":[]}"))}) - - (>= (.indexOf url "/snapshot/download") 0) - (js/Promise.resolve #js {:ok true - :status 200 - :text (fn [] (js/Promise.resolve (str "{\"ok\":true,\"key\":\"graph-1/snapshot-1.snapshot\",\"url\":\"" asset-url "\"}")))}) - - (= url asset-url) - (js/Promise.resolve #js {:ok true - :status 200 - :headers #js {:get (fn [header] - (when (= header "content-length") - (str (.-byteLength payload))))} - :arrayBuffer (fn [] (js/Promise.resolve (.-buffer payload)))}) - - :else - (js/Promise.reject (js/Error. (str "unexpected fetch url: " url)))))) - (-> (p/with-redefs [sync-log-and-state/rtc-log (fn [type payload] - (swap! logs conj [type payload]) - nil)] - (db-sync/download-graph-by-id! test-repo "graph-1" false)) - (p/then (fn [result] - (is (= "graph-1" (:graph-id result))) - (is (= 9 (:remote-tx result))) - (is (= false (:graph-e2ee? result))) - (is (= 1 (:datom-count result))) - (let [messages (mapv (fn [[_ payload]] (:message payload)) @logs)] - (is (some #(= "Preparing graph snapshot download" %) messages)) - (is (some #(string/includes? % "Start downloading graph snapshot") messages)) - (is (some #(= "Graph snapshot downloaded" %) messages))) - (is (every? (fn [[type payload]] - (and (= :rtc.log/download type) - (= "graph-1" (:graph-uuid payload)))) - @logs)))) - (p/catch (fn [e] - (is false (str "unexpected error: " e)))) - (p/finally - (fn [] - (set! js/fetch fetch-prev) - (reset! worker-state/*db-sync-config config-prev) - (done)))))))) - -(deftest ensure-upload-graph-identity-creates-remote-graph-when-local-graph-id-missing-test - (testing "first upload bootstrap creates and persists a remote graph when local metadata is missing" - (async done - (let [conn (d/create-conn {}) - client-ops-conn (d/create-conn client-op/schema-in-db) - self-prev (js* "globalThis.self") - fetch-prev js/fetch - config-prev @worker-state/*db-sync-config - created-graph-id "c52bf9d4-3a95-4f17-9c8c-7f86eef5f75d" - fetch-calls (atom [])] - (aset js/globalThis "self" #js {:postMessage (fn [_] nil)}) - (reset! worker-state/*db-sync-config {:http-base "https://example.com" - :auth-token "token-value"}) - (set! js/fetch - (fn [url opts] - (let [method (or (some-> opts .-method) "GET")] - (swap! fetch-calls conj {:url url :method method}) - (cond - (and (= "https://example.com/graphs" url) - (= "GET" method)) - (json-response 200 {:graphs []}) - - (and (= "https://example.com/graphs" url) - (= "POST" method)) - (json-response 200 {:graph-id created-graph-id - :graph-e2ee? false}) - - :else - (js/Promise.reject (js/Error. (str "unexpected fetch url: " method " " url))))))) - (-> (with-worker-conns {test-repo conn} {test-repo client-ops-conn} - (fn [] - (with-redefs [db-sync/coerce-http-request (fn [_schema-key body] body)] - (p/let [result (#'db-sync/ (ldb/get-graph-rtc-uuid @conn) str))) - (is (= [{:url "https://example.com/graphs" :method "GET"} - {:url "https://example.com/graphs" :method "POST"}] - @fetch-calls)))))) - (p/catch (fn [e] - (is false (str "unexpected error: " e)))) - (p/finally (fn [] - (aset js/globalThis "self" self-prev) - (set! js/fetch fetch-prev) - (reset! worker-state/*db-sync-config config-prev))) - (p/finally done)))))) - -(deftest ensure-upload-graph-identity-reuses-existing-remote-graph-when-local-graph-id-missing-test - (testing "first upload bootstrap reuses a same-name remote graph instead of creating a duplicate" - (async done - (let [conn (d/create-conn {}) - client-ops-conn (d/create-conn client-op/schema-in-db) - self-prev (js* "globalThis.self") - fetch-prev js/fetch - config-prev @worker-state/*db-sync-config - remote-graph-id "56cfcfc5-035a-4c6a-a5ba-70fe9cc27530" - fetch-calls (atom [])] - (aset js/globalThis "self" #js {:postMessage (fn [_] nil)}) - (reset! worker-state/*db-sync-config {:http-base "https://example.com" - :auth-token "token-value"}) - (set! js/fetch - (fn [url opts] - (let [method (or (some-> opts .-method) "GET")] - (swap! fetch-calls conj {:url url :method method}) - (cond - (and (= "https://example.com/graphs" url) - (= "GET" method)) - (json-response 200 {:graphs [{:graph-name test-repo - :graph-id remote-graph-id - :graph-e2ee? false - :created-at 1 - :updated-at 1}]}) - - :else - (js/Promise.reject (js/Error. (str "unexpected fetch url: " method " " url))))))) - (-> (with-worker-conns {test-repo conn} {test-repo client-ops-conn} - (fn [] - (p/let [result (#'db-sync/ (ldb/get-graph-rtc-uuid @conn) str))) - (is (= [{:url "https://example.com/graphs" :method "GET"}] - @fetch-calls))))) - (p/catch (fn [e] - (is false (str "unexpected error: " e)))) - (p/finally (fn [] - (aset js/globalThis "self" self-prev) - (set! js/fetch fetch-prev) - (reset! worker-state/*db-sync-config config-prev))) - (p/finally done)))))) - -(deftest ensure-upload-graph-identity-propagates-create-graph-failures-test - (testing "first upload bootstrap rejects when remote graph creation fails" - (async done - (let [client-ops-conn (d/create-conn client-op/schema-in-db) - self-prev (js* "globalThis.self") - fetch-prev js/fetch - config-prev @worker-state/*db-sync-config] - (aset js/globalThis "self" #js {:postMessage (fn [_] nil)}) - (reset! worker-state/*db-sync-config {:http-base "https://example.com" - :auth-token "token-value"}) - (set! js/fetch - (fn [url opts] - (let [method (or (some-> opts .-method) "GET")] - (cond - (and (= "https://example.com/graphs" url) - (= "GET" method)) - (json-response 200 {:graphs []}) - - (and (= "https://example.com/graphs" url) - (= "POST" method)) - (json-response 500 {:error "create failed"}) - - :else - (js/Promise.reject (js/Error. (str "unexpected fetch url: " method " " url))))))) - (-> (with-worker-conns {} {test-repo client-ops-conn} - (fn [] - (with-redefs [db-sync/coerce-http-request (fn [_schema-key body] body)] - (p/let [_ (#'db-sync/ opts .-method) "GET")] - (cond - (and (= "https://example.com/graphs" url) - (= "GET" method)) - (json-response 200 {:graphs []}) - - (and (= "https://example.com/graphs" url) - (= "POST" method)) - (do - (reset! create-body (-> opts .-body js/JSON.parse (js->clj :keywordize-keys true))) - (json-response 200 {:graph-id "encrypted-graph-id"})) - - :else - (js/Promise.reject (js/Error. (str "unexpected fetch url: " method " " url))))))) - (-> (with-worker-conns {} {test-repo client-ops-conn} - (fn [] - (with-redefs [db-sync/coerce-http-request (fn [_schema-key body] body) - sync-crypt/graph-e2ee? (fn [_repo] nil)] - (p/let [result (#'db-sync/ (ldb/get-graph-rtc-uuid @conn) str))) - (is (= 0 @list-calls)))))))] - (-> result-p - (p/catch (fn [e] - (is false (str "unexpected error: " e)))) - (p/finally done)))))) - -(deftest ^:long rehydrate-large-title-test +(deftest rehydrate-large-title-test (testing "rehydrate fills empty title from object storage" (async done (let [conn (db-test/create-conn-with-blocks @@ -1633,24 +3520,28 @@ (d/datoms @conn :eavt)) obj (some-> obj-datoms first :v)] (is (= 1 (count obj-datoms))) - (is (true? (#'db-sync/large-title-object? obj)))) + (is (true? (sync-large-title/large-title-object? obj)))) (let [items (->> tx-data (keep (fn [item] (when (and (vector? item) (= :db/add (nth item 0)) (= :logseq.property.sync/large-title-object (nth item 2)) - (true? (#'db-sync/large-title-object? (nth item 3)))) + (true? (sync-large-title/large-title-object? (nth item 3)))) {:e (nth item 1) :obj (nth item 3)}))) (distinct))] (is (= 1 (count items)))) - (-> (p/let [result (#'db-sync/rehydrate-large-titles! + (-> (p/let [result (sync-large-title/rehydrate-large-titles! test-repo {:tx-data tx-data :conn conn :graph-id "graph-1" :download-fn download-fn - :aes-key nil}) + :aes-key nil + :get-conn-f worker-state/get-datascript-conn + :graph-e2ee?-f sync-crypt/graph-e2ee? + :ensure-graph-aes-key-f sync-crypt/pending-local-tx-count {test-repo 9}) (db-worker/close-db! test-repo) (is (= #{:db :search :client-ops} (set @closed))) (is (= 1 @pause-calls)) + (is (nil? (get @search/fuzzy-search-indices test-repo))) + (is (nil? (get @client-op/*repo->pending-local-tx-count test-repo))) (is (nil? (get @worker-state/*sqlite-conns test-repo))))))) +(deftest client-ops-cleanup-timer-starts-once-and-clears-on-close-test + (restoring-worker-state + (fn [] + (let [scheduled (atom []) + cleared (atom []) + original-set-interval js/setInterval + original-clear-interval js/clearInterval + fake-db' #js {:close (fn [] nil)} + timer-id #js {:id "timer-1"}] + (set! js/setInterval + (fn [f interval-ms] + (swap! scheduled conj {:fn f :interval-ms interval-ms}) + timer-id)) + (set! js/clearInterval + (fn [id] + (swap! cleared conj id))) + (try + (reset! worker-state/*sqlite-conns + {test-repo {:db fake-db' + :search fake-db' + :client-ops fake-db'}}) + (reset! worker-state/*datascript-conns {test-repo :datascript}) + (reset! worker-state/*client-ops-conns {test-repo :client-ops}) + (reset! (deref #'db-worker/*client-ops-cleanup-timers) {}) + + (#'db-worker/ensure-client-ops-cleanup-timer! test-repo) + (#'db-worker/ensure-client-ops-cleanup-timer! test-repo) + + (is (= 1 (count @scheduled))) + (is (= (* 3 60 60 1000) (:interval-ms (first @scheduled)))) + (is (= timer-id (get @(deref #'db-worker/*client-ops-cleanup-timers) test-repo))) + + (db-worker/close-db! test-repo) + + (is (= [timer-id] @cleared)) + (is (nil? (get @(deref #'db-worker/*client-ops-cleanup-timers) test-repo))) + (finally + (set! js/setInterval original-set-interval) + (set! js/clearInterval original-clear-interval))))))) + (deftest complete-datoms-import-invalidates-existing-search-db-test (async done (restoring-worker-state @@ -335,3 +379,33 @@ (p/catch (fn [error] (is false (str error)) (done))))))))))) + +(deftest thread-api-recompute-checksum-diagnostics-passes-sync-diagnostics-test + (restoring-worker-state + (fn [] + (let [recompute (@thread-api/*thread-apis :thread-api/recompute-checksum-diagnostics) + conn (d/create-conn db-schema/schema) + captured (atom nil) + latest-tx-prev @db-sync/*repo->latest-remote-tx + latest-checksum-prev @db-sync/*repo->latest-remote-checksum + result {:recomputed-checksum "recomputed" + :checksum-attrs [:block/uuid] + :blocks []}] + (reset! worker-state/*datascript-conns {test-repo conn}) + (reset! db-sync/*repo->latest-remote-tx {test-repo 22}) + (reset! db-sync/*repo->latest-remote-checksum {test-repo "remote-checksum"}) + (try + (with-redefs [client-op/get-local-tx (fn [_repo] 10) + client-op/get-local-checksum (fn [_repo] "local-checksum") + worker-db-validate/recompute-checksum-diagnostics (fn [& args] + (reset! captured args) + result)] + (is (= result (recompute test-repo))) + (is (= [test-repo + conn + {:local-checksum "local-checksum" + :remote-checksum "remote-checksum"}] + @captured))) + (finally + (reset! db-sync/*repo->latest-remote-tx latest-tx-prev) + (reset! db-sync/*repo->latest-remote-checksum latest-checksum-prev))))))) diff --git a/src/test/frontend/worker/node_sync_test.cljs b/src/test/frontend/worker/node_sync_test.cljs new file mode 100644 index 0000000000..85fc034bdb --- /dev/null +++ b/src/test/frontend/worker/node_sync_test.cljs @@ -0,0 +1,67 @@ +(ns frontend.worker.node-sync-test + (:require + [cljs.test :refer [async deftest is]] + [frontend.worker.platform :as platform] + [frontend.worker.state :as worker-state] + [frontend.worker.sync :as db-sync] + [promesa.core :as p])) + +(def ^:private test-repo "test-db-sync-repo") + +(deftest resolve-ws-token-cli-owner-source-prefers-config-token-test + (async done + (let [refresh-calls (atom 0) + config-prev @worker-state/*db-sync-config + state-prev @worker-state/*state + main-thread-prev @worker-state/*main-thread] + (reset! worker-state/*db-sync-config {:auth-token "cli-config-token"}) + (reset! worker-state/*state (assoc state-prev :auth/id-token "state-token")) + (reset! worker-state/*main-thread + (fn [qkw _direct-pass? _args-list] + (when (= qkw :thread-api/ensure-id&access-token) + (swap! refresh-calls inc)) + (p/resolved {:id-token "refreshed-token"}))) + (with-redefs [platform/current (fn [] {:env {:runtime :node + :owner-source :cli}}) + db-sync/id-token-expired? (fn [_token] true)] + (-> (#'db-sync/js [{:id "1" :title "alpha beta"}]) + (clj->js {:keys ["title"] + :shouldSort true + :tokenize true + :distance 1024 + :threshold 0.5 + :minMatchCharLength 1}))] + (.add indice (clj->js {:id "2" :title "gamma"})) + (.remove indice (fn [page] (= "2" (aget page "id")))) + (let [result (js->clj (.search indice "alpha" (clj->js {:limit 5})) :keywordize-keys true)] + (is (some? ctor)) + (is (= 1 (count result))) + (is (= "alpha beta" (get-in result [0 :item :title]))))))) diff --git a/src/test/frontend/worker/sync/client_op_test.cljs b/src/test/frontend/worker/sync/client_op_test.cljs index 3b882d159b..e63b7d3022 100644 --- a/src/test/frontend/worker/sync/client_op_test.cljs +++ b/src/test/frontend/worker/sync/client_op_test.cljs @@ -1,5 +1,5 @@ (ns frontend.worker.sync.client-op-test - (:require [cljs.test :refer [deftest is]] + (:require [cljs.test :refer [deftest is testing]] [datascript.core :as d] [frontend.worker.state :as worker-state] [frontend.worker.sync.client-op :as client-op])) @@ -17,3 +17,40 @@ (is (= #{"graph-2"} (set (map :v graph-uuid-datoms))))) (finally (reset! worker-state/*client-ops-conns prev-client-ops-conns))))) + +(deftest cleanup-finished-history-ops-removes-only-unreferenced-finished-txs-test + (let [repo "repo-cleanup" + conn (d/create-conn client-op/schema-in-db) + prev-client-ops-conns @worker-state/*client-ops-conns + keep-tx-id (random-uuid) + remove-tx-id (random-uuid) + pending-tx-id (random-uuid)] + (reset! worker-state/*client-ops-conns {repo conn}) + (try + (d/transact! conn + [{:db-sync/tx-id keep-tx-id + :db-sync/pending? false} + {:db-sync/tx-id remove-tx-id + :db-sync/pending? false} + {:db-sync/tx-id pending-tx-id + :db-sync/pending? true} + {:db-ident :metadata/local + :local-tx 99}]) + + (is (= 1 (client-op/cleanup-finished-history-ops! repo #{keep-tx-id}))) + (is (some? (d/entity @conn [:db-sync/tx-id keep-tx-id]))) + (is (nil? (d/entity @conn [:db-sync/tx-id remove-tx-id]))) + (is (some? (d/entity @conn [:db-sync/tx-id pending-tx-id]))) + (is (= 99 (:local-tx (d/entity @conn [:db-ident :metadata/local])))) + (finally + (reset! worker-state/*client-ops-conns prev-client-ops-conns))))) + +(deftest cleanup-finished-history-ops-no-conn-is-noop-test + (let [repo "repo-no-conn" + prev-client-ops-conns @worker-state/*client-ops-conns] + (reset! worker-state/*client-ops-conns {}) + (try + (testing "cleanup should be safe when client-ops conn is missing" + (is (= 0 (client-op/cleanup-finished-history-ops! repo #{})))) + (finally + (reset! worker-state/*client-ops-conns prev-client-ops-conns))))) diff --git a/src/test/frontend/worker/sync/crypt_test.cljs b/src/test/frontend/worker/sync/crypt_test.cljs index eae402aa0e..dd8db26505 100644 --- a/src/test/frontend/worker/sync/crypt_test.cljs +++ b/src/test/frontend/worker/sync/crypt_test.cljs @@ -8,6 +8,7 @@ [frontend.worker.platform :as platform] [frontend.worker.state :as worker-state] [frontend.worker.sync.crypt :as sync-crypt] + [frontend.worker.sync.util :as sync-util] [logseq.db :as ldb] [promesa.core :as p])) @@ -26,7 +27,7 @@ (try (with-redefs [platform/current (fn [] {:env {:runtime :node :owner-source :cli}})] - (is (= "cli-config-token" (#'sync-crypt/auth-token)))) + (is (= "cli-config-token" (sync-util/auth-token)))) (finally (reset! worker-state/*db-sync-config config-prev) (reset! worker-state/*state state-prev))))) @@ -62,7 +63,7 @@ (= token "cli-config-token") {:sub "cli-user-id"} (= token "state-token") {:sub "state-user-id"} :else {}))] - (is (= "state-token" (#'sync-crypt/auth-token))) + (is (= "state-token" (sync-util/auth-token))) (is (= "state-user-id" (#'sync-crypt/get-user-uuid)))) (finally (reset! worker-state/*db-sync-config config-prev) @@ -352,3 +353,72 @@ (p/catch (fn [e] (is false (str e)) (done)))))) + +(deftest fetch-graph-aes-key-for-download-retries-with-fresh-rsa-key-pair-test + (async done + (let [clear-user-rsa-cache-calls* (atom 0) + get-pair-calls* (atom 0)] + (-> (p/with-redefs [sync-crypt/e2ee-base (fn [] "https://sync.example.test") + sync-crypt/get-user-uuid (fn [] "user-1") + sync-crypt/ (p/with-redefs [sync-crypt/e2ee-base (fn [] "https://sync.example.test") + sync-crypt/get-user-uuid (fn [] nil) + sync-crypt/journal-day (js/Date.)) + today-title (date-time-util/int->journal-title + today-day + (:logseq.property.journal/title-format + (d/entity @conn :logseq.class/Journal))) + [_ today-page-uuid] (outliner-op/apply-ops! conn + [[:create-page [today-title + {:today-journal? true + :redirect? false + :split-namespace? true + :tags ()}]]] + (local-tx-meta {:client-id "test-client"})) + today-page-id (:db/id (d/entity @conn [:block/uuid today-page-uuid])) + today-child-uuid (random-uuid) + _ (outliner-op/apply-ops! conn + [[:insert-blocks [[{:block/uuid today-child-uuid + :block/title "today undo child"}] + today-page-id + {:sibling? false + :keep-uuid? true}]]] + (local-tx-meta {:client-id "test-client"})) + class-ident-before (:db/ident (d/entity @conn [:block/uuid class-uuid])) + property-ident-before (:db/ident (d/entity @conn [:block/uuid property-uuid]))] + (worker-undo-redo/clear-history! test-repo) + + (outliner-op/apply-ops! conn + [[:delete-page [class-uuid {}]]] + (local-tx-meta {:client-id "test-client"})) + (is (nil? (d/entity @conn [:block/uuid class-uuid]))) + (is (map? (worker-undo-redo/undo test-repo))) + (is (= class-ident-before + (:db/ident (d/entity @conn [:block/uuid class-uuid])))) + + (worker-undo-redo/clear-history! test-repo) + (outliner-op/apply-ops! conn + [[:delete-page [property-uuid {}]]] + (local-tx-meta {:client-id "test-client"})) + (is (nil? (d/entity @conn :user.property/undo-rating))) + (is (map? (worker-undo-redo/undo test-repo))) + (is (= property-ident-before + (:db/ident (d/entity @conn [:block/uuid property-uuid])))) + + (worker-undo-redo/clear-history! test-repo) + (outliner-op/apply-ops! conn + [[:delete-page [today-page-uuid {}]]] + (local-tx-meta {:client-id "test-client"})) + (is (some? (d/entity @conn [:block/uuid today-page-uuid]))) + (is (nil? (d/entity @conn [:block/uuid today-child-uuid]))) + (is (map? (worker-undo-redo/undo test-repo))) + (is (some? (d/entity @conn [:block/uuid today-child-uuid])))))) + +(deftest redo-create-page-restores-recycled-page-test + (testing "redoing create-page should restore recycled page instead of keeping it recycled" + (worker-undo-redo/clear-history! test-repo) + (let [conn (worker-state/get-datascript-conn test-repo) + page-title "redo create page alpha"] + (outliner-op/apply-ops! conn + [[:create-page [page-title {:redirect? false + :split-namespace? true + :tags ()}]]] + (local-tx-meta {:client-id "test-client"})) + (let [created-page (db-test/find-page-by-title @conn page-title)] + (is (some? created-page)) + (is (false? (ldb/recycled? created-page)))) + + (is (seq (undo-all!))) + (let [deleted-page (db-test/find-page-by-title @conn page-title)] + (is (some? deleted-page)) + (is (true? (ldb/recycled? deleted-page)))) + + (is (seq (redo-all!))) + (let [page-after-redo (db-test/find-page-by-title @conn page-title)] + (is (some? page-after-redo)) + (is (false? (ldb/recycled? page-after-redo))))))) + +(deftest redo-template-insert-restores-valid-blocks-test + (testing "redoing template insert after undo-all should restore inserted template blocks without invalid refs" + (worker-undo-redo/clear-history! test-repo) + (let [conn (worker-state/get-datascript-conn test-repo) + {:keys [page-uuid]} (seed-page-parent-child!) + page-id (:db/id (d/entity @conn [:block/uuid page-uuid])) + template-root-uuid (random-uuid) + template-a-uuid (random-uuid) + template-b-uuid (random-uuid) + empty-target-uuid (random-uuid)] + (outliner-op/apply-ops! + conn + [[:insert-blocks [[{:block/uuid template-root-uuid + :block/title "template 1" + :block/tags #{:logseq.class/Template}} + {:block/uuid template-a-uuid + :block/title "a" + :block/parent [:block/uuid template-root-uuid]} + {:block/uuid template-b-uuid + :block/title "b" + :block/parent [:block/uuid template-a-uuid]}] + page-id + {:sibling? false + :keep-uuid? true}]]] + (local-tx-meta {:client-id "test-client"})) + (outliner-op/apply-ops! + conn + [[:insert-blocks [[{:block/uuid empty-target-uuid + :block/title ""}] + page-id + {:sibling? false + :keep-uuid? true}]]] + (local-tx-meta {:client-id "test-client"})) + (let [template-root (d/entity @conn [:block/uuid template-root-uuid]) + empty-target (d/entity @conn [:block/uuid empty-target-uuid]) + template-blocks (->> (ldb/get-block-and-children @conn template-root-uuid + {:include-property-block? true}) + rest) + blocks-to-insert (cons (assoc (first template-blocks) + :logseq.property/used-template (:db/id template-root)) + (rest template-blocks))] + (outliner-op/apply-ops! + conn + [[:insert-blocks [blocks-to-insert + (:db/id empty-target) + {:sibling? true + :replace-empty-target? true + :insert-template? true}]]] + (local-tx-meta {:client-id "test-client"}))) + + (is (seq (undo-all!))) + (is (seq (redo-all!))) + + (let [inserted-a-id (d/q '[:find ?b . + :in $ ?template-uuid + :where + [?template :block/uuid ?template-uuid] + [?b :logseq.property/used-template ?template] + [?b :block/title "a"]] + @conn + template-root-uuid) + inserted-a (when inserted-a-id (d/entity @conn inserted-a-id))] + (is (some? inserted-a)) + (is (= template-root-uuid + (some-> inserted-a :logseq.property/used-template :block/uuid))))))) + +(deftest undo-history-canonicalizes-template-replace-empty-target-to-apply-template-test + (testing "template replace-empty-target history keeps semantic forward op and restores empty target" + (worker-undo-redo/clear-history! test-repo) + (let [conn (worker-state/get-datascript-conn test-repo) + {:keys [page-uuid]} (seed-page-parent-child!) + page-id (:db/id (d/entity @conn [:block/uuid page-uuid])) + template-root-uuid (random-uuid) + template-a-uuid (random-uuid) + template-b-uuid (random-uuid) + empty-target-uuid (random-uuid)] + (outliner-op/apply-ops! + conn + [[:insert-blocks [[{:block/uuid template-root-uuid + :block/title "template 1" + :block/tags #{:logseq.class/Template}} + {:block/uuid template-a-uuid + :block/title "a" + :block/parent [:block/uuid template-root-uuid]} + {:block/uuid template-b-uuid + :block/title "b" + :block/parent [:block/uuid template-a-uuid]}] + page-id + {:sibling? false + :keep-uuid? true}]]] + (local-tx-meta {:client-id "test-client"})) + (outliner-op/apply-ops! + conn + [[:insert-blocks [[{:block/uuid empty-target-uuid + :block/title ""}] + page-id + {:sibling? false + :keep-uuid? true}]]] + (local-tx-meta {:client-id "test-client"})) + (let [template-root (d/entity @conn [:block/uuid template-root-uuid]) + empty-target (d/entity @conn [:block/uuid empty-target-uuid]) + template-blocks (->> (ldb/get-block-and-children @conn template-root-uuid + {:include-property-block? true}) + rest) + blocks-to-insert (cons (assoc (first template-blocks) + :logseq.property/used-template (:db/id template-root)) + (rest template-blocks))] + (outliner-op/apply-ops! + conn + [[:insert-blocks [blocks-to-insert + (:db/id empty-target) + {:sibling? true + :replace-empty-target? true + :insert-template? true}]]] + (local-tx-meta {:client-id "test-client"}))) + (let [data (latest-undo-history-data) + inverse-ops (:db-sync/inverse-outliner-ops data) + delete-op (some #(when (= :delete-blocks (first %)) %) inverse-ops) + restore-empty-insert-op (some #(when (= :insert-blocks (first %)) %) inverse-ops) + restore-empty-save-op (some #(when (= :save-block (first %)) %) inverse-ops)] + (is (contains? #{:apply-template :insert-blocks} + (ffirst (:db-sync/forward-outliner-ops data)))) + (is (some? delete-op)) + (is (or (some? restore-empty-insert-op) + (some? restore-empty-save-op))) + (if restore-empty-insert-op + (do + (is (= empty-target-uuid + (get-in restore-empty-insert-op [1 0 0 :block/uuid]))) + (is (= "" + (get-in restore-empty-insert-op [1 0 0 :block/title])))) + (do + (is (= empty-target-uuid + (get-in restore-empty-save-op [1 0 :block/uuid]))) + (is (= "" + (get-in restore-empty-save-op [1 0 :block/title]))))))))) + +(deftest undo-history-replace-empty-target-insert-restores-empty-target-with-insert-op-test + (testing "replace-empty-target insert inverse should delete inserted blocks and reinsert original empty target" + (worker-undo-redo/clear-history! test-repo) + (let [conn (worker-state/get-datascript-conn test-repo) + {:keys [page-uuid]} (seed-page-parent-child!) + page-id (:db/id (d/entity @conn [:block/uuid page-uuid])) + empty-target-uuid (random-uuid) + inserted-root-uuid (random-uuid) + inserted-child-uuid (random-uuid)] + (outliner-op/apply-ops! + conn + [[:insert-blocks [[{:block/uuid empty-target-uuid + :block/title ""}] + page-id + {:sibling? false + :keep-uuid? true}]]] + (local-tx-meta {:client-id "test-client"})) + (let [empty-target (d/entity @conn [:block/uuid empty-target-uuid])] + (outliner-op/apply-ops! + conn + [[:insert-blocks [[{:block/uuid inserted-root-uuid + :block/title "insert root"} + {:block/uuid inserted-child-uuid + :block/title "insert child" + :block/parent [:block/uuid inserted-root-uuid]}] + (:db/id empty-target) + {:sibling? true + :replace-empty-target? true}]]] + (local-tx-meta {:client-id "test-client"}))) + (let [data (latest-undo-history-data) + inverse-ops (:db-sync/inverse-outliner-ops data) + delete-op (some #(when (= :delete-blocks (first %)) %) inverse-ops) + restore-empty-insert-op (some #(when (= :insert-blocks (first %)) %) inverse-ops) + restore-empty-save-op (some #(when (= :save-block (first %)) %) inverse-ops) + delete-ids (set (get-in delete-op [1 0]))] + (is (= :insert-blocks (ffirst (:db-sync/forward-outliner-ops data)))) + (is (seq delete-ids)) + (is (or (some? restore-empty-insert-op) + (some? restore-empty-save-op))) + (if restore-empty-insert-op + (do + (is (= empty-target-uuid + (get-in restore-empty-insert-op [1 0 0 :block/uuid]))) + (is (= "" + (get-in restore-empty-insert-op [1 0 0 :block/title])))) + (do + (is (= empty-target-uuid + (get-in restore-empty-save-op [1 0 :block/uuid]))) + (is (= "" + (get-in restore-empty-save-op [1 0 :block/title]))))))))) + +(deftest apply-template-op-replays-via-undo-redo-test + (testing ":apply-template op can be applied and replayed via undo/redo" + (worker-undo-redo/clear-history! test-repo) + (let [conn (worker-state/get-datascript-conn test-repo) + {:keys [page-uuid]} (seed-page-parent-child!) + page-id (:db/id (d/entity @conn [:block/uuid page-uuid])) + template-root-uuid (random-uuid) + template-a-uuid (random-uuid) + template-b-uuid (random-uuid) + empty-target-uuid (random-uuid)] + (outliner-op/apply-ops! + conn + [[:insert-blocks [[{:block/uuid template-root-uuid + :block/title "template 1" + :block/tags #{:logseq.class/Template}} + {:block/uuid template-a-uuid + :block/title "a" + :block/parent [:block/uuid template-root-uuid]} + {:block/uuid template-b-uuid + :block/title "b" + :block/parent [:block/uuid template-a-uuid]}] + page-id + {:sibling? false + :keep-uuid? true}]]] + (local-tx-meta {:client-id "test-client"})) + (outliner-op/apply-ops! + conn + [[:insert-blocks [[{:block/uuid empty-target-uuid + :block/title ""}] + page-id + {:sibling? false + :keep-uuid? true}]]] + (local-tx-meta {:client-id "test-client"})) + (let [template-root (d/entity @conn [:block/uuid template-root-uuid]) + empty-target (d/entity @conn [:block/uuid empty-target-uuid]) + template-blocks (->> (ldb/get-block-and-children @conn template-root-uuid + {:include-property-block? true}) + rest) + blocks-to-insert (cons (assoc (first template-blocks) + :logseq.property/used-template (:db/id template-root)) + (rest template-blocks))] + (outliner-op/apply-ops! + conn + [[:apply-template [(:db/id template-root) + (:db/id empty-target) + {:sibling? true + :replace-empty-target? true + :template-blocks blocks-to-insert}]]] + (local-tx-meta {:client-id "test-client"}))) + + (let [data (latest-undo-history-data)] + (is (= :apply-template (ffirst (:db-sync/forward-outliner-ops data))))) + + (is (seq (undo-all!))) + (is (seq (redo-all!))) + + (let [inserted-a-id (d/q '[:find ?b . + :in $ ?template-uuid + :where + [?template :block/uuid ?template-uuid] + [?b :logseq.property/used-template ?template] + [?b :block/title "a"]] + @conn + template-root-uuid) + inserted-a (when inserted-a-id (d/entity @conn inserted-a-id)) + inserted-b (some->> inserted-a :block/_parent (filter #(= "b" (:block/title %))) first)] + (is (some? inserted-a)) + (is (some? inserted-b)))))) + +(deftest apply-template-repeated-undo-redo-uses-latest-history-tx-id-test + (testing ":apply-template repeated undo/redo should always undo latest recreated blocks" + (worker-undo-redo/clear-history! test-repo) + (let [conn (worker-state/get-datascript-conn test-repo) + {:keys [page-uuid]} (seed-page-parent-child!) + page-id (:db/id (d/entity @conn [:block/uuid page-uuid])) + template-root-uuid (random-uuid) + template-a-uuid (random-uuid) + template-b-uuid (random-uuid) + empty-target-uuid (random-uuid)] + (outliner-op/apply-ops! + conn + [[:insert-blocks [[{:block/uuid template-root-uuid + :block/title "template 1" + :block/tags #{:logseq.class/Template}} + {:block/uuid template-a-uuid + :block/title "a" + :block/parent [:block/uuid template-root-uuid]} + {:block/uuid template-b-uuid + :block/title "b" + :block/parent [:block/uuid template-a-uuid]}] + page-id + {:sibling? false + :keep-uuid? true}]]] + (local-tx-meta {:client-id "test-client"})) + (outliner-op/apply-ops! + conn + [[:insert-blocks [[{:block/uuid empty-target-uuid + :block/title ""}] + page-id + {:sibling? false + :keep-uuid? true}]]] + (local-tx-meta {:client-id "test-client"})) + (worker-undo-redo/clear-history! test-repo) + (let [template-root (d/entity @conn [:block/uuid template-root-uuid]) + empty-target (d/entity @conn [:block/uuid empty-target-uuid]) + template-blocks (->> (ldb/get-block-and-children @conn template-root-uuid + {:include-property-block? true}) + rest) + blocks-to-insert (cons (assoc (first template-blocks) + :logseq.property/used-template (:db/id template-root)) + (rest template-blocks)) + find-inserted-a-id (fn [] + (d/q '[:find ?b . + :in $ ?template-uuid + :where + [?template :block/uuid ?template-uuid] + [?b :logseq.property/used-template ?template] + [?b :block/title "a"]] + @conn + template-root-uuid))] + (outliner-op/apply-ops! + conn + [[:apply-template [(:db/id template-root) + (:db/id empty-target) + {:sibling? true + :replace-empty-target? true + :template-blocks blocks-to-insert}]]] + (local-tx-meta {:client-id "test-client"})) + (is (some? (find-inserted-a-id))) + (is (not= ::worker-undo-redo/empty-undo-stack + (worker-undo-redo/undo test-repo))) + (is (nil? (find-inserted-a-id))) + (is (not= ::worker-undo-redo/empty-redo-stack + (worker-undo-redo/redo test-repo))) + (let [redo-1-a-id (find-inserted-a-id)] + (is (some? redo-1-a-id)) + (is (not= ::worker-undo-redo/empty-undo-stack + (worker-undo-redo/undo test-repo))) + (is (nil? (find-inserted-a-id))) + (is (not= ::worker-undo-redo/empty-redo-stack + (worker-undo-redo/redo test-repo))) + (let [redo-2-a-id (find-inserted-a-id)] + (is (some? redo-2-a-id)) + (is (not= redo-1-a-id redo-2-a-id)) + (is (not= ::worker-undo-redo/empty-undo-stack + (worker-undo-redo/undo test-repo))) + (is (nil? (find-inserted-a-id))))))))) + +(deftest undo-history-records-forward-ops-for-save-block-test + (testing "worker save-block history keeps semantic forward ops for redo replay" + (worker-undo-redo/clear-history! test-repo) + (let [conn (worker-state/get-datascript-conn test-repo) + {:keys [child-uuid]} (seed-page-parent-child!)] + (outliner-op/apply-ops! conn + [[:save-block [{:block/uuid child-uuid + :block/title "saved via apply-ops"} {}]]] + (local-tx-meta {:client-id "test-client"})) + (let [undo-op (last (get @worker-undo-redo/*undo-ops test-repo)) + data (some #(when (= ::worker-undo-redo/db-transact (first %)) + (second %)) + undo-op)] + (is (= :save-block (ffirst (:db-sync/forward-outliner-ops data)))) + (is (= child-uuid + (get-in data [:db-sync/forward-outliner-ops 0 1 0 :block/uuid]))) + (is (= "saved via apply-ops" + (get-in data [:db-sync/forward-outliner-ops 0 1 0 :block/title]))) + (is (= "saved via apply-ops" + (:block/title (d/entity @conn [:block/uuid child-uuid])))))))) + +(deftest undo-insert-retracts-added-entity-cleanly-test + (testing "undoing a local insert retracts the inserted entity" + (worker-undo-redo/clear-history! test-repo) + (let [conn (worker-state/get-datascript-conn test-repo) + {:keys [page-uuid]} (seed-page-parent-child!) + page-id (:db/id (d/entity @conn [:block/uuid page-uuid])) + inserted-uuid (random-uuid)] + (d/transact! conn + [{:block/uuid inserted-uuid + :block/title "inserted" + :block/page [:block/uuid page-uuid] + :block/parent [:block/uuid page-uuid]}] + (local-tx-meta + {:client-id "test-client" + :outliner-op :insert-blocks + :outliner-ops [[:insert-blocks [[{:block/title "inserted" + :block/uuid inserted-uuid}] + page-id + {:sibling? false}]]]})) + (is (some? (d/entity @conn [:block/uuid inserted-uuid]))) + (let [undo-result (worker-undo-redo/undo test-repo)] + (is (map? undo-result)) + (is (nil? (d/entity @conn [:block/uuid inserted-uuid]))))))) + +(deftest repeated-save-block-content-undo-redo-test + (testing "multiple saves on the same block undo and redo one step at a time" + (worker-undo-redo/clear-history! test-repo) + (let [conn (worker-state/get-datascript-conn test-repo) + {:keys [child-uuid]} (seed-page-parent-child!)] + (doseq [title ["v1" "v2" "v3"]] + (save-block-title! conn child-uuid title)) + (is (= "v3" (:block/title (d/entity @conn [:block/uuid child-uuid])))) + (worker-undo-redo/undo test-repo) + (is (= "v2" (:block/title (d/entity @conn [:block/uuid child-uuid])))) + (worker-undo-redo/undo test-repo) + (is (= "v1" (:block/title (d/entity @conn [:block/uuid child-uuid])))) + (worker-undo-redo/undo test-repo) + (is (= "child" (:block/title (d/entity @conn [:block/uuid child-uuid])))) + (worker-undo-redo/redo test-repo) + (is (= "v1" (:block/title (d/entity @conn [:block/uuid child-uuid])))) + (worker-undo-redo/redo test-repo) + (is (= "v2" (:block/title (d/entity @conn [:block/uuid child-uuid])))) + (worker-undo-redo/redo test-repo) + (is (= "v3" (:block/title (d/entity @conn [:block/uuid child-uuid]))))))) + +(deftest repeated-save-block-op-content-undo-redo-test + (testing "sequential save-block ops preserve undo/redo order" + (worker-undo-redo/clear-history! test-repo) + (let [conn (worker-state/get-datascript-conn test-repo) + {:keys [child-uuid]} (seed-page-parent-child!)] + (doseq [title ["foo" "foo bar"]] + (outliner-op/apply-ops! conn + [[:save-block [{:block/uuid child-uuid + :block/title title} {}]]] + (local-tx-meta {:client-id "test-client"}))) + (is (= "foo bar" (:block/title (d/entity @conn [:block/uuid child-uuid])))) + (worker-undo-redo/undo test-repo) + (is (= "foo" (:block/title (d/entity @conn [:block/uuid child-uuid])))) + (worker-undo-redo/redo test-repo) + (is (= "foo bar" (:block/title (d/entity @conn [:block/uuid child-uuid]))))))) + +(deftest save-two-blocks-undo-targets-latest-block-test + (testing "undo after saving two blocks reverts the latest saved block first" + (worker-undo-redo/clear-history! test-repo) + (let [conn (worker-state/get-datascript-conn test-repo) + {:keys [parent-uuid child-uuid]} (seed-page-parent-child!)] + (save-block-title! conn parent-uuid "parent updated") + (save-block-title! conn child-uuid "child updated") + (worker-undo-redo/undo test-repo) + (is (= "parent updated" (:block/title (d/entity @conn [:block/uuid parent-uuid])))) + (is (= "child" (:block/title (d/entity @conn [:block/uuid child-uuid])))) + (worker-undo-redo/undo test-repo) + (is (= "parent" (:block/title (d/entity @conn [:block/uuid parent-uuid]))))))) + +(deftest new-local-save-clears-redo-stack-test + (testing "a new local save clears redo history" + (worker-undo-redo/clear-history! test-repo) + (let [conn (worker-state/get-datascript-conn test-repo) + {:keys [child-uuid]} (seed-page-parent-child!)] + (save-block-title! conn child-uuid "v1") + (save-block-title! conn child-uuid "v2") + (worker-undo-redo/undo test-repo) + (is (= "v1" (:block/title (d/entity @conn [:block/uuid child-uuid])))) + (save-block-title! conn child-uuid "v3") + (is (= ::worker-undo-redo/empty-redo-stack + (worker-undo-redo/redo test-repo))) + (is (= "v3" (:block/title (d/entity @conn [:block/uuid child-uuid]))))))) diff --git a/src/test/logseq/cli/commands_test.cljs b/src/test/logseq/cli/commands_test.cljs index b4b8a73d2f..4212314f48 100644 --- a/src/test/logseq/cli/commands_test.cljs +++ b/src/test/logseq/cli/commands_test.cljs @@ -831,7 +831,7 @@ (string/lower-case nested) "Inner"}} output (binding [style/*color-enabled?* true] (tree->text tree-data))] - (is (= (str "1 See [[Target [[Inner]]]]") + (is (= "1 See [[Target [[Inner]]]]" (strip-ansi output)))))) (deftest test-help-upsert-update-options @@ -2755,13 +2755,39 @@ property-result (commands/execute {:type :remove-property :repo "demo" :id 2} {})] (is (= :ok (:status tag-result))) (is (= :ok (:status property-result))) - (is (= [[:delete-page [(uuid "00000000-0000-0000-0000-000000000011")]]] + (is (= [[:delete-page [(uuid "00000000-0000-0000-0000-000000000011") {}]]] (first @ops*))) - (is (= [[:delete-page [(uuid "00000000-0000-0000-0000-000000000022")]]] + (is (= [[:delete-page [(uuid "00000000-0000-0000-0000-000000000022") {}]]] (second @ops*))))) (p/catch (fn [e] (is false (str "unexpected error: " e)))) (p/finally done))))) +(deftest test-execute-remove-page-returns-true-result-on-success + (async done + (let [ops* (atom nil) + page-uuid (uuid "00000000-0000-0000-0000-00000000abcd")] + (-> (p/with-redefs [cli-server/list-graphs (fn [_] ["demo"]) + cli-server/ensure-server! (fn [_ _] {:base-url "http://example"}) + transport/invoke (fn [_ method _ args] + (case method + :thread-api/pull (let [[_ _ lookup] args] + (if (= lookup [:block/name "home"]) + {:db/id 10 + :block/title "Home" + :block/uuid page-uuid} + {})) + :thread-api/apply-outliner-ops (let [[_ ops _] args] + (reset! ops* ops) + nil) + (throw (ex-info "unexpected invoke" {:method method :args args}))))] + (p/let [result (commands/execute {:type :remove-page :repo "demo" :name "Home"} {})] + (is (= :ok (:status result))) + (is (= true (get-in result [:data :result]))) + (is (= [[:delete-page [page-uuid {}]]] + @ops*)))) + (p/catch (fn [e] (is false (str "unexpected error: " e)))) + (p/finally done))))) + (deftest test-execute-remove-tag-ambiguous-name (async done (-> (p/with-redefs [cli-server/list-graphs (fn [_] ["demo"]) diff --git a/tailwind.all.css b/tailwind.all.css index 281fba7542..05af6c4900 100644 --- a/tailwind.all.css +++ b/tailwind.all.css @@ -8,7 +8,6 @@ @import "resources/css/shui.css"; @import "inter-ui/inter.css"; @import "photoswipe/dist/photoswipe.css"; -@import "shepherd.js/dist/css/shepherd.css"; @import "katex/dist/katex.min.css"; @import "codemirror/lib/codemirror.css"; @import "codemirror/theme/solarized.css"; @@ -16,5 +15,4 @@ @import "pdfjs-dist/web/pdf_viewer.css"; @import "resources/css/tabler-extension.css"; @import "resources/css/codemirror.lsradix.css"; -@import "@tabler/icons-webfont/tabler-icons.min.css"; @import-glob "src/main/frontend/**/[!_]*.css"; diff --git a/tailwind.config.js b/tailwind.config.js index 512f1088f8..ecd75016b1 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -133,7 +133,7 @@ module.exports = { './packages/ui/src/amplify/**/*.{ts,tsx}' ], safelist: [ - 'bg-black', 'bg-white', 'capitalize-first', + 'bg-black', 'bg-white', { pattern: /bg-(gray|red|yellow|green|blue|orange|indigo|rose|purple|pink)-(100|200|300|400|500|600|700|800|900)/ }, { pattern: /text-(gray|red|yellow|green|blue|orange|indigo|rose|purple|pink)-(100|200|300|400|500|600|700|800|900)/ }, { pattern: /columns-([1-9]|1[0-2])|(auto|3xs|2xs|xs|sm|md|lg|xl)|([2-7]xl)/ }, @@ -142,7 +142,6 @@ module.exports = { require('@tailwindcss/forms'), require('@tailwindcss/typography'), require('@tailwindcss/aspect-ratio'), - require('tailwind-capitalize-first-letter'), require('tailwindcss-animate'), exposeColorsToCssVars ], diff --git a/tailwind.mobile.css b/tailwind.mobile.css index 4371539ee5..378cd9e47a 100644 --- a/tailwind.mobile.css +++ b/tailwind.mobile.css @@ -13,7 +13,7 @@ @import "codemirror/lib/codemirror.css"; @import "codemirror/theme/solarized.css"; @import "resources/css/tabler-extension.css"; -@import "@tabler/icons-webfont/tabler-icons.min.css"; +@import "resources/css/tabler-icons.min.css"; @import "@logseq/simple-wave-record/dist/style.css"; @import "src/main/frontend/animations.css"; @import "src/main/frontend/common.css"; diff --git a/typos.toml b/typos.toml index de925fe2e5..fe38983621 100644 --- a/typos.toml +++ b/typos.toml @@ -18,4 +18,9 @@ fom = "fom" tne = "tne" Damon = "Damon" [files] -extend-exclude = ["resources/*", "src/resources/*", "scripts/resources/*", "src/test/fixtures/*", "clj-e2e/resources/*", "deps/common/src/logseq/common/plural.cljs"] +extend-exclude = ["resources/*", + "src/resources/*", + "scripts/resources/*", + "src/test/fixtures/*", + "clj-e2e/resources/*", + "deps/common/src/logseq/common/plural.cljs"] diff --git a/yarn.lock b/yarn.lock index d87c371718..798191b959 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15,23 +15,16 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" -"@aparajita/capacitor-secure-storage@^7.1.6": - version "7.1.6" - resolved "https://registry.yarnpkg.com/@aparajita/capacitor-secure-storage/-/capacitor-secure-storage-7.1.6.tgz#43e669e33dc6d680797d32ac85d2d116cc2b7397" - integrity sha512-KIfLOm/oSciUiWsOMtMv2nzlnwW3LERid0DvZ3djt7UORBQvFqpvSefiLG5kkc8D34pGkb2ZqAz0ZprrI9LiTQ== +"@aparajita/capacitor-secure-storage@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@aparajita/capacitor-secure-storage/-/capacitor-secure-storage-8.0.0.tgz#9c7ddc316dcdcf5a8c17d14b47e6b3d41d361018" + integrity sha512-oYnwSjdIh23aRNgz8982+TmFvQH/2yZkEdw1iIg+H2ziFJoOVELPTc7u6Ez2HwOuDIW5AGqBX75GvrzQ+D70Qg== dependencies: - "@capacitor/android" "^7.4.4" - "@capacitor/app" "^7.1.0" - "@capacitor/core" "^7.4.4" - "@capacitor/ios" "^7.4.4" - -"@axe-core/playwright@=4.4.4": - version "4.4.4" - resolved "https://registry.yarnpkg.com/@axe-core/playwright/-/playwright-4.4.4.tgz#3786c5f6bba38d1991b608584b00ae2744544573" - integrity sha512-VA7MR1WCqW5tFcUGCXDaaqV9pJUCdOGIR4DiZJrOxGjeRYxz3VwyMc1MDg/yiJ5fQA/QYMx+w0mvqYEr3CPx7w== - dependencies: - axe-core "^4.4.2" - playwright ">= 1.0.0" + "@capacitor/android" "^8.0.2" + "@capacitor/app" "^8.0.0" + "@capacitor/core" "^8.0.2" + "@capacitor/ios" "^8.0.2" + "@capacitor/keyboard" "^8.0.0" "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.27.1": version "7.27.1" @@ -142,10 +135,10 @@ dependencies: "@babel/types" "^7.28.0" -"@babel/runtime@^7.10.2", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": - version "7.28.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.2.tgz#2ae5a9d51cc583bd1f5673b3bb70d6d819682473" - integrity sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA== +"@babel/runtime@^7.20.13", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.6.tgz#d267a43cb1836dc4d182cce93ae75ba954ef6d2b" + integrity sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA== "@babel/template@^7.27.2": version "7.27.2" @@ -177,35 +170,25 @@ "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.27.1" -"@capacitor-community/safe-area@7.0.0-alpha.1": - version "7.0.0-alpha.1" - resolved "https://registry.yarnpkg.com/@capacitor-community/safe-area/-/safe-area-7.0.0-alpha.1.tgz#9749cd59ca6a21942da006a3b8c7f0da5cd902e3" - integrity sha512-N6ktkRiofqrt+N/vQzh4jcWY8IzJ4TVw1tKAPssvbddWFTyZzXzSdBeX/l/nracJF0PZqmLdA7JYTBfnOxXQYw== +"@capacitor-community/safe-area@8.0.1": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@capacitor-community/safe-area/-/safe-area-8.0.1.tgz#21553e2395a2e0140f4e41a0e1aafed3b6d747a9" + integrity sha512-zVVQ7k94DbOff1mHP8qrZGTJZWyhGZnKHD2eXdcobIoOBFW9CeVphLNZYDCop/DBsHXfv6r8k0/Ac8xMIlwT+A== -"@capacitor/action-sheet@7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@capacitor/action-sheet/-/action-sheet-7.0.1.tgz#8b6fd171375d1e4d9392ee9968ef4152309dcaa7" - integrity sha512-0ROMy6S62B/Ci9nZ7CRxhkK2LS0JBmhN+sxOXQOtntd2WHKW7+8J+VAtu8vk0LgvTjj7SjzJnicYC75KUjwLWw== +"@capacitor/action-sheet@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@capacitor/action-sheet/-/action-sheet-8.1.0.tgz#f74576e5e766d17d7a4f2cbdfabbd2319fe68d5c" + integrity sha512-c/I3ESi2z4g2JSYCpqSqGLc/8dFU+DNLfkwHSex63Xkwd9mCmKTf6myPB8vQ1GrTBvaT2fiF48mRmD4/rxSTnw== -"@capacitor/android@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@capacitor/android/-/android-7.2.0.tgz#f30e313315ab92c500bd57d9f0c4716a46b42f40" - integrity sha512-zdhEy3jZPG5Toe/pGzKtDgIiBGywjaoEuQWnGVjBYPlSAEUtAhpZ2At7V0SCb26yluAuzrAUV0Ue+LQeEtHwFQ== +"@capacitor/android@8.2.0", "@capacitor/android@^8.0.2": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@capacitor/android/-/android-8.2.0.tgz#b832a72d6279ab439a7ea5f8b497e13a7f8e4b36" + integrity sha512-XLm5OsWLPfXQxDxzFS7SOdMEgGvW+2c7TGLXkTR2cSKdkWK5Abns4imlT5qghKYhjM9r74IrDkBWg/9ALUGNKQ== -"@capacitor/android@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@capacitor/android/-/android-7.4.4.tgz#a14a1e844bd5079982427e247fdd17555b5fbedd" - integrity sha512-y8knfV1JXNrd6XZZLZireGT+EBCN0lvOo+HZ/s7L8LkrPBu4nY5UZn0Wxz4yOezItEII9rqYJSHsS5fMJG9gdw== - -"@capacitor/app@7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@capacitor/app/-/app-7.0.1.tgz#0d0709fb4dde5046c24853f2d6b77a7ea411f748" - integrity sha512-ArlVZAAla4MwQoKh26x2AaTDOBh5Vhp1VhMKR3RwqZSsZnazKTFGNrPbr9Ez5r1knnEDfApyjwp1uZnXK1WTYQ== - -"@capacitor/app@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@capacitor/app/-/app-7.1.0.tgz#d275eebbb0fec6104b3f9c41f09f7598d7808b47" - integrity sha512-W7m09IWrUjZbo7AKeq+rc/KyucxrJekTBg0l4QCm/yDtCejE3hebxp/W2esU26KKCzMc7H3ClkUw32E9lZkwRA== +"@capacitor/app@8.0.1", "@capacitor/app@^8.0.0": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@capacitor/app/-/app-8.0.1.tgz#5f01b17555fa310f5cd8fdf9c6d8d521df21c253" + integrity sha512-yeG3yyA0ETKqvgqexwHMBlmVOF13A1hRXzv/km0Ptv5TrNIZvZJK4MTI3uiqvnbHrzoJGP5DwWAjEXEfi90v3Q== "@capacitor/assets@^3.0.5": version "3.0.5" @@ -225,15 +208,15 @@ tslib "2.6.2" yargs "17.7.2" -"@capacitor/camera@7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@capacitor/camera/-/camera-7.0.1.tgz#bcbd1c05cce648fa54b844bf7a6745854cae6ba4" - integrity sha512-gDUFsYlhMra5VVOa4iJV6+MQRhp3VXpTLQY4JDATj7UvoZ8Hv4DG8qplPL9ufUFNoR3QbDDnf8+gbQOsKdkDjg== +"@capacitor/camera@8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@capacitor/camera/-/camera-8.0.2.tgz#6e9c80ff219461bee08315e0dba4773fa75cdba4" + integrity sha512-v2BsKFjJSg0dMl/UO7jEvrAvjChCGrzQG5jx4yN2t8LnC7eFDh0YkSg1t+AMNveSDSKCvAsTk/JUzzr5VAvzmg== -"@capacitor/cli@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@capacitor/cli/-/cli-7.2.0.tgz#ea279f14e575b059edb7fe8dc64a8e3379088616" - integrity sha512-RNW9vtYYYSDmOdguYBSW0VpRnG/d6lGydlc9DLrJ7qbSPxFrotTz9IjkM48O+SruUma61DyuSqJttdbay2xSxg== +"@capacitor/cli@8.2.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@capacitor/cli/-/cli-8.2.0.tgz#8075f23fc4ca93e08d6965dc1f445752091aaab1" + integrity sha512-1cMEk0d/I6tl1U+v/lnJR5Oylpx8ZBIHrvQxD5zK0MkjYOUyQAAGJgh97rkhGJqjAUvrGpa8H4BmyhNQN9a17A== dependencies: "@ionic/cli-framework-output" "^2.2.8" "@ionic/utils-subprocess" "^3.0.1" @@ -243,13 +226,13 @@ env-paths "^2.2.0" fs-extra "^11.2.0" kleur "^4.1.5" - native-run "^2.0.1" + native-run "^2.0.3" open "^8.4.0" plist "^3.1.0" prompts "^2.4.2" rimraf "^6.0.1" semver "^7.6.3" - tar "^6.1.11" + tar "^7.5.3" tslib "^2.8.1" xml2js "^0.6.2" @@ -299,89 +282,79 @@ tslib "^2.8.1" xml2js "^0.6.2" -"@capacitor/clipboard@^7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@capacitor/clipboard/-/clipboard-7.0.2.tgz#fe9ea01032581f68feda79c19304c5f82e1995f1" - integrity sha512-Cm37cNPvSzuao3HlcrQT18py5WUfKdaNWBHFuQcubBzBuKhqtAC9P6xZ2d0ucPFdxvsEOgO7mjs2BWIpaKqpgg== +"@capacitor/clipboard@^8.0.1": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@capacitor/clipboard/-/clipboard-8.0.1.tgz#16612ffea571167d3f14e5cc3aab35c7ca4d6237" + integrity sha512-iOlbTi8MojKyLnYE+M27priXid7vHd0PlDwyHohPzkuQ8Rkp6q7ykwZmPEUD+OnU/Ink7Qw/pUOfKgraKmA6Eg== -"@capacitor/core@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@capacitor/core/-/core-7.2.0.tgz#fdd1c5d2fbfa257887ce6065f66151a51f0e6d1b" - integrity sha512-2zCnA6RJeZ9ec4470o8QMZEQTWpekw9FNoqm5TLc10jeCrhvHVI8MPgxdZVc3mOdFlyieYu4AS1fNxSqbS57Pw== +"@capacitor/core@8.2.0", "@capacitor/core@^8.0.2": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@capacitor/core/-/core-8.2.0.tgz#7b9b012f1d34b62d441f557649b755ce451cb81e" + integrity sha512-oKaoNeNtH2iIZMDFVrb1atoyRECDGHcfLMunJ5KWN8DtvpVBeeA4c41e20NTuhMxw1cSYbpq2PV2hb+/9CJxlQ== dependencies: tslib "^2.1.0" -"@capacitor/core@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@capacitor/core/-/core-7.4.4.tgz#b752dd7a12141e40d1c8ce2e37a79571d9f83518" - integrity sha512-xzjxpr+d2zwTpCaN0k+C6wKSZzWFAb9OVEUtmO72ihjr/NEDoLvsGl4WLfjWPcCO2zOy0b2X52tfRWjECFUjtw== +"@capacitor/device@^8.0.1": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@capacitor/device/-/device-8.0.1.tgz#344ab012bc1c858e6a9afe302ebe22a672827fdf" + integrity sha512-LHtf3ObK7dpFS3jJ0GNrTG0lHufNgD0tLBukeEAxeR28mu80dHQA1XxmQV0CWo+KKcI0hBdz4dfucRta3TdVxw== + +"@capacitor/dialog@^8.0.1": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@capacitor/dialog/-/dialog-8.0.1.tgz#3f238a99c7498a06f9215e2b0f2e8b348c619783" + integrity sha512-Dq0mZBsd++7CvPvpD2gfbUB44k/zCoe5K9IgYmMImQ4Yphu4/MxLVpFDFAqSya011UBBTGPrUQGVacIW3jDNkw== + +"@capacitor/filesystem@8.1.2": + version "8.1.2" + resolved "https://registry.yarnpkg.com/@capacitor/filesystem/-/filesystem-8.1.2.tgz#f133f2f610b8d70427e8f124071c0f0228220737" + integrity sha512-doaaMfGoFR2hWU6aV6u83I+5ZsGyJVq+Gz4r9lMpJzUKMm1eMu0hLnFdV1aXZlU9FlK/RndFrVD8oRZfNOqWgQ== dependencies: - tslib "^2.1.0" + "@capacitor/synapse" "^1.0.4" -"@capacitor/device@^7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@capacitor/device/-/device-7.0.2.tgz#406bde129d3fcf55f0de0b691509535e2a00e315" - integrity sha512-OMGMBjLbh7ApaqW1oOJIV73iyrFK/T5v2MzuQYq3GLT+jnGvCuj/y82Ofq2Fz9/hlJ2fukztPwG1K80jyk0i6w== +"@capacitor/haptics@8.0.1": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@capacitor/haptics/-/haptics-8.0.1.tgz#2076f92554fff68a3d429901a675fcbe727beb44" + integrity sha512-8v8rowLBMeb3CryqoQvXndwyUsoi4pPXf0qFw7IGA4D32Uk7+K6juN2SjRowqunoovkvvbFmU9TD7JIAz2zmFw== -"@capacitor/dialog@^7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@capacitor/dialog/-/dialog-7.0.2.tgz#ff0b50a0fd4d9792fd6e47dcf28e2cee49c41568" - integrity sha512-2lRMKEdBV/2LMCwHbC5a03jiU4tdlIN4hXAqmQMxnaa7CAVLfk/vEE+vxA5mpnI/pzoXF/QDQEUXJUd10hbcKA== +"@capacitor/ios@8.2.0", "@capacitor/ios@^8.0.2": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@capacitor/ios/-/ios-8.2.0.tgz#f346587edf9552d05a1a38d99cfbf469a814e878" + integrity sha512-X2/VtM4qP/R1SM0VQ5W/VotEc6PS/KTooD33EijsfAHWBdee+xmBapW8SeNLnu16wJ+tsfWlvtipaJEyfKbRKQ== -"@capacitor/filesystem@7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@capacitor/filesystem/-/filesystem-7.0.1.tgz#b0518d781f7640e936f529b80a59724e221d0471" - integrity sha512-dxuKNLFoUejm7tBKkQPs1j7+BLpDh5JKPSVu7nT8jgCbA/KXt5FoCLiepfkjWkYfq60X0JNFzGnIquc5FPOLzQ== +"@capacitor/keyboard@8.0.1", "@capacitor/keyboard@^8.0.0": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@capacitor/keyboard/-/keyboard-8.0.1.tgz#f694a06eca5f140d33d68165b4738df88146f504" + integrity sha512-HDf4qrvvhLRMsgBoqeqIld6hP8JMK/WPbCYMvz8ajhY6TaibYt6B+NQyky4oIPCOfHTz5OcVsuHkbb8fQvGDAg== -"@capacitor/haptics@7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@capacitor/haptics/-/haptics-7.0.1.tgz#8e992837e87c0b65a4a38430944762d1e2fce6dc" - integrity sha512-ewZmspE5krgDUj5ZvUDcfNZvgerAIr+3bDSk6DLzyvBZ/dYmr/tMLu5H6WtYaaKYZJ32aZAudGpIal5epDyBYA== +"@capacitor/network@^8.0.1": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@capacitor/network/-/network-8.0.1.tgz#463b2639db2a5a0837f3ae0c0e2ed3f46ce1bb0e" + integrity sha512-9xK/FHFmzKGanB6BdoSZOzXk8vF0OFVQSQ4PAsIrzAzLuXHryO317qy8dcHVpgxYeuZq2noI0My9z1DvVDi/9w== -"@capacitor/ios@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@capacitor/ios/-/ios-7.2.0.tgz#c3d9435582e5267b57085229e5678d1d53b15b5a" - integrity sha512-MQgRZcXZpbpjN83bjkGrzQd7s3XeHBZplmWf38/msF/siMGJKLrXNmNzmmPIWA5Xpi/aH6UoJFk1wXuU2U+zMg== +"@capacitor/share@8.0.1": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@capacitor/share/-/share-8.0.1.tgz#8941ce371a6239685db010098a5e60d0795666da" + integrity sha512-3cSBKBCJVon54rKDROP2rqGyeGks4pBh9TbaEk9S375Kbek/ZHe72N50zIa0Vn9Eac/SuhwgehO/mmA4CsUOiw== -"@capacitor/ios@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@capacitor/ios/-/ios-7.4.4.tgz#051c37df4ffa878bd757b3849ce61668ac174083" - integrity sha512-Xp3bGWlSQAwsZGngRMWTdoD2agdMV12Whnm+/xsYPxfQSj+Tksbr7r/8Mso7VWkpnTKO4iMlx762g3PjW+wi4w== +"@capacitor/splash-screen@8.0.1": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@capacitor/splash-screen/-/splash-screen-8.0.1.tgz#17d2cf051ec2e2b884cfa5abb5e337f9077df167" + integrity sha512-c/ew/Z3eA7z8l06WoRAtzVF16VwYYrExmHmfGq1Cg675pVzaC/yuucB8/1xG1vhEfnW4fZ1KhSf/kzR1RiVYgg== -"@capacitor/keyboard@7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@capacitor/keyboard/-/keyboard-7.0.1.tgz#edf212528cd1587494ceb1d260868c1a9540aed1" - integrity sha512-Gi064vOARMac+x9/DmEFeywN9oAETMf3OYsMuYm9gA8SvdsDJ3QJqMoFnSEIORYXe21Jzt2SIEdLlpT65P/b2g== +"@capacitor/status-bar@8.0.1": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@capacitor/status-bar/-/status-bar-8.0.1.tgz#a20642b4563c827e8b0f520468ec44b077af6fea" + integrity sha512-OR59dlbwvmrV5dKsC9lvwv48QaGbqcbSTBpk+9/WXWxXYSdXXdzJZU9p8oyNPAkuJhCdnSa3XmU43fZRPBJJ5w== -"@capacitor/network@^7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@capacitor/network/-/network-7.0.1.tgz#8241ce6b6b5bbddc3157e218f31dd4ec04f1c4f0" - integrity sha512-jKyhTUqegKHjHKkK8e3t0TgwAYpKb3ocYpZkJrB3uXL5figkG06UEhQE4Cp25Dfb4LIjDxTSDLLsDEteKarmyg== +"@capacitor/synapse@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@capacitor/synapse/-/synapse-1.0.4.tgz#c6beb33119d9656b1f04cb7783989fb78933ef6d" + integrity sha512-/C1FUo8/OkKuAT4nCIu/34ny9siNHr9qtFezu4kxm6GY1wNFxrCFWjfYx5C1tUhVGz3fxBABegupkpjXvjCHrw== -"@capacitor/share@7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@capacitor/share/-/share-7.0.1.tgz#1d1e6d312504703c1f34fa0de94bed14af4bcbf8" - integrity sha512-7GAtWrb2inEWohC8E7mx38qAX6D9yqPDDnUtJaZ8JRpo15jjFRS40Cx388M8h4NlBWjV5NU3qf1sHXnyOBSJ5g== - -"@capacitor/splash-screen@7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@capacitor/splash-screen/-/splash-screen-7.0.1.tgz#ea70d39c4346db4558f749eeb2d3ac2f5c34c550" - integrity sha512-Nbqw9bEIe7uHj/HOT81mf4jT6uK1YykozpQw/uIKQDueMg6RJYaJK2/TMajIOohLk8fJF4TYIc1i9nGjNLnfGg== - -"@capacitor/status-bar@7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@capacitor/status-bar/-/status-bar-7.0.1.tgz#6bd3769ef35158c961ff2a6b571c03e9bce55809" - integrity sha512-iDv3mXYo9CdxYRVwt3/pRyuk25p7Sn4GfaS/zMZyVIqTzsvKLCIIH3GdKK+ta+nsNcAVpCw/t5jFEBt1D18ctA== - -"@capgo/capacitor-navigation-bar@^7.1.32": - version "7.1.32" - resolved "https://registry.yarnpkg.com/@capgo/capacitor-navigation-bar/-/capacitor-navigation-bar-7.1.32.tgz#937902665c1602bc653e9344538cfc3abc525062" - integrity sha512-bigqO8GD1qiyoGdMPCDXOmthhjEAokW0P4Aq+1ejWAKzy4tge44r2vThuTV+W75sPWFiNXdt8tB+iSQImN1row== - -"@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== +"@capgo/capacitor-navigation-bar@^8.0.25": + version "8.0.25" + resolved "https://registry.yarnpkg.com/@capgo/capacitor-navigation-bar/-/capacitor-navigation-bar-8.0.25.tgz#6b3d55a28f7e982d73f97aea0992ce864d6d40cb" + integrity sha512-iQDNIWsx4giBwZORs89DvFoDqV5+qvskpV5CXZ1tWQZfNwMdfL4ILUI7yiyN4GfK201tAf9oqFP0x1zKt/YFVA== "@cspotcode/source-map-support@^0.8.0": version "0.8.1" @@ -390,10 +363,10 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@discoveryjs/json-ext@^0.6.1": - version "0.6.3" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz#f13c7c205915eb91ae54c557f5e92bddd8be0e83" - integrity sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ== +"@discoveryjs/json-ext@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-1.0.0.tgz#f75c08f88cfd9eb8d9b062284d5bbcc60c41bf2a" + integrity sha512-dDlz3W405VMFO4w5kIP9DOmELBcvFQGmLoKSdIRstBDubKFYwaNHV1NnlzMCQpXQFGWVALmeMORAuiLx18AvZQ== "@dnd-kit/accessibility@^3.1.1": version "3.1.1" @@ -402,7 +375,7 @@ dependencies: tslib "^2.0.0" -"@dnd-kit/core@^6.0.8": +"@dnd-kit/core@^6.3.1": version "6.3.1" resolved "https://registry.yarnpkg.com/@dnd-kit/core/-/core-6.3.1.tgz#4c36406a62c7baac499726f899935f93f0e6d003" integrity sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ== @@ -411,15 +384,15 @@ "@dnd-kit/utilities" "^3.2.2" tslib "^2.0.0" -"@dnd-kit/sortable@^7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@dnd-kit/sortable/-/sortable-7.0.2.tgz#791d550872457f3f3c843e00d159b640f982011c" - integrity sha512-wDkBHHf9iCi1veM834Gbk1429bd4lHX4RpAwT0y2cHLf246GAvU2sVw/oxWNpPKQNQRQaeGXhAVgrOl1IT+iyA== +"@dnd-kit/sortable@^10.0.0": + version "10.0.0" + resolved "https://registry.yarnpkg.com/@dnd-kit/sortable/-/sortable-10.0.0.tgz#1f9382b90d835cd5c65d92824fa9dafb78c4c3e8" + integrity sha512-+xqhmIIzvAYMGfBYYnbKuNicfSsk4RksY2XdmJhT+HAC01nix6fHCztU68jooFiMUB01Ky3F0FyOvhG/BZrWkg== dependencies: - "@dnd-kit/utilities" "^3.2.0" + "@dnd-kit/utilities" "^3.2.2" tslib "^2.0.0" -"@dnd-kit/utilities@^3.2.0", "@dnd-kit/utilities@^3.2.2": +"@dnd-kit/utilities@^3.2.2": version "3.2.2" resolved "https://registry.yarnpkg.com/@dnd-kit/utilities/-/utilities-3.2.2.tgz#5a32b6af356dc5f74d61b37d6f7129a4040ced7b" integrity sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg== @@ -433,7 +406,7 @@ dependencies: tslib "^2.4.0" -"@emoji-mart/data@^1.1.2": +"@emoji-mart/data@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@emoji-mart/data/-/data-1.2.1.tgz#0ad70c662e3bc603e23e7d98413bd1e64c4fcb6c" integrity sha512-no2pQMWiBy6gpBEiqGeU77/bFejDqUTRY7KX+0+iur13op3bqUsXdnwoZs6Xb1zbv0gAj5VvS1PWoUUckSr5Dw== @@ -443,27 +416,44 @@ resolved "https://registry.yarnpkg.com/@emoji-mart/react/-/react-1.1.1.tgz#ddad52f93a25baf31c5383c3e7e4c6e05554312a" integrity sha512-NMlFNeWgv1//uPsvLxvGQoIerPuVdXwK/EUek8OOkJ6wVOWPUizRBJU0hDqWZCOROVpfBgCemaC3m6jDOXi03g== -"@glidejs/glide@^3.6.0": +"@epic-web/invariant@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@epic-web/invariant/-/invariant-1.0.0.tgz#1073e5dee6dd540410784990eb73e4acd25c9813" + integrity sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA== + +"@glidejs/glide@^3.7.1": version "3.7.1" resolved "https://registry.yarnpkg.com/@glidejs/glide/-/glide-3.7.1.tgz#cd3fb256006d9c7aec2f95873d268410df2ab0ce" integrity sha512-8he0pZpLSqTesSFYiuWdhBmtdlYSPWxfPUCKtkkiX6ZmT8UdMdmoFPtJaOwLBXv4p2JiGxqbuPdiRGGo2e/htQ== -"@highlightjs/cdn-assets@10.4.1": - version "10.4.1" - resolved "https://registry.yarnpkg.com/@highlightjs/cdn-assets/-/cdn-assets-10.4.1.tgz#261bc7a391cd22e86e19ba809a9b997ca37f1514" - integrity sha512-dJ6ZNFZ0TIatflV7h+5S6swUrc+hfivRgylKCcUk4+sb2Gi7uj5rSSv3x0p/fwIpyYlrKhxA2LqtdVBZ1Evk5Q== +"@gulpjs/messages@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@gulpjs/messages/-/messages-1.1.0.tgz#94e70978ff676ade541faab459c37ae0c7095e5a" + integrity sha512-Ys9sazDatyTgZVb4xPlDufLweJ/Os2uHWOv+Caxvy2O85JcnT4M3vc73bi8pdLWlv3fdWQz3pdI9tVwo8rQQSg== -"@huggingface/jinja@^0.5.1": - version "0.5.1" - resolved "https://registry.yarnpkg.com/@huggingface/jinja/-/jinja-0.5.1.tgz#081d334ddcf6237f65561ae3d665bb713a8ff74f" - integrity sha512-yUZLld4lrM9iFxHCwFQ7D1HW2MWMwSbeB7WzWqFYDWK+rEb+WldkLdAJxUPOmgICMHZLzZGVcVjFh3w/YGubng== - -"@huggingface/transformers@^3.6.3": - version "3.7.1" - resolved "https://registry.yarnpkg.com/@huggingface/transformers/-/transformers-3.7.1.tgz#9501f9bd0ccde8cd7dd6621f9aaee3182b5e39fb" - integrity sha512-z14yXkm7G/FKGM8Y24NLDbrSP/kbn62byKNYF04pZ6pidTVpucqRSderQgpfQWoMVrhOKmrZs29G3yQ1R28sIA== +"@gulpjs/to-absolute-glob@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@gulpjs/to-absolute-glob/-/to-absolute-glob-4.0.0.tgz#1fc2460d3953e1d9b9f2dfdb4bcc99da4710c021" + integrity sha512-kjotm7XJrJ6v+7knhPaRgaT6q8F8K2jiafwYdNHLzmV0uGLuZY43FK6smNSHUPrhq5kX2slCUy+RGG/xGqmIKA== dependencies: - "@huggingface/jinja" "^0.5.1" + is-negated-glob "^1.0.0" + +"@highlightjs/cdn-assets@11.11.1": + version "11.11.1" + resolved "https://registry.yarnpkg.com/@highlightjs/cdn-assets/-/cdn-assets-11.11.1.tgz#136984ae467865e22080b3a4b65398a086e1ae7b" + integrity sha512-VEPdHzwelZ12hEX18BHduqxMZGolcUsrbeokHYxOUIm8X2+M7nx5QPtPeQgRxR9XjhdLv4/7DD5BWOlSrJ3k7Q== + +"@huggingface/jinja@^0.5.3": + version "0.5.6" + resolved "https://registry.yarnpkg.com/@huggingface/jinja/-/jinja-0.5.6.tgz#965c7deb19d67fe091eb99a212e7edd4dc79a2cd" + integrity sha512-MyMWyLnjqo+KRJYSH7oWNbsOn5onuIvfXYPcc0WOGxU0eHUV7oAYUoQTl2BMdu7ml+ea/bu11UM+EshbeHwtIA== + +"@huggingface/transformers@^3.8.1": + version "3.8.1" + resolved "https://registry.yarnpkg.com/@huggingface/transformers/-/transformers-3.8.1.tgz#317da003865322396796173223eeaaf0f9723f0a" + integrity sha512-tsTk4zVjImqdqjS8/AOZg2yNLd1z9S5v+7oUPpXaasDRwEDhB+xnglK1k5cad26lL5/ZIaeREgWWy0bs9y9pPA== + dependencies: + "@huggingface/jinja" "^0.5.3" onnxruntime-node "1.21.0" onnxruntime-web "1.22.0-dev.20250409-89f8206ba4" sharp "^0.34.1" @@ -777,7 +767,7 @@ resolved "https://registry.yarnpkg.com/@isomorphic-git/idb-keyval/-/idb-keyval-3.3.2.tgz#c0509a6c5987d8a62efb3e47f2815bcc5eda2489" integrity sha512-r8/AdpiS0/WJCNR/t/gsgL+M8NMVj/ek7s60uz3LmpCaTF2mEVlZJlB01ZzalgYzRLXwSPC92o+pdzjM7PN/pA== -"@isomorphic-git/lightning-fs@^4.6.0": +"@isomorphic-git/lightning-fs@^4.6.2": version "4.6.2" resolved "https://registry.yarnpkg.com/@isomorphic-git/lightning-fs/-/lightning-fs-4.6.2.tgz#3071b63ac564f65ef67726743567448c23a9a16e" integrity sha512-RS/oa1UBnoUFe56bsjOEgoUUReYKQzYUlQnbERRRNv9s9KmjyWuuylPV+YgsWirR2oONKaipWYMebVQ8SAe55Q== @@ -787,10 +777,10 @@ just-debounce-it "1.1.0" just-once "1.1.0" -"@jcesarmobile/ssl-skip@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@jcesarmobile/ssl-skip/-/ssl-skip-0.4.0.tgz#7498da3b7813d1095e8dda08e55a2d35a3d0c167" - integrity sha512-GUVnexaLUHZS4f9TXBIwmKYvp/NVW8A4tcMoQJmNwViQMOGJbi7lWdRCVDWOY9tyq5XJxk80AcjJvxSgqA8V6w== +"@jcesarmobile/ssl-skip@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@jcesarmobile/ssl-skip/-/ssl-skip-0.9.0.tgz#e3d3ae7d279c708e58c0c10171b59d775c046a03" + integrity sha512-tgFRriGFQxMH8Mw8r2DSgbp0g3zUWb4/85VCG0Q+6Q0kOvGKWlDxdL73XpcpXEjvmtRSnxGKDlXWBAajL8/4sQ== "@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": version "0.3.12" @@ -1107,17 +1097,12 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@playwright/test@=1.51.0": - version "1.51.0" - resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.51.0.tgz#8d5c8400b465a0bfdbcf993e390ceecb903ea6d2" - integrity sha512-dJ0dMbZeHhI+wb77+ljx/FeC8VBP6j/rj9OAojO08JI80wTZy6vRk9KvHKiDCUh4iMpEiseMgqRBIeW+eKX6RA== +"@playwright/test@=1.58.2": + version "1.58.2" + resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.58.2.tgz#b0ad585d2e950d690ef52424967a42f40c6d2cbd" + integrity sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA== dependencies: - playwright "1.51.0" - -"@popperjs/core@^2.11.5", "@popperjs/core@^2.9.0": - version "2.11.8" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" - integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== + playwright "1.58.2" "@prettier/plugin-xml@^2.2.0": version "2.2.0" @@ -1180,95 +1165,69 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== -"@radix-ui/colors@^0.1.8": - version "0.1.9" - resolved "https://registry.yarnpkg.com/@radix-ui/colors/-/colors-0.1.9.tgz#aad732ecc4ce1018adcb3aedd3ce3c573c2256cc" - integrity sha512-Vxq944ErPJsdVepjEUhOLO9ApUVOocA63knc+V2TkJ09D/AVOjiMIgkca/7VoYgODcla0qbSIBjje0SMfZMbAw== +"@radix-ui/colors@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/colors/-/colors-3.0.0.tgz#e8a591a303c44e503bd1212cacf40a09511165e0" + integrity sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg== -"@sentry/browser@6.19.7": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.19.7.tgz#a40b6b72d911b5f1ed70ed3b4e7d4d4e625c0b5f" - integrity sha512-oDbklp4O3MtAM4mtuwyZLrgO1qDVYIujzNJQzXmi9YzymJCuzMLSRDvhY83NNDCRxf0pds4DShgYeZdbSyKraA== +"@sentry-internal/browser-utils@10.45.0": + version "10.45.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/browser-utils/-/browser-utils-10.45.0.tgz#21ac7bf3ed1d254052b97a301ba3545fdf3a3eb5" + integrity sha512-ZPZpeIarXKScvquGx2AfNKcYiVNDA4wegMmjyGVsTA2JPmP0TrJoO3UybJS6KGDeee8V3I3EfD/ruauMm7jOFQ== dependencies: - "@sentry/core" "6.19.7" - "@sentry/types" "6.19.7" - "@sentry/utils" "6.19.7" - tslib "^1.9.3" + "@sentry/core" "10.45.0" -"@sentry/core@6.19.7": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.19.7.tgz#156aaa56dd7fad8c89c145be6ad7a4f7209f9785" - integrity sha512-tOfZ/umqB2AcHPGbIrsFLcvApdTm9ggpi/kQZFkej7kMphjT+SGBiQfYtjyg9jcRW+ilAR4JXC9BGKsdEQ+8Vw== +"@sentry-internal/feedback@10.45.0": + version "10.45.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-10.45.0.tgz#838a3f167ece9c6698aefced65d479291f983439" + integrity sha512-vCSurazFVq7RUeYiM5X326jA5gOVrWYD6lYX2fbjBOMcyCEhDnveNxMT62zKkZDyNT/jyD194nz/cjntBUkyWA== dependencies: - "@sentry/hub" "6.19.7" - "@sentry/minimal" "6.19.7" - "@sentry/types" "6.19.7" - "@sentry/utils" "6.19.7" - tslib "^1.9.3" + "@sentry/core" "10.45.0" -"@sentry/hub@6.19.7": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.19.7.tgz#58ad7776bbd31e9596a8ec46365b45cd8b9cfd11" - integrity sha512-y3OtbYFAqKHCWezF0EGGr5lcyI2KbaXW2Ik7Xp8Mu9TxbSTuwTe4rTntwg8ngPjUQU3SUHzgjqVB8qjiGqFXCA== +"@sentry-internal/replay-canvas@10.45.0": + version "10.45.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-10.45.0.tgz#e0f593f38bbaad70868538cee6e5660e007acc71" + integrity sha512-nvq/AocdZTuD7y0KSiWi3gVaY0s5HOFy86mC/v1kDZmT/jsBAzN5LDkk/f1FvsWma1peqQmpUqxvhC+YIW294Q== dependencies: - "@sentry/types" "6.19.7" - "@sentry/utils" "6.19.7" - tslib "^1.9.3" + "@sentry-internal/replay" "10.45.0" + "@sentry/core" "10.45.0" -"@sentry/minimal@6.19.7": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.19.7.tgz#b3ee46d6abef9ef3dd4837ebcb6bdfd01b9aa7b4" - integrity sha512-wcYmSJOdvk6VAPx8IcmZgN08XTXRwRtB1aOLZm+MVHjIZIhHoBGZJYTVQS/BWjldsamj2cX3YGbGXNunaCfYJQ== +"@sentry-internal/replay@10.45.0": + version "10.45.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/replay/-/replay-10.45.0.tgz#7f196277ed6e8c05b79e38c27c6eed88807c8c27" + integrity sha512-vjosRoGA1bzhVAEO1oce+CsRdd70quzBeo7WvYqpcUnoLe/Rv8qpOMqWX3j26z7XfFHMExWQNQeLxmtYOArvlw== dependencies: - "@sentry/hub" "6.19.7" - "@sentry/types" "6.19.7" - tslib "^1.9.3" + "@sentry-internal/browser-utils" "10.45.0" + "@sentry/core" "10.45.0" -"@sentry/react@^6.18.2": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/react/-/react-6.19.7.tgz#58cc2d6da20f7d3b0df40638dfbbbc86c9c85caf" - integrity sha512-VzJeBg/v41jfxUYPkH2WYrKjWc4YiMLzDX0f4Zf6WkJ4v3IlDDSkX6DfmWekjTKBho6wiMkSNy2hJ1dHfGZ9jA== +"@sentry/browser@10.45.0": + version "10.45.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-10.45.0.tgz#296d0c3965266db457c8aa834a21649b1e6b25ec" + integrity sha512-e/a8UMiQhqqv706McSIcG6XK+AoQf9INthi2pD+giZfNRTzXTdqHzUT5OIO5hg8Am6eF63nDJc+vrYNPhzs51Q== dependencies: - "@sentry/browser" "6.19.7" - "@sentry/minimal" "6.19.7" - "@sentry/types" "6.19.7" - "@sentry/utils" "6.19.7" - hoist-non-react-statics "^3.3.2" - tslib "^1.9.3" + "@sentry-internal/browser-utils" "10.45.0" + "@sentry-internal/feedback" "10.45.0" + "@sentry-internal/replay" "10.45.0" + "@sentry-internal/replay-canvas" "10.45.0" + "@sentry/core" "10.45.0" -"@sentry/tracing@^6.18.2": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.19.7.tgz#54bb99ed5705931cd33caf71da347af769f02a4c" - integrity sha512-ol4TupNnv9Zd+bZei7B6Ygnr9N3Gp1PUrNI761QSlHtPC25xXC5ssSD3GMhBgyQrcvpuRcCFHVNNM97tN5cZiA== +"@sentry/core@10.45.0": + version "10.45.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-10.45.0.tgz#4bac78dd4815588d0089e6594ab20da5b5ed467e" + integrity sha512-s69UXxvefeQxuZ5nY7/THtTrIEvJxNVCp3ns4kwoCw1qMpgpvn/296WCKVmM7MiwnaAdzEKnAvLAwaxZc2nM7Q== + +"@sentry/react@^10.45.0": + version "10.45.0" + resolved "https://registry.yarnpkg.com/@sentry/react/-/react-10.45.0.tgz#cced3560b30190e0b751eae7eaea082d7b73eb39" + integrity sha512-jLezuxi4BUIU3raKyAPR5xMbQG/nhwnWmKo5p11NCbLmWzkS+lxoyDTUB4B8TAKZLfdtdkKLOn1S0tFc8vbUHw== dependencies: - "@sentry/hub" "6.19.7" - "@sentry/minimal" "6.19.7" - "@sentry/types" "6.19.7" - "@sentry/utils" "6.19.7" - tslib "^1.9.3" + "@sentry/browser" "10.45.0" + "@sentry/core" "10.45.0" -"@sentry/types@6.19.7": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.19.7.tgz#c6b337912e588083fc2896eb012526cf7cfec7c7" - integrity sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg== - -"@sentry/utils@6.19.7": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.19.7.tgz#6edd739f8185fd71afe49cbe351c1bbf5e7b7c79" - integrity sha512-z95ECmE3i9pbWoXQrD/7PgkBAzJYR+iXtPuTkpBjDKs86O3mT+PXOT3BAn79w2wkn7/i3vOGD2xVr1uiMl26dA== - dependencies: - "@sentry/types" "6.19.7" - tslib "^1.9.3" - -"@socket.io/component-emitter@~3.1.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz#821f8442f4175d8f0467b9daf26e3a18e2d02af2" - integrity sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA== - -"@sqlite.org/sqlite-wasm@^3.50.3-build1": - version "3.50.3-build1" - resolved "https://registry.yarnpkg.com/@sqlite.org/sqlite-wasm/-/sqlite-wasm-3.50.3-build1.tgz#684e2c767e7c315bb5cd178d7dfb50d1a4b6d5ce" - integrity sha512-NU+I7KJ5kpMZNyZtJ9hOLlhQHJAA3fJhtkE7kf3C0SlGg4ayz6AkqxcaDcR4qOsrz1XP2+yM1yORaLCt55XDQg== +"@sqlite.org/sqlite-wasm@^3.51.2-build8": + version "3.51.2-build8" + resolved "https://registry.yarnpkg.com/@sqlite.org/sqlite-wasm/-/sqlite-wasm-3.51.2-build8.tgz#bf6a6d28c35cdf265c1557ecc2bf96bba5b2da09" + integrity sha512-NvWLTgbqGu1XOLKxePE5Jvc5bzy6QACAQLURQnumSFm0hQms09r2rjMp5i1rvh1DXCe5Rx1FEGcEeQ9BnBB2+Q== "@stylelint/postcss-css-in-js@^0.37.2": version "0.37.3" @@ -1285,7 +1244,7 @@ remark "^13.0.0" unist-util-find-all-after "^3.0.2" -"@tabler/icons-react@^2.47.0": +"@tabler/icons-react@2.47.0": version "2.47.0" resolved "https://registry.yarnpkg.com/@tabler/icons-react/-/icons-react-2.47.0.tgz#b704e7ae98f95be8bd6e938b4b2e84cd20b0cf31" integrity sha512-iqly2FvCF/qUbgmvS8E40rVeYY7laltc5GUjRxQj59DuX0x/6CpKHTXt86YlI2whg4czvd/c8Ce8YR08uEku0g== @@ -1293,13 +1252,6 @@ "@tabler/icons" "2.47.0" prop-types "^15.7.2" -"@tabler/icons-webfont@^2.47.0": - version "2.47.0" - resolved "https://registry.yarnpkg.com/@tabler/icons-webfont/-/icons-webfont-2.47.0.tgz#4b4303170d1ed616140044848d6ef99cc993abf9" - integrity sha512-yfV9zDal0iYDmyGz4BS9IlhaaMydtLdyOrY2UAZToP65sVWj7AFIi6symNzsoBaX867xAZWVHdKcocah0BfSog== - dependencies: - "@tabler/icons" "2.47.0" - "@tabler/icons@2.47.0": version "2.47.0" resolved "https://registry.yarnpkg.com/@tabler/icons/-/icons-2.47.0.tgz#c41c680d1947e3ab2d60af3febc4132287c60596" @@ -1310,30 +1262,20 @@ resolved "https://registry.yarnpkg.com/@tailwindcss/aspect-ratio/-/aspect-ratio-0.4.2.tgz#9ffd52fee8e3c8b20623ff0dcb29e5c21fb0a9ba" integrity sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ== -"@tailwindcss/forms@0.5.3": - version "0.5.3" - resolved "https://registry.yarnpkg.com/@tailwindcss/forms/-/forms-0.5.3.tgz#e4d7989686cbcaf416c53f1523df5225332a86e7" - integrity sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q== +"@tailwindcss/forms@0.5.11": + version "0.5.11" + resolved "https://registry.yarnpkg.com/@tailwindcss/forms/-/forms-0.5.11.tgz#e77039e96fa7b87c3d001a991f77f9418e666700" + integrity sha512-h9wegbZDPurxG22xZSoWtdzc41/OlNEUQERNqI/0fOwa2aVlWGu7C35E/x6LDyD3lgtztFSSjKZyuVM0hxhbgA== dependencies: mini-svg-data-uri "^1.2.3" -"@tailwindcss/typography@0.5.7": - version "0.5.7" - resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.5.7.tgz#e0b95bea787ee14c5a34a74fc824e6fe86ea8855" - integrity sha512-JTTSTrgZfp6Ki4svhPA4mkd9nmQ/j9EfE7SbHJ1cLtthKkpW2OxsFXzSmxbhYbEkfNIyAyhle5p4SYyKRbz/jg== +"@tailwindcss/typography@0.5.19": + version "0.5.19" + resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.5.19.tgz#ecb734af2569681eb40932f09f60c2848b909456" + integrity sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg== dependencies: - lodash.castarray "^4.4.0" - lodash.isplainobject "^4.0.6" - lodash.merge "^4.6.2" postcss-selector-parser "6.0.10" -"@tippyjs/react@4.2.5": - version "4.2.5" - resolved "https://registry.yarnpkg.com/@tippyjs/react/-/react-4.2.5.tgz#9b5837db93a1cac953962404df906aef1a18e80d" - integrity sha512-YBLgy+1zznBNbx4JOoOdFXWMLXjBh9hLPwRtq3s8RRdrez2l3tPBRt2m2909wZd9S1KUeKjOOYYsnitccI9I3A== - dependencies: - tippy.js "^6.3.1" - "@trapezedev/gradle-parse@7.1.3": version "7.1.3" resolved "https://registry.yarnpkg.com/@trapezedev/gradle-parse/-/gradle-parse-7.1.3.tgz#31263dc06175b72fe0859c175ef0e10dc631631b" @@ -1370,11 +1312,6 @@ xpath "^0.0.32" yargs "^17.2.1" -"@trysound/sax@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" - integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== - "@tsconfig/node10@^1.0.7": version "1.0.11" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" @@ -1395,13 +1332,6 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== -"@types/cors@^2.8.12": - version "2.8.19" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.19.tgz#d93ea2673fd8c9f697367f5eeefc2bbfa94f0342" - integrity sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg== - dependencies: - "@types/node" "*" - "@types/earcut@^2.1.0": version "2.1.4" resolved "https://registry.yarnpkg.com/@types/earcut/-/earcut-2.1.4.tgz#5811d7d333048f5a7573b22ddc84923e69596da6" @@ -1440,25 +1370,6 @@ dependencies: "@types/node" "*" -"@types/glob-stream@*": - version "8.0.3" - resolved "https://registry.yarnpkg.com/@types/glob-stream/-/glob-stream-8.0.3.tgz#01033062e1a5e58daff3befe9378fc0e329b538a" - integrity sha512-vctgrT9AH/GK3TRaIbRUU0TZn12GBU4kzelZdPyJp1Sc8L/6Wrq21UrtN4+x4saqTg6COUIUtFV6JSYcVln/EQ== - dependencies: - "@types/node" "*" - "@types/picomatch" "*" - "@types/streamx" "*" - -"@types/gulp@^4.0.7": - version "4.0.17" - resolved "https://registry.yarnpkg.com/@types/gulp/-/gulp-4.0.17.tgz#b314c3762d08d8d69b7c0b86f78d069bafd65009" - integrity sha512-+pKQynu2C/HS16kgmDlAicjtFYP8kaa86eE9P0Ae7GB5W29we/E2TIdbOWtEZD5XkpY+jr8fyqfwO6SWZecLpQ== - dependencies: - "@types/node" "*" - "@types/undertaker" ">=1.2.6" - "@types/vinyl-fs" "*" - chokidar "^3.3.1" - "@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" @@ -1483,13 +1394,6 @@ dependencies: undici-types "~7.10.0" -"@types/node@>=10.0.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-25.5.0.tgz#5c99f37c443d9ccc4985866913f1ed364217da31" - integrity sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw== - dependencies: - undici-types "~7.18.0" - "@types/normalize-package-data@^2.4.0": version "2.4.4" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" @@ -1500,52 +1404,22 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== -"@types/picomatch@*": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/picomatch/-/picomatch-4.0.2.tgz#85a232bafed4121527cbf70c0ef461b46b2cc10b" - integrity sha512-qHHxQ+P9PysNEGbALT8f8YOSHW0KJu6l2xU8DYY0fu/EmGxXdVnuTLvFUvBgPJMSqXq29SYHveejeAha+4AYgA== - "@types/slice-ansi@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/slice-ansi/-/slice-ansi-4.0.0.tgz#eb40dfbe3ac5c1de61f6bcb9ed471f54baa989d6" integrity sha512-+OpjSaq85gvlZAYINyzKpLeiFkSC4EsC6IIiT6v6TLSU5k5U83fHGj9Lel8oKEXM0HqgrMVCjXPDPVICtxF7EQ== -"@types/streamx@*": - version "2.9.5" - resolved "https://registry.yarnpkg.com/@types/streamx/-/streamx-2.9.5.tgz#2a4a28d73e521c6799e06e7faa4dabc2139c5733" - integrity sha512-IHYsa6jYrck8VEdSwpY141FTTf6D7boPeMq9jy4qazNrFMA4VbRz/sw5LSsfR7jwdDcx0QKWkUexZvsWBC2eIQ== - dependencies: - "@types/node" "*" - -"@types/undertaker-registry@*": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@types/undertaker-registry/-/undertaker-registry-1.0.4.tgz#2ea4b68abd0b3ad6716ab8ac28734092c1d152c4" - integrity sha512-tW77pHh2TU4uebWXWeEM5laiw8BuJ7pyJYDh6xenOs75nhny2kVgwYbegJ4BoLMYsIrXaBpKYaPdYO3/udG+hg== - -"@types/undertaker@>=1.2.6": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@types/undertaker/-/undertaker-1.2.11.tgz#d9e08b72c4bea5fc40e5bad63ad5a1a2b675e3ca" - integrity sha512-j1Z0V2ByRHr8ZK7eOeGq0LGkkdthNFW0uAZGY22iRkNQNL9/vAV0yFPr1QN3FM/peY5bxs9P+1f0PYJTQVa5iA== - dependencies: - "@types/node" "*" - "@types/undertaker-registry" "*" - async-done "~1.3.2" +"@types/trusted-types@^2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" + integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== "@types/unist@^2", "@types/unist@^2.0.0", "@types/unist@^2.0.2": version "2.0.11" resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4" integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA== -"@types/vinyl-fs@*": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@types/vinyl-fs/-/vinyl-fs-3.0.6.tgz#e01b2a9fb4e37aabe386cc458472924b2f36e2de" - integrity sha512-e9GHnmABNUnJ4D99OjVO5s87TfYpmEs7/VKbVS/rt0KkZnKA2vIMyEC5K0H7W/XBiRUO4pdaZxvVUmzjRnrydA== - dependencies: - "@types/glob-stream" "*" - "@types/node" "*" - "@types/vinyl" "*" - -"@types/vinyl@*", "@types/vinyl@^2.0.4": +"@types/vinyl@^2.0.4": version "2.0.12" resolved "https://registry.yarnpkg.com/@types/vinyl/-/vinyl-2.0.12.tgz#17642ca9a8ae10f3db018e9f885da4188db4c6e6" integrity sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw== @@ -1553,18 +1427,6 @@ "@types/expect" "^1.20.4" "@types/node" "*" -"@types/ws@^8.5.12": - version "8.18.1" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" - integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== - dependencies: - "@types/node" "*" - -"@vercel/ncc@0.38.3": - version "0.38.3" - resolved "https://registry.yarnpkg.com/@vercel/ncc/-/ncc-0.38.3.tgz#5475eeee3ac0f1a439f237596911525a490a88b5" - integrity sha512-rnK6hJBS6mwc+Bkab+PGPs9OiS0i/3kdTO+CkI8V0/VrW3vmz7O2Pxjw/owOlmo6PKEIxRSeZKv/kuL9itnpYA== - "@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": version "1.14.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6" @@ -1686,21 +1548,6 @@ "@webassemblyjs/ast" "1.14.1" "@xtuc/long" "4.2.2" -"@webpack-cli/configtest@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-3.0.1.tgz#76ac285b9658fa642ce238c276264589aa2b6b57" - integrity sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA== - -"@webpack-cli/info@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-3.0.1.tgz#3cff37fabb7d4ecaab6a8a4757d3826cf5888c63" - integrity sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ== - -"@webpack-cli/serve@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-3.0.1.tgz#bd8b1f824d57e30faa19eb78e4c0951056f72f00" - integrity sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg== - "@xml-tools/parser@^1.0.11": version "1.0.11" resolved "https://registry.yarnpkg.com/@xml-tools/parser/-/parser-1.0.11.tgz#a118a14099ea5c3c537e4781fad2fc195b57f8ff" @@ -1741,14 +1588,6 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -accepts@~1.3.4: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - acorn-import-phases@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz#16eb850ba99a056cb7cbfe872ffb8972e18c8bd7" @@ -1761,10 +1600,10 @@ acorn-walk@^8.1.1: dependencies: acorn "^8.11.0" -acorn@^8.11.0, acorn@^8.14.0, acorn@^8.15.0, acorn@^8.4.1: - version "8.15.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" - integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== +acorn@^8.11.0, acorn@^8.14.0, acorn@^8.16.0, acorn@^8.4.1: + version "8.16.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.16.0.tgz#4ce79c89be40afe7afe8f3adb902a1f1ce9ac08a" + integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== add-stream@^1.0.0: version "1.0.0" @@ -1817,13 +1656,6 @@ ansi-colors@^1.0.1: dependencies: ansi-wrap "^0.1.0" -ansi-gray@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" - integrity sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw== - dependencies: - ansi-wrap "0.1.0" - ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -1858,12 +1690,12 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== +ansi-styles@^6.1.0, ansi-styles@^6.2.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" + integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== -ansi-wrap@0.1.0, ansi-wrap@^0.1.0: +ansi-wrap@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" integrity sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw== @@ -1873,15 +1705,7 @@ any-promise@^1.0.0: resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -anymatch@~3.1.1, anymatch@~3.1.2: +anymatch@^3.1.3, anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== @@ -1889,23 +1713,11 @@ anymatch@~3.1.1, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -append-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" - integrity sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA== - dependencies: - buffer-equal "^1.0.0" - "aproba@^1.0.3 || ^2.0.0": version "2.1.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.1.0.tgz#75500a190313d95c64e871e7e4284c6ac219f0b1" integrity sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew== -archy@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== - are-we-there-yet@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" @@ -1924,44 +1736,7 @@ arg@^5.0.2: resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== - -arr-filter@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/arr-filter/-/arr-filter-1.1.2.tgz#43fdddd091e8ef11aa4c45d9cdc18e2dff1711ee" - integrity sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA== - dependencies: - make-iterator "^1.0.0" - -arr-flatten@^1.0.1, arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-map@^2.0.0, arr-map@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/arr-map/-/arr-map-2.0.2.tgz#3a77345ffc1cf35e2a91825601f9e58f2e24cac4" - integrity sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw== - dependencies: - make-iterator "^1.0.0" - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== - -array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" - integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== - dependencies: - call-bound "^1.0.3" - is-array-buffer "^3.0.5" - -array-each@^1.0.0, array-each@^1.0.1: +array-each@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" integrity sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA== @@ -1971,58 +1746,16 @@ array-ify@^1.0.0: resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== -array-initial@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/array-initial/-/array-initial-1.1.0.tgz#2fa74b26739371c3947bd7a7adc73be334b3d795" - integrity sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw== - dependencies: - array-slice "^1.0.0" - is-number "^4.0.0" - -array-last@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/array-last/-/array-last-1.3.0.tgz#7aa77073fec565ddab2493f5f88185f404a9d336" - integrity sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg== - dependencies: - is-number "^4.0.0" - array-slice@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" integrity sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w== -array-sort@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-sort/-/array-sort-1.0.0.tgz#e4c05356453f56f53512a7d1d6123f2c54c0a88a" - integrity sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg== - dependencies: - default-compare "^1.0.0" - get-value "^2.0.6" - kind-of "^5.0.2" - array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== - -arraybuffer.prototype.slice@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" - integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== - dependencies: - array-buffer-byte-length "^1.0.1" - call-bind "^1.0.8" - define-properties "^1.2.1" - es-abstract "^1.23.5" - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - is-array-buffer "^3.0.4" - arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -2050,62 +1783,40 @@ assert@^1.1.1: object.assign "^4.1.4" util "^0.10.4" -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== - astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async-done@^1.2.0, async-done@^1.2.2, async-done@~1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/async-done/-/async-done-1.3.2.tgz#5e15aa729962a4b07414f528a88cdf18e0b290a2" - integrity sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw== +async-done@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/async-done/-/async-done-2.0.0.tgz#f1ec5df738c6383a52b0a30d0902fd897329c15a" + integrity sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw== dependencies: - end-of-stream "^1.1.0" - once "^1.3.2" - process-nextick-args "^2.0.0" - stream-exhaust "^1.0.1" + end-of-stream "^1.4.4" + once "^1.4.0" + stream-exhaust "^1.0.2" -async-each@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.6.tgz#52f1d9403818c179b7561e11a5d1b77eb2160e77" - integrity sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg== - -async-function@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" - integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== - -async-settle@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-settle/-/async-settle-1.0.0.tgz#1d0a914bb02575bec8a8f3a74e5080f72b2c0c6b" - integrity sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw== +async-settle@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/async-settle/-/async-settle-2.0.0.tgz#c695ad14e070f6a755d019d32d6eb38029020287" + integrity sha512-Obu/KE8FurfQRN6ODdHN9LuXqwC+JFIM9NRyZqJJ4ZfLJmIYN9Rg0/kb+wF70VV5+fJusTMQlJ1t5rF7J/ETdg== dependencies: - async-done "^1.2.2" + async-done "^2.0.0" 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" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -autoprefixer@^10.4.13: - version "10.4.21" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.21.tgz#77189468e7a8ad1d9a37fbc08efc9f480cf0a95d" - integrity sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ== +autoprefixer@^10.4.27: + version "10.4.27" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.27.tgz#51ea301a5c3c5f8642f8e564759c4f573be486f2" + integrity sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA== dependencies: - browserslist "^4.24.4" - caniuse-lite "^1.0.30001702" - fraction.js "^4.3.7" - normalize-range "^0.1.2" + browserslist "^4.28.1" + caniuse-lite "^1.0.30001774" + fraction.js "^5.3.4" picocolors "^1.1.1" postcss-value-parser "^4.2.0" @@ -2129,30 +1840,19 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" -axe-core@^4.4.2: - version "4.10.3" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.3.tgz#04145965ac7894faddbac30861e5d8f11bfd14fc" - integrity sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg== - b4a@^1.6.4: version "1.6.7" resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.7.tgz#a99587d4ebbfbd5a6e3b21bdb5d5fa385767abe4" integrity sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg== -bach@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/bach/-/bach-1.2.0.tgz#4b3ce96bf27134f79a1b414a51c14e34c3bd9880" - integrity sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg== +bach@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/bach/-/bach-2.0.1.tgz#45a3a3cbf7dbba3132087185c60357482b988972" + integrity sha512-A7bvGMGiTOxGMpNupYl9HQTf0FFDNF4VCmks4PJpFyN1AX2pdKuxuwdvUz2Hu388wcgp+OvGFNsumBfFNkR7eg== dependencies: - arr-filter "^1.1.1" - arr-flatten "^1.0.1" - arr-map "^2.0.0" - array-each "^1.0.0" - array-initial "^1.0.0" - array-last "^1.1.1" - async-done "^1.2.2" - async-settle "^1.0.0" - now-and-later "^2.0.0" + async-done "^2.0.0" + async-settle "^2.0.0" + now-and-later "^3.0.0" bail@^1.0.0: version "1.0.5" @@ -2174,6 +1874,11 @@ bare-events@^2.2.0, bare-events@^2.5.4: resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.6.0.tgz#11d9506da109e363a2f3af050fbb005ccdb3ee8f" integrity sha512-EKZ5BTXYExaNqi3I3f9RtEsaI/xBSGjE0XZCZilPzFAV/goswFHuPd9jEZlPIZ/iNZJwDSao9qRiScySz7MbQg== +bare-events@^2.7.0: + version "2.8.2" + resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.8.2.tgz#7b3e10bd8e1fc80daf38bb516921678f566ab89f" + integrity sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ== + bare-fs@^4.0.1: version "4.1.6" resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-4.1.6.tgz#0925521e7310f65cb1f154cab264f0b647a7cdef" @@ -2212,28 +1917,15 @@ base64-js@^1.0.2, base64-js@^1.3.1, base64-js@^1.5.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -base64id@2.0.0, base64id@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" - integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== +baseline-browser-mapping@^2.9.0: + version "2.10.7" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.7.tgz#2c017adffe4f7bbe93c2e55526cc1869d36f588c" + integrity sha512-1ghYO3HnxGec0TCGBXiDLVns4eCSx4zJpxnHrlqFQajmhfKMQBzUGDdkMK7fUW7PTHTeLf+j87aTuKuuwWzMGw== -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -better-sqlite3@^12.6.2: - version "12.6.2" - resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-12.6.2.tgz#770649f28a62e543a360f3dfa1afe4cc944b1937" - integrity sha512-8VYKM3MjCa9WcaSAI3hzwhmyHVlH8tiGFwf0RlTsZPWJ1I5MkzjiudCo4KC4DxOaL/53A5B1sI/IbldNFDbsKA== +better-sqlite3@^12.8.0: + version "12.8.0" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-12.8.0.tgz#ec9ccd4a426a35f3b9355c147af6c92a6ddd6862" + integrity sha512-RxD2Vd96sQDjQr20kdP+F+dK/1OUNiVOl200vKBZY8u0vTwysfolF6Hq+3ZK2+h8My9YvZhHsF+RSGZW2VYrPQ== dependencies: bindings "^1.5.0" prebuild-install "^7.1.1" @@ -2243,16 +1935,11 @@ big-integer@1.6.x: resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85" integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg== -bignumber.js@^9.0.2: +bignumber.js@^9.3.1: version "9.3.1" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.3.1.tgz#759c5aaddf2ffdc4f154f7b493e1c8770f88c4d7" integrity sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ== -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - binary-extensions@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" @@ -2279,6 +1966,15 @@ bl@^4.0.3: inherits "^2.0.4" readable-stream "^3.4.0" +bl@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-5.1.0.tgz#183715f678c7188ecef9fe475d90209400624273" + integrity sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ== + dependencies: + buffer "^6.0.3" + inherits "^2.0.4" + readable-stream "^3.4.0" + bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: version "4.12.2" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.2.tgz#3d8fed6796c24e177737f7cc5172ee04ef39ec99" @@ -2289,24 +1985,6 @@ bn.js@^5.2.1: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.2.tgz#82c09f9ebbb17107cd72cb7fd39bd1f9d0aaa566" integrity sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw== -body-parser@^1.19.0: - version "1.20.4" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.4.tgz#f8e20f4d06ca8a50a71ed329c15dccad1cdc547f" - integrity sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA== - dependencies: - bytes "~3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "~1.2.0" - http-errors "~2.0.1" - iconv-lite "~0.4.24" - on-finished "~2.4.1" - qs "~6.14.0" - raw-body "~2.5.3" - type-is "~1.6.18" - unpipe "~1.0.0" - boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" @@ -2353,23 +2031,7 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^3.0.2, braces@^3.0.3, braces@~3.0.2: +braces@^3.0.3, braces@~3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== @@ -2444,26 +2106,22 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.21.4, browserslist@^4.24.0, browserslist@^4.24.4: - version "4.25.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.25.1.tgz#ba9e8e6f298a1d86f829c9b975e07948967bb111" - integrity sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw== +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.24.0, browserslist@^4.28.1: + version "4.28.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95" + integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA== dependencies: - caniuse-lite "^1.0.30001726" - electron-to-chromium "^1.5.173" - node-releases "^2.0.19" - update-browserslist-db "^1.1.3" + baseline-browser-mapping "^2.9.0" + caniuse-lite "^1.0.30001759" + electron-to-chromium "^1.5.263" + node-releases "^2.0.27" + update-browserslist-db "^1.2.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-equal@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.1.tgz#2f7651be5b1b3f057fcd6e7ee16cf34767077d90" - integrity sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg== - buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" @@ -2491,31 +2149,19 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ== -bytes@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" @@ -2524,7 +2170,7 @@ call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply- es-errors "^1.3.0" function-bind "^1.1.2" -call-bind@^1.0.7, call-bind@^1.0.8: +call-bind@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== @@ -2542,7 +2188,7 @@ call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: call-bind-apply-helpers "^1.0.2" get-intrinsic "^1.3.0" -callsites@^3.0.0, callsites@^3.1.0: +callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== @@ -2561,11 +2207,6 @@ camelcase-keys@^6.2.2: map-obj "^4.0.0" quick-lru "^4.0.1" -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - integrity sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg== - camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -2581,10 +2222,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001702, caniuse-lite@^1.0.30001726: - version "1.0.30001731" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001731.tgz#277c07416ea4613ec564e5b0ffb47e7b60f32e2f" - integrity sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001759, caniuse-lite@^1.0.30001774: + version "1.0.30001778" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001778.tgz#79a8a124e3473a20b70616497b987c30d06570a0" + integrity sha512-PN7uxFL+ExFJO61aVmP1aIEG4i9whQd4eoSCebav62UwDyp5OHh06zN4jqKSMePVgxHifCw1QJxdRkA1Pisekg== canvas@^2.11.2: version "2.11.2" @@ -2595,7 +2236,7 @@ canvas@^2.11.2: nan "^2.17.0" simple-get "^3.0.3" -chalk@2.4.2, chalk@^2.4.1: +chalk@2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2604,7 +2245,7 @@ chalk@2.4.2, chalk@^2.4.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.1.0, chalk@^4.1.1: +chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2634,41 +2275,7 @@ chevrotain@7.1.1: dependencies: regexp-to-ast "0.5.0" -chokidar@3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" - integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.5.0" - optionalDependencies: - fsevents "~2.3.1" - -chokidar@^2.0.0: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chokidar@^3.3.0, chokidar@^3.3.1, chokidar@^3.5.1, chokidar@^3.5.3: +chokidar@^3.3.0, chokidar@^3.5.3: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -2703,12 +2310,10 @@ chrome-trace-event@^1.0.2: resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== -chrono-node@2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/chrono-node/-/chrono-node-2.2.4.tgz#0fa169e1d158935bb1d541010046f6107576347d" - integrity sha512-58ERHGfWtWzBxckF9ZyFuwJjcreLDr7C79lHEynSqZ7J8y1JfMa8ok1TvCCf/TOZmkGME1ZSaEEb0DqqWaNFHg== - dependencies: - dayjs "^1.10.0" +chrono-node@2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/chrono-node/-/chrono-node-2.9.0.tgz#a702016d6ec8f6d835a3ba09c6f842fc76969404" + integrity sha512-glI4YY2Jy6JII5l3d5FN6rcrIbKSQqKPhWsIRYPK2IK8Mm4Q1ZZFdYIaDqglUNf7gNwG+kWIzTn0omzzE0VkvQ== cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.6" @@ -2718,35 +2323,11 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.4" safe-buffer "^5.2.1" -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -classnames@2.x, classnames@^2.2.5: - version "2.5.1" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" - integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== - clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w== - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - cliui@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" @@ -2783,11 +2364,6 @@ cliui@^8.0.1: strip-ansi "^6.0.1" wrap-ansi "^7.0.0" -clone-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" - integrity sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g== - clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -2804,30 +2380,11 @@ clone-regexp@^2.1.0: dependencies: is-regexp "^2.0.0" -clone-stats@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" - integrity sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag== - -clone@^2.1.1: +clone@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== -cloneable-readable@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec" - integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ== - dependencies: - inherits "^2.0.1" - process-nextick-args "^2.0.0" - readable-stream "^2.3.5" - -clsx@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" - integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== - 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" @@ -2838,23 +2395,6 @@ codemirror@5.65.18: resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.65.18.tgz#d7146e4271135a9b4adcd023a270185457c9c428" integrity sha512-Gaz4gHnkbHMGgahNt3CA5HBk5lLQBqmD/pBgeB4kQU6OedZmqMBjlRF0LSrp2tJ4wlLNPm2FfaUd1pDy0mdlpA== -collection-map@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-map/-/collection-map-1.0.0.tgz#aea0f06f8d26c780c2b75494385544b2255af18c" - integrity sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA== - dependencies: - arr-map "^2.0.2" - for-own "^1.0.0" - make-iterator "^1.0.0" - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -2920,17 +2460,12 @@ color@^4.2.3: color-convert "^2.0.1" color-string "^1.9.0" -colord@^2.9.1: +colord@^2.9.3: version "2.9.3" resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== -colorette@^2.0.14: - version "2.0.20" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -comlink@^4.4.1: +comlink@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/comlink/-/comlink-4.4.2.tgz#cbbcd82742fbebc06489c28a183eedc5c60a2bca" integrity sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g== @@ -2940,11 +2475,21 @@ commander@8.3.0, commander@^8.3.0: resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== +commander@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" + integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== + commander@^12.1.0: version "12.1.0" resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== +commander@^14.0.3: + version "14.0.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.3.tgz#425d79b48f9af82fcd9e4fc1ea8af6c5ec07bbc2" + integrity sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw== + commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -2955,16 +2500,6 @@ commander@^4.0.0: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== -commander@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== - -commander@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - commander@^9.3.0: version "9.5.0" resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" @@ -2978,36 +2513,11 @@ compare-func@^2.0.0: array-ify "^1.0.0" dot-prop "^5.1.0" -component-emitter@^1.2.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17" - integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -concat-stream@^1.6.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -connect@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" - integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== - dependencies: - debug "2.6.9" - finalhandler "1.1.2" - parseurl "~1.3.3" - utils-merge "1.0.1" - console-browserify@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" @@ -3023,11 +2533,6 @@ constants-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ== -content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - conventional-changelog-angular@^5.0.12: version "5.0.13" resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" @@ -3172,32 +2677,17 @@ conventional-commits-parser@^3.2.0: split2 "^3.0.0" through2 "^4.0.0" -convert-source-map@^1.5.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - convert-source-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -cookie@~0.7.2: - version "0.7.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" - integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== - -copy-props@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/copy-props/-/copy-props-2.0.5.tgz#03cf9ae328d4ebb36f8f1d804448a6af9ee3f2d2" - integrity sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw== +copy-props@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/copy-props/-/copy-props-4.0.0.tgz#01d249198b8c2e4d8a5e87b90c9630f52c99a9c9" + integrity sha512-bVWtw1wQLzzKiYROtvNlbJgxgBYt2bMJpkCbKmXM3xyijvcjjWXEk5nyrrT3bgJ7ODb19ZohE2T0Y3FgNPyoTw== dependencies: - each-props "^1.3.2" + each-props "^3.0.0" is-plain-object "^5.0.0" core-util-is@~1.0.0: @@ -3205,14 +2695,6 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cors@~2.8.5: - version "2.8.6" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.6.tgz#ff5dd69bd95e547503820d29aba4f8faf8dfec96" - integrity sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw== - dependencies: - object-assign "^4" - vary "^1" - cosmiconfig@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" @@ -3270,14 +2752,15 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cross-env@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" - integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== +cross-env@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-10.1.0.tgz#cfd2a6200df9ed75bfb9cb3d7ce609c13ea21783" + integrity sha512-GsYosgnACZTADcmEyJctkJIoqAhHjttw7RsFrVoJNXbsWWqaq6Ym+7kZjq6mS45O0jij6vtiReppKQEtqWy6Dw== dependencies: - cross-spawn "^7.0.1" + "@epic-web/invariant" "^1.0.0" + cross-spawn "^7.0.6" -cross-spawn@^6.0.0, cross-spawn@^6.0.5: +cross-spawn@^6.0.0: version "6.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.6.tgz#30d0efa0712ddb7eb5a76e1e8721bffafa6b5d57" integrity sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw== @@ -3288,7 +2771,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.1, cross-spawn@^7.0.3, cross-spawn@^7.0.6: +cross-spawn@^7.0.3, cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== @@ -3320,10 +2803,10 @@ crypto-random-string@^2.0.0: resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== -css-declaration-sorter@^6.3.1: - version "6.4.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz#28beac7c20bad7f1775be3a7129d7eae409a3a71" - integrity sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g== +css-declaration-sorter@^7.2.0: + version "7.3.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.3.1.tgz#acd204976d7ca5240b5579bfe6e73d4d088fd568" + integrity sha512-gz6x+KkgNCjxq3Var03pRYLhyNfwhkKF1g/yoLgDNtFvVu0/fOLV9C8fFEZRjACp/XQLumjAYo7JVjzH3wLbxA== css-line-break@^2.1.0: version "2.1.0" @@ -3332,7 +2815,7 @@ css-line-break@^2.1.0: dependencies: utrie "^1.0.2" -css-select@^4.1.3, css-select@^4.2.1: +css-select@^4.2.1: version "4.3.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== @@ -3343,15 +2826,34 @@ css-select@^4.1.3, css-select@^4.2.1: domutils "^2.8.0" nth-check "^2.0.1" -css-tree@^1.1.2, css-tree@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== +css-select@^5.1.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.2.2.tgz#01b6e8d163637bb2dd6c982ca4ed65863682786e" + integrity sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw== dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" -css-what@^6.0.1: +css-tree@^3.0.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-3.2.1.tgz#86cac7011561272b30e6b1e042ba6ce047aa7518" + integrity sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA== + dependencies: + mdn-data "2.27.1" + source-map-js "^1.2.1" + +css-tree@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" + integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== + dependencies: + mdn-data "2.0.28" + source-map-js "^1.0.1" + +css-what@^6.0.1, css-what@^6.1.0: version "6.2.2" resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.2.2.tgz#cdcc8f9b6977719fdfbd1de7aec24abf756b9dea" integrity sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA== @@ -3361,72 +2863,67 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssnano-preset-default@^5.2.14: - version "5.2.14" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz#309def4f7b7e16d71ab2438052093330d9ab45d8" - integrity sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A== +cssnano-preset-default@^7.0.11: + version "7.0.11" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-7.0.11.tgz#ea81661d0e8fe59b752560cca4a9f2fac763e92c" + integrity sha512-waWlAMuCakP7//UCY+JPrQS1z0OSLeOXk2sKWJximKWGupVxre50bzPlvpbUwZIDylhf/ptf0Pk+Yf7C+hoa3g== dependencies: - css-declaration-sorter "^6.3.1" - cssnano-utils "^3.1.0" - postcss-calc "^8.2.3" - postcss-colormin "^5.3.1" - postcss-convert-values "^5.1.3" - postcss-discard-comments "^5.1.2" - postcss-discard-duplicates "^5.1.0" - postcss-discard-empty "^5.1.1" - postcss-discard-overridden "^5.1.0" - postcss-merge-longhand "^5.1.7" - postcss-merge-rules "^5.1.4" - postcss-minify-font-values "^5.1.0" - postcss-minify-gradients "^5.1.1" - postcss-minify-params "^5.1.4" - postcss-minify-selectors "^5.2.1" - postcss-normalize-charset "^5.1.0" - postcss-normalize-display-values "^5.1.0" - postcss-normalize-positions "^5.1.1" - postcss-normalize-repeat-style "^5.1.1" - postcss-normalize-string "^5.1.0" - postcss-normalize-timing-functions "^5.1.0" - postcss-normalize-unicode "^5.1.1" - postcss-normalize-url "^5.1.0" - postcss-normalize-whitespace "^5.1.1" - postcss-ordered-values "^5.1.3" - postcss-reduce-initial "^5.1.2" - postcss-reduce-transforms "^5.1.0" - postcss-svgo "^5.1.0" - postcss-unique-selectors "^5.1.1" + browserslist "^4.28.1" + css-declaration-sorter "^7.2.0" + cssnano-utils "^5.0.1" + postcss-calc "^10.1.1" + postcss-colormin "^7.0.6" + postcss-convert-values "^7.0.9" + postcss-discard-comments "^7.0.6" + postcss-discard-duplicates "^7.0.2" + postcss-discard-empty "^7.0.1" + postcss-discard-overridden "^7.0.1" + postcss-merge-longhand "^7.0.5" + postcss-merge-rules "^7.0.8" + postcss-minify-font-values "^7.0.1" + postcss-minify-gradients "^7.0.1" + postcss-minify-params "^7.0.6" + postcss-minify-selectors "^7.0.6" + postcss-normalize-charset "^7.0.1" + postcss-normalize-display-values "^7.0.1" + postcss-normalize-positions "^7.0.1" + postcss-normalize-repeat-style "^7.0.1" + postcss-normalize-string "^7.0.1" + postcss-normalize-timing-functions "^7.0.1" + postcss-normalize-unicode "^7.0.6" + postcss-normalize-url "^7.0.1" + postcss-normalize-whitespace "^7.0.1" + postcss-ordered-values "^7.0.2" + postcss-reduce-initial "^7.0.6" + postcss-reduce-transforms "^7.0.1" + postcss-svgo "^7.1.1" + postcss-unique-selectors "^7.0.5" -cssnano-utils@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" - integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== +cssnano-utils@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-5.0.1.tgz#f529e9aa0d7930512ca45b9e2ddb8d6b9092eb30" + integrity sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg== -cssnano@^5.1.13: - version "5.1.15" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.15.tgz#ded66b5480d5127fcb44dac12ea5a983755136bf" - integrity sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw== +cssnano@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-7.1.3.tgz#2a542bb8d62b6bee9e23e455ba2e507fd102f611" + integrity sha512-mLFHQAzyapMVFLiJIn7Ef4C2UCEvtlTlbyILR6B5ZsUAV3D/Pa761R5uC1YPhyBkRd3eqaDm2ncaNrD7R4mTRg== dependencies: - cssnano-preset-default "^5.2.14" - lilconfig "^2.0.3" - yaml "^1.10.2" + cssnano-preset-default "^7.0.11" + lilconfig "^3.1.3" -csso@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== +csso@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" + integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== dependencies: - css-tree "^1.1.2" + css-tree "~2.2.0" csstype@^3.0.2: version "3.1.3" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== -custom-event@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" - integrity sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg== - "d3-dispatch@1 - 3": version "3.0.1" resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-3.0.1.tgz#5fc75284e9c2375c36c839411a0cf550cbfc4d5e" @@ -3451,72 +2948,20 @@ d3-force@3.0.0: resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0" integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA== -d@1, d@^1.0.1, d@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.2.tgz#2aefd554b81981e7dccf72d6842ae725cb17e5de" - integrity sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw== - dependencies: - es5-ext "^0.10.64" - type "^2.7.2" - dargs@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== -data-view-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" - integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - is-data-view "^1.0.2" - -data-view-byte-length@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" - integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - is-data-view "^1.0.2" - -data-view-byte-offset@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" - integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -date-format@^4.0.14: - version "4.0.14" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" - integrity sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg== - dateformat@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -dayjs@^1.10.0: - version "1.11.13" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c" - integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== - -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== - dependencies: - ms "2.0.0" - -debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.3.1, debug@^4.3.4, debug@^4.4.0: - version "4.4.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" - integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== +debug@4: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== dependencies: ms "^2.1.3" @@ -3527,10 +2972,10 @@ debug@4.3.4: dependencies: ms "2.1.2" -debug@^4.2.0, debug@~4.4.1: - version "4.4.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" - integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== +debug@^4.0.0, debug@^4.1.0, debug@^4.3.1, debug@^4.3.4, debug@^4.4.0: + version "4.4.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" + integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== dependencies: ms "^2.1.3" @@ -3542,16 +2987,11 @@ decamelize-keys@^1.1.0: decamelize "^1.1.0" map-obj "^1.0.0" -decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.2.0: +decamelize@^1.1.0, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - decompress-response@^4.2.0: version "4.2.1" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" @@ -3576,18 +3016,6 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -default-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/default-compare/-/default-compare-1.0.0.tgz#cb61131844ad84d84788fb68fd01681ca7781a2f" - integrity sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ== - dependencies: - kind-of "^5.0.2" - -default-resolution@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/default-resolution/-/default-resolution-2.0.0.tgz#bcb82baa72ad79b426a76732f1a81ad6df26d684" - integrity sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ== - define-data-property@^1.0.1, define-data-property@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" @@ -3611,28 +3039,6 @@ define-properties@^1.2.1: has-property-descriptors "^1.0.0" object-keys "^1.1.1" -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - del@^6.0.0: version "6.1.1" resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" @@ -3652,15 +3058,10 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== -depd@2.0.0, depd@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -dependency-graph@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.11.0.tgz#ac0ce7ed68a54da22165a85e97a01d53f5eb2e27" - integrity sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg== +dependency-graph@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-1.0.0.tgz#bb5e85aec1310bc13b22dbd76e3196c4ee4c10d2" + integrity sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg== des.js@^1.0.0: version "1.1.0" @@ -3670,11 +3071,6 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" -destroy@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - detect-file@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" @@ -3698,11 +3094,6 @@ dezalgo@^1.0.4: asap "^2.0.0" wrappy "1" -di@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" - integrity sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA== - didyoumean@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" @@ -3747,16 +3138,6 @@ dom-helpers@^5.0.1: "@babel/runtime" "^7.8.7" csstype "^3.0.2" -dom-serialize@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" - integrity sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ== - dependencies: - custom-event "~1.0.0" - ent "~2.2.0" - extend "^3.0.0" - void-elements "^2.0.0" - dom-serializer@0: version "0.2.2" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" @@ -3774,6 +3155,15 @@ dom-serializer@^1.0.1: domhandler "^4.2.0" entities "^2.0.0" +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" @@ -3784,7 +3174,7 @@ domelementtype@1, domelementtype@^1.3.1: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== -domelementtype@^2.0.1, domelementtype@^2.2.0: +domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== @@ -3803,10 +3193,19 @@ domhandler@^4.2.0, domhandler@^4.3.1: dependencies: domelementtype "^2.2.0" -dompurify@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.0.tgz#c9c88390f024c2823332615c9e20a453cf3825dd" - integrity sha512-Be9tbQMZds4a3C6xTmz68NlMfeONA//4dOavl/1rNw50E+/QO0KVpbcU0PcaW0nsQxurXls9ZocqFxk8R2mWEA== +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +dompurify@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.3.3.tgz#680cae8af3e61320ddf3666a3bc843f7b291b2b6" + integrity sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA== + optionalDependencies: + "@types/trusted-types" "^2.0.7" domutils@^1.5.1: version "1.7.0" @@ -3825,6 +3224,15 @@ domutils@^2.8.0: domelementtype "^2.2.0" domhandler "^4.2.0" +domutils@^3.0.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78" + integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + dot-prop@^5.1.0: version "5.3.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" @@ -3832,7 +3240,7 @@ dot-prop@^5.1.0: dependencies: is-obj "^2.0.0" -dunder-proto@^1.0.0, dunder-proto@^1.0.1: +dunder-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== @@ -3841,22 +3249,12 @@ dunder-proto@^1.0.0, dunder-proto@^1.0.1: es-errors "^1.3.0" gopd "^1.2.0" -duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== +each-props@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/each-props/-/each-props-3.0.0.tgz#a88fb17634a4828307610ec68269fba2f7280cd8" + integrity sha512-IYf1hpuWrdzse/s/YJOrFmU15lyhSzxelNVAHTEG3DtP4QsLTWZUzcUL3HMXmKQxXpa4EIrBPpwRgj0aehdvAw== dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -each-props@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/each-props/-/each-props-1.3.2.tgz#ea45a414d16dd5cfa419b1a81720d5ca06892333" - integrity sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA== - dependencies: - is-plain-object "^2.0.1" + is-plain-object "^5.0.0" object.defaults "^1.1.0" earcut@^2.2.2: @@ -3869,15 +3267,10 @@ eastasianwidth@^0.2.0: resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.5.173: - version "1.5.195" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.195.tgz#2fe0d9b644726292189f227be73740868617b6d5" - integrity sha512-URclP0iIaDUzqcAyV1v2PgduJ9N0IdXmWsnPzPfelvBmjmZzEy6xJcjb1cXj+TbYqXgtLrjHEoaSIdTYhw4ezg== +electron-to-chromium@^1.5.263: + version "1.5.313" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.313.tgz#193e9ae2c2ab6915acb41e833068381e4ef0b3e4" + integrity sha512-QBMrTWEf00GXZmJyx2lbYD45jpI3TUFnNIzJ5BBc8piGUDwMPa1GV6HJWTZVvY/eiN3fSopl7NRbgGp9sZ9LTA== elementtree@^0.1.7: version "0.1.7" @@ -3899,7 +3292,7 @@ elliptic@^6.5.3, elliptic@^6.5.5: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -emoji-mart@^5.5.2: +emoji-mart@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/emoji-mart/-/emoji-mart-5.6.0.tgz#71b3ed0091d3e8c68487b240d9d6d9a73c27f023" integrity sha512-eJp3QRe79pjwa+duv+n7+5YsNhRcMl812EcFVwrnRvYKoNPoQb5qxU8DG6Bgwji0akHdp6D4Ln6tYLG58MFSow== @@ -3914,56 +3307,20 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: +end-of-stream@^1.1.0, end-of-stream@^1.4.1, end-of-stream@^1.4.4: version "1.4.5" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c" integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg== dependencies: once "^1.4.0" -engine.io-parser@~5.2.1: - version "5.2.3" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.3.tgz#00dc5b97b1f233a23c9398d0209504cf5f94d92f" - integrity sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q== - -engine.io@~6.6.0: - version "6.6.6" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.6.6.tgz#9942111e7a4dc31f057e73470d7b7fcc7f74c390" - integrity sha512-U2SN0w3OpjFRVlrc17E6TMDmH58Xl9rai1MblNjAdwWp07Kk+llmzX0hjDpQdrDGzwmvOtgM5yI+meYX6iZ2xA== - dependencies: - "@types/cors" "^2.8.12" - "@types/node" ">=10.0.0" - "@types/ws" "^8.5.12" - accepts "~1.3.4" - base64id "2.0.0" - cookie "~0.7.2" - cors "~2.8.5" - debug "~4.4.1" - engine.io-parser "~5.2.1" - ws "~8.18.3" - -enhanced-resolve@^5.17.2: - version "5.18.2" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz#7903c5b32ffd4b2143eeb4b92472bd68effd5464" - integrity sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ== +enhanced-resolve@^5.20.0: + version "5.20.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.20.0.tgz#323c2a70d2aa7fb4bdfd6d3c24dfc705c581295d" + integrity sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ== dependencies: graceful-fs "^4.2.4" - tapable "^2.2.0" - -ent@~2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.2.tgz#22a5ed2fd7ce0cbcff1d1474cf4909a44bdb6e85" - integrity sha512-kKvD1tO6BM+oK9HzCPpUdRb4vKFQY/FPTFmurMvh6LlN68VMrdj77w8yp51/kDbpkFOS9J8w5W6zIzgM2H8/hw== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - punycode "^1.4.1" - safe-regex-test "^1.1.0" + tapable "^2.3.0" entities@^1.1.1: version "1.1.2" @@ -3975,6 +3332,11 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +entities@^4.2.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + env-paths@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" @@ -3990,73 +3352,13 @@ envinfo@^7.14.0: resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.14.0.tgz#26dac5db54418f2a4c1159153a0b2ae980838aae" integrity sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg== -error-ex@^1.2.0, error-ex@^1.3.1: +error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" -es-abstract@^1.23.2, es-abstract@^1.23.5, es-abstract@^1.23.9: - version "1.24.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.1.tgz#f0c131ed5ea1bb2411134a8dd94def09c46c7899" - integrity sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw== - dependencies: - array-buffer-byte-length "^1.0.2" - arraybuffer.prototype.slice "^1.0.4" - available-typed-arrays "^1.0.7" - call-bind "^1.0.8" - call-bound "^1.0.4" - data-view-buffer "^1.0.2" - data-view-byte-length "^1.0.2" - data-view-byte-offset "^1.0.1" - es-define-property "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.1.1" - es-set-tostringtag "^2.1.0" - es-to-primitive "^1.3.0" - function.prototype.name "^1.1.8" - get-intrinsic "^1.3.0" - get-proto "^1.0.1" - get-symbol-description "^1.1.0" - globalthis "^1.0.4" - gopd "^1.2.0" - has-property-descriptors "^1.0.2" - has-proto "^1.2.0" - has-symbols "^1.1.0" - hasown "^2.0.2" - internal-slot "^1.1.0" - is-array-buffer "^3.0.5" - is-callable "^1.2.7" - is-data-view "^1.0.2" - is-negative-zero "^2.0.3" - is-regex "^1.2.1" - is-set "^2.0.3" - is-shared-array-buffer "^1.0.4" - is-string "^1.1.1" - is-typed-array "^1.1.15" - is-weakref "^1.1.1" - math-intrinsics "^1.1.0" - object-inspect "^1.13.4" - object-keys "^1.1.1" - object.assign "^4.1.7" - own-keys "^1.0.1" - regexp.prototype.flags "^1.5.4" - safe-array-concat "^1.1.3" - safe-push-apply "^1.0.0" - safe-regex-test "^1.1.0" - set-proto "^1.0.0" - stop-iteration-iterator "^1.1.0" - string.prototype.trim "^1.2.10" - string.prototype.trimend "^1.0.9" - string.prototype.trimstart "^1.0.8" - typed-array-buffer "^1.0.3" - typed-array-byte-length "^1.0.3" - typed-array-byte-offset "^1.0.4" - typed-array-length "^1.0.7" - unbox-primitive "^1.1.0" - which-typed-array "^1.1.19" - es-define-property@^1.0.0, es-define-property@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" @@ -4067,10 +3369,10 @@ es-errors@^1.3.0: resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-module-lexer@^1.2.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" - integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== +es-module-lexer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.0.0.tgz#f657cd7a9448dcdda9c070a3cb75e5dc1e85f5b1" + integrity sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw== es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: version "1.1.1" @@ -4079,77 +3381,16 @@ es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: dependencies: es-errors "^1.3.0" -es-set-tostringtag@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" - integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== - dependencies: - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - -es-to-primitive@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" - integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== - dependencies: - is-callable "^1.2.7" - is-date-object "^1.0.5" - is-symbol "^1.0.4" - -es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.62, es5-ext@^0.10.64, es5-ext@~0.10.14: - version "0.10.64" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.64.tgz#12e4ffb48f1ba2ea777f1fcdd1918ef73ea21714" - integrity sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg== - dependencies: - es6-iterator "^2.0.3" - es6-symbol "^3.1.3" - esniff "^2.0.1" - next-tick "^1.1.0" - es6-error@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== -es6-iterator@^2.0.1, es6-iterator@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.4" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.4.tgz#f4e7d28013770b4208ecbf3e0bf14d3bcb557b8c" - integrity sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg== - dependencies: - d "^1.0.2" - ext "^1.7.0" - -es6-weak-map@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" - integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== - dependencies: - d "1" - es5-ext "^0.10.46" - es6-iterator "^2.0.3" - es6-symbol "^3.1.1" - escalade@^3.1.1, escalade@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - escape-string-regexp@^1.0.3, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -4168,21 +3409,6 @@ eslint-scope@5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -esm@^3.2.25: - version "3.2.25" - resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" - integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== - -esniff@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308" - integrity sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg== - dependencies: - d "^1.0.1" - es5-ext "^0.10.62" - event-emitter "^0.3.5" - type "^2.7.2" - esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" @@ -4200,23 +3426,17 @@ estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== -event-emitter@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== - dependencies: - d "1" - es5-ext "~0.10.14" - eventemitter3@^3.1.0: version "3.1.2" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +events-universal@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/events-universal/-/events-universal-1.0.1.tgz#b56a84fd611b6610e0a2d0f09f80fdf931e2dfe6" + integrity sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw== + dependencies: + bare-events "^2.7.0" events@^3.0.0, events@^3.2.0, events@^3.3.0: version "3.3.0" @@ -4251,19 +3471,6 @@ execall@^2.0.0: dependencies: clone-regexp "^2.1.0" -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - expand-template@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" @@ -4276,57 +3483,11 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -ext@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" - integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== - dependencies: - type "^2.7.2" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@^3.0.0: +extend@^3.0.0, extend@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -fancy-log@^1.3.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" - integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw== - dependencies: - ansi-gray "^0.1.1" - color-support "^1.1.3" - parse-node-version "^1.0.0" - time-stamp "^1.0.0" - fancy-log@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-2.0.0.tgz#cad207b8396d69ae4796d74d17dff5f68b2f7343" @@ -4344,7 +3505,7 @@ fast-fifo@^1.2.0, fast-fifo@^1.3.2: resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== -fast-glob@^3.2.4, fast-glob@^3.2.5, fast-glob@^3.2.9, fast-glob@^3.3.0: +fast-glob@^3.2.12, fast-glob@^3.2.5, fast-glob@^3.2.9, fast-glob@^3.3.0: version "3.3.3" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== @@ -4355,15 +3516,17 @@ fast-glob@^3.2.4, fast-glob@^3.2.5, fast-glob@^3.2.9, fast-glob@^3.3.0: merge2 "^1.3.0" micromatch "^4.0.8" -fast-levenshtein@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz#e6a754cc8f15e58987aa9cbd27af66fd6f4e5af9" - integrity sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw== +fast-levenshtein@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz#37b899ae47e1090e40e3fd2318e4d5f0142ca912" + integrity sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ== + dependencies: + fastest-levenshtein "^1.0.7" -fast-sort@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/fast-sort/-/fast-sort-2.2.0.tgz#20903763531fbcbb41c9df5ab1bf5f2cefc8476a" - integrity sha512-W7zqnn2zsYoQA87FKmYtgOsbJohOrh7XrtZrCVHN5XZKqTBTv5UG+rSS3+iWbg/nepRQUOu+wnas8BwtK8kiCg== +fast-sort@^3.2.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/fast-sort/-/fast-sort-3.4.1.tgz#837e1abaafdc6c6c077b632913a7ec2dda283cb6" + integrity sha512-76uvGPsF6So53sZAqenP9UVT3p5l7cyTHkLWVCMinh41Y8NDrK1IYXJgaBMfc1gk7nJiSRZp676kddFG2Aa5+A== fast-text-encoding@^1.0.0: version "1.0.6" @@ -4375,11 +3538,18 @@ fast-uri@^3.0.1: resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748" integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw== -fastest-levenshtein@^1.0.12: +fastest-levenshtein@^1.0.12, fastest-levenshtein@^1.0.7: version "1.0.16" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== +fastq@^1.13.0: + version "1.20.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.20.1.tgz#ca750a10dc925bc8b18839fd203e3ef4b3ced675" + integrity sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw== + dependencies: + reusify "^1.0.4" + fastq@^1.6.0: version "1.19.1" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" @@ -4394,6 +3564,11 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" +fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== + fflate@^0.4.1: version "0.4.8" resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.4.8.tgz#f90b82aefbd8ac174213abb338bd7ef848f0f5ae" @@ -4411,16 +3586,6 @@ file-uri-to-path@1.0.0: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - fill-range@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" @@ -4428,27 +3593,6 @@ fill-range@^7.1.1: dependencies: to-regex-range "^5.0.1" -finalhandler@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA== - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - find-up@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -4471,41 +3615,31 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -findup-sync@^2.0.0: +findup-sync@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-5.0.0.tgz#54380ad965a7edca00cc8f63113559aadc541bd2" + integrity sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ== + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.3" + micromatch "^4.0.4" + resolve-dir "^1.0.1" + +fined@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" - integrity sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g== - dependencies: - detect-file "^1.0.0" - is-glob "^3.1.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" - -findup-sync@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" - integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== - dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" - -fined@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fined/-/fined-1.2.0.tgz#d00beccf1aa2b475d16d423b0238b713a2c4a37b" - integrity sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng== + resolved "https://registry.yarnpkg.com/fined/-/fined-2.0.0.tgz#6846563ed96879ce6de6c85c715c42250f8d8089" + integrity sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A== dependencies: expand-tilde "^2.0.2" - is-plain-object "^2.0.3" + is-plain-object "^5.0.0" object.defaults "^1.1.0" - object.pick "^1.2.0" - parse-filepath "^1.0.1" + object.pick "^1.3.0" + parse-filepath "^1.0.2" -flagged-respawn@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41" - integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q== +flagged-respawn@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-2.0.0.tgz#abf39719dcfe1ac06c86c9466081c541c682987b" + integrity sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA== flat-cache@^3.0.4: version "3.2.0" @@ -4526,37 +3660,19 @@ flatbuffers@^25.1.24: resolved "https://registry.yarnpkg.com/flatbuffers/-/flatbuffers-25.2.10.tgz#308b750545f62db670ca4c9d7dbc66161420a95e" integrity sha512-7JlN9ZvLDG1McO3kbX0k4v+SUAg48L1rIwEvN6ZQl/eCtgJz9UylTMzE9wrmYrcorgxm3CX/3T/w5VAub99UUw== -flatted@^3.2.7: - version "3.4.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.4.1.tgz#84ccd9579e76e9cc0d246c11d8be0beb019143e6" - integrity sha512-IxfVbRFVlV8V/yRaGzk0UVIcsKKHMSfYw66T/u4nTwlWteQePsxe//LjudR1AMX4tZW3WFCh3Zqa/sjlqpbURQ== - flatted@^3.2.9: version "3.3.3" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== -flush-write-stream@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - -follow-redirects@^1.0.0: - version "1.15.11" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" - integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== - -for-each@^0.3.3, for-each@^0.3.5: +for-each@^0.3.5: version "0.3.5" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== dependencies: is-callable "^1.2.7" -for-in@^1.0.1, for-in@^1.0.2: +for-in@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== @@ -4585,24 +3701,17 @@ formidable@^3.5.1: dezalgo "^1.0.4" once "^1.4.0" -fraction.js@^4.3.7: - version "4.3.7" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" - integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== - dependencies: - map-cache "^0.2.2" +fraction.js@^5.3.4: + version "5.3.4" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-5.3.4.tgz#8c0fcc6a9908262df4ed197427bdeef563e0699a" + integrity sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ== fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@10.1.0, fs-extra@^10.0.0: +fs-extra@10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== @@ -4611,7 +3720,16 @@ fs-extra@10.1.0, fs-extra@^10.0.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@9.1.0, fs-extra@^9.0.0: +fs-extra@^11.0.0, fs-extra@^11.2.0, fs-extra@^11.3.4: + version "11.3.4" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.4.tgz#ab6934eca8bcf6f7f6b82742e33591f86301d6fc" + integrity sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^9.0.0: 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== @@ -4621,24 +3739,6 @@ fs-extra@9.1.0, fs-extra@^9.0.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^11.2.0: - version "11.3.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d" - integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs-minipass@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" @@ -4646,13 +3746,13 @@ fs-minipass@^2.0.0: dependencies: minipass "^3.0.0" -fs-mkdirp-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" - integrity sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ== +fs-mkdirp-stream@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-2.0.1.tgz#1e82575c4023929ad35cf69269f84f1a8c973aa7" + integrity sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw== dependencies: - graceful-fs "^4.1.11" - through2 "^2.0.3" + graceful-fs "^4.2.8" + streamx "^2.12.0" fs.realpath@^1.0.0: version "1.0.0" @@ -4669,15 +3769,7 @@ fsevents@2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - -fsevents@~2.3.1, fsevents@~2.3.2: +fsevents@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== @@ -4687,27 +3779,10 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" - integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-properties "^1.2.1" - functions-have-names "^1.2.3" - hasown "^2.0.2" - is-callable "^1.2.7" - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -fuse.js@6.4.6: - version "6.4.6" - resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-6.4.6.tgz#62f216c110e5aa22486aff20be7896d19a059b79" - integrity sha512-/gYxR/0VpXmWSfZOIPS3rWwU8SHgsRTwWuXhyb2O6s7aRuVtHtxCkR33bNYu3wyLyNx/Wpv0vU7FZy8Vj53VNw== +fuse.js@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-7.1.0.tgz#306228b4befeee11e05b027087c2744158527d09" + integrity sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ== gauge@^3.0.0: version "3.0.2" @@ -4724,11 +3799,6 @@ gauge@^3.0.0: strip-ansi "^6.0.1" wide-align "^1.1.2" -generator-function@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/generator-function/-/generator-function-2.0.1.tgz#0e75dd410d1243687a0ba2e951b94eedb8f737a2" - integrity sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g== - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -4744,7 +3814,7 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== @@ -4783,11 +3853,6 @@ get-stdin@^8.0.0: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== -get-stdin@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-9.0.0.tgz#3983ff82e03d56f1b2ea0d3e60325f39d703a575" - integrity sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA== - get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -4795,20 +3860,6 @@ get-stream@^4.0.0: dependencies: pump "^3.0.0" -get-symbol-description@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" - integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== - git-raw-commits@^2.0.8: version "2.0.11" resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723" @@ -4848,15 +3899,7 @@ github-from-package@0.0.0: resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA== - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -4870,49 +3913,32 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob-stream@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" - integrity sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw== +glob-stream@^8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-8.0.3.tgz#87e63153aadf05bd0207cde1a253ee39d91458b9" + integrity sha512-fqZVj22LtFJkHODT+M4N1RJQ3TjnnQhfE9GwZI8qXscYarnhpip70poMldRnP8ipQ/w0B621kOhfc53/J9bd/A== dependencies: - extend "^3.0.0" - glob "^7.1.1" - glob-parent "^3.1.0" + "@gulpjs/to-absolute-glob" "^4.0.0" + anymatch "^3.1.3" + fastq "^1.13.0" + glob-parent "^6.0.2" + is-glob "^4.0.3" is-negated-glob "^1.0.0" - ordered-read-streams "^1.0.0" - pumpify "^1.3.5" - readable-stream "^2.1.5" - remove-trailing-separator "^1.0.1" - to-absolute-glob "^2.0.0" - unique-stream "^2.0.2" + normalize-path "^3.0.0" + streamx "^2.12.5" glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob-watcher@^5.0.3: - version "5.0.5" - resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-5.0.5.tgz#aa6bce648332924d9a8489be41e3e5c52d4186dc" - integrity sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw== +glob-watcher@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-6.0.0.tgz#8565341978a92233fb3881b8857b4d1e9c6bf080" + integrity sha512-wGM28Ehmcnk2NqRORXFOTOR064L4imSw3EeOqU5bIwUf62eXGwg89WivH6VMahL8zlQHeodzvHpXplrqzrz3Nw== dependencies: - anymatch "^2.0.0" - async-done "^1.2.0" - chokidar "^2.0.0" - is-negated-glob "^1.0.0" - just-debounce "^1.0.0" - normalize-path "^3.0.0" - object.defaults "^1.1.0" - -glob@9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-9.0.0.tgz#8940d5f3225ca022931bf129cae13fc5f284aab7" - integrity sha512-7rdoWzT8/4f1yEe/cMdBug2lmzmYMYU9h4RNNiavPHajhcxt7kkxrOvwSnIPkZMjLQb9BXv7nFoKmTnPPklMyA== - dependencies: - fs.realpath "^1.0.0" - minimatch "^7.3.0" - minipass "^4.2.4" - path-scurry "^1.5.0" + async-done "^2.0.0" + chokidar "^3.5.3" glob@^10.3.10: version "10.4.5" @@ -4938,7 +3964,7 @@ glob@^11.0.0: package-json-from-dist "^1.0.0" path-scurry "^2.0.0" -glob@^7.0.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.7: +glob@^7.1.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -5008,7 +4034,7 @@ global-prefix@^3.0.0: kind-of "^6.0.2" which "^1.3.1" -globalthis@^1.0.1, globalthis@^1.0.4: +globalthis@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== @@ -5028,28 +4054,17 @@ globby@^11.0.1, globby@^11.0.3: merge2 "^1.4.1" slash "^3.0.0" -globby@^13.0.0: - version "13.2.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592" - integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.3.0" - ignore "^5.2.4" - merge2 "^1.4.1" - slash "^4.0.0" - globjoin@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" integrity sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg== -glogg@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.2.tgz#2d7dd702beda22eb3bffadf880696da6d846313f" - integrity sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA== +glogg@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/glogg/-/glogg-2.2.0.tgz#956ceb855a05a2aa1fa668d748f2be8e7361c11c" + integrity sha512-eWv1ds/zAlz+M1ioHsyKJomfY7jbDDPpwSkv14KQj89bycx1nvK5/2Cj/T9g7kzJcX5Bc7Yv22FjfBZS/jl94A== dependencies: - sparkles "^1.0.0" + sparkles "^2.1.0" gonzales-pe@^4.3.0: version "4.3.0" @@ -5063,7 +4078,7 @@ gopd@^1.0.1, gopd@^1.2.0: resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graceful-fs@^4.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.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.8: 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== @@ -5075,11 +4090,6 @@ gradle-to-js@^2.0.0: dependencies: lodash.merge "^4.6.2" -grapheme-splitter@1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - graphology@0.20.0: version "0.20.0" resolved "https://registry.yarnpkg.com/graphology/-/graphology-0.20.0.tgz#e29f7a1448852dfc7195646241f336b10127997a" @@ -5093,29 +4103,23 @@ guid-typescript@^1.0.9: resolved "https://registry.yarnpkg.com/guid-typescript/-/guid-typescript-1.0.9.tgz#e35f77003535b0297ea08548f5ace6adb1480ddc" integrity sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ== -gulp-cli@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/gulp-cli/-/gulp-cli-2.3.0.tgz#ec0d380e29e52aa45e47977f0d32e18fd161122f" - integrity sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A== +gulp-cli@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/gulp-cli/-/gulp-cli-3.1.0.tgz#92590e9b209142b176c95ad5c7066d2592017268" + integrity sha512-zZzwlmEsTfXcxRKiCHsdyjZZnFvXWM4v1NqBJSYbuApkvVKivjcmOS2qruAJ+PkEHLFavcDKH40DPc1+t12a9Q== dependencies: - ansi-colors "^1.0.1" - archy "^1.0.0" - array-sort "^1.0.0" - color-support "^1.1.3" - concat-stream "^1.6.0" - copy-props "^2.0.1" - fancy-log "^1.3.2" - gulplog "^1.0.0" - interpret "^1.4.0" - isobject "^3.0.1" - liftoff "^3.1.0" - matchdep "^2.0.0" - mute-stdout "^1.0.0" - pretty-hrtime "^1.0.0" - replace-homedir "^1.0.0" - semver-greatest-satisfied-range "^1.1.0" - v8flags "^3.2.0" - yargs "^7.1.0" + "@gulpjs/messages" "^1.1.0" + chalk "^4.1.2" + copy-props "^4.0.0" + gulplog "^2.2.0" + interpret "^3.1.1" + liftoff "^5.0.1" + mute-stdout "^2.0.0" + replace-homedir "^2.0.0" + semver-greatest-satisfied-range "^2.0.0" + string-width "^4.2.3" + v8flags "^4.0.0" + yargs "^16.2.0" gulp-postcss@^10.0.0: version "10.0.0" @@ -5138,22 +4142,22 @@ gulp-replace@^1.1.4: replacestream "^4.0.3" yargs-parser ">=5.0.0-security.0" -gulp@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/gulp/-/gulp-4.0.2.tgz#543651070fd0f6ab0a0650c6a3e6ff5a7cb09caa" - integrity sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA== +gulp@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/gulp/-/gulp-5.0.1.tgz#c43f37aa34569e101fb6da4e0b464677305acd36" + integrity sha512-PErok3DZSA5WGMd6XXV3IRNO0mlB+wW3OzhFJLEec1jSERg2j1bxJ6e5Fh6N6fn3FH2T9AP4UYNb/pYlADB9sA== dependencies: - glob-watcher "^5.0.3" - gulp-cli "^2.2.0" - undertaker "^1.2.1" - vinyl-fs "^3.0.0" + glob-watcher "^6.0.0" + gulp-cli "^3.1.0" + undertaker "^2.0.0" + vinyl-fs "^4.0.2" -gulplog@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" - integrity sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw== +gulplog@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-2.2.0.tgz#71adf43ea5cd07c23ded0fb8af4a844b67c63be8" + integrity sha512-V2FaKiOhpR3DRXZuYdRLn/qiY0yI5XmqbTKrYbdemJ+xOh2d2MOweI/XFgMzd/9+1twdvMwllnZbWZNJ+BOm4A== dependencies: - glogg "^1.0.0" + glogg "^2.2.0" handlebars@^4.7.7: version "4.7.8" @@ -5172,11 +4176,6 @@ hard-rejection@^2.1.0: resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== -has-bigints@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" - integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -5194,13 +4193,6 @@ has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: dependencies: es-define-property "^1.0.0" -has-proto@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" - integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== - dependencies: - dunder-proto "^1.0.0" - has-symbols@^1.0.3, has-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" @@ -5218,37 +4210,6 @@ has-unicode@^2.0.1: resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - hash-base@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" @@ -5281,7 +4242,7 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" -hasown@^2.0.0, hasown@^2.0.2: +hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== @@ -5307,13 +4268,6 @@ hnswlib-wasm@^0.8.2: resolved "https://registry.yarnpkg.com/hnswlib-wasm/-/hnswlib-wasm-0.8.2.tgz#8b6a9534d99f23d30b1fd29ac7c45410ee5941c1" integrity sha512-qEgKETj4rMOYRA1esP0bxVosw9Wrz5S/HvjI2FBWOXG5rf5/Es4OoEWGVvztFihDNU5if61l6QGhW5ILtt+PqA== -hoist-non-react-statics@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== - dependencies: - react-is "^16.7.0" - homedir-polyfill@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" @@ -5358,26 +4312,6 @@ htmlparser2@^3.10.0: inherits "^2.0.1" readable-stream "^3.1.1" -http-errors@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" - integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== - dependencies: - depd "~2.0.0" - inherits "~2.0.4" - setprototypeof "~1.2.0" - statuses "~2.0.2" - toidentifier "~1.0.1" - -http-proxy@^1.18.1: - version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" @@ -5398,24 +4332,12 @@ iconv-lite@^0.6.3: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -iconv-lite@~0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ieee754@^1.1.13, ieee754@^1.1.4: +ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@5.1.8: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -ignore@^5.1.8, ignore@^5.2.0, ignore@^5.2.4: +ignore@^5.1.8, ignore@^5.2.0: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== @@ -5464,7 +4386,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5489,52 +4411,28 @@ ini@^4.1.1: resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.3.tgz#4c359675a6071a46985eb39b14e4a2c0ec98a795" integrity sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg== -inter-ui@^3.19.3: - version "3.19.3" - resolved "https://registry.yarnpkg.com/inter-ui/-/inter-ui-3.19.3.tgz#cf4b4b6d30de8d5463e2462588654b325206488c" - integrity sha512-5FG9fjuYOXocIfjzcCBhICL5cpvwEetseL3FU6tP3d6Bn7g8wODhB+I9RNGRTizCT7CUG4GOK54OPxqq3msQgg== +inter-ui@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/inter-ui/-/inter-ui-4.1.1.tgz#8d7e800259caeb4293167564ddc2b12dbf2ba59d" + integrity sha512-451h0J29HyOmA+JXgSi/6M12tL7ZCZ8arYKZUXiOXTJpJbAKqJvFh3k5SiV3x7tKe0C0KyrKUUiQIvvZ2PQDcA== -interactjs@^1.10.17: +interactjs@^1.10.27: version "1.10.27" resolved "https://registry.yarnpkg.com/interactjs/-/interactjs-1.10.27.tgz#16499aba4987a5ccfdaddca7d1ba7bb1118e14d0" integrity sha512-y/8RcCftGAF24gSp76X2JS3XpHiUvDQyhF8i7ujemBz77hwiHDuJzftHx7thY8cxGogwGiPJ+o97kWB6eAXnsA== dependencies: "@interactjs/types" "1.10.27" -internal-slot@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" - integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== - dependencies: - es-errors "^1.3.0" - hasown "^2.0.2" - side-channel "^1.1.0" - -interpret@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - interpret@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ== - invert-kv@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== -ip@1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.9.tgz#8dfbcc99a754d07f425310b86a99546b1151e396" - integrity sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ== - is-absolute@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" @@ -5543,13 +4441,6 @@ is-absolute@^1.0.0: is-relative "^1.0.0" is-windows "^1.0.1" -is-accessor-descriptor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz#3223b10628354644b86260db29b3e693f5ceedd4" - integrity sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA== - dependencies: - hasown "^2.0.0" - is-alphabetical@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" @@ -5571,15 +4462,6 @@ is-arguments@^1.0.4: call-bound "^1.0.2" has-tostringtag "^1.0.2" -is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" - integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - get-intrinsic "^1.2.6" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -5590,31 +4472,6 @@ is-arrayish@^0.3.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== -is-async-function@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" - integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== - dependencies: - async-function "^1.0.0" - call-bound "^1.0.3" - get-proto "^1.0.1" - has-tostringtag "^1.0.2" - safe-regex-test "^1.1.0" - -is-bigint@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" - integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== - dependencies: - has-bigints "^1.0.2" - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q== - dependencies: - binary-extensions "^1.0.0" - is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -5622,19 +4479,6 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-boolean-object@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" - integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== - dependencies: - call-bound "^1.0.3" - has-tostringtag "^1.0.2" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - is-buffer@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" @@ -5652,80 +4496,21 @@ is-core-module@^2.16.0, is-core-module@^2.5.0: dependencies: hasown "^2.0.2" -is-data-descriptor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz#2109164426166d32ea38c405c1e0945d9e6a4eeb" - integrity sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw== - dependencies: - hasown "^2.0.0" - -is-data-view@^1.0.1, is-data-view@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" - integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== - dependencies: - call-bound "^1.0.2" - get-intrinsic "^1.2.6" - is-typed-array "^1.1.13" - -is-date-object@^1.0.5, is-date-object@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" - integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== - dependencies: - call-bound "^1.0.2" - has-tostringtag "^1.0.2" - is-decimal@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== -is-descriptor@^0.1.0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.7.tgz#2727eb61fd789dcd5bdf0ed4569f551d2fe3be33" - integrity sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg== - dependencies: - is-accessor-descriptor "^1.0.1" - is-data-descriptor "^1.0.1" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.3.tgz#92d27cb3cd311c4977a4db47df457234a13cb306" - integrity sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw== - dependencies: - is-accessor-descriptor "^1.0.1" - is-data-descriptor "^1.0.1" - is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.0, is-extglob@^2.1.1: +is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-finalizationregistry@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" - integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== - dependencies: - call-bound "^1.0.3" - 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" @@ -5743,17 +4528,6 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-generator-function@^1.0.10: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.2.tgz#ae3b61e3d5ea4e4839b90bad22b02335051a17d5" - integrity sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA== - dependencies: - call-bound "^1.0.4" - generator-function "^2.0.0" - get-proto "^1.0.1" - has-tostringtag "^1.0.2" - safe-regex-test "^1.1.0" - is-generator-function@^1.0.7: version "1.1.0" resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" @@ -5764,14 +4538,7 @@ is-generator-function@^1.0.7: has-tostringtag "^1.0.2" safe-regex-test "^1.1.0" -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw== - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: +is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -5783,41 +4550,11 @@ is-hexadecimal@^1.0.0: resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== -is-map@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" - integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== - is-negated-glob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" integrity sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug== -is-negative-zero@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" - integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== - -is-number-object@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" - integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== - dependencies: - call-bound "^1.0.3" - has-tostringtag "^1.0.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== - dependencies: - kind-of "^3.0.2" - -is-number@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" - integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -5828,11 +4565,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@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-2.1.0.tgz#5c8d733a0b201c80dff7bb7c0df58c6a255c7c69" - integrity sha512-DailKdLb0WU+xX8K5w7VsJhapwHLZ9jjmazqCJq4X12CTgqq73TKnbRcnSLuXYPOoLQgV5IrD7ePiX/h1vnkBw== - is-path-cwd@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" @@ -5853,7 +4585,7 @@ is-plain-obj@^2.0.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: +is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== @@ -5887,18 +4619,6 @@ is-relative@^1.0.0: dependencies: is-unc-path "^1.0.0" -is-set@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" - integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== - -is-shared-array-buffer@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" - integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== - dependencies: - call-bound "^1.0.3" - is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -5909,23 +4629,6 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-string@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" - integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== - dependencies: - call-bound "^1.0.3" - has-tostringtag "^1.0.2" - -is-symbol@^1.0.4, is-symbol@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" - integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== - dependencies: - call-bound "^1.0.2" - has-symbols "^1.1.0" - safe-regex-test "^1.1.0" - is-text-path@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" @@ -5933,7 +4636,7 @@ is-text-path@^1.0.1: dependencies: text-extensions "^1.0.0" -is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15, is-typed-array@^1.1.3: +is-typed-array@^1.1.14, is-typed-array@^1.1.3: version "1.1.15" resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== @@ -5957,37 +4660,12 @@ is-unicode-supported@^0.1.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-utf8@^0.2.0, is-utf8@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== - is-valid-glob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" integrity sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA== -is-weakmap@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" - integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== - -is-weakref@^1.0.2, is-weakref@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" - integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== - dependencies: - call-bound "^1.0.3" - -is-weakset@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" - integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== - dependencies: - call-bound "^1.0.3" - get-intrinsic "^1.2.6" - -is-windows@^1.0.1, is-windows@^1.0.2: +is-windows@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== @@ -5999,7 +4677,7 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: +isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== @@ -6009,28 +4687,21 @@ isarray@^2.0.5: resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== -isbinaryfile@^4.0.8: - version "4.0.10" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" - integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +isexe@^3.1.1: + version "3.1.5" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.5.tgz#42e368f68d5e10dadfee4fda7b550bc2d8892dc9" + integrity sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w== + ismobilejs@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/ismobilejs/-/ismobilejs-1.1.1.tgz#c56ca0ae8e52b24ca0f22ba5ef3215a2ddbbaa0e" integrity sha512-VaFW53yt8QO61k2WJui0dHf4SlL8lxBofUuUmwBo0ljPk0Drz2TiuDW4jo3wDcv41qy/SxrJ+VAzJ/qYqsmzRw== -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== - dependencies: - isarray "1.0.0" - isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" @@ -6106,16 +4777,16 @@ json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== +json-parse-even-better-errors@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz#d3f67bd5925e81d3e31aa466acc821c8375cec43" + integrity sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA== + json-schema-traverse@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - json-stringify-safe@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -6147,77 +4818,30 @@ jsonparse@^1.2.0: resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== -jszip@3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.8.0.tgz#a2ac3c33fe96a76489765168213655850254d51b" - integrity sha512-cnpQrXvFSLdsR9KR5/x7zdf6c3m8IhZfZzSblFEHSqBaVwD2nvJ4CuCKLyvKvwBgZm08CgfSoiTBQLm5WW9hGw== +jszip@3.10.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" + integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== dependencies: lie "~3.3.0" pako "~1.0.2" readable-stream "~2.3.6" - set-immediate-shim "~1.0.1" + setimmediate "^1.0.5" just-debounce-it@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/just-debounce-it/-/just-debounce-it-1.1.0.tgz#8e92578effc155358a44f458c52ffbee66983bef" integrity sha512-87Nnc0qZKgBZuhFZjYVjSraic0x7zwjhaTMrCKlj0QYKH6lh0KbFzVnfu6LHan03NO7J8ygjeBeD0epejn5Zcg== -just-debounce@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/just-debounce/-/just-debounce-1.1.0.tgz#2f81a3ad4121a76bc7cb45dbf704c0d76a8e5ddf" - integrity sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ== - just-once@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/just-once/-/just-once-1.1.0.tgz#fe81a185ebaeeb0947a7e705bf01cb6808db0ad8" integrity sha512-+rZVpl+6VyTilK7vB/svlMPil4pxqIJZkbnN7DKZTOzyXfun6ZiFeq2Pk4EtCEHZ0VU4EkdFzG8ZK5F3PErcDw== -karma-chrome-launcher@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz#eb9c95024f2d6dfbb3748d3415ac9b381906b9a9" - integrity sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q== - dependencies: - which "^1.2.1" - -karma-cljs-test@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/karma-cljs-test/-/karma-cljs-test-0.1.0.tgz#cb8605ef0e11f9a6f6d28f56ba5dbdf26f389923" - integrity sha512-fd4aLynTv3htQCUS+OV1HfoB9UqYfEVFruKxkfTE3zB2aoSCHD966ZitSSgUeVYahWiaCK0XHZp9cB39t65cLQ== - -karma@^6.4.4: - version "6.4.4" - resolved "https://registry.yarnpkg.com/karma/-/karma-6.4.4.tgz#dfa5a426cf5a8b53b43cd54ef0d0d09742351492" - integrity sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w== - dependencies: - "@colors/colors" "1.5.0" - body-parser "^1.19.0" - braces "^3.0.2" - chokidar "^3.5.1" - connect "^3.7.0" - di "^0.0.1" - dom-serialize "^2.2.1" - glob "^7.1.7" - graceful-fs "^4.2.6" - http-proxy "^1.18.1" - isbinaryfile "^4.0.8" - lodash "^4.17.21" - log4js "^6.4.1" - mime "^2.5.2" - minimatch "^3.0.4" - mkdirp "^0.5.5" - qjobs "^1.2.0" - range-parser "^1.2.1" - rimraf "^3.0.2" - socket.io "^4.7.2" - source-map "^0.6.1" - tmp "^0.2.1" - ua-parser-js "^0.7.30" - yargs "^16.1.1" - -katex@^0.16.10: - version "0.16.22" - resolved "https://registry.yarnpkg.com/katex/-/katex-0.16.22.tgz#d2b3d66464b1e6d69e6463b28a86ced5a02c5ccd" - integrity sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg== +katex@^0.16.40: + version "0.16.40" + resolved "https://registry.yarnpkg.com/katex/-/katex-0.16.40.tgz#87c94e4149f8fa7c22ff95bae1dc687355a38d63" + integrity sha512-1DJcK/L05k1Y9Gf7wMcyuqFOL6BiY3vY0CFcAM/LPRN04NALxcl6u7lOWNsp3f/bCHWxigzQl6FbR95XJ4R84Q== dependencies: commander "^8.3.0" @@ -6228,25 +4852,6 @@ keyv@^4.5.3: dependencies: json-buffer "3.0.1" -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.2: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" @@ -6267,27 +4872,10 @@ known-css-properties@^0.21.0: resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.21.0.tgz#15fbd0bbb83447f3ce09d8af247ed47c68ede80d" integrity sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw== -last-run@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/last-run/-/last-run-1.1.1.tgz#45b96942c17b1c79c772198259ba943bebf8ca5b" - integrity sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ== - dependencies: - default-resolution "^2.0.0" - es6-weak-map "^2.0.1" - -lazystream@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" - integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== - dependencies: - readable-stream "^2.0.5" - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw== - dependencies: - invert-kv "^1.0.0" +last-run@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/last-run/-/last-run-2.0.0.tgz#f82dcfbfce6e63d041bd83d64c82e34cdba6572e" + integrity sha512-j+y6WhTLN4Itnf9j5ZQos1BGPCS8DAwmgMroR3OzfxAsBxam0hMw7J8M3KqZl0pLQJ1jNnwIexg5DYpC/ctwEQ== lcid@^2.0.0: version "2.0.0" @@ -6296,12 +4884,10 @@ lcid@^2.0.0: dependencies: invert-kv "^2.0.0" -lead@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42" - integrity sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow== - dependencies: - flush-write-stream "^1.0.2" +lead@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/lead/-/lead-4.0.0.tgz#5317a49effb0e7ec3a0c8fb9c1b24fb716aab939" + integrity sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg== lie@~3.3.0: version "3.3.0" @@ -6310,26 +4896,25 @@ lie@~3.3.0: dependencies: immediate "~3.0.5" -liftoff@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3" - integrity sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog== +liftoff@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-5.0.1.tgz#e2329e7f1e19e98c8dba71185f2078e6dbbc5c1f" + integrity sha512-wwLXMbuxSF8gMvubFcFRp56lkFV69twvbU5vDPbaw+Q+/rF8j0HKjGbIdlSi+LuJm9jf7k9PB+nTxnsLMPcv2Q== dependencies: - extend "^3.0.0" - findup-sync "^3.0.0" - fined "^1.0.1" - flagged-respawn "^1.0.0" - is-plain-object "^2.0.4" - object.map "^1.0.0" - rechoir "^0.6.2" - resolve "^1.1.7" + extend "^3.0.2" + findup-sync "^5.0.0" + fined "^2.0.0" + flagged-respawn "^2.0.0" + is-plain-object "^5.0.0" + rechoir "^0.8.0" + resolve "^1.20.0" -lilconfig@^2.0.3, lilconfig@^2.1.0: +lilconfig@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== -lilconfig@^3.0.0, lilconfig@^3.1.1: +lilconfig@^3.0.0, lilconfig@^3.1.1, lilconfig@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== @@ -6339,17 +4924,6 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A== - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - 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" @@ -6360,10 +4934,10 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" -loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== +loader-runner@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.1.tgz#6c76ed29b0ccce9af379208299f07f876de737e3" + integrity sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q== locate-path@^2.0.0: version "2.0.0" @@ -6388,26 +4962,11 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -lodash.castarray@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.castarray/-/lodash.castarray-4.4.0.tgz#c02513515e309daddd4c24c60cfddcf5976d9115" - integrity sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q== - -lodash.isequal@^4.0.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== - lodash.ismatch@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== - lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -6441,17 +5000,6 @@ log-symbols@^4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" -log4js@^6.4.1: - version "6.9.1" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.9.1.tgz#aba5a3ff4e7872ae34f8b4c533706753709e38b6" - integrity sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g== - dependencies: - date-format "^4.0.14" - debug "^4.3.4" - flatted "^3.2.7" - rfdc "^1.3.0" - streamroller "^3.1.5" - long@^5.0.0, long@^5.2.3: version "5.3.2" resolved "https://registry.yarnpkg.com/long/-/long-5.3.2.tgz#1d84463095999262d7d7b7f8bfd4a8cc55167f83" @@ -6505,13 +5053,6 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -make-iterator@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" - integrity sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw== - dependencies: - kind-of "^6.0.2" - map-age-cleaner@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" @@ -6519,7 +5060,7 @@ map-age-cleaner@^0.1.1: dependencies: p-defer "^1.0.0" -map-cache@^0.2.0, map-cache@^0.2.2: +map-cache@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== @@ -6534,27 +5075,10 @@ map-obj@^4.0.0: resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== - dependencies: - object-visit "^1.0.0" - -marked@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/marked/-/marked-5.1.2.tgz#62b5ccfc75adf72ca3b64b2879b551d89e77677f" - integrity sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg== - -matchdep@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/matchdep/-/matchdep-2.0.0.tgz#c6f34834a0d8dbc3b37c27ee8bbcb27c7775582e" - integrity sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA== - dependencies: - findup-sync "^2.0.0" - micromatch "^3.0.4" - resolve "^1.4.0" - stack-trace "0.0.10" +marked@^17.0.5: + version "17.0.5" + resolved "https://registry.yarnpkg.com/marked/-/marked-17.0.5.tgz#8fc6878a439463a007b05d346d2ad50a87ec3f0e" + integrity sha512-6hLvc0/JEbRjRgzI6wnT2P1XuM1/RrrDEX0kPt0N7jGm1133g6X7DlxFasUIx+72aKAr904GTxhSLDrd5DIlZg== matcher@^3.0.0: version "3.0.0" @@ -6610,15 +5134,15 @@ mdast-util-to-string@^2.0.0: resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== +mdn-data@2.0.28: + version "2.0.28" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" + integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== +mdn-data@2.27.1: + version "2.27.1" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.27.1.tgz#e37b9c50880b75366c4d40ac63d9bbcacdb61f0e" + integrity sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ== mem@^4.0.0: version "4.3.0" @@ -6696,25 +5220,6 @@ micromark@~2.11.0: debug "^4.0.0" parse-entities "^2.0.0" -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - micromatch@^4.0.4, micromatch@^4.0.5, micromatch@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" @@ -6736,18 +5241,13 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.27, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.27: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" -mime@^2.5.2: - version "2.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" - integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== - mimic-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -6797,13 +5297,6 @@ minimatch@^10.0.3: dependencies: "@isaacs/brace-expansion" "^5.0.0" -minimatch@^3.0.4: - version "3.1.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e" - integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w== - dependencies: - brace-expansion "^1.1.7" - minimatch@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -6811,13 +5304,6 @@ minimatch@^3.1.1: dependencies: brace-expansion "^1.1.7" -minimatch@^7.3.0: - version "7.4.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb" - integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw== - dependencies: - brace-expansion "^2.0.1" - minimatch@^8.0.2: version "8.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" @@ -6841,7 +5327,7 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -6883,26 +5369,18 @@ minizlib@^3.0.1: dependencies: minipass "^7.1.2" -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== +minizlib@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.1.0.tgz#6ad76c3a8f10227c9b51d1c9ac8e30b27f5a251c" + integrity sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw== dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" + minipass "^7.1.2" mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -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" - mkdirp@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" @@ -6925,11 +5403,6 @@ modify-values@^1.0.0: resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -6940,10 +5413,10 @@ ms@^2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -mute-stdout@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mute-stdout/-/mute-stdout-1.0.1.tgz#acb0300eb4de23a7ddeec014e3e96044b3472331" - integrity sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg== +mute-stdout@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mute-stdout/-/mute-stdout-2.0.0.tgz#c6a9b4b6185d3b7f70d3ffcb734cbfc8b0f38761" + integrity sha512-32GSKM3Wyc8dg/p39lWPKYu8zci9mJFzV1Np9Of0ZEpe6Fhssn/FbI7ywAMd40uX+p3ZKh3T5EeCFv81qS3HmQ== mz@^2.7.0: version "2.7.0" @@ -6954,33 +5427,16 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" -nan@^2.12.1, nan@^2.17.0: - version "2.23.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.23.0.tgz#24aa4ddffcc37613a2d2935b97683c1ec96093c6" - integrity sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ== +nan@^2.17.0: + version "2.25.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.25.0.tgz#937ed345e63d9481362a7942d49c4860d27eeabd" + integrity sha512-0M90Ag7Xn5KMLLZ7zliPWP3rT90P6PN+IzVFS0VqmnPktBk3700xUVv8Ikm9EUaUE5SDWdp/BIxdENzVznpm1g== nanoid@^3.3.11: version "3.3.11" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - napi-build-utils@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-2.0.0.tgz#13c22c0187fcfccce1461844136372a47ddc027e" @@ -7003,21 +5459,28 @@ native-run@^2.0.0, native-run@^2.0.1: tslib "^2.6.2" yauzl "^2.10.0" -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== +native-run@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/native-run/-/native-run-2.0.3.tgz#b1ceb39c8d24abf4916c07ae9aad5a9fbcd31a02" + integrity sha512-U1PllBuzW5d1gfan+88L+Hky2eZx+9gv3Pf6rNBxKbORxi7boHzqiA6QFGSnqMem4j0A9tZ08NMIs5+0m/VS1Q== + dependencies: + "@ionic/utils-fs" "^3.1.7" + "@ionic/utils-terminal" "^2.3.4" + bplist-parser "^0.3.2" + debug "^4.3.4" + elementtree "^0.1.7" + ini "^4.1.1" + plist "^3.1.0" + split2 "^4.2.0" + through2 "^4.0.2" + tslib "^2.6.2" + yauzl "^2.10.0" neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -next-tick@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" - integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== - nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -7079,10 +5542,10 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" -node-releases@^2.0.19: - version "2.0.19" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" - integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== +node-releases@^2.0.27: + version "2.0.36" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.36.tgz#99fd6552aaeda9e17c4713b57a63964a2e325e9d" + integrity sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA== nopt@^5.0.0: version "5.0.0" @@ -7111,14 +5574,7 @@ normalize-package-data@^3.0.0: semver "^7.3.4" validate-npm-package-license "^3.0.1" -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: +normalize-path@3.0.0, normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== @@ -7133,32 +5589,31 @@ normalize-selector@^0.2.0: resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" integrity sha512-dxvWdI8gw6eAvk9BlPffgEoGfM7AdijoCwOEJge3e3ulT2XLgmU7KvvxprOaCu05Q1uGRHmOhHe1r6emZoKyFw== -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -now-and-later@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.1.tgz#8e579c8685764a7cc02cb680380e94f43ccb1f7c" - integrity sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ== +now-and-later@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-3.0.0.tgz#cdc045dc5b894b35793cf276cc3206077bb7302d" + integrity sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg== dependencies: - once "^1.3.2" + once "^1.4.0" -npm-run-all@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" - integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== +npm-normalize-package-bin@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz#df79e70cd0a113b77c02d1fe243c96b8e618acb1" + integrity sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w== + +npm-run-all2@^8.0.4: + version "8.0.4" + resolved "https://registry.yarnpkg.com/npm-run-all2/-/npm-run-all2-8.0.4.tgz#bcc070fd0cdb8d45496ec875d99a659a112e3f74" + integrity sha512-wdbB5My48XKp2ZfJUlhnLVihzeuA1hgBnqB2J9ahV77wLS+/YAJAlN8I+X3DIFIPZ3m5L7nplmlbhNiFDmXRDA== dependencies: - ansi-styles "^3.2.1" - chalk "^2.4.1" - cross-spawn "^6.0.5" + ansi-styles "^6.2.1" + cross-spawn "^7.0.6" memorystream "^0.3.1" - minimatch "^3.0.4" - pidtree "^0.3.0" - read-pkg "^3.0.0" - shell-quote "^1.6.1" - string.prototype.padend "^3.0.0" + picomatch "^4.0.2" + pidtree "^0.6.0" + read-package-json-fast "^4.0.0" + shell-quote "^1.7.3" + which "^5.0.0" npm-run-path@^2.0.0: version "2.0.2" @@ -7194,26 +5649,17 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== -object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.1: +object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - object-hash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== -object-inspect@^1.13.3, object-inspect@^1.13.4: +object-inspect@^1.13.3: version "1.13.4" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== @@ -7223,14 +5669,7 @@ object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== - dependencies: - isobject "^3.0.0" - -object.assign@^4.0.4, object.assign@^4.1.0, object.assign@^4.1.4, object.assign@^4.1.7: +object.assign@^4.1.4: version "4.1.7" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== @@ -7242,7 +5681,7 @@ object.assign@^4.0.4, object.assign@^4.1.0, object.assign@^4.1.4, object.assign@ has-symbols "^1.1.0" object-keys "^1.1.1" -object.defaults@^1.0.0, object.defaults@^1.1.0: +object.defaults@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" integrity sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA== @@ -7252,54 +5691,19 @@ object.defaults@^1.0.0, object.defaults@^1.1.0: for-own "^1.0.0" isobject "^3.0.0" -object.map@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37" - integrity sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w== - dependencies: - for-own "^1.0.0" - make-iterator "^1.0.0" - -object.pick@^1.2.0, object.pick@^1.3.0: +object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== dependencies: isobject "^3.0.1" -object.reduce@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.reduce/-/object.reduce-1.0.1.tgz#6fe348f2ac7fa0f95ca621226599096825bb03ad" - integrity sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw== - dependencies: - for-own "^1.0.0" - make-iterator "^1.0.0" - obliterator@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-1.6.1.tgz#dea03e8ab821f6c4d96a299e17aef6a3af994ef3" integrity sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig== -observable-fns@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/observable-fns/-/observable-fns-0.6.1.tgz#636eae4fdd1132e88c0faf38d33658cc79d87e37" - integrity sha512-9gRK4+sRWzeN6AOewNBTLXir7Zl/i3GB6Yl26gK4flxz8BXVpD3kt8amREmWNb0mxYOGDotvE5a4N+PtGGKdkg== - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== - dependencies: - ee-first "1.1.1" - -on-finished@~2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== @@ -7346,25 +5750,11 @@ open@^8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" -ordered-read-streams@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" - integrity sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw== - dependencies: - readable-stream "^2.0.1" - os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A== -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - integrity sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g== - dependencies: - lcid "^1.0.0" - os-locale@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" @@ -7374,15 +5764,6 @@ os-locale@^3.0.0: lcid "^2.0.0" mem "^4.0.0" -own-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" - integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== - dependencies: - get-intrinsic "^1.2.6" - object-keys "^1.1.1" - safe-push-apply "^1.0.0" - p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -7491,7 +5872,7 @@ parse-entities@^2.0.0: is-decimal "^1.0.0" is-hexadecimal "^1.0.0" -parse-filepath@^1.0.1: +parse-filepath@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" integrity sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q== @@ -7500,13 +5881,6 @@ parse-filepath@^1.0.1: map-cache "^0.2.0" path-root "^0.1.1" -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ== - dependencies: - error-ex "^1.2.0" - parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -7525,26 +5899,11 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse-node-version@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" - integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== - parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== - path-browserify@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" @@ -7555,18 +5914,6 @@ path-complete-extname@1.0.0: resolved "https://registry.yarnpkg.com/path-complete-extname/-/path-complete-extname-1.0.0.tgz#f889985dc91000c815515c0bfed06c5acda0752b" integrity sha512-CVjiWcMRdGU8ubs08YQVzhutOR5DEfO97ipRIlOGMK5Bek5nQySknBpuxVAVJ36hseTNs+vdIcv57ZrWxH7zvg== -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q== - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ== - dependencies: - pinkie-promise "^2.0.0" - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -7609,7 +5956,7 @@ path-root@^0.1.1: dependencies: path-root-regex "^0.1.0" -path-scurry@^1.11.1, path-scurry@^1.5.0, path-scurry@^1.6.1: +path-scurry@^1.11.1, path-scurry@^1.6.1: version "1.11.1" resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== @@ -7625,15 +5972,6 @@ path-scurry@^2.0.0: lru-cache "^11.0.0" minipass "^7.1.2" -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg== - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -7684,7 +6022,7 @@ pend@~1.2.0: resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== -photoswipe@^5.3.7: +photoswipe@^5.4.4: version "5.4.4" resolved "https://registry.yarnpkg.com/photoswipe/-/photoswipe-5.4.4.tgz#e045dc036453493188d5c8665b0e8f1000ac4d6e" integrity sha512-WNFHoKrkZNnvFFhbHL93WDkW3ifwVOXSW3w1UuZZelSmgXpIGiZSNlZJq37rR8YejqME2rHs9EhH9ZvlvFH2NA== @@ -7704,12 +6042,17 @@ 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== -pidtree@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" - integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== +picomatch@^4.0.2, picomatch@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" + integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== -pify@^2.0.0, pify@^2.3.0: +pidtree@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" + integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== + +pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== @@ -7719,18 +6062,6 @@ pify@^3.0.0: resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== - pirates@^4.0.1: version "4.0.7" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" @@ -7821,31 +6152,17 @@ platform@^1.3.6: resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg== -playwright-core@1.51.0: - version "1.51.0" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.51.0.tgz#bb23ea6bb6298242d088ae5e966ffcf8dc9827e8" - integrity sha512-x47yPE3Zwhlil7wlNU/iktF7t2r/URR3VLbH6EknJd/04Qc/PSJ0EY3CMXipmglLG+zyRxW6HNo2EGbKLHPWMg== +playwright-core@1.58.2: + version "1.58.2" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.58.2.tgz#ac5f5b4b10d29bcf934415f0b8d133b34b0dcb13" + integrity sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg== -playwright-core@1.54.2: - version "1.54.2" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.54.2.tgz#73cc5106f19ec6b9371908603d61a7f171ebd8f0" - integrity sha512-n5r4HFbMmWsB4twG7tJLDN9gmBUeSPcsBZiWSE4DnYz9mJMAFqr2ID7+eGC9kpEnxExJ1epttwR59LEWCk8mtA== - -playwright@1.51.0, playwright@=1.51.0: - version "1.51.0" - resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.51.0.tgz#9ba154497ba62bc6dc199c58ee19295eb35a4707" - integrity sha512-442pTfGM0xxfCYxuBa/Pu6B2OqxqqaYq39JS8QDMGThUvIOCd6s0ANDog3uwA0cHavVlnTQzGCN7Id2YekDSXA== +playwright@1.58.2, playwright@=1.58.2: + version "1.58.2" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.58.2.tgz#afe547164539b0bcfcb79957394a7a3fa8683cfd" + integrity sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A== dependencies: - playwright-core "1.51.0" - optionalDependencies: - fsevents "2.3.2" - -"playwright@>= 1.0.0": - version "1.54.2" - resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.54.2.tgz#e2435abb2db3a96a276f8acc3ada1a85b587dff3" - integrity sha512-Hu/BMoA1NAdRUuulyvQC0pEqZ4vQbGfn8f7wPXcnqQmM+zct9UliKxsIkLNmz/ku7LElUNqmaiv1TG/aL5ACsw== - dependencies: - playwright-core "1.54.2" + playwright-core "1.58.2" optionalDependencies: fsevents "2.3.2" @@ -7865,86 +6182,75 @@ plugin-error@^2.0.1: dependencies: ansi-colors "^1.0.1" -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== - possible-typed-array-names@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== -postcss-calc@^8.2.3: - version "8.2.4" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" - integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== +postcss-calc@^10.1.1: + version "10.1.1" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-10.1.1.tgz#52b385f2e628239686eb6e3a16207a43f36064ca" + integrity sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw== dependencies: - postcss-selector-parser "^6.0.9" + postcss-selector-parser "^7.0.0" postcss-value-parser "^4.2.0" -postcss-cli@10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/postcss-cli/-/postcss-cli-10.0.0.tgz#404e468d1ff39fb5ead3f707e2021be7cd3f8c9f" - integrity sha512-Wjy/00wBBEgQqnSToznxLWDnATznokFGXsHtF/3G8glRZpz5KYlfHcBW/VMJmWAeF2x49zjgy4izjM3/Wx1dKA== +postcss-cli@11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/postcss-cli/-/postcss-cli-11.0.1.tgz#341188ff7b26b19b206ca923ae2bd979751e7da7" + integrity sha512-0UnkNPSayHKRe/tc2YGW6XnSqqOA9eqpiRMgRlV1S6HdGi16vwJBx7lviARzbV1HpQHqLLRH3o8vTcB0cLc+5g== dependencies: chokidar "^3.3.0" - dependency-graph "^0.11.0" - fs-extra "^10.0.0" - get-stdin "^9.0.0" - globby "^13.0.0" + dependency-graph "^1.0.0" + fs-extra "^11.0.0" picocolors "^1.0.0" - postcss-load-config "^4.0.0" + postcss-load-config "^5.0.0" postcss-reporter "^7.0.0" pretty-hrtime "^1.0.3" read-cache "^1.0.0" - slash "^4.0.0" + slash "^5.0.0" + tinyglobby "^0.2.12" yargs "^17.0.0" -postcss-colormin@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz#86c27c26ed6ba00d96c79e08f3ffb418d1d1988f" - integrity sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ== +postcss-colormin@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-7.0.6.tgz#8f1bcfaa6f4959a872824f3b5bd4e1278bf35e45" + integrity sha512-oXM2mdx6IBTRm39797QguYzVEWzbdlFiMNfq88fCCN1Wepw3CYmJ/1/Ifa/KjWo+j5ZURDl2NTldLJIw51IeNQ== dependencies: - browserslist "^4.21.4" + browserslist "^4.28.1" caniuse-api "^3.0.0" - colord "^2.9.1" + colord "^2.9.3" postcss-value-parser "^4.2.0" -postcss-convert-values@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz#04998bb9ba6b65aa31035d669a6af342c5f9d393" - integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA== +postcss-convert-values@^7.0.9: + version "7.0.9" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-7.0.9.tgz#6ada5c2c480f1ddbd4c886339025a916ecc8ff01" + integrity sha512-l6uATQATZaCa0bckHV+r6dLXfWtUBKXxO3jK+AtxxJJtgMPD+VhhPCCx51I4/5w8U5uHV67g3w7PXj+V3wlMlg== dependencies: - browserslist "^4.21.4" + browserslist "^4.28.1" postcss-value-parser "^4.2.0" -postcss-discard-comments@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" - integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== - -postcss-discard-duplicates@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" - integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== - -postcss-discard-empty@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" - integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== - -postcss-discard-overridden@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" - integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== - -postcss-functions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-functions/-/postcss-functions-4.0.2.tgz#23a7d100f507890042fbd0305f963554e6d1ce6a" - integrity sha512-htDZN6t97uW4GBXquTsz/DVaNVAHtHx5tLCALquVM2u58UwHki+RwHbANKiiI0ImA8T7Iml2MnvLUM7aGtlpqA== +postcss-discard-comments@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-7.0.6.tgz#4e9c696a83391d90b3ffa4485ac144e555db443c" + integrity sha512-Sq+Fzj1Eg5/CPf1ERb0wS1Im5cvE2gDXCE+si4HCn1sf+jpQZxDI4DXEp8t77B/ImzDceWE2ebJQFXdqZ6GRJw== dependencies: - postcss-value-parser "^4.0.0" + postcss-selector-parser "^7.1.1" + +postcss-discard-duplicates@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.2.tgz#9cf3e659d4f94b046eef6f93679490c0250a8e4e" + integrity sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w== + +postcss-discard-empty@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-7.0.1.tgz#b6c57e8b5c69023169abea30dceb93f98a2ffd9f" + integrity sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg== + +postcss-discard-overridden@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-7.0.1.tgz#bd9c9bc5e4548d3b6e67e7f8d64f2c9d745ae2a0" + integrity sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg== postcss-html@^0.36.0: version "0.36.0" @@ -7953,19 +6259,19 @@ postcss-html@^0.36.0: dependencies: htmlparser2 "^3.10.0" -postcss-import-ext-glob@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-import-ext-glob/-/postcss-import-ext-glob-2.0.1.tgz#9e22f9fc9722f7e7206fde77d594e93f6c57163e" - integrity sha512-cCvzsZBPuhLCOAfkPeBnJ31uz5azlAjNb5Aug1f2nlomgZK+WD7Uwfrk+epFU9PI20rsMAineDUK4Ty+jEQHcg== +postcss-import-ext-glob@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/postcss-import-ext-glob/-/postcss-import-ext-glob-2.1.1.tgz#327b83525a39ad186f9b828035ccf61f8ab57081" + integrity sha512-qd4ELOx2G0hyjgtmLnf/fSVJXXPhkcxcxhLT1y1mAnk53JYbMLoGg+AFtnJowOSvnv4CvjPAzpLpAcfWeofP5g== dependencies: - fast-glob "^3.2.4" - fast-sort "^2.2.0" - postcss-value-parser "^4.1.0" + fast-glob "^3.2.12" + fast-sort "^3.2.0" + postcss-value-parser "^4.2.0" -postcss-import@15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.0.0.tgz#0b66c25fdd9c0d19576e63c803cf39e4bad08822" - integrity sha512-Y20shPQ07RitgBGv2zvkEAu9bqvrD77C9axhj/aA1BQj4czape2MdClCExvB27EwYEJdGgKZBpKanb0t1rK2Kg== +postcss-import@16.1.1: + version "16.1.1" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-16.1.1.tgz#cfbe79e6c9232b0dbbe1c18f35308825cfe8ff2a" + integrity sha512-2xVS1NCZAfjtVdvXiyegxzJ447GyqCeEI5V7ApgQVOWnros1p5lGNovJNapwPpMombyFBfqDwt7AD3n2l0KOfQ== dependencies: postcss-value-parser "^4.0.0" read-cache "^1.0.0" @@ -7994,7 +6300,7 @@ postcss-less@^3.1.4: dependencies: postcss "^7.0.14" -postcss-load-config@^4.0.0, postcss-load-config@^4.0.1: +postcss-load-config@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3" integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== @@ -8015,62 +6321,63 @@ postcss-media-query-parser@^0.2.3: resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" integrity sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig== -postcss-merge-longhand@^5.1.7: - version "5.1.7" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz#24a1bdf402d9ef0e70f568f39bdc0344d568fb16" - integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ== +postcss-merge-longhand@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-7.0.5.tgz#e1b126e92f583815482e8b1e82c47d2435a20421" + integrity sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw== dependencies: postcss-value-parser "^4.2.0" - stylehacks "^5.1.1" + stylehacks "^7.0.5" -postcss-merge-rules@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz#2f26fa5cacb75b1402e213789f6766ae5e40313c" - integrity sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g== +postcss-merge-rules@^7.0.8: + version "7.0.8" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-7.0.8.tgz#d63ce875b9f7880ca4aa89d9ae3eaa3657215f82" + integrity sha512-BOR1iAM8jnr7zoQSlpeBmCsWV5Uudi/+5j7k05D0O/WP3+OFMPD86c1j/20xiuRtyt45bhxw/7hnhZNhW2mNFA== dependencies: - browserslist "^4.21.4" + browserslist "^4.28.1" caniuse-api "^3.0.0" - cssnano-utils "^3.1.0" - postcss-selector-parser "^6.0.5" + cssnano-utils "^5.0.1" + postcss-selector-parser "^7.1.1" -postcss-minify-font-values@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" - integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== +postcss-minify-font-values@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-7.0.1.tgz#6fb4770131b31fd5a2014bd84e32f386a3406664" + integrity sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ== dependencies: postcss-value-parser "^4.2.0" -postcss-minify-gradients@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" - integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== +postcss-minify-gradients@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-7.0.1.tgz#933cb642dd00df397237c17194f37dcbe4cad739" + integrity sha512-X9JjaysZJwlqNkJbUDgOclyG3jZEpAMOfof6PUZjPnPrePnPG62pS17CjdM32uT1Uq1jFvNSff9l7kNbmMSL2A== dependencies: - colord "^2.9.1" - cssnano-utils "^3.1.0" + colord "^2.9.3" + cssnano-utils "^5.0.1" postcss-value-parser "^4.2.0" -postcss-minify-params@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz#c06a6c787128b3208b38c9364cfc40c8aa5d7352" - integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw== +postcss-minify-params@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-7.0.6.tgz#ca0df1bd4eaa70ee7a4ee17f393d275988f44657" + integrity sha512-YOn02gC68JijlaXVuKvFSCvQOhTpblkcfDre2hb/Aaa58r2BIaK4AtE/cyZf2wV7YKAG+UlP9DT+By0ry1E4VQ== dependencies: - browserslist "^4.21.4" - cssnano-utils "^3.1.0" + browserslist "^4.28.1" + cssnano-utils "^5.0.1" postcss-value-parser "^4.2.0" -postcss-minify-selectors@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" - integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== +postcss-minify-selectors@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-7.0.6.tgz#1e0240e1fa3372d81d3f0586591f1e8d2ae21e16" + integrity sha512-lIbC0jy3AAwDxEgciZlBullDiMBeBCT+fz5G8RcA9MWqh/hfUkpOI3vNDUNEZHgokaoiv0juB9Y8fGcON7rU/A== dependencies: - postcss-selector-parser "^6.0.5" + cssesc "^3.0.0" + postcss-selector-parser "^7.1.1" -postcss-nested@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.0.tgz#1572f1984736578f360cffc7eb7dca69e30d1735" - integrity sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w== +postcss-nested@7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-7.0.2.tgz#863d83a6b5df0a2894560394be93d5383ea37a65" + integrity sha512-5osppouFc0VR9/VYzYxO03VaDa3e8F23Kfd6/9qcZTUI8P58GIYlArOET2Wq0ywSl2o2PjELhYOFI4W7l5QHKw== dependencies: - postcss-selector-parser "^6.0.10" + postcss-selector-parser "^7.0.0" postcss-nested@^6.0.1: version "6.2.0" @@ -8079,89 +6386,88 @@ postcss-nested@^6.0.1: dependencies: postcss-selector-parser "^6.1.1" -postcss-normalize-charset@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" - integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== +postcss-normalize-charset@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-7.0.1.tgz#bccc3f7c5f4440883608eea8b444c8f41ce55ff6" + integrity sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ== -postcss-normalize-display-values@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" - integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== +postcss-normalize-display-values@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.1.tgz#feb40277d89a7f677b67a84cac999f0306e38235" + integrity sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-positions@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" - integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== +postcss-normalize-positions@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-7.0.1.tgz#c771c0d33034455205f060b999d8557c2308d22c" + integrity sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-repeat-style@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" - integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== +postcss-normalize-repeat-style@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.1.tgz#05fe4d838eedbd996436c5cab78feef9bb1ae57b" + integrity sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-string@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" - integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== +postcss-normalize-string@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-7.0.1.tgz#0f111e7b5dfb6de6ab19f09d9e1c16fabeee232f" + integrity sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-timing-functions@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" - integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== +postcss-normalize-timing-functions@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.1.tgz#7b645a36f113fec49d95d56386c9980316c71216" + integrity sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-unicode@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz#f67297fca3fea7f17e0d2caa40769afc487aa030" - integrity sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA== +postcss-normalize-unicode@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.6.tgz#6935d6baf7f7374a34c216a7fe13229acd1073f2" + integrity sha512-z6bwTV84YW6ZvvNoaNLuzRW4/uWxDKYI1iIDrzk6D2YTL7hICApy+Q1LP6vBEsljX8FM7YSuV9qI79XESd4ddQ== dependencies: - browserslist "^4.21.4" + browserslist "^4.28.1" postcss-value-parser "^4.2.0" -postcss-normalize-url@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" - integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== - dependencies: - normalize-url "^6.0.1" - postcss-value-parser "^4.2.0" - -postcss-normalize-whitespace@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" - integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== +postcss-normalize-url@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-7.0.1.tgz#d6471a22b6747ce93d7038c16eb9f1ba8b307e25" + integrity sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ== dependencies: postcss-value-parser "^4.2.0" -postcss-ordered-values@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" - integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== +postcss-normalize-whitespace@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.1.tgz#ab8e9ff1f3213f3f3851c0a7d0e4ce4716777cea" + integrity sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA== dependencies: - cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" -postcss-reduce-initial@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz#798cd77b3e033eae7105c18c9d371d989e1382d6" - integrity sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg== +postcss-ordered-values@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-7.0.2.tgz#0e803fbb9601e254270481772252de9a8c905f48" + integrity sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw== dependencies: - browserslist "^4.21.4" + cssnano-utils "^5.0.1" + postcss-value-parser "^4.2.0" + +postcss-reduce-initial@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-7.0.6.tgz#fa3af45e60cd04d9a3d29315eb97c82b7b447ead" + integrity sha512-G6ZyK68AmrPdMB6wyeA37ejnnRG2S8xinJrZJnOv+IaRKf6koPAVbQsiC7MfkmXaGmF1UO+QCijb27wfpxuRNg== + dependencies: + browserslist "^4.28.1" caniuse-api "^3.0.0" -postcss-reduce-transforms@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" - integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== +postcss-reduce-transforms@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.1.tgz#f87111264b0dfa07e1f708d7e6401578707be5d6" + integrity sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g== dependencies: postcss-value-parser "^4.2.0" @@ -8208,7 +6514,7 @@ postcss-selector-parser@6.0.10: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9, postcss-selector-parser@^6.1.1: +postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.1.1: version "6.1.2" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== @@ -8216,25 +6522,33 @@ postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-select cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-svgo@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" - integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== +postcss-selector-parser@^7.0.0, postcss-selector-parser@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz#e75d2e0d843f620e5df69076166f4e16f891cb9f" + integrity sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-svgo@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-7.1.1.tgz#14b90fd2a1b1f27bcb2d0ef0444f954237e7883c" + integrity sha512-zU9H9oEDrUFKa0JB7w+IYL7Qs9ey1mZyjhbf0KLxwJDdDRtoPvCmaEfknzqfHj44QS9VD6c5sJnBAVYTLRg/Sg== dependencies: postcss-value-parser "^4.2.0" - svgo "^2.7.0" + svgo "^4.0.1" postcss-syntax@^0.36.2: version "0.36.2" resolved "https://registry.yarnpkg.com/postcss-syntax/-/postcss-syntax-0.36.2.tgz#f08578c7d95834574e5593a82dfbfa8afae3b51c" integrity sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w== -postcss-unique-selectors@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" - integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== +postcss-unique-selectors@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-7.0.5.tgz#a7dd5652c95f459176e5f135c021473e4ee58874" + integrity sha512-3QoYmEt4qg/rUWDn6Tc8+ZVPmbp4G1hXDtCNWDx0st8SjtCbRcxRXDDM1QrEiXGG3A45zscSJFb4QH90LViyxg== dependencies: - postcss-selector-parser "^6.0.5" + postcss-selector-parser "^7.1.1" postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" @@ -8249,7 +6563,7 @@ postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.26, postcss@^7.0. picocolors "^0.2.1" source-map "^0.6.1" -postcss@^8.2.1: +postcss@^8.4.23, postcss@^8.5.8: version "8.5.8" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.8.tgz#6230ecc8fb02e7a0f6982e53990937857e13f399" integrity sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg== @@ -8258,19 +6572,10 @@ postcss@^8.2.1: picocolors "^1.1.1" source-map-js "^1.2.1" -postcss@^8.4.23, postcss@^8.4.47: - version "8.5.6" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" - integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== - dependencies: - nanoid "^3.3.11" - picocolors "^1.1.1" - source-map-js "^1.2.1" - -posthog-js@1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/posthog-js/-/posthog-js-1.10.2.tgz#74d6c84f9675b65dfd4ff6f4051ed8d3cb974076" - integrity sha512-JNjWstHEexhj5CEKldSeYNyPJbtOvZQ3ZPL55fxU7+f+gTBL8RlOb8eFohCPYIk0VhMf2UM1rXxwVBOeMQQQFw== +posthog-js@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/posthog-js/-/posthog-js-1.10.0.tgz#4d86360161170d37c249482f016acac2f4b6d978" + integrity sha512-WbcPRRX62XTq2F2lbakuDK6/HPAJ43gkuPeM4vU/hoC7WICAc+gZJaXZFy8zY25r/5GZPWUhhW8KrbL0aZ11XQ== dependencies: fflate "^0.4.1" @@ -8302,12 +6607,12 @@ prettier@^2.7.1: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== -pretty-hrtime@^1.0.0, pretty-hrtime@^1.0.3: +pretty-hrtime@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" integrity sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A== -process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: +process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== @@ -8330,7 +6635,7 @@ prompts@^2.4.2: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@15.x, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -8369,14 +6674,6 @@ public-encrypt@^4.0.3: randombytes "^2.0.1" safe-buffer "^5.1.2" -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - pump@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.3.tgz#151d979f1a29668dc0025ec589a455b53282268d" @@ -8385,40 +6682,16 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -pumpify@^1.3.5: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - punycode@^1.2.4, 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== -purgecss@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/purgecss/-/purgecss-4.0.2.tgz#7281f233c08b4f41e1c5d85c66a2d064e6d7e1b3" - integrity sha512-6J1zOEAZJX6VbfcaJHgdQf4uPhxVXvHz7dGgWYXLOI9q7QFZ5feh8NZ2+G3ysii/Sr8OyUe5yhQ5Z/xZ5gIRnQ== - dependencies: - commander "^6.0.0" - glob "^7.0.0" - postcss "^8.2.1" - postcss-selector-parser "^6.0.2" - q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== -qjobs@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" - integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== - qs@^6.12.3: version "6.14.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" @@ -8426,13 +6699,6 @@ qs@^6.12.3: dependencies: side-channel "^1.1.0" -qs@~6.14.0: - version "6.14.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.2.tgz#b5634cf9d9ad9898e31fba3504e866e8efb6798c" - integrity sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q== - dependencies: - side-channel "^1.1.0" - querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -8463,21 +6729,6 @@ randomfill@^1.0.4: randombytes "^2.0.5" safe-buffer "^5.1.0" -range-parser@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@~2.5.3: - version "2.5.3" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.3.tgz#11c6650ee770a7de1b494f197927de0c923822e2" - integrity sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA== - dependencies: - bytes "~3.1.2" - http-errors "~2.0.1" - iconv-lite "~0.4.24" - unpipe "~1.0.0" - rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -8496,74 +6747,39 @@ react-dom@18.3.1: loose-envify "^1.1.0" scheduler "^0.23.2" -react-draggable@3.x: - version "3.3.2" - resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-3.3.2.tgz#966ef1d90f2387af3c2d8bd3516f601ea42ca359" - integrity sha512-oaz8a6enjbPtx5qb0oDWxtDNuybOylvto1QLydsXgKmwT7e3GXC2eMVDwEMIUYJIFqVG72XpOv673UuuAq6LhA== - dependencies: - classnames "^2.2.5" - prop-types "^15.6.0" +react-intersection-observer@^10.0.3: + version "10.0.3" + resolved "https://registry.yarnpkg.com/react-intersection-observer/-/react-intersection-observer-10.0.3.tgz#58b2c0406f71cfb5981afb8a5ee7f4eb06512479" + integrity sha512-luICLMbs0zxTO/70Zy7K5jOXkABPEVSAF8T3FdZUlctsrIaPLmx8TZe2SSA+CY2HGWfz2INyNTnp82pxNNsShA== -react-draggable@^4.0.3: - version "4.5.0" - resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.5.0.tgz#0b274ccb6965fcf97ed38fcf7e3cc223bc48cdf5" - integrity sha512-VC+HBLEZ0XJxnOxVAZsdRi8rD04Iz3SiiKOoYzamjylUcju/hP9np/aZdLHf/7WOD268WMoNJMvYfB5yAK45cw== - dependencies: - clsx "^2.1.1" - prop-types "^15.8.1" - -react-grid-layout@0.16.6: - version "0.16.6" - resolved "https://registry.yarnpkg.com/react-grid-layout/-/react-grid-layout-0.16.6.tgz#9b2407a2b946c2260ebaf66f13b556e1da4efeb2" - integrity sha512-h2EsYgsqcESLJeevQSJsEKp8hhh+phOlXDJoMhlV2e7T3VWQL+S6iCF3iD/LK19r4oyRyOMDEir0KV+eLXrAyw== - dependencies: - classnames "2.x" - lodash.isequal "^4.0.0" - prop-types "15.x" - react-draggable "3.x" - react-resizable "1.x" - -react-intersection-observer@^9.3.5: - version "9.16.0" - resolved "https://registry.yarnpkg.com/react-intersection-observer/-/react-intersection-observer-9.16.0.tgz#7376d54edc47293300961010844d53b273ee0fb9" - integrity sha512-w9nJSEp+DrW9KmQmeWHQyfaP6b03v+TdXynaoA964Wxt7mdR3An11z4NNCQgL4gKSK7y1ver2Fq+JKH6CWEzUA== - -react-is@^16.13.1, react-is@^16.7.0: +react-is@^16.13.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-resizable@1.x: - version "1.11.1" - resolved "https://registry.yarnpkg.com/react-resizable/-/react-resizable-1.11.1.tgz#02ca6850afa7a22c1b3e623e64aef71ee252af69" - integrity sha512-S70gbLaAYqjuAd49utRHibtHLrHXInh7GuOR+6OO6RO6uleQfuBnWmZjRABfqNEx3C3Z6VPLg0/0uOYFrkfu9Q== +react-textarea-autosize@8.5.9: + version "8.5.9" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.5.9.tgz#ab8627b09aa04d8a2f45d5b5cd94c84d1d4a8893" + integrity sha512-U1DGlIQN5AwgjTyOEnI1oCcMuEr1pv1qOtklB2l4nyMGbHzWrI0eFsYK0zos2YWqAolJyG0IWJaqWmWj5ETh0A== dependencies: - prop-types "15.x" - react-draggable "^4.0.3" + "@babel/runtime" "^7.20.13" + use-composed-ref "^1.3.0" + use-latest "^1.2.1" -react-textarea-autosize@8.3.3: - version "8.3.3" - resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.3.3.tgz#f70913945369da453fd554c168f6baacd1fa04d8" - integrity sha512-2XlHXK2TDxS6vbQaoPbMOfQ8GK7+irc2fVK6QFIcC8GOnH3zI/v481n+j1L0WaPVvKxwesnY93fEfH++sus2rQ== - dependencies: - "@babel/runtime" "^7.10.2" - use-composed-ref "^1.0.0" - use-latest "^1.0.0" - -react-transition-group@4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.3.0.tgz#fea832e386cf8796c58b61874a3319704f5ce683" - integrity sha512-1qRV1ZuVSdxPlPf4O8t7inxUGpdyO5zG9IoNfJxSO0ImU2A1YWkEQvFPuIPZmMLkg5hYs7vv5mMOyfgSkvAwvw== +react-transition-group@4.4.5: + version "4.4.5" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== dependencies: "@babel/runtime" "^7.5.5" dom-helpers "^5.0.1" loose-envify "^1.4.0" prop-types "^15.6.2" -react-virtuoso@4.12.5: - version "4.12.5" - resolved "https://registry.yarnpkg.com/react-virtuoso/-/react-virtuoso-4.12.5.tgz#cf92efc2527e56d6df1d4d63c6e4dd3fac5a4030" - integrity sha512-YeCbRRsC9CLf0buD0Rct7WsDbzf+yBU1wGbo05/XjbcN2nJuhgh040m3y3+6HVogTZxEqVm45ac9Fpae4/MxRQ== +react-virtuoso@4.18.3: + version "4.18.3" + resolved "https://registry.yarnpkg.com/react-virtuoso/-/react-virtuoso-4.18.3.tgz#12e69600c258bc6e6bd31c2516942ef08700deac" + integrity sha512-fLz/peHAx4Eu0DLHurFEEI7Y6n5CqEoxBh04rgJM9yMuOJah2a9zWg/MUOmZLcp7zuWYorXq5+5bf3IRgkNvWg== react@18.3.1: version "18.3.1" @@ -8579,13 +6795,13 @@ read-cache@^1.0.0: dependencies: pify "^2.3.0" -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A== +read-package-json-fast@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-4.0.0.tgz#8ccbc05740bb9f58264f400acc0b4b4eee8d1b39" + integrity sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg== dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" + json-parse-even-better-errors "^4.0.0" + npm-normalize-package-bin "^4.0.0" read-pkg-up@^3.0.0: version "3.0.0" @@ -8604,15 +6820,6 @@ read-pkg-up@^7.0.1: read-pkg "^5.2.0" type-fest "^0.8.1" -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ== - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" @@ -8641,7 +6848,7 @@ readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.1.1, readable-stre string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@^2.3.8, readable-stream@~2.3.6: +readable-stream@^2.0.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@^2.3.8, readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -8654,22 +6861,6 @@ readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -readdirp@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" - integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== - dependencies: - picomatch "^2.2.1" - readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -8682,13 +6873,6 @@ readline-sync@^1.4.7: resolved "https://registry.yarnpkg.com/readline-sync/-/readline-sync-1.4.10.tgz#41df7fbb4b6312d673011594145705bf56d8873b" integrity sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw== -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== - dependencies: - resolve "^1.1.6" - rechoir@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" @@ -8704,45 +6888,11 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" -reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" - integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== - dependencies: - call-bind "^1.0.8" - define-properties "^1.2.1" - es-abstract "^1.23.9" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.7" - get-proto "^1.0.1" - which-builtin-type "^1.2.1" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - regexp-to-ast@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/regexp-to-ast/-/regexp-to-ast-0.5.0.tgz#56c73856bee5e1fef7f73a00f1473452ab712a24" integrity sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw== -regexp.prototype.flags@^1.5.4: - version "1.5.4" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" - integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== - dependencies: - call-bind "^1.0.8" - define-properties "^1.2.1" - es-errors "^1.3.0" - get-proto "^1.0.1" - gopd "^1.2.0" - set-function-name "^2.0.2" - remark-parse@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-9.0.0.tgz#4d20a299665880e4f4af5d90b7c7b8a935853640" @@ -8766,56 +6916,30 @@ remark@^13.0.0: remark-stringify "^9.0.0" unified "^9.1.0" -remove-accents@0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.4.2.tgz#0a43d3aaae1e80db919e07ae254b285d9e1c7bb5" - integrity sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA== +remove-accents@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.5.0.tgz#77991f37ba212afba162e375b627631315bed687" + integrity sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A== -remove-bom-buffer@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" - integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ== - dependencies: - is-buffer "^1.1.5" - is-utf8 "^0.2.1" - -remove-bom-stream@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523" - integrity sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA== - dependencies: - remove-bom-buffer "^3.0.0" - safe-buffer "^5.1.0" - through2 "^2.0.3" - -remove-trailing-separator@^1.0.1, remove-trailing-separator@^1.1.0: +remove-trailing-separator@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -repeat-string@^1.0.0, repeat-string@^1.6.1: +repeat-string@^1.0.0: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== -replace-ext@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a" - integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw== +replace-ext@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-2.0.0.tgz#9471c213d22e1bcc26717cd6e50881d88f812b06" + integrity sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug== -replace-homedir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/replace-homedir/-/replace-homedir-1.0.0.tgz#e87f6d513b928dde808260c12be7fec6ff6e798c" - integrity sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg== - dependencies: - homedir-polyfill "^1.0.1" - is-absolute "^1.0.0" - remove-trailing-separator "^1.1.0" +replace-homedir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/replace-homedir/-/replace-homedir-2.0.0.tgz#245bd9c909275e0beee75eae85bb40780cd61903" + integrity sha512-bgEuQQ/BHW0XkkJtawzrfzHFSN70f/3cNOiHa2QsYxqrjaC30X1k74FJ6xswVBP0sr0SpGIdVFuPwfrYziVeyw== replace@^1.1.0: version "1.2.2" @@ -8855,11 +6979,6 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -8885,19 +7004,14 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve-options@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" - integrity sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A== +resolve-options@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-2.0.0.tgz#a1a57a9949db549dd075de3f5550675f02f1e4c5" + integrity sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A== dependencies: - value-or-function "^3.0.0" + value-or-function "^4.0.0" -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== - -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.2, resolve@^1.4.0: +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.2: version "1.22.10" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== @@ -8906,21 +7020,11 @@ resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22. path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - reusify@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== -rfdc@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" - integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== - rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -8978,17 +7082,6 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-array-concat@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" - integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.2" - get-intrinsic "^1.2.6" - has-symbols "^1.1.0" - isarray "^2.0.5" - safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -8999,14 +7092,6 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-push-apply@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" - integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== - dependencies: - es-errors "^1.3.0" - isarray "^2.0.5" - safe-regex-test@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" @@ -9016,22 +7101,15 @@ safe-regex-test@^1.1.0: es-errors "^1.3.0" is-regex "^1.2.1" -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": +"safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sanitize-filename@1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" - integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== +sanitize-filename@1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.4.tgz#b6b39ebed9bd1a1898b85c5c03089da74590d6f8" + integrity sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg== dependencies: truncate-utf8-bytes "^1.0.0" @@ -9040,10 +7118,10 @@ sax@1.1.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.1.4.tgz#74b6d33c9ae1e001510f179a91168588f1aedaa9" integrity sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg== -sax@>=0.6.0, sax@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" - integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== +sax@>=0.6.0, sax@^1.2.4, sax@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.5.0.tgz#b5549b671069b7aa392df55ec7574cf411179eb8" + integrity sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA== scheduler@^0.23.2: version "0.23.2" @@ -9052,10 +7130,10 @@ scheduler@^0.23.2: dependencies: loose-envify "^1.1.0" -schema-utils@^4.3.0, schema-utils@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.2.tgz#0c10878bf4a73fd2b1dfd14b9462b26788c806ae" - integrity sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ== +schema-utils@^4.3.0, schema-utils@^4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.3.tgz#5b1850912fa31df90716963d45d9121fdfc09f46" + integrity sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA== dependencies: "@types/json-schema" "^7.0.9" ajv "^8.9.0" @@ -9067,35 +7145,28 @@ semver-compare@^1.0.0: resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== -semver-greatest-satisfied-range@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz#13e8c2658ab9691cb0cd71093240280d36f77a5b" - integrity sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ== +semver-greatest-satisfied-range@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-2.0.0.tgz#4b62942a7a1ccbdb252e5329677c003bac546fe7" + integrity sha512-lH3f6kMbwyANB7HuOWRMlLCa2itaCrZJ+SAqqkSZrZKO/cAsk2EOyaKHUtNkVLFyFW9pct22SFesFp3Z7zpA0g== dependencies: - sver-compat "^1.5.0" + sver "^1.8.3" "semver@2 || 3 || 4 || 5", semver@^5.5.0: version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@7.5.2: - version "7.5.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.2.tgz#5b851e66d1be07c1cdaf37dfc856f543325a2beb" - integrity sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ== - dependencies: - lru-cache "^6.0.0" +semver@7.7.4, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.4, semver@^7.6.3, semver@^7.7.2: + version "7.7.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a" + integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA== -semver@^6.0.0, semver@^6.3.1: +semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.4, semver@^7.6.3, semver@^7.7.2: - version "7.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" - integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== - send-intent@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/send-intent/-/send-intent-7.0.0.tgz#792c1e72ca42ca98f4d94a31fb74eb13b319fcb9" @@ -9110,13 +7181,6 @@ serialize-error@^7.0.1: dependencies: type-fest "^0.13.1" -serialize-javascript@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" - integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== - dependencies: - randombytes "^2.1.0" - set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -9134,50 +7198,11 @@ set-function-length@^1.2.2: gopd "^1.0.1" has-property-descriptors "^1.0.2" -set-function-name@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" - integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.2" - -set-immediate-shim@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - integrity sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ== - -set-proto@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" - integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== - dependencies: - dunder-proto "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.4: +setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== -setprototypeof@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8: version "2.4.12" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.12.tgz#eb8b568bf383dfd1867a32c3f2b74eb52bdbf23f" @@ -9281,20 +7306,11 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shell-quote@^1.6.1: +shell-quote@^1.7.3: version "1.8.3" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.3.tgz#55e40ef33cf5c689902353a3d8cd1a6725f08b4b" integrity sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw== -shepherd.js@^9.1.0: - version "9.1.1" - resolved "https://registry.yarnpkg.com/shepherd.js/-/shepherd.js-9.1.1.tgz#07dcf5d6623ba52389db99a9041ca3f7f0d16e9f" - integrity sha512-JS1zE/OulfqahISHLn8P3moFXB4QFvK7HGH42T5WW1TMmHWd4Ke95k6NQTfYFC56OaI0j9Y1E+i6C+5ZftLORg== - dependencies: - "@popperjs/core" "^2.11.5" - deepmerge "^4.2.2" - smoothscroll-polyfill "^0.4.4" - side-channel-list@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" @@ -9394,10 +7410,10 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== +slash@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-5.1.0.tgz#be3adddcdf09ac38eebe8dcdc7b1a57a75b095ce" + integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg== slice-ansi@^4.0.0: version "4.0.0" @@ -9408,71 +7424,7 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" -smoothscroll-polyfill@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/smoothscroll-polyfill/-/smoothscroll-polyfill-0.4.4.tgz#3a259131dc6930e6ca80003e1cb03b603b69abf8" - integrity sha512-TK5ZA9U5RqCwMpfoMq/l1mrH0JAR7y7KRvOBx0n2869aLxch+gT9GhN3yUfjiw+d/DiF1mKo14+hd62JyMmoBg== - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -socket.io-adapter@~2.5.2: - version "2.5.6" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.5.6.tgz#c697f609d36a676a46749782274607d8df52c1d8" - integrity sha512-DkkO/dz7MGln0dHn5bmN3pPy+JmywNICWrJqVWiVOyvXjWQFIv9c2h24JrQLLFJ2aQVQf/Cvl1vblnd4r2apLQ== - dependencies: - debug "~4.4.1" - ws "~8.18.3" - -socket.io-parser@~4.2.4: - version "4.2.5" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.5.tgz#3f41b8d369129a93268f2abecba94b5292850099" - integrity sha512-bPMmpy/5WWKHea5Y/jYAP6k74A+hvmRCQaJuJB6I/ML5JZq/KfNieUVo/3Mh7SAqn7TyFdIo6wqYHInG1MU1bQ== - dependencies: - "@socket.io/component-emitter" "~3.1.0" - debug "~4.4.1" - -socket.io@^4.7.2: - version "4.8.3" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.8.3.tgz#ca6ba1431c69532e1e0a6f496deebeb601dbc4df" - integrity sha512-2Dd78bqzzjE6KPkD5fHZmDAKRNe3J15q+YHDrIsy9WEkqttc7GY+kT9OBLSMaPbQaEd0x1BjcmtMtXkfpc+T5A== - dependencies: - accepts "~1.3.4" - base64id "~2.0.0" - cors "~2.8.5" - debug "~4.4.1" - engine.io "~6.6.0" - socket.io-adapter "~2.5.2" - socket.io-parser "~4.2.4" - -source-map-js@^1.0.2, source-map-js@^1.2.1: +source-map-js@^1.0.1, source-map-js@^1.0.2, source-map-js@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== @@ -9485,17 +7437,6 @@ source-map-loader@^5.0.0: iconv-lite "^0.6.3" source-map-js "^1.0.2" -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - source-map-support@^0.4.15: version "0.4.18" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" @@ -9511,11 +7452,6 @@ source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - source-map@^0.5.1, source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -9526,10 +7462,10 @@ source-map@^0.6.0, source-map@^0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -sparkles@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c" - integrity sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw== +sparkles@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-2.1.0.tgz#8ad4e8cecba7e568bba660c39b6db46625ecf1ad" + integrity sha512-r7iW1bDw8R/cFifrD3JnQJX0K1jqT0kprL48BiBpLZLJPmAm34zsVBsK5lc7HirZYZqMW65dOXZgbAGt/I6frg== spdx-correct@^3.0.0: version "3.2.0" @@ -9562,13 +7498,6 @@ specificity@^0.4.1: resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019" integrity sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg== -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - split2@^3.0.0: version "3.2.2" resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" @@ -9593,42 +7522,6 @@ sprintf-js@^1.1.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - -stack-trace@0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" - integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - -statuses@~2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" - integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== - -stop-iteration-iterator@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" - integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== - dependencies: - es-errors "^1.3.0" - internal-slot "^1.1.0" - stream-browserify@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" @@ -9642,7 +7535,14 @@ stream-buffers@2.2.x: resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" integrity sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg== -stream-exhaust@^1.0.1: +stream-composer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/stream-composer/-/stream-composer-1.0.2.tgz#7ee61ca1587bf5f31b2e29aa2093cbf11442d152" + integrity sha512-bnBselmwfX5K10AH6L4c8+S5lgZMWI7ZYrz2rvYjCPB2DIMC4Ig8OpxGpNJSxRZ58oti7y1IcNvjBAz9vW5m4w== + dependencies: + streamx "^2.13.2" + +stream-exhaust@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/stream-exhaust/-/stream-exhaust-1.0.2.tgz#acdac8da59ef2bc1e17a2c0ccf6c320d120e555d" integrity sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw== @@ -9658,19 +7558,14 @@ stream-http@^2.7.2: to-arraybuffer "^1.0.0" xtend "^4.0.0" -stream-shift@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" - integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== - -streamroller@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.1.5.tgz#1263182329a45def1ffaef58d31b15d13d2ee7ff" - integrity sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw== +streamx@^2.12.0, streamx@^2.12.5, streamx@^2.13.2, streamx@^2.14.0: + version "2.23.0" + resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.23.0.tgz#7d0f3d00d4a6c5de5728aecd6422b4008d66fd0b" + integrity sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg== dependencies: - date-format "^4.0.14" - debug "^4.3.4" - fs-extra "^8.1.0" + events-universal "^1.0.0" + fast-fifo "^1.3.2" + text-decoder "^1.1.0" streamx@^2.15.0, streamx@^2.21.0: version "2.22.1" @@ -9691,7 +7586,7 @@ streamx@^2.15.0, streamx@^2.21.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^1.0.1, string-width@^1.0.2: +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== @@ -9726,48 +7621,6 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.padend@^3.0.0: - version "3.1.6" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz#ba79cf8992609a91c872daa47c6bb144ee7f62a5" - integrity sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - -string.prototype.trim@^1.2.10: - version "1.2.10" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" - integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.2" - define-data-property "^1.1.4" - define-properties "^1.2.1" - es-abstract "^1.23.5" - es-object-atoms "^1.0.0" - has-property-descriptors "^1.0.2" - -string.prototype.trimend@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" - integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.2" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -string.prototype.trimstart@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" - integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -9817,13 +7670,6 @@ strip-ansi@^7.0.1: dependencies: ansi-regex "^6.0.1" -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g== - dependencies: - is-utf8 "^0.2.0" - strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -9851,13 +7697,13 @@ style-search@^0.1.0: resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" integrity sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg== -stylehacks@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9" - integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw== +stylehacks@^7.0.5: + version "7.0.8" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-7.0.8.tgz#cb5d00bb1779a30c4d408a7d576c016c88b36491" + integrity sha512-I3f053GBLIiS5Fg6OMFhq/c+yW+5Hc2+1fgq7gElDMMSqwlRb3tBf2ef6ucLStYRpId4q//bQO1FjcyNyy4yDQ== dependencies: - browserslist "^4.21.4" - postcss-selector-parser "^6.0.4" + browserslist "^4.28.1" + postcss-selector-parser "^7.1.1" stylelint-config-recommended@^3.0.0: version "3.0.0" @@ -9971,31 +7817,30 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -sver-compat@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/sver-compat/-/sver-compat-1.5.0.tgz#3cf87dfeb4d07b4a3f14827bc186b3fd0c645cd8" - integrity sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg== - dependencies: - es6-iterator "^2.0.1" - es6-symbol "^3.1.1" +sver@^1.8.3: + version "1.8.4" + resolved "https://registry.yarnpkg.com/sver/-/sver-1.8.4.tgz#9bd6f6265263f01aab152df935dc7a554c15673f" + integrity sha512-71o1zfzyawLfIWBOmw8brleKyvnbn73oVHNCsu51uPMz/HWiKkkXsI31JjHW5zqXEqnPYkIiHd8ZmL7FCimLEA== + optionalDependencies: + semver "^6.3.0" svg-tags@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== -svgo@^2.7.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" - integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== +svgo@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-4.0.1.tgz#c82dacd04ee9f1d55cd4e0b7f9a214c86670e3ee" + integrity sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w== dependencies: - "@trysound/sax" "0.2.0" - commander "^7.2.0" - css-select "^4.1.3" - css-tree "^1.1.3" - csso "^4.2.0" - picocolors "^1.0.0" - stable "^0.1.8" + commander "^11.1.0" + css-select "^5.1.0" + css-tree "^3.0.1" + css-what "^6.1.0" + csso "^5.0.5" + picocolors "^1.1.1" + sax "^1.5.0" table@^6.6.0: version "6.9.0" @@ -10008,11 +7853,6 @@ table@^6.6.0: string-width "^4.2.3" strip-ansi "^6.0.1" -tailwind-capitalize-first-letter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tailwind-capitalize-first-letter/-/tailwind-capitalize-first-letter-1.0.4.tgz#d7a07c1dda4a7555f2240d57154df394b0ee8db6" - integrity sha512-ZB8hBi68JI4aQ1cDUxuFWfMYTxgBvlzIdPPHSkFkMUlo7p2QlbMy0hVv/vAREAFmkUh9QfjuKQnOSbe4Gnqljg== - tailwindcss-animate@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz#318b692c4c42676cc9e67b19b78775742388bef4" @@ -10046,10 +7886,10 @@ tailwindcss@3.3.5: resolve "^1.22.2" sucrase "^3.32.0" -tapable@^2.1.1, tapable@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.2.tgz#ab4984340d30cb9989a490032f086dbb8b56d872" - integrity sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg== +tapable@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.0.tgz#7e3ea6d5ca31ba8e078b560f0d83ce9a14aa8be6" + integrity sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg== tar-fs@^2.0.0: version "2.1.3" @@ -10116,6 +7956,24 @@ tar@^7.0.1: mkdirp "^3.0.1" yallist "^5.0.0" +tar@^7.5.3: + version "7.5.11" + resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.11.tgz#1250fae45d98806b36d703b30973fa8e0a6d8868" + integrity sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ== + dependencies: + "@isaacs/fs-minipass" "^4.0.0" + chownr "^3.0.0" + minipass "^7.1.2" + minizlib "^3.1.0" + yallist "^5.0.0" + +teex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/teex/-/teex-1.0.1.tgz#b8fa7245ef8e8effa8078281946c85ab780a0b12" + integrity sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg== + dependencies: + streamx "^2.12.5" + temp-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" @@ -10132,15 +7990,14 @@ tempy@^1.0.1: type-fest "^0.16.0" unique-string "^2.0.0" -terser-webpack-plugin@^5.3.11: - version "5.3.14" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz#9031d48e57ab27567f02ace85c7d690db66c3e06" - integrity sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw== +terser-webpack-plugin@^5.3.17: + version "5.4.0" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz#95fc4cf4437e587be11ecf37d08636089174d76b" + integrity sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g== dependencies: "@jridgewell/trace-mapping" "^0.3.25" jest-worker "^27.4.5" schema-utils "^4.3.0" - serialize-javascript "^6.0.2" terser "^5.31.1" terser@^5.31.1: @@ -10196,26 +8053,7 @@ thenify-all@^1.0.0: dependencies: any-promise "^1.0.0" -threads@1.6.5: - version "1.6.5" - resolved "https://registry.yarnpkg.com/threads/-/threads-1.6.5.tgz#5cee7f139e3e147c5a64f0134844ee92469932a5" - integrity sha512-yL1NN4qZ25crW8wDoGn7TqbENJ69w3zCEjIGXpbqmQ4I+QHrG8+DLaZVKoX74OQUXWCI2lbbrUxDxAbr1xjDGQ== - dependencies: - callsites "^3.1.0" - debug "^4.2.0" - is-observable "^2.1.0" - observable-fns "^0.6.1" - optionalDependencies: - tiny-worker ">= 2" - -through2-filter@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.1.0.tgz#4a1b45d2b76b3ac93ec137951e372c268efc1a4e" - integrity sha512-VhZsTsfrIJjyUi6GeecnwcOJlmoqgIdGFDjqnV5ape+F1DN8GejfPO66XyIhoinxmxGImiUTrq9RwpTN5yszGA== - dependencies: - through2 "^4.0.2" - -through2@^2.0.0, through2@^2.0.3: +through2@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -10235,11 +8073,6 @@ through@2, "through@>=2.2.7 <3": resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -time-stamp@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" - integrity sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw== - timers-browserify@^2.0.4: version "2.0.12" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" @@ -10252,33 +8085,19 @@ tiny-typed-emitter@^2.0.3: resolved "https://registry.yarnpkg.com/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz#b3b027fdd389ff81a152c8e847ee2f5be9fad7b5" integrity sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA== -"tiny-worker@>= 2": - version "2.3.0" - resolved "https://registry.yarnpkg.com/tiny-worker/-/tiny-worker-2.3.0.tgz#715ae34304c757a9af573ae9a8e3967177e6011e" - integrity sha512-pJ70wq5EAqTAEl9IkGzA+fN0836rycEuz2Cn6yeZ6FRzlVS5IDOkFHpIoEsksPRQV34GDqXm65+OlnZqUSyK2g== +tinyglobby@^0.2.12: + version "0.2.15" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" + integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== dependencies: - esm "^3.2.25" - -tippy.js@^6.3.1: - version "6.3.7" - resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-6.3.7.tgz#8ccfb651d642010ed9a32ff29b0e9e19c5b8c61c" - integrity sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ== - dependencies: - "@popperjs/core" "^2.9.0" + fdir "^6.5.0" + picomatch "^4.0.3" tmp@^0.2.1: version "0.2.3" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== -to-absolute-glob@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" - integrity sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA== - dependencies: - is-absolute "^1.0.0" - is-negated-glob "^1.0.0" - to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" @@ -10293,21 +8112,6 @@ to-buffer@^1.2.0: safe-buffer "^5.2.1" typed-array-buffer "^1.0.3" -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -10315,27 +8119,12 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== +to-through@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/to-through/-/to-through-3.0.0.tgz#bf4956eaca5a0476474850a53672bed6906ace54" + integrity sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw== dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -to-through@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-through/-/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6" - integrity sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q== - dependencies: - through2 "^2.0.3" - -toidentifier@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + streamx "^2.12.5" tr46@~0.0.3: version "0.0.3" @@ -10393,11 +8182,6 @@ tslib@2.6.2: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== -tslib@^1.9.3: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - tslib@^2.0.0, tslib@^2.0.1, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.6.2, tslib@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" @@ -10440,19 +8224,6 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -type@^2.7.2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/type/-/type-2.7.3.tgz#436981652129285cc3ba94f392886c2637ea0486" - integrity sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ== - typed-array-buffer@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" @@ -10462,42 +8233,6 @@ typed-array-buffer@^1.0.3: es-errors "^1.3.0" is-typed-array "^1.1.14" -typed-array-byte-length@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" - integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== - dependencies: - call-bind "^1.0.8" - for-each "^0.3.3" - gopd "^1.2.0" - has-proto "^1.2.0" - is-typed-array "^1.1.14" - -typed-array-byte-offset@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" - integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.8" - for-each "^0.3.3" - gopd "^1.2.0" - has-proto "^1.2.0" - is-typed-array "^1.1.15" - reflect.getprototypeof "^1.0.9" - -typed-array-length@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" - integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== - dependencies: - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - is-typed-array "^1.1.13" - possible-typed-array-names "^1.0.0" - reflect.getprototypeof "^1.0.6" - typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -10505,72 +8240,41 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== - -typescript@^4.4.3: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - -ua-parser-js@^0.7.30: - version "0.7.41" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.41.tgz#9f6dee58c389e8afababa62a4a2dc22edb69a452" - integrity sha512-O3oYyCMPYgNNHuO7Jjk3uacJWZF8loBgwrfd/5LE/HyZ3lUIOdniQ7DNXJcIgZbwioZxk0fLfI4EVnetdiX5jg== +typescript@^5.9.3: + version "5.9.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" + integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== uglify-js@^3.1.4: version "3.19.3" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== -unbox-primitive@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" - integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== - dependencies: - call-bound "^1.0.3" - has-bigints "^1.0.2" - has-symbols "^1.1.0" - which-boxed-primitive "^1.1.1" - unc-path-regex@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" integrity sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg== -undertaker-registry@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/undertaker-registry/-/undertaker-registry-1.0.1.tgz#5e4bda308e4a8a2ae584f9b9a4359a499825cc50" - integrity sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw== +undertaker-registry@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/undertaker-registry/-/undertaker-registry-2.0.0.tgz#d434246e398444740dd7fe4c9543e402ad99e4ca" + integrity sha512-+hhVICbnp+rlzZMgxXenpvTxpuvA67Bfgtt+O9WOE5jo7w/dyiF1VmoZVIHvP2EkUjsyKyTwYKlLhA+j47m1Ew== -undertaker@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/undertaker/-/undertaker-1.3.0.tgz#363a6e541f27954d5791d6fa3c1d321666f86d18" - integrity sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg== +undertaker@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/undertaker/-/undertaker-2.0.0.tgz#fe4d40dc71823ce5a80f1ecc63ec8b88ad40b54a" + integrity sha512-tO/bf30wBbTsJ7go80j0RzA2rcwX6o7XPBpeFcb+jzoeb4pfMM2zUeSDIkY1AWqeZabWxaQZ/h8N9t35QKDLPQ== dependencies: - arr-flatten "^1.0.1" - arr-map "^2.0.0" - bach "^1.0.0" - collection-map "^1.0.0" - es6-weak-map "^2.0.1" - fast-levenshtein "^1.0.0" - last-run "^1.1.0" - object.defaults "^1.0.0" - object.reduce "^1.0.0" - undertaker-registry "^1.0.0" + bach "^2.0.1" + fast-levenshtein "^3.0.0" + last-run "^2.0.0" + undertaker-registry "^2.0.0" undici-types@~7.10.0: version "7.10.0" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.10.0.tgz#4ac2e058ce56b462b056e629cc6a02393d3ff350" integrity sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag== -undici-types@~7.18.0: - version "7.18.2" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.18.2.tgz#29357a89e7b7ca4aef3bf0fd3fd0cd73884229e9" - integrity sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w== - unified@^9.1.0: version "9.2.2" resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" @@ -10583,24 +8287,6 @@ unified@^9.1.0: trough "^1.0.0" vfile "^4.0.0" -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -unique-stream@^2.0.2: - version "2.3.1" - resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" - integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A== - dependencies: - json-stable-stringify-without-jsonify "^1.0.1" - through2-filter "^3.0.0" - unique-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" @@ -10637,43 +8323,20 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== - dependencies: - 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== -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - -update-browserslist-db@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" - integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== +update-browserslist-db@^1.2.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz#64d76db58713136acbeb4c49114366cc6cc2e80d" + integrity sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w== dependencies: escalade "^3.2.0" picocolors "^1.1.1" -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== - -url@^0.11.0: +url@^0.11.0, url@^0.11.4: version "0.11.4" resolved "https://registry.yarnpkg.com/url/-/url-0.11.4.tgz#adca77b3562d56b72746e76b330b7f27b6721f3c" integrity sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg== @@ -10681,7 +8344,7 @@ url@^0.11.0: punycode "^1.4.1" qs "^6.12.3" -use-composed-ref@^1.0.0: +use-composed-ref@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.4.0.tgz#09e023bf798d005286ad85cd20674bdf5770653b" integrity sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w== @@ -10691,18 +8354,13 @@ use-isomorphic-layout-effect@^1.1.1: resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.1.tgz#2f11a525628f56424521c748feabc2ffcc962fce" integrity sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA== -use-latest@^1.0.0: +use-latest@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.3.0.tgz#549b9b0d4c1761862072f0899c6f096eb379137a" integrity sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ== dependencies: use-isomorphic-layout-effect "^1.1.1" -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - utf8-byte-length@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz#f9f63910d15536ee2b2d5dd4665389715eac5c1e" @@ -10738,11 +8396,6 @@ util@^0.12.5: is-typed-array "^1.1.3" which-typed-array "^1.1.2" -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - utrie@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/utrie/-/utrie-1.0.2.tgz#d42fe44de9bc0119c25de7f564a6ed1b2c87a645" @@ -10765,12 +8418,10 @@ v8-compile-cache@^2.3.0: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz#cdada8bec61e15865f05d097c5f4fd30e94dc128" integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== -v8flags@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656" - integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg== - dependencies: - homedir-polyfill "^1.0.1" +v8flags@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-4.0.1.tgz#98fe6c4308317c5f394d85a435eb192490f7e132" + integrity sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg== validate-npm-package-license@^3.0.1: version "3.0.4" @@ -10780,15 +8431,10 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -value-or-function@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" - integrity sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg== - -vary@^1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== +value-or-function@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-4.0.0.tgz#70836b6a876a010dc3a2b884e7902e9db064378d" + integrity sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg== vfile-message@^2.0.0: version "2.0.4" @@ -10808,41 +8454,45 @@ vfile@^4.0.0: unist-util-stringify-position "^2.0.0" vfile-message "^2.0.0" -vinyl-fs@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" - integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng== +vinyl-contents@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/vinyl-contents/-/vinyl-contents-2.0.0.tgz#cc2ba4db3a36658d069249e9e36d9e2b41935d89" + integrity sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q== dependencies: - fs-mkdirp-stream "^1.0.0" - glob-stream "^6.1.0" - graceful-fs "^4.0.0" - is-valid-glob "^1.0.0" - lazystream "^1.0.0" - lead "^1.0.0" - object.assign "^4.0.4" - pumpify "^1.3.5" - readable-stream "^2.3.3" - remove-bom-buffer "^3.0.0" - remove-bom-stream "^1.2.0" - resolve-options "^1.1.0" - through2 "^2.0.0" - to-through "^2.0.0" - value-or-function "^3.0.0" - vinyl "^2.0.0" - vinyl-sourcemap "^1.1.0" + bl "^5.0.0" + vinyl "^3.0.0" -vinyl-sourcemap@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16" - integrity sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA== +vinyl-fs@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-4.0.2.tgz#d46557653e4a7109f29d626a9cf478680c7f8c70" + integrity sha512-XRFwBLLTl8lRAOYiBqxY279wY46tVxLaRhSwo3GzKEuLz1giffsOquWWboD/haGf5lx+JyTigCFfe7DWHoARIA== dependencies: - append-buffer "^1.0.2" - convert-source-map "^1.5.0" - graceful-fs "^4.1.6" - normalize-path "^2.1.1" - now-and-later "^2.0.0" - remove-bom-buffer "^3.0.0" - vinyl "^2.0.0" + fs-mkdirp-stream "^2.0.1" + glob-stream "^8.0.3" + graceful-fs "^4.2.11" + iconv-lite "^0.6.3" + is-valid-glob "^1.0.0" + lead "^4.0.0" + normalize-path "3.0.0" + resolve-options "^2.0.0" + stream-composer "^1.0.2" + streamx "^2.14.0" + to-through "^3.0.0" + value-or-function "^4.0.0" + vinyl "^3.0.1" + vinyl-sourcemap "^2.0.0" + +vinyl-sourcemap@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/vinyl-sourcemap/-/vinyl-sourcemap-2.0.0.tgz#422f410a0ea97cb54cebd698d56a06d7a22e0277" + integrity sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q== + dependencies: + convert-source-map "^2.0.0" + graceful-fs "^4.2.10" + now-and-later "^3.0.0" + streamx "^2.12.5" + vinyl "^3.0.0" + vinyl-contents "^2.0.0" vinyl-sourcemaps-apply@^0.2.1: version "0.2.1" @@ -10851,32 +8501,25 @@ vinyl-sourcemaps-apply@^0.2.1: dependencies: source-map "^0.5.1" -vinyl@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.1.tgz#23cfb8bbab5ece3803aa2c0a1eb28af7cbba1974" - integrity sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw== +vinyl@^3.0.0, vinyl@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-3.0.1.tgz#5f5ff85255bda2b5da25e4b3bd80b3fc077fb5a9" + integrity sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA== dependencies: - clone "^2.1.1" - clone-buffer "^1.0.0" - clone-stats "^1.0.0" - cloneable-readable "^1.0.0" - remove-trailing-separator "^1.0.1" - replace-ext "^1.0.0" + clone "^2.1.2" + remove-trailing-separator "^1.1.0" + replace-ext "^2.0.0" + teex "^1.0.1" vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== -void-elements@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" - integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== - -watchpack@^2.4.1: - version "2.4.4" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.4.tgz#473bda72f0850453da6425081ea46fc0d7602947" - integrity sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA== +watchpack@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.5.1.tgz#dd38b601f669e0cbf567cb802e75cead82cde102" + integrity sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" @@ -10886,18 +8529,14 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -webpack-cli@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-6.0.1.tgz#a1ce25da5ba077151afd73adfa12e208e5089207" - integrity sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw== +webpack-cli@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-7.0.2.tgz#c916e324acc7c14f895226ed351020924900db12" + integrity sha512-dB0R4T+C/8YuvM+fabdvil6QE44/ChDXikV5lOOkrUeCkW5hTJv2pGLE3keh+D5hjYw8icBaJkZzpFoaHV4T+g== dependencies: - "@discoveryjs/json-ext" "^0.6.1" - "@webpack-cli/configtest" "^3.0.1" - "@webpack-cli/info" "^3.0.1" - "@webpack-cli/serve" "^3.0.1" - colorette "^2.0.14" - commander "^12.1.0" - cross-spawn "^7.0.3" + "@discoveryjs/json-ext" "^1.0.0" + commander "^14.0.3" + cross-spawn "^7.0.6" envinfo "^7.14.0" fastest-levenshtein "^1.0.12" import-local "^3.0.2" @@ -10914,15 +8553,15 @@ webpack-merge@^6.0.1: flat "^5.0.2" wildcard "^2.0.1" -webpack-sources@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.3.tgz#d4bf7f9909675d7a070ff14d0ef2a4f3c982c723" - integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg== +webpack-sources@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.4.tgz#a338b95eb484ecc75fbb196cbe8a2890618b4891" + integrity sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q== -webpack@^5.98.0: - version "5.101.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.101.0.tgz#4b81407ffad9857f81ff03f872e3369b9198cc9d" - integrity sha512-B4t+nJqytPeuZlHuIKTbalhljIFXeNRqrUGAQgTGlfOl2lXXKXw+yZu6bicycP+PUlM44CxBjCFD6aciKFT3LQ== +webpack@^5.105.4: + version "5.105.4" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.105.4.tgz#1b77fcd55a985ac7ca9de80a746caffa38220169" + integrity sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw== dependencies: "@types/eslint-scope" "^3.7.7" "@types/estree" "^1.0.8" @@ -10930,25 +8569,25 @@ webpack@^5.98.0: "@webassemblyjs/ast" "^1.14.1" "@webassemblyjs/wasm-edit" "^1.14.1" "@webassemblyjs/wasm-parser" "^1.14.1" - acorn "^8.15.0" + acorn "^8.16.0" acorn-import-phases "^1.0.3" - browserslist "^4.24.0" + browserslist "^4.28.1" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.17.2" - es-module-lexer "^1.2.1" + enhanced-resolve "^5.20.0" + es-module-lexer "^2.0.0" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" graceful-fs "^4.2.11" json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" + loader-runner "^4.3.1" mime-types "^2.1.27" neo-async "^2.6.2" - schema-utils "^4.3.2" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.11" - watchpack "^2.4.1" - webpack-sources "^3.3.3" + schema-utils "^4.3.3" + tapable "^2.3.0" + terser-webpack-plugin "^5.3.17" + watchpack "^2.5.1" + webpack-sources "^3.3.4" whatwg-url@^5.0.0: version "5.0.0" @@ -10958,51 +8597,6 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" - integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== - dependencies: - is-bigint "^1.1.0" - is-boolean-object "^1.2.1" - is-number-object "^1.1.1" - is-string "^1.1.1" - is-symbol "^1.1.1" - -which-builtin-type@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" - integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== - dependencies: - call-bound "^1.0.2" - function.prototype.name "^1.1.6" - has-tostringtag "^1.0.2" - is-async-function "^2.0.0" - is-date-object "^1.1.0" - is-finalizationregistry "^1.1.0" - is-generator-function "^1.0.10" - is-regex "^1.2.1" - is-weakref "^1.0.2" - isarray "^2.0.5" - which-boxed-primitive "^1.1.0" - which-collection "^1.0.2" - which-typed-array "^1.1.16" - -which-collection@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" - integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== - dependencies: - is-map "^2.0.3" - is-set "^2.0.3" - is-weakmap "^2.0.2" - is-weakset "^2.0.3" - -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - integrity sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ== - which-module@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" @@ -11021,20 +8615,7 @@ which-typed-array@^1.1.16, which-typed-array@^1.1.2: gopd "^1.2.0" has-tostringtag "^1.0.2" -which-typed-array@^1.1.19: - version "1.1.20" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.20.tgz#3fdb7adfafe0ea69157b1509f3a1cd892bd1d122" - integrity sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.8" - call-bound "^1.0.4" - for-each "^0.3.5" - get-proto "^1.0.1" - gopd "^1.2.0" - has-tostringtag "^1.0.2" - -which@^1.2.1, which@^1.2.14, which@^1.2.9, which@^1.3.1: +which@^1.2.14, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -11048,6 +8629,13 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +which@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/which/-/which-5.0.0.tgz#d93f2d93f79834d4363c7d0c23e00d07c466c8d6" + integrity sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ== + dependencies: + isexe "^3.1.1" + wide-align@^1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" @@ -11134,11 +8722,6 @@ ws@^8.19.0: resolved "https://registry.yarnpkg.com/ws/-/ws-8.19.0.tgz#ddc2bdfa5b9ad860204f5a72a4863a8895fd8c8b" integrity sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg== -ws@~8.18.3: - version "8.18.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" - integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== - xcode@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/xcode/-/xcode-3.0.1.tgz#3efb62aac641ab2c702458f9a0302696146aa53c" @@ -11195,11 +8778,6 @@ xtend@^4.0.0, xtend@~4.0.1: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -y18n@^3.2.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" - integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== - "y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" @@ -11225,7 +8803,7 @@ yallist@^5.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533" integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== -yaml@^1.10.0, yaml@^1.10.2: +yaml@^1.10.0: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== @@ -11235,11 +8813,6 @@ yaml@^2.3.4, yaml@^2.4.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.0.tgz#15f8c9866211bdc2d3781a0890e44d4fa1a5fff6" integrity sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ== -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - yargs-parser@>=5.0.0-security.0: version "22.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-22.0.0.tgz#87b82094051b0567717346ecd00fd14804b357c8" @@ -11271,14 +8844,6 @@ yargs-parser@^21.1.1: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs-parser@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.1.tgz#7ede329c1d8cdbbe209bd25cdb990e9b1ebbb394" - integrity sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA== - dependencies: - camelcase "^3.0.0" - object.assign "^4.1.0" - yargs@17.7.2, yargs@^17.0.0, yargs@^17.2.1: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" @@ -11327,7 +8892,7 @@ yargs@^15.3.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^16.1.1, yargs@^16.2.0: +yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== @@ -11340,25 +8905,6 @@ yargs@^16.1.1, yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^7.1.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.2.tgz#63a0a5d42143879fdbb30370741374e0641d55db" - integrity sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA== - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^5.0.1" - yauzl@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"