diff --git a/POD-STORAGE-QUOTA.md b/POD-STORAGE-QUOTA.md new file mode 100644 index 0000000..4498fc7 --- /dev/null +++ b/POD-STORAGE-QUOTA.md @@ -0,0 +1,538 @@ +# Pod Storage Quota — Performance Analysis & Design (2026-08-11) + +Pivot runs on the Community Solid Server (CSS) file backend with a per-pod quota +(`css:config/storage/backend/pod-quota-file.json`, enabled from `config/prod.json`). + +**Problem:** the quota is enforced by recursively walking the whole pod tree on +every write. With tens of thousands of files (e.g. a large inbox) this becomes +extremely slow and, under concurrent writes, fills memory and takes the server +down. Disabling the quota (config-only) removes the cost but loses the feature. + +--- + +## 1. How quota works today (CSS v7.x) + +Three moving parts: + +### 1.1 `QuotaValidator` (`dist/storage/validators/QuotaValidator.js`) +Runs on every write/PATCH pipeline and: +1. `getAvailableSpace()` **before** the write → full pod walk. +2. `createQuotaGuard()` — a streaming guard wrapped around the write body. +3. `getAvailableSpace()` **again** after the write (`afterWrite` flush). + +### 1.2 `QuotaStrategy.createQuotaGuard()` — the real killer +```js +async transform(chunk, enc, done) { + total += await reporter.calculateChunkSize(chunk); + const availableSpace = await that.getAvailableSpace(identifier); // ← FULL POD WALK, PER CHUNK + ... +} +``` +`getAvailableSpace()` → `getTotalSpaceUsed()` → `reporter.getSize(podRoot)` → +full recursive `FileSizeReporter.getTotalSize()` walk. So a single multi-chunk +upload walks the **entire pod once per stream chunk**. This is `chunks × O(N)`. + +### 1.3 `FileSizeReporter.getTotalSize()` (`dist/storage/size-reporter/FileSizeReporter.js`) +```js +if (stat.isFile()) return stat.size; +const childFiles = await fs.readdir(fileLocation); // one big dirent array +let totalSize = stat.size; +for (const current of childFiles) { + // skip ignoreFolders (e.g. /.internal/) + totalSize += await this.getTotalSize(childFileLocation); // recursion +} +``` +Sequential `stat` + `readdir` per entry — O(N) syscalls per walk, one large +dirent array per directory in the Node heap. + +### Cost profile +| | Per write | +|---|---| +| Pre-check | 1 full walk | +| Streaming guard | 1 full walk **per chunk** | +| Post-check | 1 full walk | + +Concurrent writes multiply the walks → memory exhaustion (dirent arrays + stat +results + in-flight async walks pile up in the Node heap). + +--- + +## 2. Backend impact (memory / database) + +CSS has **only one size reporter: `FileSizeReporter`** (filesystem-specific). +There is no memory or database reporter. + +| Backend | Quota wired? | Notes | +|---|---|---| +| **File** (`file.json`, `pod-quota-file.json`) | ✅ | The O(N)-per-write problem above. | +| **Memory** (`memory.json`, `MemoryDataAccessor`) | ❌ none | No quota at all. 10k-file inbox lives in RAM (inherent to backend). If quota wanted, size calc is trivial (sum contentLength in-memory) and an incremental counter needs no persistence. | +| **Database** (`sparql.json`) | ❌ none | No quota. "Size" is ambiguous (bytes vs quads); counter would be a table + delta queries. | + +The recursive-walk problem is specific to the **file backend** (what pivot uses). +Design C targets the file backend first, keeping the reporter/counter pluggable. + +--- + +## 3. Fix directions + +### A. Stop the per-chunk full walk (mandatory, lowest risk) +Compute `availableSpace` **once** before the stream; during streaming only track +the current write's byte delta and compare: + +```js +availableSpace = await strategy.getAvailableSpace(identifier); // once +transform(chunk) { + total += chunk.length; + if (availableSpace.amount < total) throw Quota exceeded; + push(chunk); +} +``` +Correct: `getAvailableSpace` already subtracts the overwritten resource's size, +and nothing else about the pod changes mid-write. Atomic writes go to +`/.internal/` (ignored by the walk) anyway. +Cost: `chunks × O(N)` → **~2 × O(N) per write** (pre + post). Kills the memory +blowup from concurrent chunk-streams. + +### B. Cache / memoize the pod size +Wrap `getSize(pod)` with a per-pod cache: +- **TTL variant:** cache `{ size, expiresAt }` (e.g. 1–5 s); one walk per expiry. +- **Invalidation variant:** drop the pod's cache entry when a write completes. +Combined with A, roughly **1 walk per pod per TTL window / per invalidation**. +Caveat: TTL window staleness (concurrent writes may exceed the limit undetected +within the window; CSS already documents tolerance of races). + +### C. Incremental per-pod counter (durable end-state) +Per-write O(1); one full walk only for bootstrap/recovery. See §4. + +--- + +## 4. Design C — incremental per-pod byte counter + +### 4.1 Counter store +- **In-memory:** `Map` — O(1) reads. +- **Persistence:** per-pod sidecar, e.g. `/.internal/pivot-quota.json` + (`.internal/` is already ignored by size accounting). Written **atomically** + (write temp + rename) on each write → crash-safe. + +### 4.2 Recount (bootstrap / recovery) +- First access to a pod with no valid counter → **one** full walk to seed it. +- Startup: load sidecar if present (no walk); else lazy recount on first access. +- Crash between write and persist: mark dirty / recount on next access. + +### 4.3 Delta hooks +A pivot store wrapper (like the existing `RdfPatchingStore`) around the backend: +- **Before:** `oldSize = accessor.getSize(identifier)` (O(1) single `stat`). +- Perform write/delete. +- **After:** `newSize = accessor.getSize(identifier)`. +- `Δ = newSize − oldSize` → `counter[pod] += Δ`. + +Cases: +- Create: `Δ = file size`. Overwrite: `Δ = new − old` (can be negative). +- Delete: `Δ = −oldSize`. Auxiliary writes (`.acl`/`.meta`): included (matches today). +- Atomic temp files: no special handling (rename exposes only the final file). + +### 4.4 Read path +`getSize(pod)` → `counter[pod].total` if valid, else recount. Plugs into the +**existing** `PodQuotaStrategy`/`QuotaValidator` unchanged — only +`urn:solid-server:default:SizeReporter` is replaced (plus the delta store +wrapper). No validator/strategy changes. + +### 4.5 Concurrency +- Per-pod mutex serializes `counter += Δ`. +- Sidecar atomic rename per write (cheap). Optional mode: persist periodically + + always recount on startup (simpler, costs a startup walk per pod). + +### 4.6 Edge cases / staleness +- Out-of-band file changes → stale counter. Mitigations: on-demand recount + endpoint, or periodic background recount. Documented limitation. +- Pod deletion → remove counter entry. + +### 4.7 Config wiring (pivot) +- New pivot components: `IncrementalSizeReporter` (counter + recount) and a + quota-delta store wrapper. +- Override `urn:solid-server:default:SizeReporter` and insert the wrapper in the + store chain via `pivot:config/storage/backend/...`, keeping + `pod-quota-file.json`'s validator/strategy. No CSS fork. + +### 4.8 Staleness detection & recovery (added 2026-08-15) + +The counter is **only an optimization — the filesystem is the source of +truth**, and `du` is a cheap way to re-derive truth. So a de-synchronized +counter is never permanent or catastrophic: it self-heals on next access. + +**Causes of de-sync** + +| Cause | How it happens | +|---|---| +| Out-of-band changes | Files added/removed directly on disk (admin, scripts, restore, sync tool) — bypasses the delta hook | +| Crash between write & persist | Data write lands, but the process dies before the sidecar rename — counter short by that one delta | +| Migration/bootstrap | Pods created before the feature → no sidecar (handled lazily at first access) | +| Auxiliary writes bypassing the hook | A code path (`.acl`/`.meta`, temp files, future store change) that forgets to report its delta | +| Manual tampering | Sidecar edited/deleted/restored from a backup without the pod | + +**Detection — cheap validity checks on read** (no walk required): + +1. `valid` flag / generation marker — sidecar records `{ total, valid, + version }`. Any path that can't guarantee a delta flips `valid: false`. +2. **Pod-root mtime comparison** — sidecar stores the pod root's + `lastRecordedMtime`; on read, one `stat` of the pod root — if newer than + `lastRecordedMtime`, the counter may be behind → invalidate → recount. + Catches out-of-band writes for the cost of a single `stat`. +3. **Sanity bound** — if `total` is wildly inconsistent with expectation + (e.g. 0 but the pod has files), treat as dirty. + +**Recovery — reuse the lazy path**: invalidation just means "delete/flag the +sidecar"; the existing lazy-bootstrap path does the rest — next access to +that pod runs one `du` and re-seeds. + +- On suspicion (mtime/flag/`valid:false`) → mark dirty → recount on next + access. One `du`, non-blocking. +- Crash window — atomic rename keeps the sidecar internally consistent (old + or new, never torn); add `fsync` before the rename completes the response, + shrinking the window. If a crash still lands in it, the pod-root mtime + check catches it on next access. +- Admin/on-demand recount — small CLI/HTTP/admin hook to force recount of one + pod or all pods (delete sidecars → next accesses recount, or an explicit + sweep). +- Optional background reconciliation — low-priority idle job walks pods with + `du` every few hours to bound drift over time. Never at startup, never + blocking writes. + +**Bottom line:** de-sync is detected cheaply (mtime/valid flag, one `stat`) +and fixed cheaply (`du` recount on next access). Worst persistent state is +"counter slightly behind until next access of that pod", which then +self-heals. + +--- + +## 5. Using `du` as the fast walk / recount primitive + +Instead of the Node recursive walk, shell out to GNU `du` — C-level `fts` +traversal: + +- **Speed:** 10–100× faster than the per-entry Node `stat`/`readdir` loop. +- **Memory:** the walk runs in a child process — dirent arrays / stat buffers + never touch the Node heap (directly fixes the memory blowup). +- **Unit:** `du -sb` = apparent bytes (sum of `st_size`) — identical semantics + to today's `FileSizeReporter` and the **chosen unit (2026-08-15)**: portable + across servers/filesystems and user-manageable. `du -s --block-size=1` = + disk usage — **rejected**: the result is server/filesystem-dependent + (cluster size, compression, COW), not user-manageable, and Solid pods are + small-file-heavy so cluster rounding would dominate. + +### Critical caveat +**Never call `du` per stream chunk** — spawning a process per chunk is a spawn +storm. `du` must be combined with fix **A** (walk only at pre/post check) and +ideally with **B**/**C** (walk only on recount). In design C, `du` is the +recount/seed engine only; steady-state writes are O(1) with zero spawns. + +### Practical concerns +| Concern | Handling | +|---|---| +| `ignoreFolders` (`.internal/`) | GNU `du --exclude=PATTERN` (or `--exclude-from`) — must match current behavior. | +| Path safety | `execFile('du', ['-sb', '--exclude', ..., podPath])` — never shell interpolation; CSS already containment-checks mapped paths. | +| Portability | `du` is coreutils/BSD — fine on Linux/WSL test servers, **not native on Windows**. Fall back to the Node walk when `du` is unavailable. | +| Symlinks/hardlinks | `du` doesn't follow symlinks by default (FileSizeReporter's `stat` does). Minor edge case — document. | +| Concurrency | With A+B/C, `du` spawns are rare → no process storm. | + +### Recommendation +- **Short/medium term:** `du` as the walk engine behind `getTotalSize`, **plus** + fix A (no per-chunk walk), **plus** a small TTL cache (B) → ~1 `du` spawn per + write. Small change, keeps the architecture, kills time + memory problems. +- **Long term:** same `du` as the recount engine inside **C** — incremental + counter, deltas per write, `du -sb` only to seed/repair. O(1) writes with + native-speed recovery. + +### Platform / flags + +**Performance: apparent-size vs disk-blocks — no meaningful difference.** +Both variants traverse the identical tree (same `readdir`/`stat` syscalls); +apparent size sums `st_size`, disk usage sums `st_blocks` (already in the +`stat` result). No extra syscalls either way → pick the unit purely on quota +semantics, not performance. + +`du` availability: + +| Platform | `du` | Flags | +|---|---|---| +| **Linux** (incl. WSL) | ✅ GNU coreutils | `-sb` (apparent bytes), `--block-size=1` / `-B 1` (disk bytes), `--exclude=PATTERN` | +| **macOS** | ✅ BSD `du` (always present) | **No GNU long options.** Apparent size: `-A`; bytes: `-B 1`; exclude: `-I pattern`; default block unit 512 B. So `du -s -A -B 1` ≈ GNU `du -sb`, `du -s -B 1` ≈ GNU `du -s --block-size=1` | +| **Windows** | ❌ **no native `du`** | None in cmd/PowerShell. Sysinternals `du.exe` (different CLI, not GNU-compatible), or GNU `du` via Git Bash / MSYS2 / Cygwin / WSL. PowerShell `Get-ChildItem -Recurse \| Measure-Object Length -Sum` is the slow JS-style walk | + +**Implementation note:** GNU-first, with probe & fallback: +1. Detect GNU vs BSD (`du --version` succeeds on GNU, fails on BSD → use + `-A`/`-B 1`/`-I`). +2. Fall back to the existing Node recursive walk when no compatible `du` is + found (e.g. bare Windows) — correct, just slower. + +### Unit consistency: apparent bytes everywhere (decided 2026-08-15) + +The chosen unit is **apparent bytes** (sum of `st_size` — same as today's +`FileSizeReporter`). This makes the unit fully portable: the same content +measures the same on any server/filesystem, and users can reason about it +("I used 500 MB of 1 GB"). Disk blocks (`st_blocks`) were considered and +rejected because the result is server-dependent (cluster size, compression, +COW) and small-file-heavy Solid pods would be dominated by cluster rounding. + +With apparent bytes there is **no platform inconsistency**: + +| Path | Unit | How | +|---|---|---| +| `du` (Linux/macOS) | apparent bytes | `du -sb` / BSD `du -s -A -B 1` | +| Node walk (Windows fallback) | apparent bytes | sum `stat.size` | + +Both paths sum `st_size` — identical quantity everywhere. (Verified: Node +`fs.stat` also exposes `blocks` on Windows, e.g. a 1000-byte file → +`blocks*512: 4096`, but we deliberately do NOT use it — that would introduce +server-dependent cluster rounding.) + +Edge cases: +- Sparse files: apparent bytes counts them at their logical size (matches + today; a disk-space quota would count less). +- Symlinks: `stat` follows symlinks (matches today's `FileSizeReporter`); + `du` doesn't by default — already noted as a minor edge case. + +--- + +## 6. Decision points before implementing + +### Decisions (2026-08-15) +1. **Unit: apparent bytes** (`du -sb` / sum of `st_size`) — portable across + servers/filesystems and **user-manageable**; identical semantics to + today's `FileSizeReporter`, so the existing 70 MB limit in + `customise-me.json` keeps its meaning. Disk blocks considered and + rejected (server/filesystem-dependent result; small-file-heavy pods). +2. **Persistence mode: persist-per-write** (atomic sidecar + `/.internal/pivot-quota.json`, exact across restarts). **Restart does + NOT trigger a bulk recount of all pods** — counters are loaded from disk; + the only full walks are lazy per-pod (first access of a pre-existing pod / + crash-dirty pod / de-synced pod — i.e. effectively *at login* for that + pod, never a startup sweep). +3. **Scope: A+B first** (quick win: no per-chunk walk + du-based walk with + TTL cache), then build C on top later. +4. **Staleness/recovery:** mtime/valid-flag check on read + lazy recount + + optional background reconciliation (see §4.8). + +### Remaining to verify before implementing +- Where before/after sizes are cleanest in the `AtomicFileDataAccessor` / + store stack (determines how much of C is new plumbing vs reusing existing + hooks). +- Exact `du` platform handling (GNU `--block-size=1` / BSD `-B 1 -s`, probe + & fallback to the Node walk; never per-chunk spawns). +- TTL window semantics with concurrent writes (CSS already tolerates race; + the `QuotaValidator` after-write flush check still catches breaches). + +--- + +## 7. Verification: benchmark + equivalence proof (2026-08-15) + +Two scripts in `scripts/` demonstrate the improvement and prove the size +calculation is unchanged. + +### 7.1 Benchmark — `scripts/benchmark-quota.js` + +Measures exactly what A+B optimizes: the pod walk and the per-write quota +guard. Run `node scripts/benchmark-quota.js [fileCount] [fileBytes]`. + +Results on a pod with **5 000 files × 1 KB** (body write = 4 MB in 64 KB +chunks): + +| Measure | Old (FileSizeReporter + QuotaStrategy) | New (DuSizeReporter + FastQuotaStrategy) | +|---|---|---| +| Full pod walk (`getSize`) | 669.6 ms | 657.8 ms first call; **0.13 ms cached** | +| Per-write quota guard | **36 279 ms** (≈36 s; full walk **per chunk**) | **3.3 ms** (walk once + cache) | +| Guard speedup | — | **~11 000×** | + +Notes: +- On bare Windows both paths use the Node walk (no `du`), so the walk line + shows ~1×; on Linux/WSL the `du` walk is 10–100× faster than the Node walk. +- The 36 s guard is the exact production bug: a single 4 MB upload into a + 5 000-file pod triggered 64 full pod walks. + +### 7.2 Equivalence — `scripts/verify-size-equivalence.js` + +Proves the new reporter returns **byte-for-byte identical** apparent-byte +totals to CSS's `FileSizeReporter`. Generates random pod trees (nested dirs, +random-size files, empty dirs, root-level `.internal` temp files) and asserts +equality for **both** the `du` path and the Node-walk fallback. + +Run `node scripts/verify-size-equivalence.js [iterations] [maxFiles]` +(with GNU `du` on PATH to exercise the real `du` path — e.g. Git Bash's +`C:\Program Files\Git\usr\bin` on Windows). + +Result: **12/12 random trees match exactly** on both paths. + +Findings / documented differences: +- **Node-walk fallback is mathematically identical** to `FileSizeReporter` + (same recursive `stat.size` sum) — always equivalent. +- **`du` path** sums the same `st_size` values (directory sizes included by + both) — equivalent. +- **Exclusion semantics caveat** (found by the proof): `du --exclude=.internal` + matches a `.internal` component at *any* depth, while CSS's anchored regex + `^/\.internal$` only excludes it at the *pod root*. Identical for real pods + (`.internal` is only ever created at the root — CSS temp files). A nested + `.internal` would be excluded by `du` but counted by the Node walk — a + documented, non-issue-in-practice difference. +- **Symlinks** (`du` doesn't follow by default; Node `stat` does) and + **hardlinks** (`du` counts once; Node per directory entry) differ — neither + occurs in normal Solid pod storage. + +--- + +## 8. Design C — incremental per-pod counter (implemented 2026-08-15) + +**Files:** `src/storage/quota/QuotaCounter.ts`, `src/storage/quota/IncrementalSizeReporter.ts`, +`src/storage/quota/QuotaDeltaDataAccessor.ts`, `config/storage/backend/quota-counter-file.json`, +`src/index.ts`, `config/customise-me.json`, `test/unit/storage/*`, `scripts/benchmark-quota-c.js`, +`scripts/smoke-design-c.js` + +Steady-state writes become **O(1)**: a per-pod byte counter is updated by a +delta hook and read by the quota strategy; a full `du`/Node walk happens only +once per pod (bootstrap / recovery). + +### 8.1 Components + +| Component | Role | +|---|---| +| **`QuotaCounter`** | In-memory `Map` + per-pod mutex; sidecar `/.internal/pivot-quota.json` written atomically (temp + rename) on every delta; lazy recount via an uncached `DuSizeReporter`; §4.8 mtime staleness check on read; `register / isPodRoot / getSize / add / remove / sizeOfResource / walk`. | +| **`IncrementalSizeReporter`** | `SizeReporter` replacing `urn:solid-server:default:SizeReporter`: pod root → O(1) counter read; any other resource → single `stat`. | +| **`QuotaDeltaDataAccessor`** | `PassthroughDataAccessor` wrapping the top of the accessor chain; before/after apparent size (data + `.meta` stat; containers walked) on `writeDocument` / `writeContainer` / `writeMetadata` / `deleteResource` → `counter.add(pod, Δ)`. Pod discovery mirrors `PodQuotaStrategy.searchPimStorage` (metadata walk for `pim:Storage`, cached per path); deleting the pod root drops the counter. | + +### 8.2 Config wiring (no CSS fork) + +`config/storage/backend/quota-counter-file.json` (imported by `customise-me.json`): +- `QuotaCounter` instance (fileIdentifierMapper, rootFilePath, `ignoreFolders: ["^/\\.internal$"]`) +- `Override` `urn:solid-server:default:SizeReporter` → `IncrementalSizeReporter` +- `Override` `urn:solid-server:default:FileDataAccessor` → `QuotaDeltaDataAccessor` + (wrapping the original FilterMetadata → Validating → Atomic chain, preserving + the content-length filter) +- `Override` `urn:solid-server:default:QuotaStrategy` → `FastQuotaStrategy` (70 MB) + +`QuotaValidator`, `ValidatingDataAccessor`, `AtomicFileDataAccessor` unchanged. + +### 8.3 Verification — `scripts/benchmark-quota-c.js` + +Old vs A+B vs C under identical conditions, with COLD (first write) and WARM +(steady state) separated. Same host, 5 000 files × 1 KB, 4 MB write in 64 KB +chunks: + +| Measure | old | A+B | C | +|---|---|---|---| +| walk `getSize(podRoot)` | 664.8 ms | 745.7 ms cold / 0.19 ms cached | 0.48 ms | +| write guard **cold** | 36 660 ms (64 walks) | 673.7 ms | 630.4 ms (bootstrap) | +| write guard **warm** | — (no cache) | 32.8 ms | **3.38 ms** | + +At 10 000 files (WSL1): old = **108 670 ms**, A+B warm = 49.1 ms, +**C warm = 10.6 ms** — C is the only write that stays O(1)/flat. + +Notes: +- The early A+B benchmark's "3.3 ms" was warm-cache with the Node-walk fallback + (no `du`), which is why it differed from later runs — the corrected script + separates cold/warm and uses the same pod layout for all three. +- C warm's remaining per-write cost is a few `fs.stat`s (pod-root mtime check + + overwritten-resource stat) plus identifier mapping — no walks. On WSL1 + (drvfs) each stat crosses the WSL→Windows boundary (~1 ms); on native Linux + (ext4) it is microseconds, so C warm is sub-millisecond and flat. +- The mtime staleness check (one stat per quota read, §4.8) is a deliberate + robustness tradeoff; it can be made periodic/configurable if stat latency + matters. + +### 8.4 Implementation notes / fixes found by the test run + +- `discoverPod` must return the pod root **identifier** (URL), not a filesystem + path (counter methods map identifiers). +- Tests/config must pass `ignoreFolders: ["^/\\.internal$"]` or the sidecar + inflates recounts. +- `QuotaCounter.add` records the pod-root mtime **after** persisting + (`persistWithMtime`): creating `.internal/` bumps the pod-root mtime, so + recording before would cause a spurious recount on every read. +- The delta hook registers the pod even when a write's delta is 0 (e.g. an + empty container on filesystems reporting directory size 0), so the reporter + routes pod-root reads to the counter. +- `scripts/smoke-design-c.js` verifies the compiled dist without jest: + accumulate, sidecar reload, staleness recount, remove/re-bootstrap, reporter + O(1)+stat, delta accessor create/overwrite/meta/delete == real walk, pod-root + delete drops the counter — all pass. + +--- + +## 9. Production incident: IDP lock expiry on `/.internal` (2026-08-16) + +**Symptom** (pivot-test, quota-counter config, during real logins): +``` +[WrappedExpiringReadWriteLocker] error: Lock expired after 6000ms on https://.../.internal/idp/adapter/AuthorizationCode/ +[WrappedExpiringStorage] error: Error during interval callback: Failed to remove expired entries - Lock expired after 6000ms ... +``` + +**Why `/.internal` was affected.** The IDP's `KeyValueStorage` (AuthorizationCode +store, `/.internal/idp/adapter/`) is backed by `ResourceStore` → +`ResourceStore_Backend` → `FileDataAccessor` (see CSS +`config/storage/key-value/resource-store.json`). Since `QuotaDeltaDataAccessor` +overrides `FileDataAccessor`, **every** internal write ran through the quota +chain: + +1. `QuotaDeltaDataAccessor.track()` — stat + pod-discovery walk + counter sidecar. +2. **`QuotaValidator`** (inside `ValidatingFileDataAccessor`) — calls + `getAvailableSpace` **before and after** every write + `createQuotaGuard` + mid-stream. For `/.internal/*`, `getAvailableSpace` did pod discovery + (`searchPimStorage`) + `reporter.getSize(pod)` — a **full pod walk** whenever + the pod wasn't counter-registered → pushed the IDP write past the 6 s + `WrappedExpiringReadWriteLocker` expiry. + +`ignoreFolders: ["^/\\.internal$"]` on the reporter only excludes `.internal` +from `du`/walk sizes — it does **not** stop the QuotaValidator from running. + +**Fix (three commits on `pod-quota-counter`):** +- `d8c1135` — `QuotaDeltaDataAccessor`: skip delta tracking for `/.internal` + paths (still performs the write). +- `6692db8` — `FastQuotaStrategy.getAvailableSpace` returns unlimited for + `/.internal` paths, short-circuiting the QuotaValidator's before/after checks + and the guard's available-space computation — no pod discovery/walk on + internal writes. +- `5e54d02` — **root cause of the guard never matching:** `ResourceIdentifier.path` + is the **full canonical URL** (e.g. `https://pivot-test.solidproject.org:3000/.internal/...`), + not a bare path — identifier strategies test it against URL regexes + (`createSubdomainRegexp`). The initial `startsWith('/.internal/')` check in + both `d8c1135`/`6692db8` never matched, so the quota chain kept running on + internal writes (hence the subdomain/suffix difference observed on + pivot-test: only prod-sized pods blew the 6 s lock). New shared helper + `src/storage/quota/InternalPath.ts` extracts `new URL(path).pathname` before + comparing, covering suffix *and* subdomain modes (and bare-path fallback). + +**Verification:** `benchmark-quota-c.js` C-warm unchanged (~3 ms flat); +`smoke-design-c.js` ALL CHECKS PASSED (calculation intact); unit check of +`isInternalPath` matches subdomain/suffix internal URLs and rejects pod URLs; +lock errors gone on pivot-test after deploying all three commits. + +**Lesson:** quota hooks must treat CSS-internal paths (`/.internal/`) as exempt +at **every** layer (delta accessor *and* quota validator/strategy), not just in +the size-reporter's walk excludes — and remember that `ResourceIdentifier.path` +is a URL, so prefix checks must go through `new URL(...).pathname`. + +--- + +## 10. Subdomain-mode pod discovery bug (2026-08-17) + +**Symptom:** in subdomain mode no `pivot-quota.json` sidecar is ever created +(e.g. `data-subdomain/alice` after a real write), while suffix mode works +(`data-suffix/bourgeoa` has one). + +**Root cause:** `QuotaDeltaDataAccessor.discoverPod` (copied from CSS's +`PodQuotaStrategy.searchPimStorage`) tests `identifierStrategy.isRootContainer()` +**before** reading metadata. In subdomain mode every pod root IS a root +container (`SubdomainIdentifierStrategy.isRootContainer(alice.localhost/)` -> +true), so discovery bails with "no pod" without ever checking `pim:Storage` — +no counter, no delta updates, and `getAvailableSpace` returns unlimited. This +is an **upstream CSS limitation** too: standard `PodQuotaStrategy` never finds +pods in subdomain mode, so pod quota is silently unlimited there. + +**Fix:** new shared `src/storage/quota/PodDiscovery.ts` — reads metadata +**first**, returns the pod if it has `pim:Storage`, and only then falls back to +the root-container stop. Used by both `QuotaDeltaDataAccessor` and +`FastQuotaStrategy.getAvailableSpace` (which no longer delegates to +`super.getAvailableSpace` — it replicates `QuotaStrategy.getAvailableSpace` +semantics: pod total minus the overwritten resource's size). + +**Verification:** subdomain smoke (`pod registered: true`, sidecar created, +`getAvailableSpace` returns `limit - used`); suffix `smoke-design-c.js` ALL +CHECKS PASSED in WSL; tsc clean. diff --git a/config/customise-me.json b/config/customise-me.json index 02ab0ac..9238733 100644 --- a/config/customise-me.json +++ b/config/customise-me.json @@ -4,6 +4,10 @@ "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^7.0.0/components/context.jsonld", "https://linkedsoftwaredependencies.org/bundles/npm/@solid/pivot/^1.0.0/components/context.jsonld" ], + "import": [ + "pivot:config/storage/backend/quota-counter-file.json", + "pivot:config/storage/resource-locker/long-expiry.json" + ], "@graph": [ { "comment": "The settings of your email server.", @@ -31,18 +35,6 @@ "templateFolder": "templates/pod" } }, - { - "comment": "Sets the maximum size of a single pod to 70MB.", - "@type": "Override", - "overrideInstance": { - "@id": "urn:solid-server:default:QuotaStrategy" - }, - "overrideParameters": { - "@type": "PodQuotaStrategy", - "limit_amount": 70000000, - "limit_unit": "bytes" - } - }, { "comment": "Serve Databrowser as default representation", "@id": "urn:solid-server:default:DefaultUiConverter", diff --git a/config/dev-http-subdomain.json b/config/dev-http-subdomain.json index 19abb8a..3b051a7 100644 --- a/config/dev-http-subdomain.json +++ b/config/dev-http-subdomain.json @@ -29,6 +29,7 @@ "css:config/storage/key-value/resource-store.json", "css:config/storage/location/pod.json", "pivot:config/storage/middleware/default.json", + "pivot:config/storage/profile-card-guard.json", "css:config/util/auxiliary/acl.json", "css:config/util/identifiers/subdomain.json", @@ -36,7 +37,8 @@ "css:config/util/representation-conversion/default.json", "css:config/util/resource-locker/file.json", "css:config/util/variables/default.json", - "pivot:config/pivot-overrides.json" + "pivot:config/pivot-overrides.json", + "pivot:config/pivot-file-locker-overrides.json" ], "@graph": [ { diff --git a/config/dev-http-suffix.json b/config/dev-http-suffix.json index fb5fa89..efb803c 100644 --- a/config/dev-http-suffix.json +++ b/config/dev-http-suffix.json @@ -29,6 +29,7 @@ "css:config/storage/key-value/resource-store.json", "css:config/storage/location/pod.json", "pivot:config/storage/middleware/default.json", + "pivot:config/storage/profile-card-guard.json", "css:config/util/auxiliary/acl.json", "css:config/util/identifiers/suffix.json", @@ -36,7 +37,8 @@ "css:config/util/representation-conversion/default.json", "css:config/util/resource-locker/file.json", "css:config/util/variables/default.json", - "pivot:config/pivot-overrides.json" + "pivot:config/pivot-overrides.json", + "pivot:config/pivot-file-locker-overrides.json" ], "@graph": [ { diff --git a/config/pivot-file-locker-overrides.json b/config/pivot-file-locker-overrides.json new file mode 100644 index 0000000..5dcb487 --- /dev/null +++ b/config/pivot-file-locker-overrides.json @@ -0,0 +1,20 @@ +{ + "comment": "Overrides specific to configs that use the file-system resource locker. Imported only by prod/dev configs, NOT by test.json (which uses the memory locker).", + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^7.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@solid/pivot/^1.0.0/components/context.jsonld" + ], + "@graph": [ + { + "comment": "Bound the lock acquisition retries so a contended lock fails fast instead of spinning the event loop and filesystem threadpool forever (~30s max wait).", + "@type": "Override", + "overrideInstance": { "@id": "urn:solid-server:default:FileSystemResourceLocker" }, + "overrideParameters": { + "@type": "FileSystemResourceLocker", + "attemptSettings_retryCount": 600, + "attemptSettings_retryDelay": 50, + "attemptSettings_retryJitter": 30 + } + } + ] +} diff --git a/config/pivot-overrides.json b/config/pivot-overrides.json index 0abcd00..99a07e8 100644 --- a/config/pivot-overrides.json +++ b/config/pivot-overrides.json @@ -61,6 +61,82 @@ "templateEngine": { "@id": "urn:solid-server:default:TemplateEngine" }, "template": "./templates/main.html.ejs" } + }, + { + "@type": "Override", + "overrideInstance": { "@id": "urn:solid-server:default:AccountStorage" }, + "overrideParameters": { + "@type": "SafeBaseLoginAccountStorage", + "storage": { "@id": "urn:solid-server:default:IndexedStorage" } + } + }, + { + "comment": "Scope the cookie sweep to its own container so entries()/sweeps do not walk the entire /.internal/ tree (sustained high CPU with many accounts).", + "@type": "Override", + "overrideInstance": { "@id": "urn:solid-server:default:CookieStorage" }, + "overrideParameters": { + "@type": "WrappedExpiringStorage", + "source": { + "@type": "MaxKeyLengthStorage", + "source": { + "@type": "JsonResourceStorage", + "source": { "@id": "urn:solid-server:default:ResourceStore_Backend" }, + "baseUrl": { "@id": "urn:solid-server:default:variable:baseUrl" }, + "container": "/.internal/accounts/cookies/" + } + } + } + }, + { + "comment": "Scope the forgot-password sweep to its own container.", + "@type": "Override", + "overrideInstance": { "@id": "urn:solid-server:default:ForgotPasswordStorage" }, + "overrideParameters": { + "@type": "WrappedExpiringStorage", + "source": { + "@type": "MaxKeyLengthStorage", + "source": { + "@type": "JsonResourceStorage", + "source": { "@id": "urn:solid-server:default:ResourceStore_Backend" }, + "baseUrl": { "@id": "urn:solid-server:default:variable:baseUrl" }, + "container": "/.internal/accounts/forgot-password/" + } + } + } + }, + { + "comment": "Scope the token sweep to its own container.", + "@type": "Override", + "overrideInstance": { "@id": "urn:solid-server:default:ExpiringTokenStorage" }, + "overrideParameters": { + "@type": "WrappedExpiringStorage", + "source": { + "@type": "MaxKeyLengthStorage", + "source": { + "@type": "JsonResourceStorage", + "source": { "@id": "urn:solid-server:default:ResourceStore_Backend" }, + "baseUrl": { "@id": "urn:solid-server:default:variable:baseUrl" }, + "container": "/.internal/idp/tokens/" + } + } + } + }, + { + "comment": "Scope the adapter sweep to its own container. Requires the @id added to the installed CSS adapter-factory.json by the patch-package override.", + "@type": "Override", + "overrideInstance": { "@id": "urn:solid-server:default:ExpiringAdapterStorage" }, + "overrideParameters": { + "@type": "WrappedExpiringStorage", + "source": { + "@type": "MaxKeyLengthStorage", + "source": { + "@type": "JsonResourceStorage", + "source": { "@id": "urn:solid-server:default:ResourceStore_Backend" }, + "baseUrl": { "@id": "urn:solid-server:default:variable:baseUrl" }, + "container": "/.internal/idp/adapter/" + } + } + } } ] } diff --git a/config/prod.json b/config/prod.json index 5e8cf62..07f805d 100644 --- a/config/prod.json +++ b/config/prod.json @@ -29,13 +29,15 @@ "css:config/storage/key-value/resource-store.json", "css:config/storage/location/pod.json", "pivot:config/storage/middleware/default.json", + "pivot:config/storage/profile-card-guard.json", "css:config/util/auxiliary/acl.json", "css:config/util/identifiers/subdomain.json", "css:config/util/logging/winston.json", "css:config/util/representation-conversion/default.json", "css:config/util/resource-locker/file.json", "css:config/util/variables/default.json", - "pivot:config/pivot-overrides.json" + "pivot:config/pivot-overrides.json", + "pivot:config/pivot-file-locker-overrides.json" ], "@graph": [ { @@ -69,6 +71,11 @@ "@id": "urn:solid-server:default:ExpiringTokenStorage", "@type": "WrappedExpiringStorage", "timeout": 1 + }, + { + "@id": "urn:solid-server:default:ExpiringAdapterStorage", + "@type": "WrappedExpiringStorage", + "timeout": 1 } ] } diff --git a/config/storage/backend/quota-counter-file.json b/config/storage/backend/quota-counter-file.json new file mode 100644 index 0000000..fde4872 --- /dev/null +++ b/config/storage/backend/quota-counter-file.json @@ -0,0 +1,88 @@ +{ + "comment": "Design C: incremental per-pod byte counter. QuotaCounter + IncrementalSizeReporter + QuotaDeltaDataAccessor (delta hook) + FastQuotaStrategy. Writes are O(1) after bootstrap; a full du/Node walk only seeds/repairs a pod's counter.", + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^7.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@solid/pivot/^1.0.0/components/context.jsonld" + ], + "@graph": [ + { + "comment": "The shared per-pod counter (in-memory + sidecar + recount engine).", + "@id": "urn:solid-server:default:QuotaCounter", + "@type": "QuotaCounter", + "fileIdentifierMapper": { + "@id": "urn:solid-server:default:FileIdentifierMapper" + }, + "rootFilePath": { + "@id": "urn:solid-server:default:variable:rootFilePath" + }, + "ignoreFolders": [ + "(^|/)\\.internal$" + ] + }, + { + "comment": "SizeReporter backed by the counter: O(1) pod reads, single stat for resources.", + "@type": "Override", + "overrideInstance": { + "@id": "urn:solid-server:default:SizeReporter" + }, + "overrideParameters": { + "@type": "IncrementalSizeReporter", + "counter": { + "@id": "urn:solid-server:default:QuotaCounter" + } + } + }, + { + "comment": "Delta hook: wraps the accessor chain, feeds per-write deltas to the counter. Preserves the content-length filter.", + "@type": "Override", + "overrideInstance": { + "@id": "urn:solid-server:default:FileDataAccessor" + }, + "overrideParameters": { + "@type": "QuotaDeltaDataAccessor", + "fileIdentifierMapper": { + "@id": "urn:solid-server:default:FileIdentifierMapper" + }, + "identifierStrategy": { + "@id": "urn:solid-server:default:IdentifierStrategy" + }, + "counter": { + "@id": "urn:solid-server:default:QuotaCounter" + }, + "accessor": { + "@type": "FilterMetadataDataAccessor", + "accessor": { + "@id": "urn:solid-server:default:ValidatingFileDataAccessor" + }, + "filters": [ + { + "@type": "FilterPattern", + "predicate": "http://www.w3.org/2011/http-headers#content-length" + } + ] + } + } + }, + { + "comment": "Pod quota strategy that computes the available space once per write (no per-chunk walk).", + "@type": "Override", + "overrideInstance": { + "@id": "urn:solid-server:default:QuotaStrategy" + }, + "overrideParameters": { + "@type": "FastQuotaStrategy", + "limit_amount": 70000000, + "limit_unit": "bytes", + "reporter": { + "@id": "urn:solid-server:default:SizeReporter" + }, + "identifierStrategy": { + "@id": "urn:solid-server:default:IdentifierStrategy" + }, + "accessor": { + "@id": "urn:solid-server:default:AtomicFileDataAccessor" + } + } + } + ] +} diff --git a/config/storage/backend/quota-fast-file.json b/config/storage/backend/quota-fast-file.json new file mode 100644 index 0000000..405a546 --- /dev/null +++ b/config/storage/backend/quota-fast-file.json @@ -0,0 +1,50 @@ +{ + "comment": "Fast per-pod quota: DuSizeReporter (du + TTL cache) and FastQuotaStrategy (no per-chunk pod walk).", + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^7.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@solid/pivot/^1.0.0/components/context.jsonld" + ], + "@graph": [ + { + "comment": "SizeReporter backed by du with a per-path TTL cache, measuring apparent bytes (portable, user-manageable). Falls back to the Node walk when du is unavailable.", + "@type": "Override", + "overrideInstance": { + "@id": "urn:solid-server:default:SizeReporter" + }, + "overrideParameters": { + "@type": "DuSizeReporter", + "fileIdentifierMapper": { + "@id": "urn:solid-server:default:FileIdentifierMapper" + }, + "rootFilePath": { + "@id": "urn:solid-server:default:variable:rootFilePath" + }, + "ignoreFolders": [ + "^/\\.internal$" + ], + "ttl": 5000 + } + }, + { + "comment": "Pod quota strategy that computes the available space once per write instead of per stream chunk.", + "@type": "Override", + "overrideInstance": { + "@id": "urn:solid-server:default:QuotaStrategy" + }, + "overrideParameters": { + "@type": "FastQuotaStrategy", + "limit_amount": 70000000, + "limit_unit": "bytes", + "reporter": { + "@id": "urn:solid-server:default:SizeReporter" + }, + "identifierStrategy": { + "@id": "urn:solid-server:default:IdentifierStrategy" + }, + "accessor": { + "@id": "urn:solid-server:default:AtomicFileDataAccessor" + } + } + } + ] +} diff --git a/config/storage/profile-card-guard.json b/config/storage/profile-card-guard.json new file mode 100644 index 0000000..9a28e84 --- /dev/null +++ b/config/storage/profile-card-guard.json @@ -0,0 +1,48 @@ +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^7.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@solid/pivot/^1.0.0/components/context.jsonld" + ], + "comment": "Guards the profile card of WebIDs registered on this server, keeping the `solid:oidcIssuer` triple.", + "@graph": [ + { + "comment": "Guards registered WebID cards from being deleted or losing their `solid:oidcIssuer` triple.", + "@id": "urn:solid-server:default:ResourceStore_CardGuard", + "@type": "ProfileCardGuard", + "source": { "@id": "urn:solid-server:default:ResourceStore_Converting" }, + "webIdStore": { "@id": "urn:solid-server:default:WebIdStore" }, + "baseUrl": { "@id": "urn:solid-server:default:variable:baseUrl" }, + "converter": { "@id": "urn:solid-server:default:RepresentationConverter" }, + "relativeWebIdPaths": [ + "/profile/card#me" + ] + }, + { + "comment": "WebID store that also exposes whether a WebID is registered (hasWebId), as required by the card guard.", + "@type": "Override", + "overrideInstance": { "@id": "urn:solid-server:default:WebIdStore" }, + "overrideParameters": { + "@type": "GuardedWebIdStore", + "storage": { "@id": "urn:solid-server:default:AccountStorage" } + } + }, + { + "comment": "Insert the card guard between pivot's RDF patching store and the converting store, so PUT/POST as well as PATCH results are all validated.", + "@type": "Override", + "overrideInstance": { "@id": "urn:solid-server:default:ResourceStore_RdfPatching" }, + "overrideParameters": { + "@type": "RdfPatchingStore", + "source": { "@id": "urn:solid-server:default:ResourceStore_CardGuard" } + } + }, + { + "comment": "Route the internal key-value storage (accounts, WebID links, ...) through the converting store directly, bypassing the guard.", + "@type": "Override", + "overrideInstance": { "@id": "urn:solid-server:default:JsonResourceStorage" }, + "overrideParameters": { + "@type": "JsonResourceStorage", + "source": { "@id": "urn:solid-server:default:ResourceStore_Converting" } + } + } + ] +} diff --git a/config/storage/resource-locker/long-expiry.json b/config/storage/resource-locker/long-expiry.json new file mode 100644 index 0000000..18c29da --- /dev/null +++ b/config/storage/resource-locker/long-expiry.json @@ -0,0 +1,26 @@ +{ + "comment": "Safety margin for the expiring read/write lock. The default WrappedExpiringReadWriteLocker (file.json) expires after 6000ms; on production disks a large internal container listing (e.g. the IDP AuthorizationCode store) can exceed 6s, aborting the WrappedExpiringStorage cleanup and letting expired entries accumulate (2026-08-16 incident: ~3900 stale auth codes). This override keeps the same file-based locker but allows 30s per operation. Import AFTER css:config/util/resource-locker/file.json (e.g. from customise-me.json).", + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^7.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@solid/pivot/^1.0.0/components/context.jsonld" + ], + "@graph": [ + { + "comment": "Same as the default file-based locker, but with a 30s expiring lock instead of 6s.", + "@type": "Override", + "overrideInstance": { + "@id": "urn:solid-server:default:ResourceLocker" + }, + "overrideParameters": { + "@type": "WrappedExpiringReadWriteLocker", + "locker": { + "@type": "PartialReadWriteLocker", + "locker": { + "@id": "urn:solid-server:default:FileSystemResourceLocker" + } + }, + "expiration": 30000 + } + } + ] +} diff --git a/config/suffix.json b/config/suffix.json index cf12ef6..72e80f6 100644 --- a/config/suffix.json +++ b/config/suffix.json @@ -29,13 +29,15 @@ "css:config/storage/key-value/resource-store.json", "css:config/storage/location/pod.json", "pivot:config/storage/middleware/default.json", + "pivot:config/storage/profile-card-guard.json", "css:config/util/auxiliary/acl.json", "css:config/util/identifiers/suffix.json", "css:config/util/logging/winston.json", "css:config/util/representation-conversion/default.json", "css:config/util/resource-locker/file.json", "css:config/util/variables/default.json", - "pivot:config/pivot-overrides.json" + "pivot:config/pivot-overrides.json", + "pivot:config/pivot-file-locker-overrides.json" ], "@graph": [ { @@ -69,6 +71,11 @@ "@id": "urn:solid-server:default:ExpiringTokenStorage", "@type": "WrappedExpiringStorage", "timeout": 1 + }, + { + "@id": "urn:solid-server:default:ExpiringAdapterStorage", + "@type": "WrappedExpiringStorage", + "timeout": 1 } ] } diff --git a/jest.config.js b/jest.config.js index 6b29e80..5527dfc 100644 --- a/jest.config.js +++ b/jest.config.js @@ -2,6 +2,10 @@ module.exports = { transform: { '^.+\\.ts$': [ 'ts-jest', { tsconfig: 'tsconfig.json', + // Transpile-only: don't hard-fail on missing ambient test types (e.g. + // @types/jest not installed on servers) and silence the TS151002 hybrid + // module-kind warning. + isolatedModules: true, }], }, // Only run tests in the unit and integration folders. diff --git a/package-lock.json b/package-lock.json index 3d53390..36ee10b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,10 +7,13 @@ "": { "name": "@solid/pivot", "version": "1.8.2", + "hasInstallScript": true, "license": "MIT", "dependencies": { "@inrupt/solid-client-authn-core": "^3.1.1", + "@rdfjs/types": "^1.1.2", "@solid/community-server": "^7.2.0", + "arrayify-stream": "^2.0.1", "mashlib": "^2.3.3", "patch-package": "^8.0.1", "rdflib": "^2.4.0" @@ -20,57 +23,23 @@ "@types/jest": "^30.0.0", "@types/node-fetch": "^2.6.13", "componentsjs-generator": "^3.1.2", + "cross-fetch": "^4.1.0", "jest": "^30.3.0", "jest-rdf": "^2.0.0", + "n3": "^1.26.0", "node-fetch": "^3.3.2", "ts-jest": "^29.4.6", "typescript": "^5.9.3" } }, - "../../../uvdsl/solidos-uvdsl/mashlib": { - "version": "2.2.1", - "extraneous": true, - "license": "MIT", - "dependencies": { - "pane-registry": "^3.1.1", - "rdflib": "^2.3.9", - "solid-logic": "file:../solid-logic", - "solid-panes": "file:../solid-panes", - "solid-ui": "file:../solid-ui" - }, - "devDependencies": { - "@babel/cli": "^7.28.6", - "@babel/core": "^7.29.0", - "@babel/plugin-transform-runtime": "^7.29.0", - "@babel/preset-env": "^7.29.5", - "@babel/preset-typescript": "^7.28.5", - "@typescript-eslint/parser": "^8.59.3", - "babel-loader": "^10.1.1", - "bundlesize2": "^0.0.35", - "copy-webpack-plugin": "^14.0.0", - "css-loader": "^7.1.4", - "eslint": "^10.4.0", - "file-loader": "^6.2.0", - "globals": "^17.6.0", - "html-webpack-plugin": "^5.6.7", - "mini-css-extract-plugin": "^2.10.2", - "node-polyfill-webpack-plugin": "^4.1.0", - "terser-webpack-plugin": "^5.6.0", - "typescript": "^6.0.3", - "url-loader": "^4.1.1", - "webpack": "^5.106.2", - "webpack-cli": "^7.0.2", - "webpack-dev-server": "^5.2.4" - } - }, "node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", + "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -79,9 +48,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", - "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "dev": true, "license": "MIT", "engines": { @@ -89,21 +58,21 @@ } }, "node_modules/@babel/core": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", - "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", "dev": true, "license": "MIT", "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", + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -124,19 +93,20 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.29.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", - "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -146,14 +116,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", - "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.6", - "@babel/helper-validator-option": "^7.27.1", + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -183,9 +153,9 @@ } }, "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", "dev": true, "license": "MIT", "engines": { @@ -193,29 +163,29 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -225,9 +195,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", - "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", "dev": true, "license": "MIT", "engines": { @@ -235,9 +205,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "dev": true, "license": "MIT", "engines": { @@ -245,9 +215,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, "license": "MIT", "engines": { @@ -255,9 +225,9 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "dev": true, "license": "MIT", "engines": { @@ -265,27 +235,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", - "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", - "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", + "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.29.0" + "@babel/types": "^7.29.8" }, "bin": { "parser": "bin/babel-parser.js" @@ -350,13 +320,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", - "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", + "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -392,13 +362,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", - "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz", + "integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -518,13 +488,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", - "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz", + "integrity": "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -543,33 +513,33 @@ } }, "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", - "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", + "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", "dev": true, "license": "MIT", "dependencies": { - "@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", + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.8", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.8", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8", "debug": "^4.3.1" }, "engines": { @@ -577,14 +547,14 @@ } }, "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -604,6 +574,7 @@ "engines": [ "node >= 0.2.0" ], + "license": "MIT", "dependencies": { "buffer": "^6.0.3" } @@ -612,6 +583,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "license": "MIT", "engines": { "node": ">=0.1.90" } @@ -620,6 +592,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-mediatyped/-/actor-abstract-mediatyped-2.10.0.tgz", "integrity": "sha512-0o6WBujsMnIVcwvRJv6Nj+kKPLZzqBS3On48rm01Rh9T1/My0E/buJMXwgcARKCfMonc2mJ9zxpPCh5ilGEU2A==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0" @@ -629,6 +602,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-parse/-/actor-abstract-parse-2.10.0.tgz", "integrity": "sha512-0puCWF+y24EDOOAUUVVbC+tOf4UV+LzEbqi8T5v25jcVGCXyTqfra+bDywfrcv3adrVp18jLCJ46ycaH5xhy9Q==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", "readable-stream": "^4.4.2" @@ -638,6 +612,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-abstract-path/-/actor-abstract-path-2.10.1.tgz", "integrity": "sha512-+k1ltuUuIyn4iUm5oRMObyt2zhu68h7ymzxuKU4ezATlgwfwj6EM7/3W2n2/gxjg9tcFMr5GC6aNnFQmq3Iuig==", + "license": "MIT", "dependencies": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -655,6 +630,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-context-preprocess-source-to-destination/-/actor-context-preprocess-source-to-destination-2.10.0.tgz", "integrity": "sha512-sQc42Sd4cuVumZ9+PDnWBTBYneqCFShFliK8Et83GR3wBGzu9x0tS/M2o3e63sBbb6ZkWHyO5jl/O8AbrjhcTg==", + "license": "MIT", "dependencies": { "@comunica/bus-context-preprocess": "^2.10.0", "@comunica/context-entries": "^2.10.0", @@ -666,6 +642,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-fallback/-/actor-dereference-fallback-2.10.0.tgz", "integrity": "sha512-RSc/ScPdC7l13aZjz/6r4niWA8WDETbzuESQKKSWXi/HAlFOyOxdrDADdayVY2oyeZHIQibeNRtSi2ItzU7OPQ==", + "license": "MIT", "dependencies": { "@comunica/bus-dereference": "^2.10.0", "@comunica/core": "^2.10.0" @@ -675,6 +652,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-file/-/actor-dereference-file-2.10.0.tgz", "integrity": "sha512-WXfAyHm0M3+YbYEtLtasT6YHsrzTAevmH27ex8r51qKNj2LK74llpw4mSeea3xyjQR30jVnKBIJSxuSbN64Now==", + "license": "MIT", "dependencies": { "@comunica/bus-dereference": "^2.10.0", "@comunica/core": "^2.10.0" @@ -684,6 +662,7 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-http/-/actor-dereference-http-2.10.2.tgz", "integrity": "sha512-gdDo83W1TAgD2jx0kVbzZKzzt++L4Y4fbyTOH3duy6vx1EMGGZlNCp6I1uguepKEjNX4N0zhAcZzdJcv8A3XMA==", + "license": "MIT", "dependencies": { "@comunica/bus-dereference": "^2.10.0", "@comunica/bus-http": "^2.10.2", @@ -697,6 +676,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-dereference-rdf-parse/-/actor-dereference-rdf-parse-2.10.0.tgz", "integrity": "sha512-ANWL6Bv+2WHUjVRS7hfkOfVBNJs8xYZ9KHlgBOQ94CKtQZB9uSMjdb1hLp/cQjiDmFIWLn0+GM5Xi0KFwBkVAw==", + "license": "MIT", "dependencies": { "@comunica/bus-dereference": "^2.10.0", "@comunica/bus-dereference-rdf": "^2.10.0", @@ -707,6 +687,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-hash-bindings-sha1/-/actor-hash-bindings-sha1-2.10.0.tgz", "integrity": "sha512-f981PcCiDWbdZfM1ct1v1q/VII14y18lo1enEdHB25SF0hCkzIDwh9IrfDfJDju5I6luSWNE/MYMMeAAmF9e3g==", + "license": "MIT", "dependencies": { "@comunica/bus-hash-bindings": "^2.10.0", "@comunica/core": "^2.10.0", @@ -719,6 +700,7 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-http-fetch/-/actor-http-fetch-2.10.2.tgz", "integrity": "sha512-siHGx0TMVNb2gXvOroq0B3JE6uuS+4s+MsDkntqdBNVigwVYqLpNSKEaL5is8pputFfohJfDQY06lAHbfDNEcw==", + "license": "MIT", "dependencies": { "@comunica/bus-http": "^2.10.2", "@comunica/context-entries": "^2.10.0", @@ -731,6 +713,7 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-http-proxy/-/actor-http-proxy-2.10.2.tgz", "integrity": "sha512-3yUF8BCh4nwq8J6NRILEsyNrQNStkE9ggJ7hYwRfA1XcMgz1pANNaWJ2P2TEKH1jNinr23bL3JeuUZCm9Kz9dA==", + "license": "MIT", "dependencies": { "@comunica/bus-http": "^2.10.2", "@comunica/context-entries": "^2.10.0", @@ -742,6 +725,7 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-http-wayback/-/actor-http-wayback-2.10.2.tgz", "integrity": "sha512-wjYNXRrJvMqt9paO3HawyM+O5/14ofSHFuMAwGr/UyZQ5pCSFkY0YPd+qp9y8C4xvypPgsvT3PtiRyKgjD4FWw==", + "license": "MIT", "dependencies": { "@comunica/bus-http": "^2.10.2", "@comunica/context-entries": "^2.10.0", @@ -754,6 +738,7 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-init-query/-/actor-init-query-2.10.2.tgz", "integrity": "sha512-7A4bXdKCjXRdUThvMOOyg+U17DPeBAsyDYz1SA8F4lPUR06NapcG5TmZF+YWUTN/2EG5fZPUnD3etKuPXreGUw==", + "license": "MIT", "dependencies": { "@comunica/actor-http-proxy": "^2.10.2", "@comunica/bus-context-preprocess": "^2.10.0", @@ -786,6 +771,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-optimize-query-operation-bgp-to-join/-/actor-optimize-query-operation-bgp-to-join-2.10.0.tgz", "integrity": "sha512-M9vwM4a3VQA/ir8Q7eGRNzzx52u6RJFIXBW8p+Zkn+zv+4fsket3zLYJGhJU7dcvaSXcOi68rDP/r8KfgNXr4Q==", + "license": "MIT", "dependencies": { "@comunica/bus-optimize-query-operation": "^2.10.0", "@comunica/core": "^2.10.0", @@ -796,6 +782,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-optimize-query-operation-join-bgp/-/actor-optimize-query-operation-join-bgp-2.10.0.tgz", "integrity": "sha512-tzZojWPbWn/S0DZGjGfV90ZRJVWT/yX3DKGgZ1ur33U5TW8n/fBQxHNMPCLu0GkMQ1dyx6bU+ekILTqm+21Jyw==", + "license": "MIT", "dependencies": { "@comunica/bus-optimize-query-operation": "^2.10.0", "@comunica/core": "^2.10.0", @@ -806,6 +793,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-optimize-query-operation-join-connected/-/actor-optimize-query-operation-join-connected-2.10.0.tgz", "integrity": "sha512-RsbKIAxX1HyoR/AUzqIV++dTcLiEElRIVDHYTaXVVvGgHECYdh9s+oc8cvv/lDbLVpfnc6P9C9BTAfrqOjKkhA==", + "license": "MIT", "dependencies": { "@comunica/bus-optimize-query-operation": "^2.10.0", "@comunica/core": "^2.10.0", @@ -816,6 +804,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-ask/-/actor-query-operation-ask-2.10.1.tgz", "integrity": "sha512-7oktqE4fkMhi6Hs9XCcwwoZRsEismVqJZ5wp9lXXOPaxnHEiFyj5gb/B6baCstoCvCt6LcU8fVvfHSitbFCpeQ==", + "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -827,6 +816,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-bgp-join/-/actor-query-operation-bgp-join-2.10.1.tgz", "integrity": "sha512-eNpnvgFyKlZEHkMzubYL8ndADSsAQH4rwXvh22CGnf0FwyndHr6TEpmE6j77m9vXiSJ/lda0U3Zv4vIXvtREOw==", + "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -838,6 +828,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-construct/-/actor-query-operation-construct-2.10.1.tgz", "integrity": "sha512-S+Nt1+1psv01QRnfytZjiog2NBNHIbjr7XIv+MO3p6aVmLCoZ6lmjxSGNdbX+EmcGr7tbbafXK5z3zRM+ke8Mw==", + "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -853,6 +844,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-describe-subject/-/actor-query-operation-describe-subject-2.10.1.tgz", "integrity": "sha512-E8i0M6haJ5iZVeHMn5PbvA4G+l87mcZKqIxVpYAnJVpD667F74Dkx3IMbk+ohRmyRmnkOEmztUrjeyixHHzUEQ==", + "license": "MIT", "dependencies": { "@comunica/actor-query-operation-union": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -867,6 +859,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-distinct-hash/-/actor-query-operation-distinct-hash-2.10.1.tgz", "integrity": "sha512-exvJbgcJ0Pe4EGbLJD5LuGpvaGcFeckCxwB5pyd9OewNke+tLLP7nbEjB8KFEPpCO9LE7zt4faB1HvpJdEHQKQ==", + "license": "MIT", "dependencies": { "@comunica/bus-hash-bindings": "^2.10.0", "@comunica/bus-query-operation": "^2.10.1", @@ -879,6 +872,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-extend/-/actor-query-operation-extend-2.10.1.tgz", "integrity": "sha512-wkZxUfDu8T5lXD+OFLItmjjbnEBqtv0z8pxVKgI/gX8mOeu5KcPWLH0dJODTWoIzIYrJhV25FmCgBks1rt6K8w==", + "license": "MIT", "dependencies": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -892,6 +886,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-filter-sparqlee/-/actor-query-operation-filter-sparqlee-2.10.1.tgz", "integrity": "sha512-w2PnDNnlf+9B947ZdeSs7NpW9qGJjRiuODZYwhh0e6cx89GPDhEDVuJwawF6VP3m/oLcgXOAdif0Wwo3d8KNAA==", + "license": "MIT", "dependencies": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -905,6 +900,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-from-quad/-/actor-query-operation-from-quad-2.10.1.tgz", "integrity": "sha512-7D4R8ONNJJPzoRu96dwIToOEk6/3O/T26FRzCqQKrbjFHNkX2v92KA/SiDzNz59VmDNWjYF1rsV31Ade6J89MA==", + "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -917,6 +913,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-group/-/actor-query-operation-group-2.10.1.tgz", "integrity": "sha512-Od5s9Vb6uDPzXa6OAUC1WSMF96spNPJI2Zqf0Ixejw4zCNevOK/VwHivYfF0vHIUZxjRrOl3Al1ZU9L8n5Wxlw==", + "license": "MIT", "dependencies": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-hash-bindings": "^2.10.0", @@ -934,6 +931,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-join/-/actor-query-operation-join-2.10.1.tgz", "integrity": "sha512-CGed1nSPvKsM8rvj/4KFME0lLnzlDMMEU+xGczu+BZW4FK+Z6RyBtHIUmy8SgFvNP1GXz83q8KnoecF5z8IpjA==", + "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-join": "^2.10.1", @@ -946,6 +944,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-leftjoin/-/actor-query-operation-leftjoin-2.10.1.tgz", "integrity": "sha512-j0RwdoiV2WsCQnxcSa//m5FZ+ZHDRBm6ObsgpqS44WxzpV8rIB6Dq/3UxGgE7D2vK400JaiiHa3dFiHTwDF18w==", + "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-join": "^2.10.1", @@ -959,6 +958,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-minus/-/actor-query-operation-minus-2.10.1.tgz", "integrity": "sha512-rUvHbc5/EUWMSJUgOEtxabCJ9IT9YThuG0FhcQk+BGRPGmsv2oz8uri5urKgCjfVXMH/09hRZksiDMqrmkQmZw==", + "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-join": "^2.10.1", @@ -971,6 +971,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-nop/-/actor-query-operation-nop-2.10.1.tgz", "integrity": "sha512-l/Z8Uuoq3AlSoxkgYjrP7O7Xc9h8Y3ZOh0f7UKCuAST3U5vPQ3k1YJckrRtdli8s0NHptN9TfZjwviEHuYbDFQ==", + "license": "MIT", "dependencies": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -985,6 +986,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-orderby-sparqlee/-/actor-query-operation-orderby-sparqlee-2.10.1.tgz", "integrity": "sha512-8D2JmCsBtqJC29zfiaAXNzZdsKybhDFo2F8iTHul3nQHxBC2CeKDrBnY70B/HpbWxkDE+pwMfSTEFc/CvNZN6A==", + "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -998,6 +1000,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-alt/-/actor-query-operation-path-alt-2.10.1.tgz", "integrity": "sha512-y1AHtkibThqHve79wAriXqrZ6hdLBhcdwyOpVqqEhY19a32P97Xv58bOwOkNeLguYdn/5CFlCTHz6dnzxUIoXg==", + "license": "MIT", "dependencies": { "@comunica/actor-abstract-path": "^2.10.1", "@comunica/actor-query-operation-union": "^2.10.1", @@ -1011,6 +1014,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-inv/-/actor-query-operation-path-inv-2.10.1.tgz", "integrity": "sha512-pd30Ug7bOAZ5amfA3I6v+cpitlDn2i5fE1BA006LYJISCAHSfKEgLmU2Q4ZPbwi4s1A8WKKLV7Q389Ru3Xtziw==", + "license": "MIT", "dependencies": { "@comunica/actor-abstract-path": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -1022,6 +1026,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-link/-/actor-query-operation-path-link-2.10.1.tgz", "integrity": "sha512-akujCHvCLmxaZ3gw9b1odDcqqAQnbbr9E8dTWLZyMJ4Mei8q/FmfWTF5MjGuQOas4UmQ3mm6gcqAKRZnJqlXNg==", + "license": "MIT", "dependencies": { "@comunica/actor-abstract-path": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -1033,6 +1038,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-nps/-/actor-query-operation-path-nps-2.10.1.tgz", "integrity": "sha512-5X3EUzn6Cygz94gNn1XWQQUZVp+de59sw8/rxPQqgwzdi1Y1O9zrLv+/7GqMJoLz6MHmDSgsceTIY4eC1qmmOQ==", + "license": "MIT", "dependencies": { "@comunica/actor-abstract-path": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -1044,6 +1050,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-one-or-more/-/actor-query-operation-path-one-or-more-2.10.1.tgz", "integrity": "sha512-SkQeKESQqZOlzuMIsipcZ3ni7YfeyYMZCOtxC01HFbeyq+SDVbyfYUZ4Dd9uAi/g3InyzJRfou4csxHS8g7sHw==", + "license": "MIT", "dependencies": { "@comunica/actor-abstract-path": "^2.10.1", "@comunica/bindings-factory": "^2.10.1", @@ -1057,6 +1064,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-seq/-/actor-query-operation-path-seq-2.10.1.tgz", "integrity": "sha512-8TYLdVYaq9oMd9cuLFay78103bOfvygQU/C8NtPdLI9kkRWFsBatvaKmykHOHQAvaLgNhniOlrIJNEpepZGnAQ==", + "license": "MIT", "dependencies": { "@comunica/actor-abstract-path": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -1069,6 +1077,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-zero-or-more/-/actor-query-operation-path-zero-or-more-2.10.1.tgz", "integrity": "sha512-DtqBSw4LV1KI3q1YYAwgXlWrz1PO4EUpe/bVri0UB3JSQnxjBMHuJlHn2crC9Z93tmizneXxfvtWlLSXRrehsw==", + "license": "MIT", "dependencies": { "@comunica/actor-abstract-path": "^2.10.1", "@comunica/bindings-factory": "^2.10.1", @@ -1083,6 +1092,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-path-zero-or-one/-/actor-query-operation-path-zero-or-one-2.10.1.tgz", "integrity": "sha512-qePX+7iW5DXDwaYO210y7jhSU32Zk82S5UHuLLvd4q4HS1Z7j8e4KhukbeZKzQmOsO8S5JOHHM9vwvsOc3GPlw==", + "license": "MIT", "dependencies": { "@comunica/actor-abstract-path": "^2.10.1", "@comunica/bindings-factory": "^2.10.1", @@ -1097,6 +1107,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-project/-/actor-query-operation-project-2.10.1.tgz", "integrity": "sha512-KAaPl4GFIQMWR8I8OoJroktGssPKGbEEJHyGzTuYXrmJrcXgknOxf5IUSVJNpaFfS6dshT6nqW+ciT+wRzz0Tg==", + "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -1111,6 +1122,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-quadpattern/-/actor-query-operation-quadpattern-2.10.1.tgz", "integrity": "sha512-RZj1TXW+VDU4aYJVnSzgs8q0340e+YUeGLtoY9sl0Xzc8YNaIus4nXRUz/KfOXDknxm1q+a4Bof4yHNgXtb1Hw==", + "license": "MIT", "dependencies": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -1130,6 +1142,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-reduced-hash/-/actor-query-operation-reduced-hash-2.10.1.tgz", "integrity": "sha512-9hX25ztkbNxnaUd7Gtilok+9WJkr/s3a3y4axLoYX4/nOogYN+nZRKChvNSn4qn/lWvpG5VWv4+q0en1fP+AGA==", + "license": "MIT", "dependencies": { "@comunica/bus-hash-bindings": "^2.10.0", "@comunica/bus-query-operation": "^2.10.1", @@ -1143,6 +1156,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-service/-/actor-query-operation-service-2.10.1.tgz", "integrity": "sha512-GvpvhUmhkVFOCLrmcblgIPqi91XPRog5WkC9NFMRCToaSNAMQq82DX2dvwzn3IFItcmyZrmy+GYoaQ9miK2uVQ==", + "license": "MIT", "dependencies": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -1158,6 +1172,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-slice/-/actor-query-operation-slice-2.10.1.tgz", "integrity": "sha512-KOBnTIUvwf28WB7oHevUC/xciEdH5gLg7MN8DvamkAkUiUjviEsRpkswUiD8lFe1dAs0ekA4pC0NoZ8BWp3uqA==", + "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/context-entries": "^2.10.0", @@ -1170,6 +1185,7 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-sparql-endpoint/-/actor-query-operation-sparql-endpoint-2.10.2.tgz", "integrity": "sha512-nbBzVHhYHUu/9qg9ZzTw7rKvsRb3ViBvM+Fye0oMXojZUbyu2WI6eLFUc2Ze1/LYDNf/1KHNpkg6OdsiEi8HFQ==", + "license": "MIT", "dependencies": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-http": "^2.10.2", @@ -1188,10 +1204,108 @@ "sparqlalgebrajs": "^4.2.0" } }, + "node_modules/@comunica/actor-query-operation-sparql-endpoint/node_modules/@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/@comunica/actor-query-operation-sparql-endpoint/node_modules/cross-fetch": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/@comunica/actor-query-operation-sparql-endpoint/node_modules/fetch-sparql-endpoint": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/fetch-sparql-endpoint/-/fetch-sparql-endpoint-4.2.1.tgz", + "integrity": "sha512-nRaexc3QCO95bjESf4ngNQ1J+qNtVzxFGlPUopqOIVHm/j6IDhWg996kk7fBM98Mmo0uM9b6uiTbXmJHOrnqYA==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@smessie/readable-web-to-node-stream": "^3.0.3", + "@types/readable-stream": "^2.3.11", + "@types/sparqljs": "^3.1.3", + "abort-controller": "^3.0.0", + "cross-fetch": "^3.0.6", + "is-stream": "^2.0.0", + "minimist": "^1.2.0", + "n3": "^1.6.3", + "rdf-string": "^1.6.0", + "sparqljs": "^3.1.2", + "sparqljson-parse": "^2.2.0", + "sparqlxml-parse": "^2.1.1", + "stream-to-string": "^1.1.0" + }, + "bin": { + "fetch-sparql-endpoint": "bin/fetch-sparql-endpoint.js" + } + }, + "node_modules/@comunica/actor-query-operation-sparql-endpoint/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@comunica/actor-query-operation-sparql-endpoint/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/@comunica/actor-query-operation-sparql-endpoint/node_modules/sparqljson-parse": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/sparqljson-parse/-/sparqljson-parse-2.2.0.tgz", + "integrity": "sha512-2TfvNvUsaJyWfCrq3ExdDdbF9LBLzIUCricg+D1YCYbbmyTzscgCtRk4KcIyJF178DtfCt4BkKzbKl8IXMHp8w==", + "license": "MIT", + "dependencies": { + "@bergos/jsonparse": "^1.4.1", + "@rdfjs/types": "*", + "@types/readable-stream": "^2.3.13", + "rdf-data-factory": "^1.1.0", + "readable-stream": "^4.0.0" + } + }, + "node_modules/@comunica/actor-query-operation-sparql-endpoint/node_modules/sparqlxml-parse": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/sparqlxml-parse/-/sparqlxml-parse-2.1.1.tgz", + "integrity": "sha512-71sltShF6gDAzuKWEHNeij7r0Mv5VqRrvJing6W4WHJ12GRe6+t1IRTv6MeqxYN3XJmKevs7B3HCBUo7wceeJQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@rubensworks/saxes": "^6.0.1", + "@types/readable-stream": "^2.3.13", + "buffer": "^6.0.3", + "rdf-data-factory": "^1.1.0", + "readable-stream": "^4.0.0" + } + }, "node_modules/@comunica/actor-query-operation-union": { "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-union/-/actor-query-operation-union-2.10.1.tgz", "integrity": "sha512-Ezi2bAa9r6yyffXDDUPLlKoszsXnuhDUeQSQuU3c7JEAcwip3wC3zMNkavowwfRZ/1D5doitmUEdw2lAd+xloA==", + "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -1207,6 +1321,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-add-rewrite/-/actor-query-operation-update-add-rewrite-2.10.1.tgz", "integrity": "sha512-is3mrCPciExrlny5JbCvB011kUNYE9/fzQc/zmA3h24S5hHZbygA9mSS+dI85IwwqdKPYlrEqfn8c0kCVWMKyw==", + "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -1219,6 +1334,7 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-clear/-/actor-query-operation-update-clear-2.10.2.tgz", "integrity": "sha512-+sf6+LvXdKBv2pCuBH/ad5QdpheZSPEvw19UoaPQRQyQVBzIskOtfs4rwJHSn/YmoqhbstKZszakad3oxWwTTg==", + "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-update-quads": "^2.10.2", @@ -1233,6 +1349,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-compositeupdate/-/actor-query-operation-update-compositeupdate-2.10.1.tgz", "integrity": "sha512-IVNouBPFQLOczhW3qHyEoyxWrc7wnVT2vPwRHEaGlfnSiYAX42XSNLb9jR0XjB70wh3Civue4Ovs3upOXdrN3Q==", + "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -1244,6 +1361,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-copy-rewrite/-/actor-query-operation-update-copy-rewrite-2.10.1.tgz", "integrity": "sha512-l/3AM35hjahyHmiLoB3FPm0Jlhdmd/vqgOGj7V3Ra+TfHo5h8XOB3uzG78Q06HQNw4iyONBZc5lLlYXkzRd5lg==", + "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -1255,6 +1373,7 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-create/-/actor-query-operation-update-create-2.10.2.tgz", "integrity": "sha512-g3DwLkYFTU8uZoIOV7oNPWStBmqvnBBPvLngG19MQQezuVoh8w88efxhbN0B/khi5/v4qcLsr7C0ffAaPF8Fbg==", + "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-update-quads": "^2.10.2", @@ -1267,6 +1386,7 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-deleteinsert/-/actor-query-operation-update-deleteinsert-2.10.2.tgz", "integrity": "sha512-FiRCLUAxkDoFpOe9jKC5llI7njbFdb1N8McRvZjBazUS4XDutjTZEkcKLs6AcRyG3esfHt6gNm6PqCuZ+aP8TA==", + "license": "MIT", "dependencies": { "@comunica/actor-query-operation-construct": "^2.10.1", "@comunica/bindings-factory": "^2.10.1", @@ -1283,6 +1403,7 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-drop/-/actor-query-operation-update-drop-2.10.2.tgz", "integrity": "sha512-N/878InwoyQfysjCyo9r+H82eUlNeEGODJ95gCvzF/QGRc11N3dfcd3XijyHQ9OKAoQ9oR5gcS829LB3BDtKHg==", + "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-update-quads": "^2.10.2", @@ -1297,6 +1418,7 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-load/-/actor-query-operation-update-load-2.10.2.tgz", "integrity": "sha512-lQb5fxb1+ZFbQkylmepze+e+LtVmVNvAvFBvjxUSfCT62uIKKHMeh1So5kTrGD0Co4ABCs1h6o9WB+8yQzFtQw==", + "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-update-quads": "^2.10.2", @@ -1311,6 +1433,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-update-move-rewrite/-/actor-query-operation-update-move-rewrite-2.10.1.tgz", "integrity": "sha512-GDLSHG2++EAAyUKhDu+mM6QfMTuzM8dS24HqeQL5Wzbkdc2KTmNKyJuhJw6SfXr6EiF/kxf1GPY6zwjcwACx/w==", + "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/core": "^2.10.0", @@ -1322,6 +1445,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-query-operation-values/-/actor-query-operation-values-2.10.1.tgz", "integrity": "sha512-++9IgCVCQPIF8fzZLmrVpxPj8eI9TvkLshHAugQQBnhSijrDMUudW9eoA+eFmCaD/Ru7YtlKe3OJzRGV8FCG+Q==", + "license": "MIT", "dependencies": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -1337,6 +1461,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-query-parse-graphql/-/actor-query-parse-graphql-2.10.0.tgz", "integrity": "sha512-l3RrkxElDYV4weXt3vpC0Q0She4AhbvPbPDronQulgN9nFAZhz4z9k8800T5uWMsL98wHNNXDFlnFk5S38lsow==", + "license": "MIT", "dependencies": { "@comunica/bus-query-parse": "^2.10.0", "@comunica/context-entries": "^2.10.0", @@ -1348,6 +1473,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-query-parse-sparql/-/actor-query-parse-sparql-2.10.0.tgz", "integrity": "sha512-DUVAuSSNn0AyvLruOpRpLZBsr96Q4LuV1gcO+alKZALtfOZikRKY/3sXz1NUkaRQc7qDH9xFFTFrfJd0jLvlDA==", + "license": "MIT", "dependencies": { "@comunica/bus-query-parse": "^2.10.0", "@comunica/core": "^2.10.0", @@ -1360,6 +1486,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-json/-/actor-query-result-serialize-json-2.10.0.tgz", "integrity": "sha512-GuVcsOEhKgnVPT0AaCn8sJl/Uj5UUjUktEJpuMx1UAYt0//jcQsezJslYWmJrfXE/WJYidynyDxm8z3+jwLF7A==", + "license": "MIT", "dependencies": { "@comunica/bus-query-result-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -1371,6 +1498,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-rdf/-/actor-query-result-serialize-rdf-2.10.0.tgz", "integrity": "sha512-TBXJrDs5brRMFg8UisXS/F1vJw8nUtLhjugNZcd4ST8J965Ho1aNopydp4PMmwINMRxHhHtWJGwIB2Z5xD2lDw==", + "license": "MIT", "dependencies": { "@comunica/bus-query-result-serialize": "^2.10.0", "@comunica/bus-rdf-serialize": "^2.10.0", @@ -1382,6 +1510,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-simple/-/actor-query-result-serialize-simple-2.10.0.tgz", "integrity": "sha512-pS7+aB9Rym1B5oi+O68NFjEq+EwpCRYtTIxGBp39CTQ0F7m4edt9QwqmARqveJPryK5X66ACvjxvutEaTgWI8w==", + "license": "MIT", "dependencies": { "@comunica/bus-query-result-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -1394,6 +1523,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-sparql-csv/-/actor-query-result-serialize-sparql-csv-2.10.0.tgz", "integrity": "sha512-Vk+7oTIPigDENK3CnV56vLfvMZVjHc3p2F4a49WDHfMgRrfQKJSQkx603vjW35n3tmUB8JSgRXr/+v7LK83KYQ==", + "license": "MIT", "dependencies": { "@comunica/bus-query-result-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -1405,6 +1535,7 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-sparql-json/-/actor-query-result-serialize-sparql-json-2.10.2.tgz", "integrity": "sha512-+J7SWXc4nXHzmQMk6q8MScrLNKdqX+/xQe6XCk0zDbDAt3/8EJh/2ROYFp4fEQyPDFWOwN4xpALgHRIh8PQRAQ==", + "license": "MIT", "dependencies": { "@comunica/bus-http": "^2.10.2", "@comunica/bus-http-invalidate": "^2.10.0", @@ -1419,6 +1550,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-sparql-tsv/-/actor-query-result-serialize-sparql-tsv-2.10.0.tgz", "integrity": "sha512-TgA2WIXKdu/SrbHEP8HvGoLjhDOZnBoHsGsLFSHpxY/Uwk21rZqJLBEkhuhkUtGYzQPJ1n6Wmpjz9lBrUHGJPw==", + "license": "MIT", "dependencies": { "@comunica/bus-query-result-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -1431,6 +1563,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-sparql-xml/-/actor-query-result-serialize-sparql-xml-2.10.0.tgz", "integrity": "sha512-8RDj5ZN23HnIc6zI5pD5XKi2pyg2cx6DhI7VDRcboi7v0DxfROuQqSEtbQ8m/W6Pngdz01ySogRcIVJCzRzBLQ==", + "license": "MIT", "dependencies": { "@comunica/bus-query-result-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -1442,6 +1575,7 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-stats/-/actor-query-result-serialize-stats-2.10.2.tgz", "integrity": "sha512-jhj/vLDRxLuRMonBaqICt4saM9/UO9wJBT3Jxk7Rp73aQWLo+lILXKzcWpuxkh/EFx8raLUBmbjWCduamU1DzQ==", + "license": "MIT", "dependencies": { "@comunica/bus-http": "^2.10.2", "@comunica/bus-http-invalidate": "^2.10.0", @@ -1456,6 +1590,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-table/-/actor-query-result-serialize-table-2.10.0.tgz", "integrity": "sha512-AAPrgM/rbsSThRu9jkfJhBUeTUwQTLHNVbIn8El+Akvz+Fueoi6oSi3SslpPMHOvIUiOAgCZ05f2RbBLlhP03g==", + "license": "MIT", "dependencies": { "@comunica/bus-query-result-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -1470,6 +1605,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-query-result-serialize-tree/-/actor-query-result-serialize-tree-2.10.0.tgz", "integrity": "sha512-sEyIzoSTV11YPY6r4fn6fwrf3WjLD6GrwXMTuevsDAKDYaMYxyriH3T/LMLLBEURy8SLD1I1Fpw/qaZisRmLTg==", + "license": "MIT", "dependencies": { "@comunica/bus-query-result-serialize": "^2.10.0", "@comunica/context-entries": "^2.10.0", @@ -1483,6 +1619,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-entries-sort-cardinality/-/actor-rdf-join-entries-sort-cardinality-2.10.0.tgz", "integrity": "sha512-6dd/29q6QuQN2Ap090VA0KUFmmnHalPxFJb4MGh5nIbWZH0F/EvI+uK5vPx29cttr1yXL5u+MbJWaLb3IxwILg==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-join-entries-sort": "^2.10.0", "@comunica/core": "^2.10.0" @@ -1492,6 +1629,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-hash/-/actor-rdf-join-inner-hash-2.10.1.tgz", "integrity": "sha512-nUtdS3NJGKSJQC8KjDVz4TEDmkXHBYQi0/bwnAXCDl1phhq8lgv+YEmRDNe/kuCze7HyqEt98rlSJ+ZhvcHXVQ==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-join": "^2.10.1", "@comunica/mediatortype-join-coefficients": "^2.10.0", @@ -1503,6 +1641,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-multi-bind/-/actor-rdf-join-inner-multi-bind-2.10.1.tgz", "integrity": "sha512-tNZ2Q7z44Yr0iIFkvtTVAsts4v0IoC4b0FYaIUeYav4y5JOlR74hWWijTAzVfb31dTMsAp3r+y0xGIdd75LRHQ==", + "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-join": "^2.10.1", @@ -1518,6 +1657,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-multi-empty/-/actor-rdf-join-inner-multi-empty-2.10.1.tgz", "integrity": "sha512-z6a3qENwuvSU0PvqOySrsHsWSUvzfWd1xIYwEvKuEIJ9vYPoefIUgggx08E95ZF/k+PxZ0vKEywFpBSUKUzGYA==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-join": "^2.10.1", "@comunica/mediatortype-join-coefficients": "^2.10.0", @@ -1530,6 +1670,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-multi-smallest/-/actor-rdf-join-inner-multi-smallest-2.10.1.tgz", "integrity": "sha512-MXwIvq+viDCmsxJwD4+fwMhwZINWva3jtQ3j5ne6DXgZYUJUFOw3VujvCP4/cl075RuSxYlXgy6ETHLa1TNr7g==", + "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-join": "^2.10.1", @@ -1543,6 +1684,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-nestedloop/-/actor-rdf-join-inner-nestedloop-2.10.1.tgz", "integrity": "sha512-nFjGMrAIrRjRcsaU8UQXLbsDODVdf4LDpVNVQIrjfoWzhOIy13ApDQrqtuObaGVfryiFgt34zVEOwMWezWzl0A==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-join": "^2.10.1", "@comunica/mediatortype-join-coefficients": "^2.10.0", @@ -1554,6 +1696,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-none/-/actor-rdf-join-inner-none-2.10.1.tgz", "integrity": "sha512-4mqsuqvLSuXMbgY0PghqK5hmBGH5YkRTwUOpGpBE0EVQaiAoQOME0uVslkt2TBzUx5IQJC+trr/80sbA9mAhMw==", + "license": "MIT", "dependencies": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-rdf-join": "^2.10.1", @@ -1566,6 +1709,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-single/-/actor-rdf-join-inner-single-2.10.1.tgz", "integrity": "sha512-RfnwTEsuXNdR0cNRWaCvNPlfD5KyuScsc/55j/9mr8yqGUTE9h9Om1Is5u7xnpRMxGOEqwVP6apK3ZxsZqlL/w==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-join": "^2.10.1", "@comunica/mediatortype-join-coefficients": "^2.10.0" @@ -1575,6 +1719,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-inner-symmetrichash/-/actor-rdf-join-inner-symmetrichash-2.10.1.tgz", "integrity": "sha512-beFGkMUe3pTADtMXXPU8ab/IMULj+Hkg3Iah0zgrVZgwWH1Kgfkj/2qp32Ll5y9qcRbio4ruruKlHNXJJUU46Q==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-join": "^2.10.1", "@comunica/mediatortype-join-coefficients": "^2.10.0", @@ -1586,6 +1731,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-minus-hash/-/actor-rdf-join-minus-hash-2.10.1.tgz", "integrity": "sha512-wIaB/EpuySaARhimoLzrE0cTH0TgVkL43IAtYX7ECwH9Qcv8blO4zbL4q2KUkY7OKZRM892aqMfo3kO1vMIK7w==", + "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-join": "^2.10.1", @@ -1598,6 +1744,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-minus-hash-undef/-/actor-rdf-join-minus-hash-undef-2.10.1.tgz", "integrity": "sha512-tz5LdeAHnylEQIq4bRfFqaH89WZXkkdFxEshqxWijFBp5wprUYiotMDrBo9zDFaPquhs42fILtTzLY9yaalc9w==", + "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-join": "^2.10.1", @@ -1611,6 +1758,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-optional-bind/-/actor-rdf-join-optional-bind-2.10.1.tgz", "integrity": "sha512-6dOoI/rzRZ0RUyv2WlToClE42Z2YJE5xcSrot7haT2eMdxbzr1KjyasHBcIIkSK+WViDO006lXZ1Hi4tJm9uuA==", + "license": "MIT", "dependencies": { "@comunica/actor-rdf-join-inner-multi-bind": "^2.10.1", "@comunica/bus-query-operation": "^2.10.1", @@ -1625,6 +1773,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-optional-nestedloop/-/actor-rdf-join-optional-nestedloop-2.10.1.tgz", "integrity": "sha512-d7KUDjEKZszizd4SBvYkK2A6lScrq9ciEgzdrrp6IYZhIGAhJLTgPNg3Js3NEjpE7oj4KWl2WwKJe2sWcJbKJg==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-join": "^2.10.1", "@comunica/mediatortype-join-coefficients": "^2.10.0", @@ -1636,6 +1785,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-join-selectivity-variable-counting/-/actor-rdf-join-selectivity-variable-counting-2.10.0.tgz", "integrity": "sha512-D7tdzxA93bpZGXI5emJyvzk6LabeAnzcQMU/V5x2QwJxyoNr+LFbesBHDDP3/u4UJwmeP0a+dU0e5mbpJujSXw==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-join-selectivity": "^2.10.0", "@comunica/core": "^2.10.0", @@ -1647,6 +1797,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-accumulate-cancontainundefs/-/actor-rdf-metadata-accumulate-cancontainundefs-2.10.0.tgz", "integrity": "sha512-N3rwX4kT9rkW+89q4xCjO3KKG0DbeNIyeMWDzeh2vTw8nAXYyTiPjHYvx/6VUMzhFUWF+50VtVv8ZJPO6nEapw==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata-accumulate": "^2.10.0", "@comunica/core": "^2.10.0" @@ -1656,6 +1807,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-accumulate-cardinality/-/actor-rdf-metadata-accumulate-cardinality-2.10.0.tgz", "integrity": "sha512-UpC5PbhzEDCAxTUqETH89uRaFRqmP6YuWt67OAPo5wocv2tQDs6/SdLwS695XnfeMJdfDHsXyoUzQg3r8dwydw==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata-accumulate": "^2.10.0", "@comunica/core": "^2.10.0", @@ -1666,6 +1818,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-accumulate-pagesize/-/actor-rdf-metadata-accumulate-pagesize-2.10.0.tgz", "integrity": "sha512-r364CWGr5rMpV2ec3TsD+9Yhvi1JUuRXLBQqtgzjAPbpWjfDSM1Q4h0P1z9h3D+sdUMEX/0iGAY3AH2FjJAxwA==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata-accumulate": "^2.10.0", "@comunica/core": "^2.10.0" @@ -1675,6 +1828,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-accumulate-requesttime/-/actor-rdf-metadata-accumulate-requesttime-2.10.0.tgz", "integrity": "sha512-SpG7gxxAPoW2NbgyZ2UNpwluJ+IvCOYIRDTXmVTAK8bntav+/ZG30yfESFBjB3LmJEwAnktAsTgM6OhldohPKw==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata-accumulate": "^2.10.0", "@comunica/core": "^2.10.0" @@ -1684,6 +1838,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-all/-/actor-rdf-metadata-all-2.10.0.tgz", "integrity": "sha512-dHaSxHTdneWVBMAF6WqZrGD+u4TPpHQaJ2WutK1NvQNPIiF0N7249aGTvXBIXZfsKYyQ73PUORDeLEOjX+tT7g==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata": "^2.10.0", "@comunica/core": "^2.10.0", @@ -1694,6 +1849,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-allow-http-methods/-/actor-rdf-metadata-extract-allow-http-methods-2.10.0.tgz", "integrity": "sha512-aCSX+lWcmz5Q/g34VJEblczqDS6N+gJ3AlcOcGuqhd6qHRU17dMeCIZCk8p6p+AhbJ30w4BTsrZRY2sF0MGCVA==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", "@comunica/core": "^2.10.0" @@ -1703,6 +1859,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-hydra-controls/-/actor-rdf-metadata-extract-hydra-controls-2.10.0.tgz", "integrity": "sha512-T6F5OaQNqrHVIwSGNRX6YPDBoAOYBQj3NTPID7vQae7J80oEX+CLoTkeJJwfHpoUWx0ihs8J0UkABgK3AWeylA==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", "@comunica/core": "^2.10.0", @@ -1715,6 +1872,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-hydra-count/-/actor-rdf-metadata-extract-hydra-count-2.10.0.tgz", "integrity": "sha512-nOMLN+9OSLFOVz6jc9pcyDizhcBBVT2azn7StTMK5ukFCcPCENS4y6lYhC5cijKZY7vUa7U6VzhX2vvw20MKDA==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", "@comunica/core": "^2.10.0" @@ -1724,6 +1882,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-hydra-pagesize/-/actor-rdf-metadata-extract-hydra-pagesize-2.10.0.tgz", "integrity": "sha512-mD8KS2ENr2rbfBWxtVpxkB/Y2LyyAnwQU5UYKkpet8ELhlostdGROzYCNIAgfOgirOAsLgVkbmrX0XBGouI7rA==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", "@comunica/core": "^2.10.0" @@ -1733,6 +1892,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-patch-sparql-update/-/actor-rdf-metadata-extract-patch-sparql-update-2.10.0.tgz", "integrity": "sha512-U5ARpeWKShbbSfdtJeb6nyPcsdtMwEo2dp56T4aSTNSBKtAhQ78DjOxb23WIU/VR/qpw2yWcsbPnNJvSaLpRVQ==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", "@comunica/core": "^2.10.0" @@ -1742,6 +1902,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-put-accepted/-/actor-rdf-metadata-extract-put-accepted-2.10.0.tgz", "integrity": "sha512-cGJg6tMMCOSGcitkUBN7b9/Sg5zgwWQC52g+Zk22o4i+Zgt24WLjfXXbnGWGoV+h9YZo8pkg7v1cpE5GpapNCg==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", "@comunica/core": "^2.10.0" @@ -1751,6 +1912,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-request-time/-/actor-rdf-metadata-extract-request-time-2.10.0.tgz", "integrity": "sha512-zh3coTPZMbgF4mXKCO3bzn99INt9HFraKMZWc9s/kwBE6vhNZ5246Ql/6z1v7mccoIbanhI72gtjFTGGHru80Q==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", "@comunica/core": "^2.10.0" @@ -1760,6 +1922,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-extract-sparql-service/-/actor-rdf-metadata-extract-sparql-service-2.10.0.tgz", "integrity": "sha512-Xc+id8FURTmY3ccb4hcVuAaOou5UqD+1YkTnGfMWQxVgMlFC1eeBvwWVzvedj0sHhnfbLgDwbCVYLCK1lNndSg==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata-extract": "^2.10.0", "@comunica/core": "^2.10.0", @@ -1770,6 +1933,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-metadata-primary-topic/-/actor-rdf-metadata-primary-topic-2.10.0.tgz", "integrity": "sha512-nabxkiYSPGPRylhYjGxF0KiJ/K8QiG1N/am/t8eaqwyjn/fo2/tHl0yXUaLLx0E8fChfbBv10sVlmLhsLrg8DQ==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-metadata": "^2.10.0", "@comunica/core": "^2.10.0", @@ -1781,6 +1945,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html/-/actor-rdf-parse-html-2.10.0.tgz", "integrity": "sha512-zgImXKpc+BN1i6lQiN1Qhlb1HbKdMIeJMOys6qbzRIijdK8GkGGChwhQp7Cso3lY1Nf4K7M3jPLZeQXeED2w7g==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-parse": "^2.10.0", "@comunica/bus-rdf-parse-html": "^2.10.0", @@ -1795,6 +1960,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-microdata/-/actor-rdf-parse-html-microdata-2.10.0.tgz", "integrity": "sha512-JLfiDauq4SmpI6TDS4HaHzI6iJe1j8lSk5FRRYK6YVEu8eO28jPmxQJiOiwbQiYqsjsV7kON/WIZSoUELoI4Ig==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-parse-html": "^2.10.0", "@comunica/core": "^2.10.0", @@ -1805,6 +1971,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-rdfa/-/actor-rdf-parse-html-rdfa-2.10.0.tgz", "integrity": "sha512-9K3iaws9+FGl50oZi53hqyzhwjNKZ3mIr2zg/TAJZoapKvc14cthH17zKSSJrqI/NgBStRmZhBBkXcwfu1CANw==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-parse-html": "^2.10.0", "@comunica/core": "^2.10.0", @@ -1815,6 +1982,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-html-script/-/actor-rdf-parse-html-script-2.10.0.tgz", "integrity": "sha512-7XYqWchDquWnBLjG7rmmY+tdE81UZ8fPCU0Hn+vI39/MikNOpaiyr/ZYFqhogWFa9SkjmH0a7idVUzmjiwKRZQ==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-parse": "^2.10.0", "@comunica/bus-rdf-parse-html": "^2.10.0", @@ -1830,6 +1998,7 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-jsonld/-/actor-rdf-parse-jsonld-2.10.2.tgz", "integrity": "sha512-K4fvD0zMU22KkQCqIFVT5Oy2FREEZ9CAo9u6kOcsMxEvg9aHGIM6hkaXR8I+1JCx1mDuEj3zQ8joR4tQh8fYCw==", + "license": "MIT", "dependencies": { "@comunica/bus-http": "^2.10.2", "@comunica/bus-rdf-parse": "^2.10.0", @@ -1845,6 +2014,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-n3/-/actor-rdf-parse-n3-2.10.0.tgz", "integrity": "sha512-o1MAbwJxW4Br2WCZdhFoRmAiOP4mfogeQqJ4nqlsOkoMtQ45EvLHsotb3Kqhuk5V+vsTxyK5v/a4zylGtcU7VQ==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-parse": "^2.10.0", "@comunica/types": "^2.10.0", @@ -1855,6 +2025,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-rdfxml/-/actor-rdf-parse-rdfxml-2.10.0.tgz", "integrity": "sha512-HoJN52shXY3cvYtsS0cpin9KXpW3L7g1leebyCRSqnlnHdJv5D6G0Ep8vyt2xhquKNbOQ7LnP5VhiDiqz73XDg==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-parse": "^2.10.0", "@comunica/types": "^2.10.0", @@ -1865,6 +2036,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-shaclc/-/actor-rdf-parse-shaclc-2.10.0.tgz", "integrity": "sha512-i6tmuZuS+RtDiSXpQc3s/PxtCqwIguo4ANmVB20PK4VWgQgBwoPG7LlNcJ0xmuH/3Bv6C2Agn18PLF6dZX+fKw==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-parse": "^2.10.0", "@comunica/types": "^2.10.0", @@ -1879,6 +2051,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-parse-xml-rdfa/-/actor-rdf-parse-xml-rdfa-2.10.0.tgz", "integrity": "sha512-68r/6B/fEyA1/OYleVuaPq47J+g4xJcJijpdL1wEj7CqjV+Xa+sDWRpNCyLcD/e1Y/g9UQmLz0ZnSpR00PFddA==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-parse": "^2.10.0", "@comunica/types": "^2.10.0", @@ -1889,6 +2062,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-hypermedia-links-next/-/actor-rdf-resolve-hypermedia-links-next-2.10.0.tgz", "integrity": "sha512-SpW46Tx8ksAxotGK2UEpvGcYjKwxB0x2KnbGmKHvo59embRjcUL/bmq3uHqZe7UwfynR2wDaRzMdVVSQccWSyA==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-resolve-hypermedia-links": "^2.10.0", "@comunica/core": "^2.10.0" @@ -1898,6 +2072,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-hypermedia-links-queue-fifo/-/actor-rdf-resolve-hypermedia-links-queue-fifo-2.10.0.tgz", "integrity": "sha512-Hh53Ts6z6MxKXhZZxgpXfc1hgNzIX/xbA9mD2Au7ZfAa5V5j8zPaVVKe06sxILQBTPMsFh1idP3vIqRwRXpsvg==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-resolve-hypermedia-links": "^2.10.0", "@comunica/bus-rdf-resolve-hypermedia-links-queue": "^2.10.0", @@ -1908,6 +2083,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-hypermedia-none/-/actor-rdf-resolve-hypermedia-none-2.10.0.tgz", "integrity": "sha512-C4sJ0QJetq3QxsRkYstK5YXRYDGkcVTfyBOFUMYj7PbVakapnl8qPZkVL7VPMLVLVOfyBQHTT43Yp6Nl8VvmSA==", + "license": "MIT", "dependencies": { "@comunica/actor-rdf-resolve-quad-pattern-rdfjs-source": "^2.10.0", "@comunica/bus-rdf-resolve-hypermedia": "^2.10.0", @@ -1918,6 +2094,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-hypermedia-qpf/-/actor-rdf-resolve-hypermedia-qpf-2.10.0.tgz", "integrity": "sha512-1iP9xD72bxFBLpbfC7Ev0Xoc+0rwusPFdnoYbEtqMHRfiM0h3nNrsSxyzdGJMAZaJeQzmBZIEiwR5pbo9qpmaQ==", + "license": "MIT", "dependencies": { "@comunica/actor-rdf-metadata-extract-hydra-controls": "^2.10.0", "@comunica/bus-dereference-rdf": "^2.10.0", @@ -1937,6 +2114,7 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-hypermedia-sparql/-/actor-rdf-resolve-hypermedia-sparql-2.10.2.tgz", "integrity": "sha512-UFsTuzHvjK/XhRGqfHr3WAVr+iBv6XTuU1fV9EuOaB+odclQ+H6TGtmW6/38CSufj86Y691VBXMk29zdWfrmGA==", + "license": "MIT", "dependencies": { "@comunica/bindings-factory": "^2.10.1", "@comunica/bus-http": "^2.10.2", @@ -1952,31 +2130,130 @@ "sparqlalgebrajs": "^4.2.0" } }, - "node_modules/@comunica/actor-rdf-resolve-quad-pattern-federated": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-quad-pattern-federated/-/actor-rdf-resolve-quad-pattern-federated-2.10.1.tgz", - "integrity": "sha512-OBRTTUWkXKa0ibDzcYLG7aKf3BfQp2j75xm65brRvwstNLmye9ZEq1PrNhbP5UDqQQeCgzPBrb0eGC8Vxek2RA==", + "node_modules/@comunica/actor-rdf-resolve-hypermedia-sparql/node_modules/@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "license": "MIT", "dependencies": { - "@comunica/bus-query-operation": "^2.10.1", - "@comunica/bus-rdf-metadata-accumulate": "^2.10.0", - "@comunica/bus-rdf-resolve-quad-pattern": "^2.10.0", - "@comunica/context-entries": "^2.10.0", - "@comunica/core": "^2.10.0", - "@comunica/data-factory": "^2.7.0", - "@comunica/metadata": "^2.10.0", - "@comunica/types": "^2.10.0", - "@rdfjs/types": "*", - "asynciterator": "^3.8.1", - "rdf-data-factory": "^1.1.1", - "rdf-terms": "^1.11.0", - "sparqlalgebrajs": "^4.2.0" + "@types/node": "*", + "safe-buffer": "~5.1.1" } }, - "node_modules/@comunica/actor-rdf-resolve-quad-pattern-hypermedia": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-quad-pattern-hypermedia/-/actor-rdf-resolve-quad-pattern-hypermedia-2.10.1.tgz", - "integrity": "sha512-XkJOYu0bizWHsvgiaGyNAnRZsqv2risREK5SY14VCMXDYqmOWJLDppveGEUZAoEKEJuo4ZLDlP2gLDGzc0krxQ==", - "dependencies": { + "node_modules/@comunica/actor-rdf-resolve-hypermedia-sparql/node_modules/cross-fetch": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/@comunica/actor-rdf-resolve-hypermedia-sparql/node_modules/fetch-sparql-endpoint": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/fetch-sparql-endpoint/-/fetch-sparql-endpoint-4.2.1.tgz", + "integrity": "sha512-nRaexc3QCO95bjESf4ngNQ1J+qNtVzxFGlPUopqOIVHm/j6IDhWg996kk7fBM98Mmo0uM9b6uiTbXmJHOrnqYA==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@smessie/readable-web-to-node-stream": "^3.0.3", + "@types/readable-stream": "^2.3.11", + "@types/sparqljs": "^3.1.3", + "abort-controller": "^3.0.0", + "cross-fetch": "^3.0.6", + "is-stream": "^2.0.0", + "minimist": "^1.2.0", + "n3": "^1.6.3", + "rdf-string": "^1.6.0", + "sparqljs": "^3.1.2", + "sparqljson-parse": "^2.2.0", + "sparqlxml-parse": "^2.1.1", + "stream-to-string": "^1.1.0" + }, + "bin": { + "fetch-sparql-endpoint": "bin/fetch-sparql-endpoint.js" + } + }, + "node_modules/@comunica/actor-rdf-resolve-hypermedia-sparql/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@comunica/actor-rdf-resolve-hypermedia-sparql/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/@comunica/actor-rdf-resolve-hypermedia-sparql/node_modules/sparqljson-parse": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/sparqljson-parse/-/sparqljson-parse-2.2.0.tgz", + "integrity": "sha512-2TfvNvUsaJyWfCrq3ExdDdbF9LBLzIUCricg+D1YCYbbmyTzscgCtRk4KcIyJF178DtfCt4BkKzbKl8IXMHp8w==", + "license": "MIT", + "dependencies": { + "@bergos/jsonparse": "^1.4.1", + "@rdfjs/types": "*", + "@types/readable-stream": "^2.3.13", + "rdf-data-factory": "^1.1.0", + "readable-stream": "^4.0.0" + } + }, + "node_modules/@comunica/actor-rdf-resolve-hypermedia-sparql/node_modules/sparqlxml-parse": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/sparqlxml-parse/-/sparqlxml-parse-2.1.1.tgz", + "integrity": "sha512-71sltShF6gDAzuKWEHNeij7r0Mv5VqRrvJing6W4WHJ12GRe6+t1IRTv6MeqxYN3XJmKevs7B3HCBUo7wceeJQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@rubensworks/saxes": "^6.0.1", + "@types/readable-stream": "^2.3.13", + "buffer": "^6.0.3", + "rdf-data-factory": "^1.1.0", + "readable-stream": "^4.0.0" + } + }, + "node_modules/@comunica/actor-rdf-resolve-quad-pattern-federated": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-quad-pattern-federated/-/actor-rdf-resolve-quad-pattern-federated-2.10.1.tgz", + "integrity": "sha512-OBRTTUWkXKa0ibDzcYLG7aKf3BfQp2j75xm65brRvwstNLmye9ZEq1PrNhbP5UDqQQeCgzPBrb0eGC8Vxek2RA==", + "license": "MIT", + "dependencies": { + "@comunica/bus-query-operation": "^2.10.1", + "@comunica/bus-rdf-metadata-accumulate": "^2.10.0", + "@comunica/bus-rdf-resolve-quad-pattern": "^2.10.0", + "@comunica/context-entries": "^2.10.0", + "@comunica/core": "^2.10.0", + "@comunica/data-factory": "^2.7.0", + "@comunica/metadata": "^2.10.0", + "@comunica/types": "^2.10.0", + "@rdfjs/types": "*", + "asynciterator": "^3.8.1", + "rdf-data-factory": "^1.1.1", + "rdf-terms": "^1.11.0", + "sparqlalgebrajs": "^4.2.0" + } + }, + "node_modules/@comunica/actor-rdf-resolve-quad-pattern-hypermedia": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-quad-pattern-hypermedia/-/actor-rdf-resolve-quad-pattern-hypermedia-2.10.1.tgz", + "integrity": "sha512-XkJOYu0bizWHsvgiaGyNAnRZsqv2risREK5SY14VCMXDYqmOWJLDppveGEUZAoEKEJuo4ZLDlP2gLDGzc0krxQ==", + "license": "MIT", + "dependencies": { "@comunica/bus-dereference-rdf": "^2.10.0", "@comunica/bus-http-invalidate": "^2.10.0", "@comunica/bus-query-operation": "^2.10.1", @@ -2004,6 +2281,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-quad-pattern-rdfjs-source/-/actor-rdf-resolve-quad-pattern-rdfjs-source-2.10.0.tgz", "integrity": "sha512-d6AlrngvZaVgoiiyMhkf6uiYaFZZdn/UZLo0FhZ++or1NZXo5KxK4UMgdiIygvPEiuuVzy0W1djHgOQ1rgh50g==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-resolve-quad-pattern": "^2.10.0", "@comunica/core": "^2.10.0", @@ -2019,6 +2297,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-resolve-quad-pattern-string-source/-/actor-rdf-resolve-quad-pattern-string-source-2.10.0.tgz", "integrity": "sha512-v6QOBtXTXrDUZRHocrm2OYCsxGpyTScka/n85cewCcInqVGJP9J6zpdwetzvIy7wVJkac7JQabd96OEyDMK3sg==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-parse": "^2.10.0", "@comunica/bus-rdf-resolve-quad-pattern": "^2.10.0", @@ -2035,6 +2314,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-serialize-jsonld/-/actor-rdf-serialize-jsonld-2.10.0.tgz", "integrity": "sha512-u1M5N7BSrkhS461fV6QXKMh6TnvpoEiSHPru7wJg1kGqR9q3reuQeKLf/U23JDYb1kom8uU3R7aBpDIjgVc49Q==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -2045,6 +2325,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-serialize-n3/-/actor-rdf-serialize-n3-2.10.0.tgz", "integrity": "sha512-CoDktUI3YQuI7UBV+fQOdKl+5XjBx0XTOF9XxEDiNg5nwndEmDvq6C23fSHfkqX3/xDlnsuS/YysHAqXCrYoiA==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -2055,6 +2336,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-serialize-shaclc/-/actor-rdf-serialize-shaclc-2.10.0.tgz", "integrity": "sha512-gp4bu4+aPtMk4bavXP27uD9X9bpa2F5u6/JtsaX2qwcqVI0x1tkVQOkm2RkUhafcHNj0Fz6lQ3aXmRIAQvaefg==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-serialize": "^2.10.0", "@comunica/types": "^2.10.0", @@ -2067,6 +2349,7 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-update-hypermedia-patch-sparql-update/-/actor-rdf-update-hypermedia-patch-sparql-update-2.10.2.tgz", "integrity": "sha512-z/fOzYlA5fPtauTUISYhCWMKtEpkvKkSZIdvcgeGvetLnvw4fytfVHdtPhirZYmPya10GCeTG7m2iHvK53lOsQ==", + "license": "MIT", "dependencies": { "@comunica/bus-http": "^2.10.2", "@comunica/bus-rdf-update-hypermedia": "^2.10.2", @@ -2084,6 +2367,7 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-update-hypermedia-put-ldp/-/actor-rdf-update-hypermedia-put-ldp-2.10.2.tgz", "integrity": "sha512-Tof/mU0Lkt7HP3SwHXODczxvAFelWzAHdP+ap4Upr47K6Zg5GRPwJv//2AcPvT3p42Li6wuMz/4nh/A3pcnCKA==", + "license": "MIT", "dependencies": { "@comunica/bus-http": "^2.10.2", "@comunica/bus-rdf-serialize": "^2.10.0", @@ -2100,6 +2384,7 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-update-hypermedia-sparql/-/actor-rdf-update-hypermedia-sparql-2.10.2.tgz", "integrity": "sha512-uw1NIAoxuAechsjTQ6b53XpGOMx3Mp5uEL5LtUwNC6COJE6tzWH8wG54Dwj+0VNxsgqsSircKu2xwGl1uOsOPg==", + "license": "MIT", "dependencies": { "@comunica/bus-http": "^2.10.2", "@comunica/bus-rdf-update-hypermedia": "^2.10.2", @@ -2113,10 +2398,108 @@ "stream-to-string": "^1.2.0" } }, + "node_modules/@comunica/actor-rdf-update-hypermedia-sparql/node_modules/@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-sparql/node_modules/cross-fetch": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-sparql/node_modules/fetch-sparql-endpoint": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/fetch-sparql-endpoint/-/fetch-sparql-endpoint-4.2.1.tgz", + "integrity": "sha512-nRaexc3QCO95bjESf4ngNQ1J+qNtVzxFGlPUopqOIVHm/j6IDhWg996kk7fBM98Mmo0uM9b6uiTbXmJHOrnqYA==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@smessie/readable-web-to-node-stream": "^3.0.3", + "@types/readable-stream": "^2.3.11", + "@types/sparqljs": "^3.1.3", + "abort-controller": "^3.0.0", + "cross-fetch": "^3.0.6", + "is-stream": "^2.0.0", + "minimist": "^1.2.0", + "n3": "^1.6.3", + "rdf-string": "^1.6.0", + "sparqljs": "^3.1.2", + "sparqljson-parse": "^2.2.0", + "sparqlxml-parse": "^2.1.1", + "stream-to-string": "^1.1.0" + }, + "bin": { + "fetch-sparql-endpoint": "bin/fetch-sparql-endpoint.js" + } + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-sparql/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-sparql/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-sparql/node_modules/sparqljson-parse": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/sparqljson-parse/-/sparqljson-parse-2.2.0.tgz", + "integrity": "sha512-2TfvNvUsaJyWfCrq3ExdDdbF9LBLzIUCricg+D1YCYbbmyTzscgCtRk4KcIyJF178DtfCt4BkKzbKl8IXMHp8w==", + "license": "MIT", + "dependencies": { + "@bergos/jsonparse": "^1.4.1", + "@rdfjs/types": "*", + "@types/readable-stream": "^2.3.13", + "rdf-data-factory": "^1.1.0", + "readable-stream": "^4.0.0" + } + }, + "node_modules/@comunica/actor-rdf-update-hypermedia-sparql/node_modules/sparqlxml-parse": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/sparqlxml-parse/-/sparqlxml-parse-2.1.1.tgz", + "integrity": "sha512-71sltShF6gDAzuKWEHNeij7r0Mv5VqRrvJing6W4WHJ12GRe6+t1IRTv6MeqxYN3XJmKevs7B3HCBUo7wceeJQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "@rubensworks/saxes": "^6.0.1", + "@types/readable-stream": "^2.3.13", + "buffer": "^6.0.3", + "rdf-data-factory": "^1.1.0", + "readable-stream": "^4.0.0" + } + }, "node_modules/@comunica/actor-rdf-update-quads-hypermedia": { "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-update-quads-hypermedia/-/actor-rdf-update-quads-hypermedia-2.10.2.tgz", "integrity": "sha512-kzGfDv0PqcOIIULJLG8jtA/dOcrNUodu98J08ruSuYQBbnFgAZ07MG1TkWhEI/AM6D0w7hXkgQaC1sGWn4gVmA==", + "license": "MIT", "dependencies": { "@comunica/bus-dereference-rdf": "^2.10.0", "@comunica/bus-http-invalidate": "^2.10.0", @@ -2133,6 +2516,7 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/actor-rdf-update-quads-rdfjs-store/-/actor-rdf-update-quads-rdfjs-store-2.10.2.tgz", "integrity": "sha512-anX3SovvY2H8KwuWu8G9EqtITmCsz12jfqunNn5Efcch/bm4HyHTC1GThx77m6qpCdg4OMx8TLhNrH1II1UM1w==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-update-quads": "^2.10.2", "@comunica/core": "^2.10.0", @@ -2147,6 +2531,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/bindings-factory/-/bindings-factory-2.10.1.tgz", "integrity": "sha512-AUD3VWlCYljgk5jfaMejSIL9CiX3aV/cAn314e/dYP/rrnVgachcCwyaD8hKHWTBHDs5rcGxr/iwruBOfsERvQ==", + "license": "MIT", "dependencies": { "@rdfjs/types": "*", "immutable": "^4.1.0", @@ -2158,6 +2543,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-context-preprocess/-/bus-context-preprocess-2.10.0.tgz", "integrity": "sha512-eJ5CkzbnmxB9fkr2F05jnnjcaowp+yxd0+pAtvx5MLl2Kpx3nWLqHPcl4/EVVDPD+i0TEkq4AXQ1BD9BMuXK0A==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0" @@ -2167,6 +2553,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-dereference/-/bus-dereference-2.10.0.tgz", "integrity": "sha512-nWyQXiH7zbiPTVttWVKJHykhV4IuahfhfUwPx3Op+cVsK489Su84dnGeSmPkxTAFFuxe6wU6ZEH4i7PDu48YvQ==", + "license": "MIT", "dependencies": { "@comunica/actor-abstract-mediatyped": "^2.10.0", "@comunica/actor-abstract-parse": "^2.10.0", @@ -2180,6 +2567,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-dereference-rdf/-/bus-dereference-rdf-2.10.0.tgz", "integrity": "sha512-WY/wPmFpO76wwJ2D5Aus43ZbYnBRLvQ0EOp4yywO0lBiq6F0JisjCVCM4EtWouOEAAfqEoIjHXGyC3gPWqm+SQ==", + "license": "MIT", "dependencies": { "@comunica/bus-dereference": "^2.10.0", "@comunica/bus-rdf-parse": "^2.10.0", @@ -2191,6 +2579,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-hash-bindings/-/bus-hash-bindings-2.10.0.tgz", "integrity": "sha512-EdzIUgpSWMtFVxEJSesuQpMkfgznDap+U0F9epotxXc20Gg/qjTzs1gF6NkpDpaidQ7cFlV16vdbdfi8uiZ+mQ==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0" @@ -2200,6 +2589,7 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/bus-http/-/bus-http-2.10.2.tgz", "integrity": "sha512-MAYRF6uEBAuJ9dCPW2Uyne7w3lNwXFXKfa14XuPG5DFTDpgo/Z2pWupPrBsA1eIWMNJ6WOG6QyEv4rllSIBqlg==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", "@smessie/readable-web-to-node-stream": "^3.0.3", @@ -2212,6 +2602,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-http-invalidate/-/bus-http-invalidate-2.10.0.tgz", "integrity": "sha512-9DevRUzuCOfHFtsryIvTU6rOz6vMbnuDzerloBoNsLFVzQCU4wPNZbxiOn0+GMDXxw7M3KgYd+KFxI2kGObVWA==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0" } @@ -2220,6 +2611,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-init/-/bus-init-2.10.0.tgz", "integrity": "sha512-hJejHa8sLVhQLFlduCVnhOd5aW3FCEz8wmWjyeLI3kiHFaQibnGVMhUuuNRX5f8bnnPuTdEiHc1nnYHuSi+j8A==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", "readable-stream": "^4.4.2" @@ -2229,6 +2621,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-optimize-query-operation/-/bus-optimize-query-operation-2.10.0.tgz", "integrity": "sha512-qawKJprbVc+dfjBgVzV45UEo+jZBzY3dRo0a8UkXSvgSWPcX18SGrURl2VL4sZZSAyXQBMrGUwH2eUD8l26ZJQ==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0", @@ -2239,6 +2632,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/bus-query-operation/-/bus-query-operation-2.10.1.tgz", "integrity": "sha512-PoUSJeKaMZtZu+ZtB+5ABjPOiW1YjxOdLE1N5znxX2oiDKCQHmAXVaVkbVx1jPDLGYFNcOlOSzpRMqLQ/L4JIw==", + "license": "MIT", "dependencies": { "@comunica/bindings-factory": "^2.10.1", "@comunica/context-entries": "^2.10.0", @@ -2256,6 +2650,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-query-parse/-/bus-query-parse-2.10.0.tgz", "integrity": "sha512-1LynxACgCYTuBH/JMRG/IGaWtTVwr2O8wxOosCId2W3BDW9nf2DSCyOdnxnCSMSKfnLFWiaVuKybn24OLXW2dQ==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", "@rdfjs/types": "*", @@ -2266,6 +2661,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-query-result-serialize/-/bus-query-result-serialize-2.10.0.tgz", "integrity": "sha512-9P5KUzmXvjtLbd44UVxYNB0yqAHx7molBUc7aysUQ3pbIcP/A57GXzAfiKueeiZ9cVRRG/BGsVoDGVj59tGWNg==", + "license": "MIT", "dependencies": { "@comunica/actor-abstract-mediatyped": "^2.10.0", "@comunica/core": "^2.10.0", @@ -2276,6 +2672,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-join/-/bus-rdf-join-2.10.1.tgz", "integrity": "sha512-pPFoJVHY5p931jIKt+9sqRCGiuuf8yFqrlOOAd3un72cwuyhwNHvn52xwvcPlNUAySz/kDmW+U0syflqI6VdAw==", + "license": "MIT", "dependencies": { "@comunica/bus-query-operation": "^2.10.1", "@comunica/bus-rdf-join-selectivity": "^2.10.0", @@ -2293,6 +2690,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-join-entries-sort/-/bus-rdf-join-entries-sort-2.10.0.tgz", "integrity": "sha512-17FQrdYtzjY84OI/ZvipJKD0ei3IySmsWwaGC9sIJn+1W4LBVKudTu5S0tzGTKTb0URhS4mrCliUBzyINtIZMQ==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0" @@ -2302,6 +2700,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-join-selectivity/-/bus-rdf-join-selectivity-2.10.0.tgz", "integrity": "sha512-YjoygSiH6r4SAYqz6gpvUql2vnznPVE62IsWqYnjFWeH1kBsxO5yEOO01s2FfN3jLcfsytTyG7VNTCN788YbaA==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", "@comunica/mediatortype-accuracy": "^2.10.0", @@ -2312,6 +2711,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-metadata/-/bus-rdf-metadata-2.10.0.tgz", "integrity": "sha512-LRUnHVqIzyUlmPKPNAYOusCF53iN8KEX7l/VinlA7NH3XBLhTkFoth26MVqIVtjtdH0hVfUVpkwy2kFEJpGldw==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", "@rdfjs/types": "*" @@ -2321,6 +2721,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-metadata-accumulate/-/bus-rdf-metadata-accumulate-2.10.0.tgz", "integrity": "sha512-XG/3s4a3yGpYt4H+sn9T2zTaUxLG+37dmhRhXv2cBmR4gaCXkglERPaOrQygHldEF+4ITF3RmXHCgANsQ1AwQg==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0" @@ -2330,6 +2731,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-metadata-extract/-/bus-rdf-metadata-extract-2.10.0.tgz", "integrity": "sha512-KcMZh+7kHjdCIMkLFki99tQH1arVp/evVnk0BGXfWd+ca3eCLrr42tb1tGfN2JkaCSxgtzWO4DRZcSzJ4sI2dQ==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", "@rdfjs/types": "*" @@ -2339,6 +2741,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse/-/bus-rdf-parse-2.10.0.tgz", "integrity": "sha512-EgCMZACfTG/+mayQpExWt0HoBT32BBVC1aS1lC43fXKBTxJ8kYrSrorVUuMACoh4dQVGTb+7j1j4K0hGNVzXGA==", + "license": "MIT", "dependencies": { "@comunica/actor-abstract-mediatyped": "^2.10.0", "@comunica/actor-abstract-parse": "^2.10.0", @@ -2350,6 +2753,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-parse-html/-/bus-rdf-parse-html-2.10.0.tgz", "integrity": "sha512-RZliz4TtKP63QggoohGuIkGb6lq0BoYJ4aztKtGldWtPAVP/pdEvlDpiZWLB/j19g7S2aDLNY/lJtZ5efM1tHQ==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", "@rdfjs/types": "*" @@ -2359,6 +2763,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-resolve-hypermedia/-/bus-rdf-resolve-hypermedia-2.10.0.tgz", "integrity": "sha512-DjCoAg62pPzEOH5gKM9gaL4CVUmhBsmyOzao0tRu20G7L6RnTIFtRaOwMN2z+2uC7AkJRHZY12bPUb+yM8V0UQ==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-resolve-quad-pattern": "^2.10.0", "@comunica/core": "^2.10.0", @@ -2369,6 +2774,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-resolve-hypermedia-links/-/bus-rdf-resolve-hypermedia-links-2.10.0.tgz", "integrity": "sha512-Mcz6bUdZySLK2om0cMt86n5TOThZOTpEFq2M42n7YAE3LL2KMnMDdhkaOC6SyY4tS0HGAuhce21Uq+Gz8Veq2g==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0", @@ -2379,6 +2785,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-resolve-hypermedia-links-queue/-/bus-rdf-resolve-hypermedia-links-queue-2.10.0.tgz", "integrity": "sha512-f9amJk7ikktRfOoRnwag1KMTuo9v+PiDEVQA0dijl+jhcispKdjG6XK0MdZ1KSEmtUWejjS6nMRGvfJdM37eog==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-resolve-hypermedia-links": "^2.10.0", "@comunica/core": "^2.10.0" @@ -2388,6 +2795,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-resolve-quad-pattern/-/bus-rdf-resolve-quad-pattern-2.10.0.tgz", "integrity": "sha512-JEI4DqSprGmrbfmiIwc8PbS+HCoxXwmMtp7gDpoB1HyYKIHzzu9DOIiwmYEDRO5dwV+uTwaYKZz/mUPm2U6EEg==", + "license": "MIT", "dependencies": { "@comunica/context-entries": "^2.10.0", "@comunica/core": "^2.10.0", @@ -2401,6 +2809,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-serialize/-/bus-rdf-serialize-2.10.0.tgz", "integrity": "sha512-AmbN9MUgw6B6AfrIqR1u7PWHZFgbJz+j1SFJVtnHQ51hEpG+Ig9nNG2IWjHOsFK0xBBQ/wXgNmt/cufEMRM1SQ==", + "license": "MIT", "dependencies": { "@comunica/actor-abstract-mediatyped": "^2.10.0", "@comunica/core": "^2.10.0", @@ -2411,6 +2820,7 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-update-hypermedia/-/bus-rdf-update-hypermedia-2.10.2.tgz", "integrity": "sha512-GbRMxXN4kx+4UPsnGxWjyn770m675yy2gWK/xy/5qQIxxRTcuGk4wm/994FZQXpwLX1E0xJ+YKxMgXTIlEWmQA==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-update-quads": "^2.10.2", "@comunica/core": "^2.10.0" @@ -2420,6 +2830,7 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/bus-rdf-update-quads/-/bus-rdf-update-quads-2.10.2.tgz", "integrity": "sha512-+iVpAHps8ytGq8AZF4xTZbLyskS40JPn64MO+OAuYovqXLlezp6vh9eJ5qETuP9NP+BpZDk3nOU3Ky3fb0QCUw==", + "license": "MIT", "dependencies": { "@comunica/actor-rdf-resolve-quad-pattern-federated": "^2.10.1", "@comunica/bus-http": "^2.10.2", @@ -2434,12 +2845,14 @@ "node_modules/@comunica/config-query-sparql": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/@comunica/config-query-sparql/-/config-query-sparql-2.7.0.tgz", - "integrity": "sha512-rMnFgT7cz9+0z7wV4OzIMY5qM9/Z0mTGrR8y2JokoHyyTcBGOSajFmy61XCSLMCsLLG8qDXsJ4ClCCky3TGfqA==" + "integrity": "sha512-rMnFgT7cz9+0z7wV4OzIMY5qM9/Z0mTGrR8y2JokoHyyTcBGOSajFmy61XCSLMCsLLG8qDXsJ4ClCCky3TGfqA==", + "license": "MIT" }, "node_modules/@comunica/context-entries": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/context-entries/-/context-entries-2.10.0.tgz", "integrity": "sha512-lmCYCcXxW8C6ecFH2whZCt31NT1ejb0P/sbytK7f4ctyA06Q8iYFEcYE4eWOXMdpfkwkcnz31x9XL77OGeSC2Q==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0", @@ -2452,6 +2865,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/core/-/core-2.10.0.tgz", "integrity": "sha512-onsGs2iKHUPRxxMOdx42vdxslk8q9FQZdRjQtHJ6SGiCpJwIL9ciBgPIOl2RL2YfzXHemr/0umeNOppRDcWhJA==", + "license": "MIT", "dependencies": { "@comunica/types": "^2.10.0", "immutable": "^4.1.0" @@ -2464,6 +2878,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/@comunica/data-factory/-/data-factory-2.7.0.tgz", "integrity": "sha512-dSTzrR1w9SzAWx70ZXKXHUC8f0leUolLZ9TOhGjFhhsBMJ9Pbo0g6vHV8txX5FViShngrg9QNKhsHeQnMk5z6Q==", + "license": "MIT", "dependencies": { "@rdfjs/types": "*" } @@ -2472,6 +2887,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/expression-evaluator/-/expression-evaluator-2.10.0.tgz", "integrity": "sha512-gSfiVSAE+SaxpXq3jT5OnyZd+sD9KFaWtTiKT1tDDs8lD7Jj68aRP7VoEhvKwPwRlUx0aoaXUL2MYtV6JsXRbg==", + "license": "MIT", "dependencies": { "@rdfjs/types": "*", "@types/spark-md5": "^3.0.2", @@ -2487,10 +2903,25 @@ "uuid": "^9.0.0" } }, + "node_modules/@comunica/expression-evaluator/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@comunica/logger-pretty": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/logger-pretty/-/logger-pretty-2.10.0.tgz", "integrity": "sha512-JXkeM5HnbyTPnQTf5/ugRPL9R+vXT7b/hRVYzYmhAGCjkCNL7NJPTBbIgxmZHqZ+UGxprotrvmDQtwHmVA+Ddw==", + "license": "MIT", "dependencies": { "@comunica/types": "^2.10.0", "object-inspect": "^1.12.2", @@ -2501,6 +2932,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/logger-void/-/logger-void-2.10.0.tgz", "integrity": "sha512-GFJh9hV8rIC9yXAuLGGKjQRVs8IOQOINBbaTNO+FJUWWWHlo5pDEKAoGYuysz5TBGoT3Lexz8bMfdkuHMa3uIQ==", + "license": "MIT", "dependencies": { "@comunica/types": "^2.10.0" } @@ -2509,6 +2941,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/mediator-all/-/mediator-all-2.10.0.tgz", "integrity": "sha512-y1+A+sIW462G8iPzi6BSPIb4I9iy08ZruM2Thf1or6sytwLKro7E2RYjS6IdupwfFYafXXCeT85+lrJgTKERhQ==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0" } @@ -2517,6 +2950,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/mediator-combine-pipeline/-/mediator-combine-pipeline-2.10.0.tgz", "integrity": "sha512-j7+/oUlbhKB4Rq6g9oNKU+e9cQL8U9z8tAUNhoXUSHajcr4huj0t1+riaOD109/DRWhV793ILhBDzgiZbHd7DA==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", "@comunica/types": "^2.10.0" @@ -2526,6 +2960,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/mediator-combine-union/-/mediator-combine-union-2.10.0.tgz", "integrity": "sha512-QbP4zP1i6nMDZ8teC0RoTz5E8pOpxDhWPBr1ylb2jzPUjPpMgrnbHYTondlN0Oau3SMEehItojg/LYDtPOP/GQ==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0" } @@ -2534,6 +2969,7 @@ "version": "2.10.1", "resolved": "https://registry.npmjs.org/@comunica/mediator-join-coefficients-fixed/-/mediator-join-coefficients-fixed-2.10.1.tgz", "integrity": "sha512-HRvc0e8QDnR3sbRMMCyx9ILFA6KiUxHEqDOpt7BV3kFMWWIpBavFDwPUjLBG6sRA8o0CFu1+oVVh5fAFYZIxzQ==", + "license": "MIT", "dependencies": { "@comunica/bus-rdf-join": "^2.10.1", "@comunica/context-entries": "^2.10.0", @@ -2546,6 +2982,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/mediator-number/-/mediator-number-2.10.0.tgz", "integrity": "sha512-0T8D1HGTu5Sd8iKb2dBjc6VRc/U4A15TAN6m561ra9pFlP+w31kby0ZYP6WWBHBobbUsX1LCvnbRQaAC4uWwVw==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0" } @@ -2554,6 +2991,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/mediator-race/-/mediator-race-2.10.0.tgz", "integrity": "sha512-JiEtOLMkPnbjSLabVpE4VqDbu2ZKKnkUdATGBeWX+o+MjPw6c0hhw01RG4WY2rQhDyNl++nLQe3EowQh8xW9TA==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0" } @@ -2562,6 +3000,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/mediatortype-accuracy/-/mediatortype-accuracy-2.10.0.tgz", "integrity": "sha512-u9Noai4yGACaBRGOoRZ65XoQhazKNx5QaFOX5nJ/p84Qq4g50woC2rpsncuyrXhW1j/rIc2WvIUGUfy/g6CDiw==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0" } @@ -2570,6 +3009,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/mediatortype-httprequests/-/mediatortype-httprequests-2.10.0.tgz", "integrity": "sha512-uPjs/NdngHZZWomjZor6W29UeOlxganupIOa3Z6H3qdUnsSpxeoS9URXy7BICAX+4PmgebperSn18BRA+PWiSw==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0" } @@ -2578,6 +3018,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/mediatortype-join-coefficients/-/mediatortype-join-coefficients-2.10.0.tgz", "integrity": "sha512-EPipAV5PDNeEVXbsd+8NsqNKu5ztCAoEJ3azcFAmD9di9ppArNJWU/mxy5yUzcBgMUX4wRp6jCa5rIF5sRHG7g==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", "@rdfjs/types": "*" @@ -2587,6 +3028,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/mediatortype-time/-/mediatortype-time-2.10.0.tgz", "integrity": "sha512-nBz1exxrja1Tj8KSlSevG4Hw2u09tTh6gtNfVjI76i/e7muu4RUWVhi9b8PcwBNAfuUqRl+5OgOSa2X4W+6QlA==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0" } @@ -2595,6 +3037,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/metadata/-/metadata-2.10.0.tgz", "integrity": "sha512-PF7TKhuDIO4GE9tzuAkTxarQV5cmwXZ64hp0qm8Ql/V+dVHu/3xLL9v/Q67ZX26GF9hOyr7cdpNI08M7DHc86g==", + "license": "MIT", "dependencies": { "@comunica/types": "^2.10.0" } @@ -2603,6 +3046,7 @@ "version": "2.10.2", "resolved": "https://registry.npmjs.org/@comunica/query-sparql/-/query-sparql-2.10.2.tgz", "integrity": "sha512-bgjQ8N5/vP3Iy71AgDKQc06mXmEBvh7dsenw2VPbvk11iXywec4XCq8TzX+GozL+Zxxl5XyYlBw+nRjvORTGHg==", + "license": "MIT", "dependencies": { "@comunica/actor-context-preprocess-source-to-destination": "^2.10.0", "@comunica/actor-dereference-fallback": "^2.10.0", @@ -2747,6 +3191,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/runner/-/runner-2.10.0.tgz", "integrity": "sha512-v/oEKT+IwjO6Y74bCCzlR+ZMI6oykpfz7GQrQbl1oTWQsvBbTdf0omPkoYnk1esEAsFnsJD+NGwAiRiFKeBo0A==", + "license": "MIT", "dependencies": { "@comunica/bus-init": "^2.10.0", "@comunica/core": "^2.10.0", @@ -2761,6 +3206,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/runner-cli/-/runner-cli-2.10.0.tgz", "integrity": "sha512-16QI0rWFHURCy5waVFcZ/fhKI/hyzNx5YyCGPaEaUX8MKyamvCCXHSWvPLLbjJbsjGZ9wXrC9dwwhRmbfmidpw==", + "license": "MIT", "dependencies": { "@comunica/core": "^2.10.0", "@comunica/runner": "^2.10.0", @@ -2775,6 +3221,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@comunica/types/-/types-2.10.0.tgz", "integrity": "sha512-1UjPGbZcYrapBjMGUZedrIGcn9rOLpEOlJo1ZkWddFUGTwndVg9d4BZnQw+UnQzXMcLJcdKt94Zns8iEmBqARw==", + "license": "MIT", "dependencies": { "@rdfjs/types": "*", "@types/yargs": "^17.0.24", @@ -2783,86 +3230,29 @@ } }, "node_modules/@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.8.tgz", + "integrity": "sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==", + "license": "MIT", "dependencies": { - "colorspace": "1.1.x", + "@so-ric/colorspace": "^1.1.6", "enabled": "2.0.x", "kuler": "^2.0.0" } }, "node_modules/@digitalbazaar/http-client": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-4.3.0.tgz", - "integrity": "sha512-6lMpxpt9BOmqHKGs9Xm6DP4LlZTBFer/ZjHvP3FcW3IaUWYIWC7dw5RFZnvw4fP57kAVcm1dp3IF+Y50qhBvAw==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-4.4.0.tgz", + "integrity": "sha512-ODhCGmElUPmR3IR+KZmBNkRAFyjJ01rxvk2E+/qQ2h2EGPJH5k6bz3N24ympGc5+i4YCGk/ipIpmkwc0+iSmRg==", "license": "BSD-3-Clause", "dependencies": { - "ky": "^1.14.2", - "undici": "^6.23.0" + "ky": "^1.14.3", + "undici": "^6.28.0" }, "engines": { "node": ">=18.0" } }, - "node_modules/@emnapi/core": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.1.tgz", - "integrity": "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "1.2.0", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/core/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD", - "optional": true - }, - "node_modules/@emnapi/runtime": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz", - "integrity": "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD", - "optional": true - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz", - "integrity": "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD", - "optional": true - }, "node_modules/@emotion/is-prop-valid": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.7.3.tgz", @@ -2879,9 +3269,9 @@ "license": "MIT" }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz", + "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==", "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.4.3" @@ -2906,14 +3296,14 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", - "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "version": "0.21.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz", + "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", "license": "Apache-2.0", "dependencies": { "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", - "minimatch": "^3.1.2" + "minimatch": "^3.1.5" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2944,19 +3334,19 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", - "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.6.tgz", + "integrity": "sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA==", "license": "MIT", "dependencies": { - "ajv": "^6.12.4", + "ajv": "^6.14.0", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^4.1.1", - "minimatch": "^3.1.2", + "js-yaml": "^4.3.0", + "minimatch": "^3.1.5", "strip-json-comments": "^3.1.1" }, "engines": { @@ -2966,40 +3356,10 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/@eslint/js": { - "version": "9.39.2", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", - "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", + "version": "9.39.5", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.5.tgz", + "integrity": "sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==", "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3040,27 +3400,40 @@ } }, "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, "engines": { "node": ">=18.18.0" } }, "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", "license": "Apache-2.0", "dependencies": { - "@humanfs/core": "^0.19.1", + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", "@humanwhocodes/retry": "^0.4.0" }, "engines": { "node": ">=18.18.0" } }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -3101,37 +3474,17 @@ "node": "^20.0.0 || ^22.0.0" } }, - "node_modules/@inrupt/solid-client-authn-core/node_modules/jose": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/jose/-/jose-5.10.0.tgz", - "integrity": "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/@inrupt/solid-client-authn-core/node_modules/uuid": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", - "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/esm/bin/uuid" - } - }, "node_modules/@ioredis/commands": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", - "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==" + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.10.0.tgz", + "integrity": "sha512-UmeW7z4LfctwoQ5wkhVzgq8tXkreED2xZGpX+Bg+zA+WJFZCT6c062AfCK/Dfk81xZnnwdhJCUMkitihRaoC2Q==", + "license": "MIT" }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, "license": "ISC", "dependencies": { "string-width": "^5.1.2", @@ -3146,9 +3499,10 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz", + "integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -3161,6 +3515,7 @@ "version": "6.2.3", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -3173,12 +3528,14 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", @@ -3196,6 +3553,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^6.2.2" @@ -3211,6 +3569,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", @@ -3250,27 +3609,118 @@ "node": ">=8" } }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.2.tgz", + "integrity": "sha512-6EuL879VkRA+1Cz578mKMiKvjPNEuk6+r1JaFzoSWejZmtf7xWbIyw1e3KkxlkzTIt9Taw6JBhEppG7utc1P+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@jest/console": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.3.0.tgz", - "integrity": "sha512-PAwCvFJ4696XP2qZj+LAn1BWjZaJ6RjG6c7/lkMaUJnkyMS34ucuIsfqYvfskVNvUI27R/u4P1HMYFnlVXG/Ww==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.5.0.tgz", + "integrity": "sha512-BI1DpOedrJqbrYVi9yNhDWGjqphR/+gsM4STmg2+VaeXm7851hvpBDyKOZGMXATTrGEnFuEseQvLCtrrRmG0GQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.3.0", + "@jest/types": "30.5.0", "@types/node": "*", "chalk": "^4.1.2", - "jest-message-util": "30.3.0", - "jest-util": "30.3.0", + "jest-message-util": "30.5.0", + "jest-util": "30.5.0", "slash": "^3.0.0" }, "engines": { @@ -3278,38 +3728,39 @@ } }, "node_modules/@jest/core": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.3.0.tgz", - "integrity": "sha512-U5mVPsBxLSO6xYbf+tgkymLx+iAhvZX43/xI1+ej2ZOPnPdkdO1CzDmFKh2mZBn2s4XZixszHeQnzp1gm/DIxw==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.5.0.tgz", + "integrity": "sha512-DLjRME+NY//j+UDTSfWnjoP0srrdR3DrJRy7yFZktGIwzpN2iVy2vMo0jziZ5c2Ij7bOwlJRXKVWtxZusazOJg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.3.0", - "@jest/pattern": "30.0.1", - "@jest/reporters": "30.3.0", - "@jest/test-result": "30.3.0", - "@jest/transform": "30.3.0", - "@jest/types": "30.3.0", + "@jest/console": "30.5.0", + "@jest/pattern": "30.5.0", + "@jest/reporters": "30.5.0", + "@jest/test-result": "30.5.0", + "@jest/transform": "30.5.0", + "@jest/types": "30.5.0", "@types/node": "*", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", "ci-info": "^4.2.0", "exit-x": "^0.2.2", + "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.11", - "jest-changed-files": "30.3.0", - "jest-config": "30.3.0", - "jest-haste-map": "30.3.0", - "jest-message-util": "30.3.0", - "jest-regex-util": "30.0.1", - "jest-resolve": "30.3.0", - "jest-resolve-dependencies": "30.3.0", - "jest-runner": "30.3.0", - "jest-runtime": "30.3.0", - "jest-snapshot": "30.3.0", - "jest-util": "30.3.0", - "jest-validate": "30.3.0", - "jest-watcher": "30.3.0", - "pretty-format": "30.3.0", + "jest-changed-files": "30.5.0", + "jest-config": "30.5.0", + "jest-haste-map": "30.5.0", + "jest-message-util": "30.5.0", + "jest-regex-util": "30.5.0", + "jest-resolve": "30.5.0", + "jest-resolve-dependencies": "30.5.0", + "jest-runner": "30.5.0", + "jest-runtime": "30.5.0", + "jest-snapshot": "30.5.0", + "jest-util": "30.5.0", + "jest-validate": "30.5.0", + "jest-watcher": "30.5.0", + "pretty-format": "30.5.0", "slash": "^3.0.0" }, "engines": { @@ -3325,9 +3776,9 @@ } }, "node_modules/@jest/diff-sequences": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.3.0.tgz", - "integrity": "sha512-cG51MVnLq1ecVUaQ3fr6YuuAOitHK1S4WUJHnsPFE/quQr33ADUx1FfrTCpMCRxvy0Yr9BThKpDjSlcTi91tMA==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.5.0.tgz", + "integrity": "sha512-OsqBjHXCn8cadasoAZBP6nWYvMsRhpMzGXTpxJ5aO04NlbdhIz+FVe3q49l0AwVhsz/cEmIpBes6gAFl1/dWQg==", "dev": true, "license": "MIT", "engines": { @@ -3335,70 +3786,70 @@ } }, "node_modules/@jest/environment": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.3.0.tgz", - "integrity": "sha512-SlLSF4Be735yQXyh2+mctBOzNDx5s5uLv88/j8Qn1wH679PDcwy67+YdADn8NJnGjzlXtN62asGH/T4vWOkfaw==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.5.0.tgz", + "integrity": "sha512-HUaqexIauIh69IQ4NTuPDEUCB8g8T4TOPSIzQOS18mwI/KEHKQk1j013K2o6ra031szZE2t5jGmVx3xbzdjgKA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/fake-timers": "30.3.0", - "@jest/types": "30.3.0", + "@jest/fake-timers": "30.5.0", + "@jest/types": "30.5.0", "@types/node": "*", - "jest-mock": "30.3.0" + "jest-mock": "30.5.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/expect": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.3.0.tgz", - "integrity": "sha512-76Nlh4xJxk2D/9URCn3wFi98d2hb19uWE1idLsTt2ywhvdOldbw3S570hBgn25P4ICUZ/cBjybrBex2g17IDbg==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.5.0.tgz", + "integrity": "sha512-jEmgmgJEobJ3zEhDOGp1VAJ6JkoVelpS8uZ1ae1Ul/5lP78UKJKmmU0lciJwd6JdnqOXHaaS/QCKwbf1dHI9MA==", "dev": true, "license": "MIT", "dependencies": { - "expect": "30.3.0", - "jest-snapshot": "30.3.0" + "expect": "30.5.0", + "jest-snapshot": "30.5.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/expect-utils": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.3.0.tgz", - "integrity": "sha512-j0+W5iQQ8hBh7tHZkTQv3q2Fh/M7Je72cIsYqC4OaktgtO7v1So9UTjp6uPBHIaB6beoF/RRsCgMJKvti0wADA==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.5.0.tgz", + "integrity": "sha512-5j0ztPxSy3McUJihjkDdCyCfjvT2hxykFTWsgEBZKB8qsw9ALdCiGTpTRH5gnf/d+qI4SflYUJ0dWNbzjQCWbA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.1.0" + "@jest/get-type": "30.5.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.3.0.tgz", - "integrity": "sha512-WUQDs8SOP9URStX1DzhD425CqbN/HxUYCTwVrT8sTVBfMvFqYt/s61EK5T05qnHu0po6RitXIvP9otZxYDzTGQ==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.5.0.tgz", + "integrity": "sha512-sg8xIbYwe5GdB/vT3/0qrDIpO7Ov9mazHi++M95uynmDKEZ70G1r169AWct73H07VrTZhrz1SJEfLtjYv8tE3A==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.3.0", - "@sinonjs/fake-timers": "^15.0.0", + "@jest/types": "30.5.0", + "@sinonjs/fake-timers": "^15.4.0", "@types/node": "*", - "jest-message-util": "30.3.0", - "jest-mock": "30.3.0", - "jest-util": "30.3.0" + "jest-message-util": "30.5.0", + "jest-mock": "30.5.0", + "jest-util": "30.5.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/get-type": { - "version": "30.1.0", - "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", - "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.5.0.tgz", + "integrity": "sha512-9/2VUPitAjmBzbvDvqrxmvB7BzWsBW0WmkkojX1ODuxX1NLGxx9gfaZpHB0z8DtJ9uhGNmZG/VXBhf8uO0OV8Q==", "dev": true, "license": "MIT", "engines": { @@ -3406,62 +3857,78 @@ } }, "node_modules/@jest/globals": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.3.0.tgz", - "integrity": "sha512-+owLCBBdfpgL3HU+BD5etr1SvbXpSitJK0is1kiYjJxAAJggYMRQz5hSdd5pq1sSggfxPbw2ld71pt4x5wwViA==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.5.0.tgz", + "integrity": "sha512-h7eJx534czwL8lQMYB0hwLT4/HquO8EX/RtYL7RNUHyUyWWVciYjoudN4Ns5JmNvn2/jh0Vm9UstZjEzJJ5EsQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.3.0", - "@jest/expect": "30.3.0", - "@jest/types": "30.3.0", - "jest-mock": "30.3.0" + "@jest/environment": "30.5.0", + "@jest/expect": "30.5.0", + "@jest/types": "30.5.0", + "jest-mock": "30.5.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/pattern": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", - "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.5.0.tgz", + "integrity": "sha512-HdNQYSdRTEBNrginaqzQtTjG0HRMfrra/z6Ok7uL3S87vSlarIVohEsJsSj5edu3MiHoHjAkvPROz5ZjoKai+w==", "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", - "jest-regex-util": "30.0.1" + "jest-regex-util": "30.5.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, + "node_modules/@jest/react-is-18": { + "name": "react-is", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/react-is-19": { + "name": "react-is", + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.8.tgz", + "integrity": "sha512-s5un28nYxKJw5gvUHyW5PCC28CvBqLu9r3cWgzHT4Vo/5fqqkFcdRYsGcKf50WMPpjjFZS5d76fn3YCo2njKwQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@jest/reporters": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.3.0.tgz", - "integrity": "sha512-a09z89S+PkQnL055bVj8+pe2Caed2PBOaczHcXCykW5ngxX9EWx/1uAwncxc/HiU0oZqfwseMjyhxgRjS49qPw==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.5.0.tgz", + "integrity": "sha512-FEAuusWm+PUOn9ydjaHhpOpyPmS6IbGE04HaKTuUI4zd8eqYZiXiNLoCsdCog/l2XnNj53E9pFy64UltcvfJKg==", "dev": true, "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "30.3.0", - "@jest/test-result": "30.3.0", - "@jest/transform": "30.3.0", - "@jest/types": "30.3.0", - "@jridgewell/trace-mapping": "^0.3.25", + "@jest/console": "30.5.0", + "@jest/test-result": "30.5.0", + "@jest/transform": "30.5.0", + "@jest/types": "30.5.0", + "@jridgewell/trace-mapping": "^0.3.31", "@types/node": "*", "chalk": "^4.1.2", "collect-v8-coverage": "^1.0.2", "exit-x": "^0.2.2", - "glob": "^10.5.0", + "glob": "^13.0.6", "graceful-fs": "^4.2.11", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-instrument": "^6.0.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^5.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "30.3.0", - "jest-util": "30.3.0", - "jest-worker": "30.3.0", + "jest-message-util": "30.5.0", + "jest-util": "30.5.0", + "jest-worker": "30.5.0", "slash": "^3.0.0", "string-length": "^4.0.2", "v8-to-istanbul": "^9.0.1" @@ -3479,9 +3946,9 @@ } }, "node_modules/@jest/schemas": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", - "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.5.0.tgz", + "integrity": "sha512-/hunigyNpc4RCjC0VaW3f5RCUZVM2+WQ65qP7z083Gmvac7or2LI50XVNOtE4YPgBpV0yxYiAgorAPGniCoJmg==", "dev": true, "license": "MIT", "dependencies": { @@ -3492,13 +3959,13 @@ } }, "node_modules/@jest/snapshot-utils": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.3.0.tgz", - "integrity": "sha512-ORbRN9sf5PP82v3FXNSwmO1OTDR2vzR2YTaR+E3VkSBZ8zadQE6IqYdYEeFH1NIkeB2HIGdF02dapb6K0Mj05g==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.5.0.tgz", + "integrity": "sha512-iWQtIsi2dRsO2oWzVceOeynuRJiYTW8gsDVp5wFQ02ipHluQsNgBpasWSHiawVxukIlsGLdCtCSbIEK7fPtpvQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.3.0", + "@jest/types": "30.5.0", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "natural-compare": "^1.4.0" @@ -3508,14 +3975,15 @@ } }, "node_modules/@jest/source-map": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", - "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.5.0.tgz", + "integrity": "sha512-xWpTJP9D0bDFGbPGT8XuWSwwha/iHADyyKzUnMx4UbdgnHugxrDaQFO4RZ8x4ZsFzRP6pNii8uvlgKCDxCIuDg==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", + "@jridgewell/trace-mapping": "^0.3.31", "callsites": "^3.1.0", + "convert-source-map": "^2.0.0", "graceful-fs": "^4.2.11" }, "engines": { @@ -3523,14 +3991,14 @@ } }, "node_modules/@jest/test-result": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.3.0.tgz", - "integrity": "sha512-e/52nJGuD74AKTSe0P4y5wFRlaXP0qmrS17rqOMHeSwm278VyNyXE3gFO/4DTGF9w+65ra3lo3VKj0LBrzmgdQ==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.5.0.tgz", + "integrity": "sha512-9IlPqUzUMkVDmoDqSSrVVLroVotgN3hTUPWPwq24XWXhh1Zpg915RXZ5pgRJ/7j4YE/kng5nqjSn4p3S68SZJA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.3.0", - "@jest/types": "30.3.0", + "@jest/console": "30.5.0", + "@jest/types": "30.5.0", "@types/istanbul-lib-coverage": "^2.0.6", "collect-v8-coverage": "^1.0.2" }, @@ -3539,15 +4007,15 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.3.0.tgz", - "integrity": "sha512-dgbWy9b8QDlQeRZcv7LNF+/jFiiYHTKho1xirauZ7kVwY7avjFF6uTT0RqlgudB5OuIPagFdVtfFMosjVbk1eA==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.5.0.tgz", + "integrity": "sha512-TXlvSDIVv482b83hD8A8WtxDJEmGF47f60W6jRXOQL0Isfs3hKtk4rZIm9R/jLzAibg8+c56y+Q00BQs8R7Xcg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "30.3.0", + "@jest/test-result": "30.5.0", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.3.0", + "jest-haste-map": "30.5.0", "slash": "^3.0.0" }, "engines": { @@ -3555,23 +4023,23 @@ } }, "node_modules/@jest/transform": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.3.0.tgz", - "integrity": "sha512-TLKY33fSLVd/lKB2YI1pH69ijyUblO/BQvCj566YvnwuzoTNr648iE0j22vRvVNk2HsPwByPxATg3MleS3gf5A==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.5.0.tgz", + "integrity": "sha512-n1cYhoByyULEIXi64wbT4Lq91qeT1E6bwpM//sprFXhw955qaiHTdAmy1c1rNFGB6fCf1J+nxDUSf3RGwgZP5A==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.27.4", - "@jest/types": "30.3.0", - "@jridgewell/trace-mapping": "^0.3.25", - "babel-plugin-istanbul": "^7.0.1", + "@jest/types": "30.5.0", + "@jridgewell/trace-mapping": "^0.3.31", + "babel-plugin-istanbul": "^8.0.0", "chalk": "^4.1.2", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.3.0", - "jest-regex-util": "30.0.1", - "jest-util": "30.3.0", + "jest-haste-map": "30.5.0", + "jest-regex-util": "30.5.0", + "jest-util": "30.5.0", "pirates": "^4.0.7", "slash": "^3.0.0", "write-file-atomic": "^5.0.1" @@ -3581,14 +4049,14 @@ } }, "node_modules/@jest/types": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz", - "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.5.0.tgz", + "integrity": "sha512-s1N+79S4Yp9ZgklCauZXi+YPJdCdtStNYQT32stuD6EeQaIBGHoUfyj2P0YWy8RmuQfaJboO+ulxEvEheR/POQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.5", + "@jest/pattern": "30.5.0", + "@jest/schemas": "30.5.0", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", @@ -3603,6 +4071,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jeswr/prefixcc/-/prefixcc-1.2.1.tgz", "integrity": "sha512-kBBXbqsaeh3Irp416h/RbelqJgIOp6X/OJJlYmLyr/9qlBYKTKSCuEv5/xjZ0Yf8Yec+QFRYBaOQ2JkMBSH7KA==", + "license": "MIT", "dependencies": { "cross-fetch": "^3.1.5" }, @@ -3614,6 +4083,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "license": "MIT", "dependencies": { "node-fetch": "^2.7.0" } @@ -3665,15 +4135,17 @@ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", @@ -3690,6 +4162,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/@koa/cors/-/cors-5.0.0.tgz", "integrity": "sha512-x/iUDjcS90W69PryLDIMgFyV21YLTnG9zOpPXS7Bkt2b8AsY3zZsIpOLBkYr9fBcF3HbkKaER5hOBZLfpLgYNw==", + "license": "MIT", "dependencies": { "vary": "^1.1.2" }, @@ -3698,10 +4171,13 @@ } }, "node_modules/@koa/router": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@koa/router/-/router-13.1.0.tgz", - "integrity": "sha512-mNVu1nvkpSd8Q8gMebGbCkDWJ51ODetrFvLKYusej+V0ByD4btqHYnPIzTBLXnQMVUlm/oxVwqmWBY3zQfZilw==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/@koa/router/-/router-13.1.1.tgz", + "integrity": "sha512-JQEuMANYRVHs7lm7KY9PCIjkgJk73h4m4J+g2mkw2Vo1ugPZ17UJVqEH8F+HeAdjKz5do1OaLe7ArDz+z308gw==", + "deprecated": "Please upgrade to v15 or higher. All reported bugs in this version are fixed in newer releases, dependencies have been updated, and security has been improved.", + "license": "MIT", "dependencies": { + "debug": "^4.4.1", "http-errors": "^2.0.0", "koa-compose": "^4.1.0", "path-to-regexp": "^6.3.0" @@ -3725,26 +4201,13 @@ "@lit-labs/ssr-dom-shim": "^1.5.0" } }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", - "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.4.3", - "@emnapi/runtime": "^1.4.3", - "@tybys/wasm-util": "^0.10.0" - } - }, "node_modules/@noble/curves": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-2.3.0.tgz", - "integrity": "sha512-v7cY+4oWYPQszRj6ZFGzTVL7uP2TaLo1xMhWHzYC5wj0ZhOXQ5x+sBre8rF3hi8cAoi0bh1qXoovoOkdFtvqEg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-2.4.0.tgz", + "integrity": "sha512-P4/62zrgfH33CneE3Dn4WhJVA22YUU0eR51wKIan4NVRvwsA0YnPTwWGpNbpuacSujmSFLvyzpyuR30+fbq2Ew==", "license": "MIT", "dependencies": { - "@noble/hashes": "2.3.0" + "@noble/hashes": "2.4.0" }, "engines": { "node": ">= 20.19.0" @@ -3754,9 +4217,9 @@ } }, "node_modules/@noble/hashes": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.3.0.tgz", - "integrity": "sha512-oN+QwyX7VSHotibwubG3kpzbwKrfnyR6OOO+3Nk/53ADL7FmgHHz4TgrbaYKvvOw09u6QTx0oiH1cNCIOuN0CQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.4.0.tgz", + "integrity": "sha512-X5XaVWZIBCT7HHZGm5I7ZQXDwLG+bGXuSrMQAW+7Zvl87h1kmc1ZB1VSRJcpUfoUrGQp4Fkoxm5kZ+Ms+aW+eA==", "license": "MIT", "engines": { "node": ">= 20.19.0" @@ -3770,6 +4233,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -3783,6 +4247,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -3792,6 +4257,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -3800,10 +4266,67 @@ "node": ">= 8" } }, + "node_modules/@parcel/watcher": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.6.0.tgz", + "integrity": "sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.6.0", + "@parcel/watcher-darwin-arm64": "2.6.0", + "@parcel/watcher-darwin-x64": "2.6.0", + "@parcel/watcher-freebsd-x64": "2.6.0", + "@parcel/watcher-linux-arm-glibc": "2.6.0", + "@parcel/watcher-linux-arm-musl": "2.6.0", + "@parcel/watcher-linux-arm64-glibc": "2.6.0", + "@parcel/watcher-linux-arm64-musl": "2.6.0", + "@parcel/watcher-linux-x64-glibc": "2.6.0", + "@parcel/watcher-linux-x64-musl": "2.6.0", + "@parcel/watcher-win32-arm64": "2.6.0", + "@parcel/watcher-win32-x64": "2.6.0" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.6.0.tgz", + "integrity": "sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, "license": "MIT", "optional": true, "engines": { @@ -3811,13 +4334,13 @@ } }, "node_modules/@pkgr/core": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", - "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.3.6.tgz", + "integrity": "sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==", "dev": true, "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "node": "^14.18.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/pkgr" @@ -3827,6 +4350,7 @@ "version": "1.3.4", "resolved": "https://registry.npmjs.org/@rdfjs/data-model/-/data-model-1.3.4.tgz", "integrity": "sha512-iKzNcKvJotgbFDdti7GTQDCYmL7GsGldkYStiP0K8EYtN7deJu5t7U11rKTz+nR7RtesUggT+lriZ7BakFv8QQ==", + "license": "MIT", "dependencies": { "@rdfjs/types": ">=1.0.1" }, @@ -3838,6 +4362,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@rdfjs/dataset/-/dataset-1.1.1.tgz", "integrity": "sha512-BNwCSvG0cz0srsG5esq6CQKJc1m8g/M0DZpLuiEp0MMpfwguXX7VeS8TCg4UUG3DV/DqEvhy83ZKSEjdsYseeA==", + "license": "MIT", "dependencies": { "@rdfjs/data-model": "^1.2.0" }, @@ -3849,6 +4374,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rdfjs/namespace/-/namespace-1.1.0.tgz", "integrity": "sha512-utO5rtaOKxk8B90qzaQ0N+J5WrCI28DtfAY/zExCmXE7cOfC5uRI/oMKbLaVEPj2P7uArekt/T4IPATtj7Tjug==", + "license": "MIT", "dependencies": { "@rdfjs/data-model": "^1.1.0" }, @@ -3860,6 +4386,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rdfjs/term-set/-/term-set-1.1.0.tgz", "integrity": "sha512-QQ4yzVe1Rvae/GN9SnOhweHNpaxQtnAjeOVciP/yJ0Gfxtbphy2tM56ZsRLV04Qq5qMcSclZIe6irYyEzx/UwQ==", + "license": "MIT", "dependencies": { "@rdfjs/to-ntriples": "^2.0.0" } @@ -3867,12 +4394,14 @@ "node_modules/@rdfjs/to-ntriples": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@rdfjs/to-ntriples/-/to-ntriples-2.0.0.tgz", - "integrity": "sha512-nDhpfhx6W6HKsy4HjyLp3H1nbrX1CiUCWhWQwKcYZX1s9GOjcoQTwY7GUUbVec0hzdJDQBR6gnjxtENBDt482Q==" + "integrity": "sha512-nDhpfhx6W6HKsy4HjyLp3H1nbrX1CiUCWhWQwKcYZX1s9GOjcoQTwY7GUUbVec0hzdJDQBR6gnjxtENBDt482Q==", + "license": "MIT" }, "node_modules/@rdfjs/types": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.2.tgz", "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -3881,6 +4410,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/@rubensworks/saxes/-/saxes-6.0.1.tgz", "integrity": "sha512-UW4OTIsOtJ5KSXo2Tchi4lhZqu+tlHrOAs4nNti7CrtB53kAZl3/hyrTi6HkMihxdbDM6m2Zc3swc/ZewEe1xw==", + "license": "ISC", "dependencies": { "xmlchars": "^2.2.0" }, @@ -3889,9 +4419,9 @@ } }, "node_modules/@sinclair/typebox": { - "version": "0.34.48", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.48.tgz", - "integrity": "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==", + "version": "0.34.52", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.52.tgz", + "integrity": "sha512-XiMQh7qqVlxZzcVD+kkGMNGMzcTrDMLWI7S4x7z1MkCkbDPrekpZXEUK0eZqZFMuHQg2a2DZOcDIh9o5v3Gonw==", "dev": true, "license": "MIT" }, @@ -3899,6 +4429,7 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -3917,9 +4448,9 @@ } }, "node_modules/@sinonjs/fake-timers": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.1.1.tgz", - "integrity": "sha512-cO5W33JgAPbOh07tvZjUOJ7oWhtaqGHiZw+11DPbyqh2kHTBc3eF/CjJDeQ4205RLQsX6rxCuYOroFQwl7JDRw==", + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.4.0.tgz", + "integrity": "sha512-DsG+8/LscQIQg68J6Ef3dv10u6nVyetYn923s3/sus5eaGfTo1of5WMZSLf0UJc9KDuKPilPH0UDJCjvNbDNCA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -3930,6 +4461,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/@smessie/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.3.tgz", "integrity": "sha512-8FFE7psRtRWQT31/duqbmgnSf2++QLR2YH9kj5iwsHhnoqSvHdOY3SAN5e7dhc+60p2cNk7rv3HYOiXOapTEXQ==", + "license": "MIT", "dependencies": { "process": "^0.11.10", "readable-stream": "^4.5.1" @@ -3942,6 +4474,16 @@ "url": "https://github.com/sponsors/Borewit" } }, + "node_modules/@so-ric/colorspace": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@so-ric/colorspace/-/colorspace-1.1.6.tgz", + "integrity": "sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==", + "license": "MIT", + "dependencies": { + "color": "^5.0.2", + "text-hex": "1.0.x" + } + }, "node_modules/@solid-data-modules/contacts-rdflib": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/@solid-data-modules/contacts-rdflib/-/contacts-rdflib-0.7.1.tgz", @@ -3969,12 +4511,13 @@ "node_modules/@solid/access-control-policy": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@solid/access-control-policy/-/access-control-policy-0.1.3.tgz", - "integrity": "sha512-LTxfN8N5hNBNYfuwJr0nyfxlp2P0+GeK+biCa1FQgIqska3wXpTgYaxjVgsw27mKx4N1FOlaGwG+nXdLnl9ykg==" + "integrity": "sha512-LTxfN8N5hNBNYfuwJr0nyfxlp2P0+GeK+biCa1FQgIqska3wXpTgYaxjVgsw27mKx4N1FOlaGwG+nXdLnl9ykg==", + "license": "MIT" }, "node_modules/@solid/access-token-verifier": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@solid/access-token-verifier/-/access-token-verifier-2.1.1.tgz", - "integrity": "sha512-dGvu4xk3P74xl6XYsULWBY8F/fNCoi/EK07Iv3RT+0vDA21+3VEKk72sWmki0W59qJRTRDQZXkCOyo4b5Hd7zA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@solid/access-token-verifier/-/access-token-verifier-2.1.2.tgz", + "integrity": "sha512-QSFcH0fgLmoQG9eFptTzgKbgi+DaanvYxla/xVSn70dQMAZOPmJ1xUHD2W1tN70RKs6ay5zi8AyZZAWDvz16HA==", "license": "MIT", "dependencies": { "jose": "^5.1.3", @@ -3984,15 +4527,6 @@ "ts-guards": "^0.5.1" } }, - "node_modules/@solid/access-token-verifier/node_modules/jose": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/jose/-/jose-5.10.0.tgz", - "integrity": "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, "node_modules/@solid/access-token-verifier/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -4118,114 +4652,20 @@ "node": ">=18.0" } }, - "node_modules/@solid/community-server/node_modules/@types/readable-stream": { - "version": "4.0.23", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.23.tgz", - "integrity": "sha512-wwXrtQvbMHxCbBgjHaMGEmImFTQxxpfMOR/ZoQnXxB1woqkUbdLGFDgauo00Py9IudiaqSeiBiulSV9i6XIPig==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@solid/community-server/node_modules/fetch-sparql-endpoint": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/fetch-sparql-endpoint/-/fetch-sparql-endpoint-6.2.0.tgz", - "integrity": "sha512-NDbTgK2dPcNA4P2mXVZDbwIA3DY2k2TpEF5+GmCsCNrIbAnAl938JU41SZ2sCSkBXvBoVvb2q5eJ0u7W4K5aog==", - "license": "MIT", - "dependencies": { - "@types/n3": "^1.0.0", - "@types/readable-stream": "^4.0.0", - "@types/sparqljs": "^3.0.0", - "is-stream": "^2.0.0", - "n3": "^1.0.0", - "rdf-string": "^2.0.0", - "readable-from-web": "^1.0.0", - "sparqljs": "^3.0.0", - "sparqljson-parse": "^3.0.0", - "sparqlxml-parse": "^3.0.0", - "stream-to-string": "^1.0.0", - "yargs": "^17.0.0" - }, - "bin": { - "fetch-sparql-endpoint": "bin/fetch-sparql-endpoint.js" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/rubensworks/" - } - }, - "node_modules/@solid/community-server/node_modules/fetch-sparql-endpoint/node_modules/rdf-string": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/rdf-string/-/rdf-string-2.0.1.tgz", - "integrity": "sha512-SMW4ponnKNrsP9kYpOLyICeM4UJmEXIeS3zri7kPK9gzLFsHD88oiza8LnokNYxd76zW4JoYWD+v4x0g8rJBjw==", - "license": "MIT", - "dependencies": { - "rdf-data-factory": "^2.0.0" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/rubensworks/" - } - }, - "node_modules/@solid/community-server/node_modules/rdf-data-factory": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-2.0.2.tgz", - "integrity": "sha512-WzPoYHwQYWvIP9k+7IBLY1b4nIDitzAK4mA37WumAF/Cjvu/KOtYJH9IPZnUTWNSd5K2+pq4vrcE9WZC4sRHhg==", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "^2.0.0" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/rubensworks/" - } - }, - "node_modules/@solid/community-server/node_modules/rdf-data-factory/node_modules/@rdfjs/types": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-2.0.1.tgz", - "integrity": "sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@solid/community-server/node_modules/sparqljson-parse": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/sparqljson-parse/-/sparqljson-parse-3.3.0.tgz", - "integrity": "sha512-XrmkCsrx4n69Ak63Ju7t91hVlWw7YhEPPdA+giW2GRTosQxPur0JWh7rQin/8aT0WjKZgBgGpsNnVBYyyWUq1w==", - "license": "MIT", - "dependencies": { - "@bergos/jsonparse": "^1.4.1", - "@types/readable-stream": "^4.0.0", - "rdf-data-factory": "^2.0.0", - "readable-stream": "^4.0.0" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/rubensworks/" - } - }, - "node_modules/@solid/community-server/node_modules/sparqlxml-parse": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/sparqlxml-parse/-/sparqlxml-parse-3.3.0.tgz", - "integrity": "sha512-FUVgcUr2YePDtDuu/UcMTF2ODiKBQdZdcfTSvaR3QhWVAcBmIGX4r4apsePK1zCc1kkRR53JBHXHJho/Pk538g==", + "node_modules/@solid/community-server/node_modules/jose": { + "version": "4.15.9", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", + "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", "license": "MIT", - "dependencies": { - "@rubensworks/saxes": "^6.0.1", - "@types/readable-stream": "^4.0.0", - "buffer": "^6.0.3", - "rdf-data-factory": "^2.0.0", - "readable-stream": "^4.5.2" - }, "funding": { - "type": "individual", - "url": "https://github.com/sponsors/rubensworks/" + "url": "https://github.com/sponsors/panva" } }, "node_modules/@szmarczak/http-timer": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "license": "MIT", "dependencies": { "defer-to-connect": "^2.0.1" }, @@ -4234,35 +4674,17 @@ } }, "node_modules/@tsconfig/node14": { - "version": "14.1.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-14.1.8.tgz", - "integrity": "sha512-SjGT+qPvh8Uhc849yNMD0ZIPr69AyB7Z46nMqhrI3gCVocd6mhI0jP4YE4onO/ufpmengRfTxNMpdpKEp2xRIg==", + "version": "14.1.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-14.1.9.tgz", + "integrity": "sha512-LJcGO+hCMHqM+ZkqbLrIvhm7aIZDyFUFHDI3xLhrOI+iXHh+BooSlCgK8QevDIOjjuliNNI4/KeZFSRXOCnNKQ==", "dev": true, "license": "MIT" }, - "node_modules/@tybys/wasm-util": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", - "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@tybys/wasm-util/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD", - "optional": true - }, "node_modules/@types/accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.7.tgz", "integrity": "sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4270,7 +4692,8 @@ "node_modules/@types/async-lock": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/@types/async-lock/-/async-lock-1.4.2.tgz", - "integrity": "sha512-HlZ6Dcr205BmNhwkdXqrg2vkFMN2PluI7Lgr8In3B3wE5PiQHhjRqtW/lGdVU9gw+sM0JcIDx2AN+cW8oSWIcw==" + "integrity": "sha512-HlZ6Dcr205BmNhwkdXqrg2vkFMN2PluI7Lgr8In3B3wE5PiQHhjRqtW/lGdVU9gw+sM0JcIDx2AN+cW8oSWIcw==", + "license": "MIT" }, "node_modules/@types/babel__core": { "version": "7.20.5", @@ -4320,12 +4743,14 @@ "node_modules/@types/bcryptjs": { "version": "2.4.6", "resolved": "https://registry.npmjs.org/@types/bcryptjs/-/bcryptjs-2.4.6.tgz", - "integrity": "sha512-9xlo6R2qDs5uixm0bcIqCeMCE6HiQsIyel9KQySStiyqNl2tnj2mP3DX1Nf56MD6KMenNNlBBsy3LJ7gUEQPXQ==" + "integrity": "sha512-9xlo6R2qDs5uixm0bcIqCeMCE6HiQsIyel9KQySStiyqNl2tnj2mP3DX1Nf56MD6KMenNNlBBsy3LJ7gUEQPXQ==", + "license": "MIT" }, "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -4335,6 +4760,7 @@ "version": "2.0.10", "resolved": "https://registry.npmjs.org/@types/clownface/-/clownface-2.0.10.tgz", "integrity": "sha512-Vz48oQux0YArQ66wfRp54NlxvEmpyTqbFIH435AsgN7C+p4MXao/rjXUisULL6436bxjFk4VluZr7J2HQkBHmQ==", + "license": "MIT", "dependencies": { "@rdfjs/types": ">=1", "@types/rdfjs__environment": "*" @@ -4344,24 +4770,28 @@ "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/content-disposition": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.8.tgz", - "integrity": "sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==" + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.9.tgz", + "integrity": "sha512-8uYXI3Gw35MhiVYhG3s295oihrxRyytcRHjSjqnqZVDDy/xcGBRny7+Xj1Wgfhv5QzRtN2hB2dVRBUX9XW3UcQ==", + "license": "MIT" }, "node_modules/@types/cookie": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.4.tgz", - "integrity": "sha512-7z/eR6O859gyWIAjuvBWFzNURmf2oPBmJlfVWkwehU5nzIyjwBsTh7WMmEEV4JFnHuQ3ex4oyTvfKzcyJVDBNA==" + "integrity": "sha512-7z/eR6O859gyWIAjuvBWFzNURmf2oPBmJlfVWkwehU5nzIyjwBsTh7WMmEEV4JFnHuQ3ex4oyTvfKzcyJVDBNA==", + "license": "MIT" }, "node_modules/@types/cookies": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.9.0.tgz", - "integrity": "sha512-40Zk8qR147RABiQ7NQnBzWzDcjKzNrntB5BAmeGCb2p/MIyOE+4BVvc17wumsUqUw00bJYqoXFHYygQnEFh4/Q==", + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.9.2.tgz", + "integrity": "sha512-1AvkDdZM2dbyFybL4fxpuNCaWyv//0AwsuUk2DWeXyM1/5ZKm6W3z6mQi24RZ4l2ucY+bkSHzbDVpySqPGuV8A==", + "license": "MIT", "dependencies": { "@types/connect": "*", "@types/express": "*", @@ -4370,9 +4800,10 @@ } }, "node_modules/@types/cors": { - "version": "2.8.17", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", - "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "version": "2.8.19", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", + "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4380,37 +4811,40 @@ "node_modules/@types/ejs": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz", - "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==" + "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==", + "license": "MIT" }, "node_modules/@types/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/@types/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-StWAwZWMI5cK5wBKJHK/0MBJaZKMlN78EeDhBhBz6eEK51StnQzwERHG438/ToRJ/2CGaBW8TpyYxjkB1v9whA==", + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", "license": "MIT" }, "node_modules/@types/express": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.0.tgz", - "integrity": "sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", + "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", + "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^5.0.0", - "@types/qs": "*", - "@types/serve-static": "*" + "@types/serve-static": "^2" } }, "node_modules/@types/express-serve-static-core": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", - "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.3.tgz", + "integrity": "sha512-dPfW8NFiOF4wOHc7+N/QSxlY9cfSsenewGbAz8C8U/MULPd/YZ27LvJUIlzaXie7e6Ove9YunJGgC9tbHD2cKw==", + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -4422,6 +4856,7 @@ "version": "11.0.4", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", + "license": "MIT", "dependencies": { "@types/jsonfile": "*", "@types/node": "*" @@ -4430,22 +4865,26 @@ "node_modules/@types/http-assert": { "version": "1.5.6", "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.6.tgz", - "integrity": "sha512-TTEwmtjgVbYAzZYWyeHPrrtWnfVkm8tQkP8P21uQifPgMRgjrow3XDEYqucuC8SKZJT7pUnhU/JymvjggxO9vw==" + "integrity": "sha512-TTEwmtjgVbYAzZYWyeHPrrtWnfVkm8tQkP8P21uQifPgMRgjrow3XDEYqucuC8SKZJT7pUnhU/JymvjggxO9vw==", + "license": "MIT" }, "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==", + "license": "MIT" }, "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "license": "MIT" }, "node_modules/@types/http-link-header": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/@types/http-link-header/-/http-link-header-1.0.7.tgz", "integrity": "sha512-snm5oLckop0K3cTDAiBnZDy6ncx9DJ3mCRDvs42C884MbVYPP74Tiq2hFsSDRTyjK6RyDYDIulPiW23ge+g5Lw==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4454,13 +4893,15 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } @@ -4470,6 +4911,7 @@ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } @@ -4495,6 +4937,7 @@ "version": "6.1.4", "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4502,40 +4945,45 @@ "node_modules/@types/keygrip": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.6.tgz", - "integrity": "sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==" + "integrity": "sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==", + "license": "MIT" }, "node_modules/@types/koa": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.15.0.tgz", - "integrity": "sha512-7QFsywoE5URbuVnG3loe03QXuGajrnotr3gQkXcEBShORai23MePfFYdhz90FEtBBpkyIYQbVD+evKtloCgX3g==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/koa/-/koa-3.0.3.tgz", + "integrity": "sha512-TdtNEJ7sYSrFQcVuS2ySsVqnq5EyE3oJbnfFJvkC9UtGP4Kpem5KE7r+ivHIbIAQAofSqnlB5D3vkfYO69TQpg==", + "license": "MIT", "dependencies": { "@types/accepts": "*", "@types/content-disposition": "*", "@types/cookies": "*", "@types/http-assert": "*", - "@types/http-errors": "*", + "@types/http-errors": "^2", "@types/keygrip": "*", "@types/koa-compose": "*", "@types/node": "*" } }, "node_modules/@types/koa-compose": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.8.tgz", - "integrity": "sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.9.tgz", + "integrity": "sha512-BroAZ9FTvPiCy0Pi8tjD1OfJ7bgU1gQf0eR6e1Vm+JJATy9eKOG3hQMFtMciMawiSOVnLMdmUOC46s7HBhSTsA==", + "license": "MIT", "dependencies": { "@types/koa": "*" } }, "node_modules/@types/lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-w/P33JFeySuhN6JLkysYUK2gEmy9kHHFN7E8ro0tkfmlDOgxBDzWEZ/J8cWA+fHqFevpswDTFZnDx+R9lbL6xw==" + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.25.tgz", + "integrity": "sha512-+K1NIO8I+F9/wNulfVvu23QYd0Pe9/OCqRrim4NoYIf1VoEDL90Ve4ClzpyqBLc7NpGGWRvYNCKZ1BE/Jpf8dQ==", + "license": "MIT" }, "node_modules/@types/lodash.orderby": { "version": "4.6.9", "resolved": "https://registry.npmjs.org/@types/lodash.orderby/-/lodash.orderby-4.6.9.tgz", "integrity": "sha512-T9o2wkIJOmxXwVTPTmwJ59W6eTi2FseiLR369fxszG649Po/xe9vqFNhf/MtnvT5jrbDiyWKxPFPZbpSVK0SVQ==", + "license": "MIT", "dependencies": { "@types/lodash": "*" } @@ -4544,36 +4992,36 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + "dev": true, + "license": "MIT" }, "node_modules/@types/mime-types": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.4.tgz", - "integrity": "sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==" + "integrity": "sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==", + "license": "MIT" }, "node_modules/@types/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==" + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "license": "MIT" }, "node_modules/@types/n3": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/@types/n3/-/n3-1.21.1.tgz", - "integrity": "sha512-9KxFlFj3etnpdI2nyQEp/jHry5DHxWT22z9Nc/y/hdHe0CHVc9rKu+NacWKUyN06dDLDh7ZnjCzY8yBJ9lmzdw==", + "version": "1.26.3", + "resolved": "https://registry.npmjs.org/@types/n3/-/n3-1.26.3.tgz", + "integrity": "sha512-uKEIHcOArBNmzCKDSrSgkEAC/v1h0yZWwldHI5kRnn0mMhvVHAgEpQMovowy03hV6iPpWPnq7BU6S+zg/ssXSw==", + "license": "MIT", "dependencies": { - "@rdfjs/types": "^1.1.0", + "@rdfjs/types": "*", "@types/node": "*" } }, "node_modules/@types/node": { - "version": "18.19.75", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.75.tgz", - "integrity": "sha512-UIksWtThob6ZVSyxcOqCLOUNg/dyO1Qvx4McgeuhrEtHTLFTf7BBhEazaE4K806FGTPtzd/2sE90qn4fVr7cyw==", + "version": "18.19.130", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.130.tgz", + "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", + "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } @@ -4590,18 +5038,21 @@ } }, "node_modules/@types/nodemailer": { - "version": "6.4.17", - "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.17.tgz", - "integrity": "sha512-I9CCaIp6DTldEg7vyUTZi8+9Vo0hi1/T8gv3C89yk1rSAAzoKQ8H8ki/jBYJSFoH/BisgLP8tkZMlQ91CIquww==", + "version": "6.4.24", + "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.24.tgz", + "integrity": "sha512-Ww4u0rT9wQNXh4JiQaIwx3QWdcOFXzOjQA2zc+jtFYNmQiT4mIUqcDin51bDFdkzKubFnQCZNK7FIHlPKQ/q9w==", + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/oidc-provider": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@types/oidc-provider/-/oidc-provider-8.5.2.tgz", - "integrity": "sha512-NiD3VG49+cRCAAe8+uZLM4onOcX8y9+cwaml8JG1qlgc98rWoCRgsnOB4Ypx+ysays5jiwzfUgT0nWyXPB/9uQ==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/@types/oidc-provider/-/oidc-provider-8.8.1.tgz", + "integrity": "sha512-Yi/OJ7s0CFJ1AWAQrY2EO/zkV9uppLtiGAzrA07lBDveUOvxtYh7GflnHFXcgufVaPxVAjdykizjTYTMNVhdJw==", + "license": "MIT", "dependencies": { + "@types/keygrip": "*", "@types/koa": "*", "@types/node": "*" } @@ -4610,6 +5061,7 @@ "version": "4.1.4", "resolved": "https://registry.npmjs.org/@types/proper-lockfile/-/proper-lockfile-4.1.4.tgz", "integrity": "sha512-uo2ABllncSqg9F1D4nugVl9v93RmjxF6LJzQLMLDdPaXCUIDPeOJ21Gbqi43xNKzBi/WQ0Q0dICqufzQbMjipQ==", + "license": "MIT", "dependencies": { "@types/retry": "*" } @@ -4618,6 +5070,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/@types/pump/-/pump-1.1.3.tgz", "integrity": "sha512-ZyooTTivmOwPfOwLVaszkF8Zq6mvavgjuHYitZhrIjfQAJDH+kIP3N+MzpG1zDAslsHvVz6Q8ECfivix3qLJaQ==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4625,22 +5078,26 @@ "node_modules/@types/punycode": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@types/punycode/-/punycode-2.1.4.tgz", - "integrity": "sha512-trzh6NzBnq8yw5e35f8xe8VTYjqM3NE7bohBtvDVf/dtUer3zYTLK1Ka3DG3p7bdtoaOHZucma6FfVKlQ134pQ==" + "integrity": "sha512-trzh6NzBnq8yw5e35f8xe8VTYjqM3NE7bohBtvDVf/dtUer3zYTLK1Ka3DG3p7bdtoaOHZucma6FfVKlQ134pQ==", + "license": "MIT" }, "node_modules/@types/qs": { - "version": "6.9.18", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", - "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==" + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==", + "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" }, "node_modules/@types/rdf-validate-shacl": { "version": "0.4.9", "resolved": "https://registry.npmjs.org/@types/rdf-validate-shacl/-/rdf-validate-shacl-0.4.9.tgz", "integrity": "sha512-mjWwr+/7p2NPmJThB0nS1N7HWTrPAP5MFOVjEChiy2/e9mNH7WxtkMAEro00Ew/prcf6pw5ke1dzq/vkhBh7+A==", + "license": "MIT", "dependencies": { "@rdfjs/types": "*", "@types/clownface": "*", @@ -4651,58 +5108,63 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/rdfjs__environment/-/rdfjs__environment-1.0.0.tgz", "integrity": "sha512-MDcnv3qfJvbHoEpUQXj5muT8g3e+xz1D8sGevrq3+Q4TzeEvQf5ijGX5l8485XFYrN/OBApgzXkHMZC04/kd5w==", + "license": "MIT", "dependencies": { "@rdfjs/types": "*", "@types/node": "*" } }, "node_modules/@types/readable-stream": { - "version": "2.3.15", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", - "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "version": "4.0.24", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.24.tgz", + "integrity": "sha512-NRvUNC/JFGPJvqdAfEve8oginbM6V08u5NzLWpG8MwA2kTPOLnqk+wpwuPT+mp3aUsxyuT6m2gnrPuHYCruzEg==", + "license": "MIT", "dependencies": { - "@types/node": "*", - "safe-buffer": "~5.1.1" + "@types/node": "*" } }, "node_modules/@types/retry": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.5.tgz", - "integrity": "sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==" + "integrity": "sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==", + "license": "MIT" }, "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==" + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.8.0.tgz", + "integrity": "sha512-1mAINjtQCXXeLkJ9ehXkwOcBpqtLxiVtKhpUf83DdRNdQKV0iXZpaHYqRr7nj+wvxuJzoAmAwXI+sCNMv1CzLQ==", + "license": "MIT" }, "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "license": "MIT", "dependencies": { - "@types/mime": "^1", "@types/node": "*" } }, "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", + "license": "MIT", "dependencies": { "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" + "@types/node": "*" } }, "node_modules/@types/spark-md5": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/spark-md5/-/spark-md5-3.0.5.tgz", - "integrity": "sha512-lWf05dnD42DLVKQJZrDHtWFidcLrHuip01CtnC2/S6AMhX4t9ZlEUj4iuRlAnts0PQk7KESOqKxeGE/b6sIPGg==" + "integrity": "sha512-lWf05dnD42DLVKQJZrDHtWFidcLrHuip01CtnC2/S6AMhX4t9ZlEUj4iuRlAnts0PQk7KESOqKxeGE/b6sIPGg==", + "license": "MIT" }, "node_modules/@types/sparqljs": { "version": "3.1.12", "resolved": "https://registry.npmjs.org/@types/sparqljs/-/sparqljs-3.1.12.tgz", "integrity": "sha512-zg/sdKKtYI0845wKPSuSgunyU1o/+7tRzMw85lHsf4p/0UbA6+65MXAyEtv1nkaqSqrq/bXm7+bqXas+Xo5dpQ==", + "license": "MIT", "dependencies": { "@rdfjs/types": ">=1.0.0" } @@ -4717,373 +5179,128 @@ "node_modules/@types/triple-beam": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", - "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", + "license": "MIT" }, "node_modules/@types/trusted-types": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", - "license": "MIT" - }, - "node_modules/@types/uritemplate": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@types/uritemplate/-/uritemplate-0.3.6.tgz", - "integrity": "sha512-31BMGZ8GgLxgXxLnqg4KbbyYJjU1flhTTD2+PVQStVUPXSk0IIpK0zt+tH3eLT7ZRwLnzQw6JhYx69qza3U0wg==" - }, - "node_modules/@types/url-join": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/url-join/-/url-join-4.0.3.tgz", - "integrity": "sha512-3l1qMm3wqO0iyC5gkADzT95UVW7C/XXcdvUcShOideKF0ddgVRErEQQJXBd2kvQm+aSgqhBGHGB38TgMeT57Ww==" - }, - "node_modules/@types/uuid": { - "version": "9.0.8", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", - "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==" - }, - "node_modules/@types/ws": { - "version": "8.5.14", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.14.tgz", - "integrity": "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" - }, - "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "dev": true, - "license": "ISC" - }, - "node_modules/@unrs/resolver-binding-android-arm-eabi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", - "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@unrs/resolver-binding-android-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", - "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@unrs/resolver-binding-darwin-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", - "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/resolver-binding-darwin-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", - "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/resolver-binding-freebsd-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", - "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", - "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", - "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", - "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", - "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "license": "MIT" }, - "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", - "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "node_modules/@types/uritemplate": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@types/uritemplate/-/uritemplate-0.3.6.tgz", + "integrity": "sha512-31BMGZ8GgLxgXxLnqg4KbbyYJjU1flhTTD2+PVQStVUPXSk0IIpK0zt+tH3eLT7ZRwLnzQw6JhYx69qza3U0wg==", + "license": "MIT" }, - "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", - "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "node_modules/@types/url-join": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/url-join/-/url-join-4.0.3.tgz", + "integrity": "sha512-3l1qMm3wqO0iyC5gkADzT95UVW7C/XXcdvUcShOideKF0ddgVRErEQQJXBd2kvQm+aSgqhBGHGB38TgMeT57Ww==", + "license": "MIT" }, - "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", - "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "node_modules/@types/uuid": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "license": "MIT" }, - "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", - "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", - "cpu": [ - "s390x" - ], - "dev": true, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@types/node": "*" + } }, - "node_modules/@unrs/resolver-binding-linux-x64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", - "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/@types/yargs": { + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@types/yargs-parser": "*" + } }, - "node_modules/@unrs/resolver-binding-linux-x64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", - "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", - "cpu": [ - "x64" - ], + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "license": "MIT" + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } }, - "node_modules/@unrs/resolver-binding-wasm32-wasi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", - "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", - "cpu": [ - "wasm32" - ], + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, - "license": "MIT", - "optional": true, + "license": "BSD-2-Clause", "dependencies": { - "@napi-rs/wasm-runtime": "^0.2.11" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { - "node": ">=14.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", - "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", - "cpu": [ - "arm64" - ], + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } }, - "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", - "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", - "cpu": [ - "ia32" - ], + "node_modules/@ungap/structured-clone": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.4.0.tgz", + "integrity": "sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "license": "ISC" }, - "node_modules/@unrs/resolver-binding-win32-x64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", - "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.12.2.tgz", + "integrity": "sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ==", "cpu": [ "x64" ], @@ -5091,7 +5308,7 @@ "license": "MIT", "optional": true, "os": [ - "win32" + "linux" ] }, "node_modules/@uvdsl/solid-oidc-client-browser": { @@ -5103,19 +5320,10 @@ "jose": "^5.9.6" } }, - "node_modules/@uvdsl/solid-oidc-client-browser/node_modules/jose": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/jose/-/jose-5.10.0.tgz", - "integrity": "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, "node_modules/@xmldom/xmldom": { - "version": "0.9.10", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.9.10.tgz", - "integrity": "sha512-A9gOqLdi6cV4ibazAjcQufGj0B1y/vDqYrcuP6d/6x8P27gRS8643Dj9o1dEKtB6O7fwxb2FgBmJS2mX7gpvdw==", + "version": "0.9.12", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.9.12.tgz", + "integrity": "sha512-5AXjrcMClTryPe9LgZrygpB1lj7s0S9E0+W+AHaVKAVyHanafK86iPSvG5xHVSp/jC+VH1UXu0TAEmY279xH7A==", "license": "MIT", "engines": { "node": ">=14.6" @@ -5131,6 +5339,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" }, @@ -5151,6 +5360,7 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -5160,11 +5370,10 @@ } }, "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", + "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -5200,9 +5409,9 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -5235,6 +5444,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -5243,6 +5453,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -5258,6 +5469,7 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -5266,21 +5478,31 @@ "node": ">= 8" } }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5288,27 +5510,35 @@ "node_modules/arrayify-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrayify-stream/-/arrayify-stream-2.0.1.tgz", - "integrity": "sha512-z8fB6PtmnewQpFB53piS2d1KlUi3BPMICH2h7leCOUXpQcwvZ4GbHHSpdKoUrgLMR6b4Qan/uDe1St3Ao3yIHg==" + "integrity": "sha512-z8fB6PtmnewQpFB53piS2d1KlUi3BPMICH2h7leCOUXpQcwvZ4GbHHSpdKoUrgLMR6b4Qan/uDe1St3Ao3yIHg==", + "license": "MIT" }, "node_modules/async": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" }, "node_modules/async-lock": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.1.tgz", - "integrity": "sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==" + "integrity": "sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==", + "license": "MIT" }, "node_modules/asynciterator": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/asynciterator/-/asynciterator-3.9.0.tgz", - "integrity": "sha512-bwLLTAnoE6Ap6XdjK/j8vDk2Vi9p3ojk0PFwM0SwktAG1k8pfRJF9ng+mmkaRFKdZCQQlOxcWnvOmX2NQ1HV0g==" + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/asynciterator/-/asynciterator-3.10.0.tgz", + "integrity": "sha512-eDOBoUf2m+4ht0ETVn2SCfuBIZZ6UWyyQbP++LRPKoK7PmrCQq37pJ6vRvyef4o1Pn+CwWnzMlkXxGdh/krVIw==", + "license": "MIT", + "dependencies": { + "tiny-set-immediate": "^1.0.2" + } }, "node_modules/asyncjoin": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/asyncjoin/-/asyncjoin-1.2.4.tgz", "integrity": "sha512-7/1g5uV2/iTDQteJ/pxqZq6qkO5406V+vNyOCYtHJ+mo6bmvvQHHrZgd7AtU/rx+cnz08NPWlwk8daW61thnlA==", + "license": "MIT", "dependencies": { "asynciterator": "^3.9.0" } @@ -5321,16 +5551,16 @@ "license": "MIT" }, "node_modules/babel-jest": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.3.0.tgz", - "integrity": "sha512-gRpauEU2KRrCox5Z296aeVHR4jQ98BCnu0IO332D/xpHNOsIH/bgSRk9k6GbKIbBw8vFeN6ctuu6tV8WOyVfYQ==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.5.0.tgz", + "integrity": "sha512-PrhPHlKC+MsLnuNzgIH/y1dkz1f6cSfKWaQeaG8WxLMuG44dYWQ8E9uRrsBbAGCU/3+BEFYPN4d6G3Zc5Y+waA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/transform": "30.3.0", + "@jest/transform": "30.5.0", "@types/babel__core": "^7.20.5", - "babel-plugin-istanbul": "^7.0.1", - "babel-preset-jest": "30.3.0", + "babel-plugin-istanbul": "^8.0.0", + "babel-preset-jest": "30.5.0", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "slash": "^3.0.0" @@ -5343,9 +5573,9 @@ } }, "node_modules/babel-plugin-istanbul": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz", - "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-8.0.0.tgz", + "integrity": "sha512-18wCskrN3DgbuBmp1gr7LBGT8xdz5xhQQqFvFhVxbkl8VBCrMKQ2YtqBWtUal1Zrc1HTuX0011+Brjw78TCFkg==", "dev": true, "license": "BSD-3-Clause", "workspaces": [ @@ -5356,16 +5586,16 @@ "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.3", "istanbul-lib-instrument": "^6.0.2", - "test-exclude": "^6.0.0" + "test-exclude": "^7.0.1" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/babel-plugin-jest-hoist": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.3.0.tgz", - "integrity": "sha512-+TRkByhsws6sfPjVaitzadk1I0F5sPvOVUH5tyTSzhePpsGIVrdeunHSw/C36QeocS95OOk8lunc4rlu5Anwsg==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.5.0.tgz", + "integrity": "sha512-gtGo1B+u14jrZQv6TdSWIWkTqclboo7Qn+dFAGUOIuXLFuJKAdg3U5MIWzZnW4vfUb4dX9skmAMiby86e/SF4A==", "dev": true, "license": "MIT", "dependencies": { @@ -5403,26 +5633,27 @@ } }, "node_modules/babel-preset-jest": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.3.0.tgz", - "integrity": "sha512-6ZcUbWHC+dMz2vfzdNwi87Z1gQsLNK2uLuK1Q89R11xdvejcivlYYwDlEv0FHX3VwEXpbBQ9uufB/MUNpZGfhQ==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.5.0.tgz", + "integrity": "sha512-ZGPn5ClP4lBDpuOK8W1yQIOy359HmbnZv3suucAlIe+SEE9yDsxV4S2PjSbH2Vc97U+WmzYD7vw3kr8NsQ/i6w==", "dev": true, "license": "MIT", "dependencies": { - "babel-plugin-jest-hoist": "30.3.0", + "babel-plugin-jest-hoist": "30.5.0", "babel-preset-current-node-syntax": "^1.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { - "@babel/core": "^7.11.0 || ^8.0.0-beta.1" + "@babel/core": "^7.11.0 || ^8.0.0-beta.1 || ^8.0.0" } }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", @@ -5441,12 +5672,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz", - "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==", + "version": "2.11.20", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.20.tgz", + "integrity": "sha512-H0ulySigv6icDJ1F7SjtdCD6PrhTpdYCmP0CactWy1+ekh0AFd0o1Wn5T8b+hnTmdBx19u9yhL6wvCylXMY7zw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -5459,20 +5691,22 @@ "node_modules/bcryptjs": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", - "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==" + "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", + "license": "MIT" }, "node_modules/bignumber.js": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", - "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "license": "MIT", "engines": { "node": "*" } }, "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -5483,6 +5717,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -5491,9 +5726,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "version": "4.28.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz", + "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==", "dev": true, "funding": [ { @@ -5511,11 +5746,11 @@ ], "license": "MIT", "dependencies": { - "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" + "baseline-browser-mapping": "^2.11.12", + "caniuse-lite": "^1.0.30001809", + "electron-to-chromium": "^1.5.402", + "node-releases": "^2.0.53", + "update-browserslist-db": "^1.3.0" }, "bin": { "browserslist": "cli.js" @@ -5529,6 +5764,7 @@ "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, + "license": "MIT", "dependencies": { "fast-json-stable-stringify": "2.x" }, @@ -5541,6 +5777,7 @@ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" } @@ -5563,22 +5800,17 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "license": "MIT" - }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -5587,6 +5819,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", + "license": "MIT", "dependencies": { "mime-types": "^2.1.18", "ylru": "^1.2.0" @@ -5599,6 +5832,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "license": "MIT", "engines": { "node": ">=14.16" } @@ -5607,6 +5841,7 @@ "version": "10.2.14", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", + "license": "MIT", "dependencies": { "@types/http-cache-semantics": "^4.0.2", "get-stream": "^6.0.1", @@ -5671,6 +5906,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", "engines": { "node": ">=6" } @@ -5679,14 +5915,15 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001770", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001770.tgz", - "integrity": "sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==", + "version": "1.0.30001810", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz", + "integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==", "dev": true, "funding": [ { @@ -5729,6 +5966,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5765,6 +6003,7 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "dev": true, "funding": [ { "type": "github", @@ -5777,9 +6016,9 @@ } }, "node_modules/cjs-module-lexer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz", - "integrity": "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.1.tgz", + "integrity": "sha512-Ca8swihM+/4yKecYHY52kgJd300hi2lADU/a1RxNTRe+RJ9jvqQlESpbz9DnG9mowez8qwXHB8qYdIUw9e+F5Q==", "dev": true, "license": "MIT" }, @@ -5787,6 +6026,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -5796,35 +6036,21 @@ "node": ">=12" } }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/clownface": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/clownface/-/clownface-1.5.1.tgz", "integrity": "sha512-Ko8N/UFsnhEGmPlyE1bUFhbRhVgDbxqlIjcqxtLysc4dWaY0A7iCdg3savhAxs7Lheb7FCygIyRh7ADYZWVIng==", + "license": "MIT", "dependencies": { "@rdfjs/data-model": "^1.1.0", "@rdfjs/namespace": "^1.0.0" } }, "node_modules/cluster-key-slot": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", - "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.1.tgz", + "integrity": "sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw==", + "license": "Apache-2.0", "engines": { "node": ">=0.10.0" } @@ -5833,6 +6059,7 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" @@ -5846,18 +6073,23 @@ "license": "MIT" }, "node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/color/-/color-5.0.3.tgz", + "integrity": "sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==", + "license": "MIT", "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" + "color-convert": "^3.1.3", + "color-string": "^2.1.3" + }, + "engines": { + "node": ">=18" } }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -5868,37 +6100,49 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.4.tgz", + "integrity": "sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==", + "license": "MIT", + "dependencies": { + "color-name": "^2.0.0" + }, + "engines": { + "node": ">=18" + } }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "node_modules/color-string/node_modules/color-name": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.1.tgz", + "integrity": "sha512-p2FdgwVx1a9yWBHP2wI0VgShkDpgN4kZISkxdNipGBJWpa5G6b04OINlVWCyJj0JmfvcPrgqt95E9k8yvaOJFg==", + "license": "MIT", + "engines": { + "node": ">=12.20" } }, "node_modules/color/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.3.tgz", + "integrity": "sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==", + "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "color-name": "^2.0.0" + }, + "engines": { + "node": ">=14.6" } }, "node_modules/color/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/colorspace": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", - "dependencies": { - "color": "^3.1.3", - "text-hex": "1.0.x" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.1.tgz", + "integrity": "sha512-p2FdgwVx1a9yWBHP2wI0VgShkDpgN4kZISkxdNipGBJWpa5G6b04OINlVWCyJj0JmfvcPrgqt95E9k8yvaOJFg==", + "license": "MIT", + "engines": { + "node": ">=12.20" } }, "node_modules/combined-stream": { @@ -5919,6 +6163,7 @@ "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-0.7.6.tgz", "integrity": "sha512-GKNxVA7/iuTnAqGADlTWX4tkhzxZKXp5fLJqKTlQLHkE65XDUKutZ3BHaJC5IGcper2tT3QRD1xr4o3jNpgXXg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6.0.0" } @@ -5927,6 +6172,7 @@ "version": "5.5.1", "resolved": "https://registry.npmjs.org/componentsjs/-/componentsjs-5.5.1.tgz", "integrity": "sha512-hmqq+ZUa98t9CoeWPGwE14I18aXQFAt66HRd8DaZCNggcSr82vhlyrjeXX0JAUMgr2MyQzwKstkv4INRAREguA==", + "license": "MIT", "dependencies": { "@rdfjs/types": "*", "@types/minimist": "^1.2.0", @@ -5952,6 +6198,7 @@ "resolved": "https://registry.npmjs.org/componentsjs-generator/-/componentsjs-generator-3.1.2.tgz", "integrity": "sha512-0xYgpeH557mFNhwH0LornS5gNlQWrgvXACgvtLzMqDexA5HUY1YcDpTH4nRkfiAuF7Bw8bPDMFyru36lwsKhYA==", "dev": true, + "license": "MIT", "dependencies": { "@types/lru-cache": "^5.1.0", "@types/semver": "^7.3.4", @@ -5976,6 +6223,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -5987,12 +6235,14 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" }, "node_modules/contacts-pane": { "version": "3.3.0", @@ -6009,6 +6259,7 @@ "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -6016,29 +6267,11 @@ "node": ">= 0.6" } }, - "node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/content-type": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -6047,12 +6280,14 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cookie": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -6061,6 +6296,7 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz", "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==", + "license": "MIT", "dependencies": { "depd": "~2.0.0", "keygrip": "~1.1.0" @@ -6076,15 +6312,20 @@ "license": "MIT" }, "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "license": "MIT", "dependencies": { "object-assign": "^4", "vary": "^1" }, "engines": { "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/create-error-class": { @@ -6103,6 +6344,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", + "license": "MIT", "dependencies": { "node-fetch": "^2.7.0" } @@ -6131,6 +6373,7 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -6178,9 +6421,10 @@ } }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -6206,6 +6450,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" }, @@ -6220,6 +6465,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -6245,7 +6491,8 @@ "node_modules/deep-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==" + "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==", + "license": "MIT" }, "node_modules/deep-extend": { "version": "0.6.0", @@ -6276,6 +6523,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "license": "MIT", "engines": { "node": ">=10" } @@ -6319,12 +6567,14 @@ "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "license": "MIT" }, "node_modules/denque": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "license": "Apache-2.0", "engines": { "node": ">=0.10" } @@ -6333,6 +6583,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -6341,11 +6592,22 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -6367,6 +6629,7 @@ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -6378,6 +6641,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -6396,12 +6660,14 @@ "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, "node_modules/domhandler": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" }, @@ -6425,6 +6691,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -6438,6 +6705,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", @@ -6456,6 +6724,12 @@ "readable-stream": "^2.0.2" } }, + "node_modules/duplexer2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, "node_modules/duplexer2/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -6471,6 +6745,12 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/duplexer2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, "node_modules/duplexer2/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -6484,17 +6764,20 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, "license": "MIT" }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" }, "node_modules/ejs": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" }, @@ -6506,9 +6789,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.286", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", - "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", + "version": "1.5.417", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.417.tgz", + "integrity": "sha512-4T+DTDWuMPM4aHlHwWdAVCVWwp7LDilnhzkj+c/Lbj91XSQrLuOmZSLtS9Q4iIqjlPUbPOnC624zDVVHCHaolQ==", "dev": true, "license": "ISC" }, @@ -6534,20 +6817,23 @@ "node_modules/enabled": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", + "license": "MIT" }, "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", "dependencies": { "once": "^1.4.0" } @@ -6556,6 +6842,7 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -6585,6 +6872,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -6593,14 +6881,23 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", "engines": { "node": ">= 0.4" } }, + "node_modules/es-module-lexer": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.2.tgz", + "integrity": "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==", + "dev": true, + "license": "MIT" + }, "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -6628,6 +6925,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", "engines": { "node": ">=6" } @@ -6635,12 +6933,14 @@ "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -6649,24 +6949,25 @@ } }, "node_modules/eslint": { - "version": "9.39.2", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", - "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", + "version": "9.39.5", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.5.tgz", + "integrity": "sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.1", + "@eslint/config-array": "^0.21.2", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.39.2", + "@eslint/eslintrc": "^3.3.6", + "@eslint/js": "9.39.5", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", - "ajv": "^6.12.4", + "ajv": "^6.14.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", @@ -6685,7 +6986,7 @@ "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", + "minimatch": "^3.1.5", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, @@ -6727,6 +7028,7 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -6746,64 +7048,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/espree": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", @@ -6821,18 +7065,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/espree/node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/espree/node_modules/eslint-visitor-keys": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", @@ -6905,6 +7137,7 @@ "version": "3.5.0", "resolved": "https://registry.npmjs.org/eta/-/eta-3.5.0.tgz", "integrity": "sha512-e3x3FBvGzeCIHhF+zhK8FZA2vC5uFn6b4HJjegUbIWrDb4mJ7JjTGMJY9VGIbRVpmSwHopNiaJibhjIr+HfLug==", + "license": "MIT", "engines": { "node": ">=6.0.0" }, @@ -6916,6 +7149,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", "engines": { "node": ">=6" } @@ -6924,6 +7158,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", "engines": { "node": ">=0.8.x" } @@ -6973,18 +7208,18 @@ } }, "node_modules/expect": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-30.3.0.tgz", - "integrity": "sha512-1zQrciTiQfRdo7qJM1uG4navm8DayFa2TgCSRlzUyNkhcJ6XUZF3hjnpkyr3VhAqPH7i/9GkG7Tv5abz6fqz0Q==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.5.0.tgz", + "integrity": "sha512-8fiMWcEjPU7B9nErC4FtFcCzf2tC6I75Qf7m8wzBAWC2taZmcno3yAFEjIQL34SwoGZNgPf63UDiJLyh4SMPaw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/expect-utils": "30.3.0", - "@jest/get-type": "30.1.0", - "jest-matcher-utils": "30.3.0", - "jest-message-util": "30.3.0", - "jest-mock": "30.3.0", - "jest-util": "30.3.0" + "@jest/expect-utils": "30.5.0", + "@jest/get-type": "30.5.0", + "jest-matcher-utils": "30.5.0", + "jest-message-util": "30.5.0", + "jest-mock": "30.5.0", + "jest-util": "30.5.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -6993,13 +7228,15 @@ "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" }, "node_modules/fast-glob": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -7011,10 +7248,24 @@ "node": ">=8.6.0" } }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", @@ -7023,10 +7274,11 @@ "license": "MIT" }, "node_modules/fastq": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz", - "integrity": "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.3.tgz", + "integrity": "sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -7036,14 +7288,34 @@ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" } }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/fecha": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", + "license": "MIT" }, "node_modules/fetch-blob": { "version": "3.2.0", @@ -7070,55 +7342,65 @@ } }, "node_modules/fetch-sparql-endpoint": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/fetch-sparql-endpoint/-/fetch-sparql-endpoint-4.2.1.tgz", - "integrity": "sha512-nRaexc3QCO95bjESf4ngNQ1J+qNtVzxFGlPUopqOIVHm/j6IDhWg996kk7fBM98Mmo0uM9b6uiTbXmJHOrnqYA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/fetch-sparql-endpoint/-/fetch-sparql-endpoint-6.2.0.tgz", + "integrity": "sha512-NDbTgK2dPcNA4P2mXVZDbwIA3DY2k2TpEF5+GmCsCNrIbAnAl938JU41SZ2sCSkBXvBoVvb2q5eJ0u7W4K5aog==", + "license": "MIT", "dependencies": { - "@rdfjs/types": "*", - "@smessie/readable-web-to-node-stream": "^3.0.3", - "@types/readable-stream": "^2.3.11", - "@types/sparqljs": "^3.1.3", - "abort-controller": "^3.0.0", - "cross-fetch": "^3.0.6", + "@types/n3": "^1.0.0", + "@types/readable-stream": "^4.0.0", + "@types/sparqljs": "^3.0.0", "is-stream": "^2.0.0", - "minimist": "^1.2.0", - "n3": "^1.6.3", - "rdf-string": "^1.6.0", - "sparqljs": "^3.1.2", - "sparqljson-parse": "^2.2.0", - "sparqlxml-parse": "^2.1.1", - "stream-to-string": "^1.1.0" + "n3": "^1.0.0", + "rdf-string": "^2.0.0", + "readable-from-web": "^1.0.0", + "sparqljs": "^3.0.0", + "sparqljson-parse": "^3.0.0", + "sparqlxml-parse": "^3.0.0", + "stream-to-string": "^1.0.0", + "yargs": "^17.0.0" }, "bin": { "fetch-sparql-endpoint": "bin/fetch-sparql-endpoint.js" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" } }, - "node_modules/fetch-sparql-endpoint/node_modules/cross-fetch": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", - "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "node_modules/fetch-sparql-endpoint/node_modules/@rdfjs/types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-2.0.1.tgz", + "integrity": "sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA==", + "license": "MIT", "dependencies": { - "node-fetch": "^2.7.0" + "@types/node": "*" } }, - "node_modules/fetch-sparql-endpoint/node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "node_modules/fetch-sparql-endpoint/node_modules/rdf-data-factory": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-2.0.2.tgz", + "integrity": "sha512-WzPoYHwQYWvIP9k+7IBLY1b4nIDitzAK4mA37WumAF/Cjvu/KOtYJH9IPZnUTWNSd5K2+pq4vrcE9WZC4sRHhg==", "license": "MIT", "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" + "@rdfjs/types": "^2.0.0" }, - "peerDependencies": { - "encoding": "^0.1.0" + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/fetch-sparql-endpoint/node_modules/rdf-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/rdf-string/-/rdf-string-2.0.1.tgz", + "integrity": "sha512-SMW4ponnKNrsP9kYpOLyICeM4UJmEXIeS3zri7kPK9gzLFsHD88oiza8LnokNYxd76zW4JoYWD+v4x0g8rJBjw==", + "license": "MIT", + "dependencies": { + "rdf-data-factory": "^2.0.0" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" } }, "node_modules/file-entry-cache": { @@ -7134,26 +7416,28 @@ } }, "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz", + "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==", + "license": "Apache-2.0", "dependencies": { "minimatch": "^5.0.1" } }, "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", + "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -7165,6 +7449,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -7173,15 +7458,19 @@ } }, "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", + "locate-path": "^6.0.0", "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/find-yarn-workspace-root": { @@ -7207,15 +7496,16 @@ } }, "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz", + "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==", "license": "ISC" }, "node_modules/fn.name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", + "license": "MIT" }, "node_modules/folder-pane": { "version": "3.2.0", @@ -7234,6 +7524,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, "license": "ISC", "dependencies": { "cross-spawn": "^7.0.6", @@ -7250,6 +7541,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "license": "ISC", "engines": { "node": ">=14" @@ -7259,17 +7551,17 @@ } }, "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", "dev": true, "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "hasown": "^2.0.4", + "mime-types": "^2.1.35" }, "engines": { "node": ">= 6" @@ -7279,6 +7571,7 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", + "license": "MIT", "engines": { "node": ">= 14.17" } @@ -7300,14 +7593,16 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/fs-extra": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.0.tgz", + "integrity": "sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==", + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -7317,30 +7612,11 @@ "node": ">=14.14" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7354,11 +7630,21 @@ "noop6": "^1.0.1" } }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -7367,6 +7653,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -7409,6 +7696,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" @@ -7421,6 +7709,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -7445,6 +7734,18 @@ "tmp": "0.0.28" } }, + "node_modules/git-package-json/node_modules/tmp": { + "version": "0.0.28", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz", + "integrity": "sha512-c2mmfiBmND6SOVxzogm1oda0OJ1HZVIk/5n26N59dDTh80MUeavpiCls4PGAdkX1PFkKokLpcf7prSjCeXLsJg==", + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/git-source": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/git-source/-/git-source-1.1.11.tgz", @@ -7474,67 +7775,92 @@ } }, "node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "license": "ISC", + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" }, - "bin": { - "glob": "dist/esm/bin.mjs" + "engines": { + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", "dependencies": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", + "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", + "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" } }, "node_modules/glob/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "license": "ISC", + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^2.0.2" + "brace-expansion": "^5.0.8" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -7554,6 +7880,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7565,6 +7892,7 @@ "version": "13.0.0", "resolved": "https://registry.npmjs.org/got/-/got-13.0.0.tgz", "integrity": "sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==", + "license": "MIT", "dependencies": { "@sindresorhus/is": "^5.2.0", "@szmarczak/http-timer": "^5.0.1", @@ -7588,12 +7916,14 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" }, "node_modules/graphql": { - "version": "15.10.1", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.10.1.tgz", - "integrity": "sha512-BL/Xd/T9baO6NFzoMpiMD7YUZ62R6viR5tp/MULVEnbYJXZA//kRNW7J0j1w/wXArgL0sCxhDfK5dczSKn3+cg==", + "version": "15.10.3", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.10.3.tgz", + "integrity": "sha512-e2ut+7oOFe5/jENYc+T7GZnL5lIBd7vcWg6TlqVx1L/MFXY3CKOsEcP+jMPgL8uwcfrllJRNSmqq5psZahdKZg==", + "license": "MIT", "engines": { "node": ">= 10.x" } @@ -7602,6 +7932,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/graphql-to-sparql/-/graphql-to-sparql-3.0.1.tgz", "integrity": "sha512-A+RwB99o66CUj+XuqtP/u3P7fGS/qF6P+/jhNl1BE/JZ2SCnkrODvV0LADuJeCDmPh45fDhq+GTDVoN1ZQHYFw==", + "license": "MIT", "dependencies": { "@rdfjs/types": "*", "graphql": "^15.5.2", @@ -7627,9 +7958,10 @@ } }, "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "version": "4.7.9", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", + "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", + "license": "MIT", "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", @@ -7650,6 +7982,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -7670,6 +8003,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7681,6 +8015,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -7695,6 +8030,7 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -7721,12 +8057,6 @@ "react-is": "^16.7.0" } }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, "node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", @@ -7751,6 +8081,7 @@ "url": "https://github.com/sponsors/fb55" } ], + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -7762,6 +8093,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", + "license": "MIT", "dependencies": { "deep-equal": "~1.0.1", "http-errors": "~1.8.0" @@ -7774,6 +8106,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -7782,6 +8115,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", @@ -7797,34 +8131,42 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" }, "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/http-link-header": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.3.tgz", - "integrity": "sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.4.tgz", + "integrity": "sha512-xT3GPW6/ZbGuw4UvwHqErSCEjNUlwbQJuZn9/q5U4WEKfp2kENVCAlousG1zLxHeaQ/ffOHUNpWamvkbBW0eNw==", + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -7833,6 +8175,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "license": "MIT", "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.2.0" @@ -7845,6 +8188,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -7877,14 +8221,19 @@ } }, "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/ieee754": { @@ -7904,20 +8253,23 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/immutable": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", - "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==" + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.9.tgz", + "integrity": "sha512-ObHy4YN7ycwZOUCLI1/6svfyAFu7vL8RhAvVu/bh/RZW9EPlOyDaQ9jDQWCtdqzaXUjgXZCW1migtHE7YI7UGQ==", + "license": "MIT" }, "node_modules/import-fresh": { "version": "3.3.1", @@ -7935,15 +8287,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/import-local": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", @@ -7968,26 +8311,16 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", "engines": { "node": ">=0.8.19" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" }, "node_modules/ini": { "version": "1.3.8", @@ -7996,19 +8329,18 @@ "license": "ISC" }, "node_modules/ioredis": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.5.0.tgz", - "integrity": "sha512-7CutT89g23FfSa8MDoIFs2GYYa0PaNiW/OrT+nRyjRXHDZd17HmIgy+reOQ/yhh72NznNjGuS8kbCAcA4Ro4mw==", + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.11.1.tgz", + "integrity": "sha512-ehuGcf94bQXhfagULNXrJdfnWO38v070jxSx/qE87Kjzmu2fU7ro5EFAb+OPituLqgfyuQaym5DlrNydW2sJ9A==", + "license": "MIT", "dependencies": { - "@ioredis/commands": "^1.1.1", - "cluster-key-slot": "^1.1.0", - "debug": "^4.3.4", - "denque": "^2.1.0", - "lodash.defaults": "^4.2.0", - "lodash.isarguments": "^3.1.0", - "redis-errors": "^1.2.0", - "redis-parser": "^3.0.0", - "standard-as-callback": "^2.1.0" + "@ioredis/commands": "1.10.0", + "cluster-key-slot": "1.1.1", + "debug": "4.4.3", + "denque": "2.1.0", + "redis-errors": "1.2.0", + "redis-parser": "3.0.0", + "standard-as-callback": "2.1.0" }, "engines": { "node": ">=12.22.0" @@ -8058,6 +8390,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8082,12 +8415,14 @@ } }, "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", + "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" }, @@ -8102,6 +8437,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -8119,6 +8455,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -8145,6 +8482,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", @@ -8180,6 +8518,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", "engines": { "node": ">=8" }, @@ -8200,20 +8539,22 @@ } }, "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" }, "node_modules/iso8601-duration": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/iso8601-duration/-/iso8601-duration-2.1.2.tgz", - "integrity": "sha512-yXteYUiKv6x8seaDzyBwnZtPpmx766KfvQuaVNyPifYOjmPdOo3ajd4phDNa7Y5mTQGnXsNEcXFtVun1FjYXxQ==" + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/iso8601-duration/-/iso8601-duration-2.1.4.tgz", + "integrity": "sha512-2TuWcuR6W0OhFZQDAY+jDUp9FC2fVTDgxTtbN0nFBfwmUA6HTqXc0wx2tIBVd/FhRp4CnJbDgCv3sCeTPMQbew==", + "license": "MIT" }, "node_modules/issue-pane": { "version": "3.1.0", @@ -8234,6 +8575,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } @@ -8309,6 +8651,7 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -8321,14 +8664,14 @@ } }, "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "license": "Apache-2.0", "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", + "async": "^3.2.6", "filelist": "^1.0.4", - "minimatch": "^3.1.2" + "picocolors": "^1.1.1" }, "bin": { "jake": "bin/cli.js" @@ -8338,16 +8681,16 @@ } }, "node_modules/jest": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-30.3.0.tgz", - "integrity": "sha512-AkXIIFcaazymvey2i/+F94XRnM6TsVLZDhBMLsd1Sf/W0wzsvvpjeyUrCZD6HGG4SDYPgDJDBKeiJTBb10WzMg==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-30.5.0.tgz", + "integrity": "sha512-HeFeOUEKh5gjnp1rjuSCse8Dhj0Y3KA8lsZ3azr4Wnq1nCxwMBu35MDc9mp8iblZxmeAz6wV4P241tyUB7J2Ew==", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "30.3.0", - "@jest/types": "30.3.0", + "@jest/core": "30.5.0", + "@jest/types": "30.5.0", "import-local": "^3.2.0", - "jest-cli": "30.3.0" + "jest-cli": "30.5.0" }, "bin": { "jest": "bin/jest.js" @@ -8365,14 +8708,14 @@ } }, "node_modules/jest-changed-files": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.3.0.tgz", - "integrity": "sha512-B/7Cny6cV5At6M25EWDgf9S617lHivamL8vl6KEpJqkStauzcG4e+WPfDgMMF+H4FVH4A2PLRyvgDJan4441QA==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.5.0.tgz", + "integrity": "sha512-dq1x8JiEnHkJDxxOrF6UJDivBRAQMwAa5tzr+VX3um0SfyMFseUPQUbe51wLwggfoa5h/EmOtSpdJxxkzSlNRQ==", "dev": true, "license": "MIT", "dependencies": { "execa": "^5.1.1", - "jest-util": "30.3.0", + "jest-util": "30.5.0", "p-limit": "^3.1.0" }, "engines": { @@ -8380,29 +8723,29 @@ } }, "node_modules/jest-circus": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.3.0.tgz", - "integrity": "sha512-PyXq5szeSfR/4f1lYqCmmQjh0vqDkURUYi9N6whnHjlRz4IUQfMcXkGLeEoiJtxtyPqgUaUUfyQlApXWBSN1RA==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.5.0.tgz", + "integrity": "sha512-T3v7uM4wwCu+RQicjsAWCgoL3CiyuX3THSKwv2uMb9N2bMUgb+HfwDWEUma85vOGbvQNQ/YfoCXF1OCZot0ZEw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.3.0", - "@jest/expect": "30.3.0", - "@jest/test-result": "30.3.0", - "@jest/types": "30.3.0", + "@jest/environment": "30.5.0", + "@jest/expect": "30.5.0", + "@jest/test-result": "30.5.0", + "@jest/types": "30.5.0", "@types/node": "*", "chalk": "^4.1.2", "co": "^4.6.0", "dedent": "^1.6.0", "is-generator-fn": "^2.1.0", - "jest-each": "30.3.0", - "jest-matcher-utils": "30.3.0", - "jest-message-util": "30.3.0", - "jest-runtime": "30.3.0", - "jest-snapshot": "30.3.0", - "jest-util": "30.3.0", + "jest-each": "30.5.0", + "jest-matcher-utils": "30.5.0", + "jest-message-util": "30.5.0", + "jest-runtime": "30.5.0", + "jest-snapshot": "30.5.0", + "jest-util": "30.5.0", "p-limit": "^3.1.0", - "pretty-format": "30.3.0", + "pretty-format": "30.5.0", "pure-rand": "^7.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" @@ -8412,21 +8755,21 @@ } }, "node_modules/jest-cli": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.3.0.tgz", - "integrity": "sha512-l6Tqx+j1fDXJEW5bqYykDQQ7mQg+9mhWXtnj+tQZrTWYHyHoi6Be8HPumDSA+UiX2/2buEgjA58iJzdj146uCw==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.5.0.tgz", + "integrity": "sha512-QHZMiy32x2K+NzJ1AuuoCAVc1Y5co0VXib3R7kD9MWcWFflzsD1eJN0wR+mkNlM+ts7C+Bjz0oOoFE5IiHylCg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "30.3.0", - "@jest/test-result": "30.3.0", - "@jest/types": "30.3.0", + "@jest/core": "30.5.0", + "@jest/test-result": "30.5.0", + "@jest/types": "30.5.0", "chalk": "^4.1.2", "exit-x": "^0.2.2", "import-local": "^3.2.0", - "jest-config": "30.3.0", - "jest-util": "30.3.0", - "jest-validate": "30.3.0", + "jest-config": "30.5.0", + "jest-util": "30.5.0", + "jest-validate": "30.5.0", "yargs": "^17.7.2" }, "bin": { @@ -8445,33 +8788,33 @@ } }, "node_modules/jest-config": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.3.0.tgz", - "integrity": "sha512-WPMAkMAtNDY9P/oKObtsRG/6KTrhtgPJoBTmk20uDn4Uy6/3EJnnaZJre/FMT1KVRx8cve1r7/FlMIOfRVWL4w==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.5.0.tgz", + "integrity": "sha512-gYQl2FqYgiVpyuB7DutBIbJRWaq5VcHdzOXJJ51HNa8J5JrsZehIlzNFW0/9s5uvvcbzM5/LTUizYSbsFErv+w==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.27.4", - "@jest/get-type": "30.1.0", - "@jest/pattern": "30.0.1", - "@jest/test-sequencer": "30.3.0", - "@jest/types": "30.3.0", - "babel-jest": "30.3.0", + "@jest/get-type": "30.5.0", + "@jest/pattern": "30.5.0", + "@jest/test-sequencer": "30.5.0", + "@jest/types": "30.5.0", + "babel-jest": "30.5.0", "chalk": "^4.1.2", "ci-info": "^4.2.0", "deepmerge": "^4.3.1", - "glob": "^10.5.0", + "glob": "^13.0.6", "graceful-fs": "^4.2.11", - "jest-circus": "30.3.0", - "jest-docblock": "30.2.0", - "jest-environment-node": "30.3.0", - "jest-regex-util": "30.0.1", - "jest-resolve": "30.3.0", - "jest-runner": "30.3.0", - "jest-util": "30.3.0", - "jest-validate": "30.3.0", + "jest-circus": "30.5.0", + "jest-docblock": "30.5.0", + "jest-environment-node": "30.5.0", + "jest-regex-util": "30.5.0", + "jest-resolve": "30.5.0", + "jest-runner": "30.5.0", + "jest-util": "30.5.0", + "jest-validate": "30.5.0", "parse-json": "^5.2.0", - "pretty-format": "30.3.0", + "pretty-format": "30.5.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, @@ -8496,25 +8839,25 @@ } }, "node_modules/jest-diff": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.3.0.tgz", - "integrity": "sha512-n3q4PDQjS4LrKxfWB3Z5KNk1XjXtZTBwQp71OP0Jo03Z6V60x++K5L8k6ZrW8MY8pOFylZvHM0zsjS1RqlHJZQ==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.5.0.tgz", + "integrity": "sha512-QjCfDMwdPFvLxTQmS4/Dswx3PUCiqmSXVLGljMC3SU7YG1qHVoR6b86IH/O2G9k9OMyKXz2vS2Q60VnAozNDwA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/diff-sequences": "30.3.0", - "@jest/get-type": "30.1.0", + "@jest/diff-sequences": "30.5.0", + "@jest/get-type": "30.5.0", "chalk": "^4.1.2", - "pretty-format": "30.3.0" + "pretty-format": "30.5.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-docblock": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.2.0.tgz", - "integrity": "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.5.0.tgz", + "integrity": "sha512-NwDqcxtoZi33RhuW+zJS/RVA3rmheQ8BnwpYZuc/Eruaz6seQb7+aoCeDZu/3X7W2XmD8DbSo9Pn72DbKsBFYw==", "dev": true, "license": "MIT", "dependencies": { @@ -8525,123 +8868,109 @@ } }, "node_modules/jest-each": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.3.0.tgz", - "integrity": "sha512-V8eMndg/aZ+3LnCJgSm13IxS5XSBM22QSZc9BtPK8Dek6pm+hfUNfwBdvsB3d342bo1q7wnSkC38zjX259qZNA==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.5.0.tgz", + "integrity": "sha512-NiMFNhRygJEFqYNt8pnkxppUF6CR486GEpt9rSU6lPBf7KeccaOL0zbjxG8fgJgD//6e7zYdssnlt6j+1kI31A==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.1.0", - "@jest/types": "30.3.0", + "@jest/get-type": "30.5.0", + "@jest/types": "30.5.0", "chalk": "^4.1.2", - "jest-util": "30.3.0", - "pretty-format": "30.3.0" + "jest-util": "30.5.0", + "pretty-format": "30.5.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-environment-node": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.3.0.tgz", - "integrity": "sha512-4i6HItw/JSiJVsC5q0hnKIe/hbYfZLVG9YJ/0pU9Hz2n/9qZe3Rhn5s5CUZA5ORZlcdT/vmAXRMyONXJwPrmYQ==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.5.0.tgz", + "integrity": "sha512-bTc79ywKLz0ogbT3JIYuEhgWV4Ffd/cJe06co4v8CyRtlmju8x5gokMlGFR8ARWhmk5SnbDRxmf50XWnlZVhDg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.3.0", - "@jest/fake-timers": "30.3.0", - "@jest/types": "30.3.0", + "@jest/environment": "30.5.0", + "@jest/fake-timers": "30.5.0", + "@jest/types": "30.5.0", "@types/node": "*", - "jest-mock": "30.3.0", - "jest-util": "30.3.0", - "jest-validate": "30.3.0" + "jest-mock": "30.5.0", + "jest-util": "30.5.0", + "jest-validate": "30.5.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-haste-map": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.3.0.tgz", - "integrity": "sha512-mMi2oqG4KRU0R9QEtscl87JzMXfUhbKaFqOxmjb2CKcbHcUGFrJCBWHmnTiUqi6JcnzoBlO4rWfpdl2k/RfLCA==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.5.0.tgz", + "integrity": "sha512-0FStogBslBVOEqTOJr4oXMtFitmrWp9WscG6Gbns88i0YAuMXijCT2G5VMfg/HCR4QAnL+OF2C2ednag+HlDuA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.3.0", + "@jest/types": "30.5.0", + "@parcel/watcher": "^2.6.0", "@types/node": "*", "anymatch": "^3.1.3", "fb-watchman": "^2.0.2", + "fdir": "^6.5.0", "graceful-fs": "^4.2.11", - "jest-regex-util": "30.0.1", - "jest-util": "30.3.0", - "jest-worker": "30.3.0", - "picomatch": "^4.0.3", - "walker": "^1.0.8" + "jest-regex-util": "30.5.0", + "jest-util": "30.5.0", + "jest-worker": "30.5.0", + "picomatch": "^4.0.3" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.3" - } - }, - "node_modules/jest-haste-map/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/jest-leak-detector": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.3.0.tgz", - "integrity": "sha512-cuKmUUGIjfXZAiGJ7TbEMx0bcqNdPPI6P1V+7aF+m/FUJqFDxkFR4JqkTu8ZOiU5AaX/x0hZ20KaaIPXQzbMGQ==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.5.0.tgz", + "integrity": "sha512-Mq11ceAkNR250Iv45RoOwuG9fb4kYbJ02qoyL7A0nCI8FV5+aG/THmcEUx5uR2dNSa4KOtz+xBKrJ8cZPhPpuQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.1.0", - "pretty-format": "30.3.0" + "@jest/get-type": "30.5.0", + "pretty-format": "30.5.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.3.0.tgz", - "integrity": "sha512-HEtc9uFQgaUHkC7nLSlQL3Tph4Pjxt/yiPvkIrrDCt9jhoLIgxaubo1G+CFOnmHYMxHwwdaSN7mkIFs6ZK8OhA==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.5.0.tgz", + "integrity": "sha512-EfaYMC9f9ds7fahB/LYFTgd1Z2RS9Vpm2e46gazij0onkpoQG7Daq+MLm8/gQVqWwRVjL/RNDggbFx9MsrJEmQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.1.0", + "@jest/get-type": "30.5.0", "chalk": "^4.1.2", - "jest-diff": "30.3.0", - "pretty-format": "30.3.0" + "jest-diff": "30.5.0", + "pretty-format": "30.5.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-message-util": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.3.0.tgz", - "integrity": "sha512-Z/j4Bo+4ySJ+JPJN3b2Qbl9hDq3VrXmnjjGEWD/x0BCXeOXPTV1iZYYzl2X8c1MaCOL+ewMyNBcm88sboE6YWw==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.5.0.tgz", + "integrity": "sha512-dBYMhplGfspKaCnVk9TUy1cZnknWubpuPNEputjz0YJk1G/92R45rn45BvbPMPMtC5LVcIdxJGPOaOSQTiuzJw==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@jest/types": "30.3.0", + "@jest/types": "30.5.0", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", + "jest-util": "30.5.0", "picomatch": "^4.0.3", - "pretty-format": "30.3.0", + "pretty-format": "30.5.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" }, @@ -8649,52 +8978,22 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-message-util/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/jest-mock": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.3.0.tgz", - "integrity": "sha512-OTzICK8CpE+t4ndhKrwlIdbM6Pn8j00lvmSmq5ejiO+KxukbLjgOflKWMn3KE34EZdQm5RqTuKj+5RIEniYhog==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.5.0.tgz", + "integrity": "sha512-bP5MHZpkYrV7xpV+yvhl36DPcXoEmTR57Un5EACcdVpMY7mpkDefCBq+V4mhcjE/3rwUajT6OTrcJTN7EwN1BA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.3.0", + "@jest/expect-utils": "30.5.0", + "@jest/types": "30.5.0", "@types/node": "*", - "jest-util": "30.3.0" + "jest-util": "30.5.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, "node_modules/jest-rdf": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/jest-rdf/-/jest-rdf-2.0.0.tgz", @@ -8735,22 +9034,6 @@ "url": "https://github.com/sponsors/rubensworks/" } }, - "node_modules/jest-rdf/node_modules/rdf-isomorphic": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/rdf-isomorphic/-/rdf-isomorphic-2.0.1.tgz", - "integrity": "sha512-8pfA3PeDs1sVrZ2R3dCR4KRM69m3pQGhzviNQq5Az/+Zch4I+fKstjGxCZ5ADAFPsm9zxHk8zMEQ/BFcqlnLKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "imurmurhash": "^0.1.4", - "rdf-string": "^2.0.0", - "rdf-terms": "^2.0.0" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/rubensworks/" - } - }, "node_modules/jest-rdf/node_modules/rdf-string": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/rdf-string/-/rdf-string-2.0.1.tgz", @@ -8781,9 +9064,9 @@ } }, "node_modules/jest-regex-util": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", - "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.5.0.tgz", + "integrity": "sha512-Mg0WK7A6xRHLSA1udJ8y9f3lM0uUhFTBnLKzwPmqB9AylvpleJ6BLemR8K9dK27DY+cesDryoA7yLZCAHsPG1A==", "dev": true, "license": "MIT", "engines": { @@ -8791,100 +9074,100 @@ } }, "node_modules/jest-resolve": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.3.0.tgz", - "integrity": "sha512-NRtTAHQlpd15F9rUR36jqwelbrDV/dY4vzNte3S2kxCKUJRYNd5/6nTSbYiak1VX5g8IoFF23Uj5TURkUW8O5g==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.5.0.tgz", + "integrity": "sha512-NFvQWJ4G7e2kN5712iG+12Xr325NRFGAIhovrwLfgq5Oqd4bFHITw4CzcFkZGp1GTCqemC4v1l8/yZzedKZkjw==", "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.1.2", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.3.0", - "jest-pnp-resolver": "^1.2.3", - "jest-util": "30.3.0", - "jest-validate": "30.3.0", + "jest-haste-map": "30.5.0", + "jest-util": "30.5.0", + "jest-validate": "30.5.0", "slash": "^3.0.0", - "unrs-resolver": "^1.7.11" + "unrs-resolver": "^1.12.1" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-resolve-dependencies": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.3.0.tgz", - "integrity": "sha512-9ev8s3YN6Hsyz9LV75XUwkCVFlwPbaFn6Wp75qnI0wzAINYWY8Fb3+6y59Rwd3QaS3kKXffHXsZMziMavfz/nw==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.5.0.tgz", + "integrity": "sha512-TnSBAp3wGOnqXBmLT3OXtJkugw6Vj2KU0IPde2EJmbGns/QMoNlkauJ7jZ8KYaxONSpx0o4pUvi+u1Q/LSk3Pg==", "dev": true, "license": "MIT", "dependencies": { - "jest-regex-util": "30.0.1", - "jest-snapshot": "30.3.0" + "jest-regex-util": "30.5.0", + "jest-snapshot": "30.5.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-runner": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.3.0.tgz", - "integrity": "sha512-gDv6C9LGKWDPLia9TSzZwf4h3kMQCqyTpq+95PODnTRDO0g9os48XIYYkS6D236vjpBir2fF63YmJFtqkS5Duw==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.5.0.tgz", + "integrity": "sha512-Q6Yt+1LvXvEstvru6sQLT7OQYC77VNl6dK0KEvBkeOHgThmXDqNp3Ox9TglDWFHU85pemqTNdKwxfnmO3vgrdA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.3.0", - "@jest/environment": "30.3.0", - "@jest/test-result": "30.3.0", - "@jest/transform": "30.3.0", - "@jest/types": "30.3.0", + "@jest/console": "30.5.0", + "@jest/environment": "30.5.0", + "@jest/source-map": "30.5.0", + "@jest/test-result": "30.5.0", + "@jest/transform": "30.5.0", + "@jest/types": "30.5.0", "@types/node": "*", "chalk": "^4.1.2", "emittery": "^0.13.1", "exit-x": "^0.2.2", "graceful-fs": "^4.2.11", - "jest-docblock": "30.2.0", - "jest-environment-node": "30.3.0", - "jest-haste-map": "30.3.0", - "jest-leak-detector": "30.3.0", - "jest-message-util": "30.3.0", - "jest-resolve": "30.3.0", - "jest-runtime": "30.3.0", - "jest-util": "30.3.0", - "jest-watcher": "30.3.0", - "jest-worker": "30.3.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" + "jest-docblock": "30.5.0", + "jest-environment-node": "30.5.0", + "jest-haste-map": "30.5.0", + "jest-leak-detector": "30.5.0", + "jest-message-util": "30.5.0", + "jest-resolve": "30.5.0", + "jest-runtime": "30.5.0", + "jest-util": "30.5.0", + "jest-watcher": "30.5.0", + "jest-worker": "30.5.0", + "p-limit": "^3.1.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-runtime": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.3.0.tgz", - "integrity": "sha512-CgC+hIBJbuh78HEffkhNKcbXAytQViplcl8xupqeIWyKQF50kCQA8J7GeJCkjisC6hpnC9Muf8jV5RdtdFbGng==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.5.0.tgz", + "integrity": "sha512-VTRz0sRIw2EISeHigx1O+CMuwoG4+RKJjF8dp8okzFaDNQEcv5Mw0h5QW8VJXgb2CRF4gZIjSEBb2jdzXPagFQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.3.0", - "@jest/fake-timers": "30.3.0", - "@jest/globals": "30.3.0", - "@jest/source-map": "30.0.1", - "@jest/test-result": "30.3.0", - "@jest/transform": "30.3.0", - "@jest/types": "30.3.0", + "@jest/environment": "30.5.0", + "@jest/fake-timers": "30.5.0", + "@jest/globals": "30.5.0", + "@jest/source-map": "30.5.0", + "@jest/test-result": "30.5.0", + "@jest/transform": "30.5.0", + "@jest/types": "30.5.0", "@types/node": "*", "chalk": "^4.1.2", - "cjs-module-lexer": "^2.1.0", + "cjs-module-lexer": "^2.2.0", "collect-v8-coverage": "^1.0.2", - "glob": "^10.5.0", + "es-module-lexer": "^2.1.0", + "glob": "^13.0.6", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.3.0", - "jest-message-util": "30.3.0", - "jest-mock": "30.3.0", - "jest-regex-util": "30.0.1", - "jest-resolve": "30.3.0", - "jest-snapshot": "30.3.0", - "jest-util": "30.3.0", + "jest-haste-map": "30.5.0", + "jest-message-util": "30.5.0", + "jest-mock": "30.5.0", + "jest-regex-util": "30.5.0", + "jest-resolve": "30.5.0", + "jest-snapshot": "30.5.0", + "jest-util": "30.5.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, @@ -8893,9 +9176,9 @@ } }, "node_modules/jest-snapshot": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.3.0.tgz", - "integrity": "sha512-f14c7atpb4O2DeNhwcvS810Y63wEn8O1HqK/luJ4F6M4NjvxmAKQwBUWjbExUtMxWJQ0wVgmCKymeJK6NZMnfQ==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.5.0.tgz", + "integrity": "sha512-pZWETdcqmKve9MDTE/AX6RaeAbRhzKhhAXGozAW8Pg2FfOSdUrQ/7D+VdwE3fLQsqjpITXJVQvYVZoMEzrUl0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -8904,20 +9187,20 @@ "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.27.1", "@babel/types": "^7.27.3", - "@jest/expect-utils": "30.3.0", - "@jest/get-type": "30.1.0", - "@jest/snapshot-utils": "30.3.0", - "@jest/transform": "30.3.0", - "@jest/types": "30.3.0", + "@jest/expect-utils": "30.5.0", + "@jest/get-type": "30.5.0", + "@jest/snapshot-utils": "30.5.0", + "@jest/transform": "30.5.0", + "@jest/types": "30.5.0", "babel-preset-current-node-syntax": "^1.2.0", "chalk": "^4.1.2", - "expect": "30.3.0", + "expect": "30.5.0", "graceful-fs": "^4.2.11", - "jest-diff": "30.3.0", - "jest-matcher-utils": "30.3.0", - "jest-message-util": "30.3.0", - "jest-util": "30.3.0", - "pretty-format": "30.3.0", + "jest-diff": "30.5.0", + "jest-matcher-utils": "30.5.0", + "jest-message-util": "30.5.0", + "jest-util": "30.5.0", + "pretty-format": "30.5.0", "semver": "^7.7.2", "synckit": "^0.11.8" }, @@ -8926,13 +9209,13 @@ } }, "node_modules/jest-util": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.3.0.tgz", - "integrity": "sha512-/jZDa00a3Sz7rdyu55NLrQCIrbyIkbBxareejQI315f/i8HjYN+ZWsDLLpoQSiUIEIyZF/R8fDg3BmB8AtHttg==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.5.0.tgz", + "integrity": "sha512-lzU4aGUWaS+2X/B0CmgheDasfnsVlRfZh/rNQxB9b9s8cSYUq5BcqdQA95ld+KqJXBUVVt1sqnMQ2T3OxIalmg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.3.0", + "@jest/types": "30.5.0", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", @@ -8943,32 +9226,19 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-util/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/jest-validate": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.3.0.tgz", - "integrity": "sha512-I/xzC8h5G+SHCb2P2gWkJYrNiTbeL47KvKeW5EzplkyxzBRBw1ssSHlI/jXec0ukH2q7x2zAWQm7015iusg62Q==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.5.0.tgz", + "integrity": "sha512-N/hsPYKgBSzBeVZ2RHCs3yvBbTZNPX7Be8q33zhyo/yeFneBL1swzly31LYU4LJ3zJM9e8TxSM8IYLo2SDJZYQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.1.0", - "@jest/types": "30.3.0", + "@jest/get-type": "30.5.0", + "@jest/types": "30.5.0", "camelcase": "^6.3.0", "chalk": "^4.1.2", "leven": "^3.1.0", - "pretty-format": "30.3.0" + "pretty-format": "30.5.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -8988,19 +9258,19 @@ } }, "node_modules/jest-watcher": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.3.0.tgz", - "integrity": "sha512-PJ1d9ThtTR8aMiBWUdcownq9mDdLXsQzJayTk4kmaBRHKvwNQn+ANveuhEBUyNI2hR1TVhvQ8D5kHubbzBHR/w==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.5.0.tgz", + "integrity": "sha512-ujjnEoL4Uu+Swu3WRwYenWMB9JMEiD2T3OypnveMJ64S/1r/5G8eC4OQ1wEOgYWQqMi+mT+buzccflCHr/XJ9Q==", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "30.3.0", - "@jest/types": "30.3.0", + "@jest/test-result": "30.5.0", + "@jest/types": "30.5.0", "@types/node": "*", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", "emittery": "^0.13.1", - "jest-util": "30.3.0", + "jest-util": "30.5.0", "string-length": "^4.0.2" }, "engines": { @@ -9008,15 +9278,15 @@ } }, "node_modules/jest-worker": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.3.0.tgz", - "integrity": "sha512-DrCKkaQwHexjRUFTmPzs7sHQe0TSj9nvDALKGdwmK5mW9v7j90BudWirKAJHt3QQ9Dhrg1F7DogPzhChppkJpQ==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.5.0.tgz", + "integrity": "sha512-7kFk/607EoynNHLJa20daivkElM+c9PrCLduYy6AlMkYrXbh5TmVtW1BLXE05Y8baAFsJHMoC3xs2QRRTotwLw==", "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", "@ungap/structured-clone": "^1.3.0", - "jest-util": "30.3.0", + "jest-util": "30.5.0", "merge-stream": "^2.0.0", "supports-color": "^8.1.1" }, @@ -9041,9 +9311,10 @@ } }, "node_modules/jose": { - "version": "4.15.9", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", - "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/jose/-/jose-5.10.0.tgz", + "integrity": "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/panva" } @@ -9051,17 +9322,26 @@ "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" }, "node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", - "dev": true, + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", + "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" @@ -9071,6 +9351,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -9081,12 +9362,14 @@ "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, "license": "MIT" }, "node_modules/json-schema-traverse": { @@ -9120,17 +9403,12 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "license": "MIT" }, - "node_modules/json-stable-stringify/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "license": "MIT" - }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -9139,9 +9417,10 @@ } }, "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -9177,6 +9456,7 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/jsonld-context-parser/-/jsonld-context-parser-2.4.0.tgz", "integrity": "sha512-ZYOfvh525SdPd9ReYY58dxB3E2RUEU4DJ6ZibO8AitcowPeBH4L5rCAitE2om5G1P+HMEgYEYEr4EZKbVN4tpA==", + "license": "MIT", "dependencies": { "@types/http-link-header": "^1.0.1", "@types/node": "^18.0.0", @@ -9192,6 +9472,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "license": "MIT", "dependencies": { "node-fetch": "^2.7.0" } @@ -9220,6 +9501,7 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/jsonld-streaming-parser/-/jsonld-streaming-parser-3.4.0.tgz", "integrity": "sha512-897CloyQgQidfkB04dLM5XaAXVX/cN9A2hvgHJo4y4jRhIpvg3KLMBBfcrswepV2N3T8c/Rp2JeFdWfVsbVZ7g==", + "license": "MIT", "dependencies": { "@bergos/jsonparse": "^1.4.0", "@rdfjs/types": "*", @@ -9233,15 +9515,33 @@ "readable-stream": "^4.0.0" } }, + "node_modules/jsonld-streaming-parser/node_modules/@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, "node_modules/jsonld-streaming-parser/node_modules/canonicalize": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", - "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==" + "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==", + "license": "Apache-2.0" + }, + "node_modules/jsonld-streaming-parser/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" }, "node_modules/jsonld-streaming-serializer": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/jsonld-streaming-serializer/-/jsonld-streaming-serializer-2.1.0.tgz", "integrity": "sha512-COHdLoeMTnrqHMoFhN3PoAwqnrKrpPC7/ACb0WbELYvt+HSOIFN3v4IJP7fOtLNQ4GeaeYkvbeWJ7Jo4EjxMDw==", + "license": "MIT", "dependencies": { "@rdfjs/types": "*", "@types/readable-stream": "^2.3.13", @@ -9250,6 +9550,22 @@ "readable-stream": "^4.0.0" } }, + "node_modules/jsonld-streaming-serializer/node_modules/@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/jsonld-streaming-serializer/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, "node_modules/jsonld/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -9438,6 +9754,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", + "license": "MIT", "dependencies": { "tsscmp": "1.0.6" }, @@ -9449,6 +9766,7 @@ "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -9463,9 +9781,9 @@ } }, "node_modules/koa": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/koa/-/koa-2.16.3.tgz", - "integrity": "sha512-zPPuIt+ku1iCpFBRwseMcPYQ1cJL8l60rSmKeOuGfOXyE6YnTBmf2aEFNL2HQGrD0cPcLO/t+v9RTgC+fwEh/g==", + "version": "2.16.4", + "resolved": "https://registry.npmjs.org/koa/-/koa-2.16.4.tgz", + "integrity": "sha512-3An0GCLDSR34tsCO4H8Tef8Pp2ngtaZDAZnsWJYelqXUK5wyiHvGItgK/xcSkmHLSTn1Jcho1mRQs2ehRzvKKw==", "license": "MIT", "dependencies": { "accepts": "^1.3.5", @@ -9499,12 +9817,14 @@ "node_modules/koa-compose": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", - "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==" + "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", + "license": "MIT" }, "node_modules/koa-convert": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz", "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==", + "license": "MIT", "dependencies": { "co": "^4.6.0", "koa-compose": "^4.1.0" @@ -9517,6 +9837,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", @@ -9532,6 +9853,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -9540,6 +9862,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -9547,7 +9870,8 @@ "node_modules/kuler": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", + "license": "MIT" }, "node_modules/ky": { "version": "1.14.3", @@ -9632,31 +9956,26 @@ } }, "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" - }, - "node_modules/lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==" - }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", @@ -9665,14 +9984,16 @@ "license": "MIT" }, "node_modules/lodash.orderby": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.orderby/-/lodash.orderby-4.6.0.tgz", - "integrity": "sha512-T0rZxKmghOOf5YPnn8EY5iLYeWCpZq8G41FfqoVHH5QDTAFaghJRmAdLiadEDq+ztgM2q5PjA+Z1fOwGrLgmtg==" + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/lodash.orderby/-/lodash.orderby-4.18.0.tgz", + "integrity": "sha512-XSSpOxgihAM5kawpay9vl0e9r73l+LJIh03NzJBF33DWb8XgSM9Bvl1mEpA0ydrvoOeTVbNZBo2gY7zfw22EQQ==", + "license": "MIT" }, "node_modules/logform": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", + "license": "MIT", "dependencies": { "@colors/colors": "1.6.0", "@types/triple-beam": "^1.3.2", @@ -9701,6 +10022,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -9711,7 +10033,8 @@ "node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" }, "node_modules/make-dir": { "version": "4.0.0", @@ -9733,21 +10056,14 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } + "license": "ISC" }, "node_modules/marked": { "version": "9.1.6", "resolved": "https://registry.npmjs.org/marked/-/marked-9.1.6.tgz", "integrity": "sha512-jcByLnIFkd5gSXZmjNvS1TlmRhCXZjIzHYlaGkPlLIekG55JDR2Z4va9tZwCiP+/RDERiNhMOFu01xd6O5ct1Q==", + "license": "MIT", "bin": { "marked": "bin/marked.js" }, @@ -9772,6 +10088,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -9780,6 +10097,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -9799,13 +10117,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -9814,6 +10134,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/microdata-rdf-streaming-parser/-/microdata-rdf-streaming-parser-2.0.1.tgz", "integrity": "sha512-oEEYP3OwPGOtoE4eIyJvX1eJXI7VkGR4gKYqpEufaRXc2ele/Tkid/KMU3Los13wGrOq6woSxLEGOYSHzpRvwA==", + "license": "MIT", "dependencies": { "@rdfjs/types": "*", "htmlparser2": "^8.0.0", @@ -9833,6 +10154,7 @@ "url": "https://github.com/sponsors/fb55" } ], + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -9844,6 +10166,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -9852,10 +10175,23 @@ "node": ">=8.6" } }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -9864,6 +10200,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -9885,6 +10222,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -9895,12 +10233,14 @@ "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -9912,6 +10252,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -9920,6 +10261,7 @@ "version": "7.1.3", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" @@ -9928,7 +10270,8 @@ "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/n3": { "version": "1.26.0", @@ -9944,15 +10287,16 @@ } }, "node_modules/nanoid": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.9.tgz", - "integrity": "sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q==", + "version": "5.1.16", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.16.tgz", + "integrity": "sha512-kVrnsrJqMR8+oLJnGEmSWw9BivK5mt7H3FZatVRjrc5wGqFYuBxX1yG7+A7Gi5AefkX6t/oCkizcQgpu0cY1dQ==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.js" }, @@ -9979,7 +10323,8 @@ "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "license": "MIT" }, "node_modules/negotiate": { "version": "1.0.1", @@ -9990,6 +10335,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -9997,12 +10343,21 @@ "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT" }, "node_modules/node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", "dev": true, "funding": [ { @@ -10042,14 +10397,18 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.27", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", - "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "version": "2.0.54", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.54.tgz", + "integrity": "sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/node-status-codes": { "version": "1.0.0", @@ -10061,9 +10420,9 @@ } }, "node_modules/nodemailer": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-9.0.3.tgz", - "integrity": "sha512-n+YP+NKwR5zRWa60k3GiQ6Q3B4KXCoAw40dAKeCtYn020iNN74aWK2liXIC3ZEATeGql7we3tE3t8QwhY0eskw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-9.1.0.tgz", + "integrity": "sha512-xj1Ri5Sau3qpPffHJwi2bY0oWVVWYq62Ph17l+2v1xXpxjqTls3YPc3L8dub9mcJpxj+1ucNnuYVqLlgh4pmDA==", "license": "MIT-0", "engines": { "node": ">=6.0.0" @@ -10101,14 +10460,16 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-url": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", - "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.1.tgz", + "integrity": "sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==", + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -10117,9 +10478,9 @@ } }, "node_modules/npm": { - "version": "11.19.0", - "resolved": "https://registry.npmjs.org/npm/-/npm-11.19.0.tgz", - "integrity": "sha512-SDd/hHg3KqHE5Ht2NHWxNYNtqCQ2pXAPLl6OtQhPyED5PHsRfrOtO199MZTIG2cQoQ1ZRI9t28shrD+2cr3AAw==", + "version": "11.19.1", + "resolved": "https://registry.npmjs.org/npm/-/npm-11.19.1.tgz", + "integrity": "sha512-ztsxKxt/kkIaAs+2i0GU6I+DRmUdrNasxTZKJe9TCdSjKxlhah/4r/hl5ygMD6XAg1qZ9c2TNomR4qgOydp10g==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", @@ -10226,7 +10587,7 @@ "libnpmexec": "^10.3.2", "libnpmfund": "^7.0.26", "libnpmorg": "^8.0.1", - "libnpmpack": "^9.1.12", + "libnpmpack": "^9.1.13", "libnpmpublish": "^11.2.0", "libnpmsearch": "^9.0.1", "libnpmteam": "^8.0.2", @@ -10255,7 +10616,7 @@ "spdx-expression-parse": "^4.0.0", "ssri": "^13.0.1", "supports-color": "^10.2.2", - "tar": "^7.5.19", + "tar": "^7.5.22", "text-table": "~0.2.0", "tiny-relative-date": "^2.0.2", "treeverse": "^3.0.0", @@ -10687,14 +11048,14 @@ } }, "node_modules/npm/node_modules/brace-expansion": { - "version": "5.0.7", + "version": "5.0.9", "inBundle": true, "license": "MIT", "dependencies": { "balanced-match": "^4.0.2" }, "engines": { - "node": "18 || 20 || >=22" + "node": "20 || >=22" } }, "node_modules/npm/node_modules/cacache": { @@ -10954,7 +11315,7 @@ } }, "node_modules/npm/node_modules/ip-address": { - "version": "10.2.0", + "version": "10.5.0", "inBundle": true, "license": "MIT", "engines": { @@ -11090,7 +11451,7 @@ } }, "node_modules/npm/node_modules/libnpmpack": { - "version": "9.1.12", + "version": "9.1.13", "inBundle": true, "license": "ISC", "dependencies": { @@ -11743,7 +12104,7 @@ } }, "node_modules/npm/node_modules/tar": { - "version": "7.5.19", + "version": "7.5.22", "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -11831,7 +12192,7 @@ } }, "node_modules/npm/node_modules/undici": { - "version": "6.27.0", + "version": "6.28.0", "inBundle": true, "license": "MIT", "engines": { @@ -11915,6 +12276,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -11923,6 +12285,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", "engines": { "node": ">= 6" } @@ -11931,6 +12294,7 @@ "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -11948,9 +12312,10 @@ } }, "node_modules/oidc-provider": { - "version": "8.6.1", - "resolved": "https://registry.npmjs.org/oidc-provider/-/oidc-provider-8.6.1.tgz", - "integrity": "sha512-wJ+nhwkCjRtQiwJKACjjV8FAIn7QXGDc1UOAE5WW0i8fsqN1GgXi42S/ccOxEx/JV3tyVLEwIipAvJNsJ/3djA==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/oidc-provider/-/oidc-provider-8.8.1.tgz", + "integrity": "sha512-qVChpayTwojUREJxLkFofUSK8kiSRIdzPrVSsoGibqRHl/YO60ege94OZS8vh7zaK+zxcG/Gu8UMaYB5ulohCQ==", + "license": "MIT", "dependencies": { "@koa/cors": "^5.0.0", "@koa/router": "^13.1.0", @@ -11959,7 +12324,7 @@ "got": "^13.0.0", "jose": "^5.9.6", "jsesc": "^3.1.0", - "koa": "^2.15.3", + "koa": "^2.15.4", "nanoid": "^5.0.9", "object-hash": "^3.0.0", "oidc-token-hash": "^5.0.3", @@ -11970,18 +12335,11 @@ "url": "https://github.com/sponsors/panva" } }, - "node_modules/oidc-provider/node_modules/jose": { - "version": "5.9.6", - "resolved": "https://registry.npmjs.org/jose/-/jose-5.9.6.tgz", - "integrity": "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, "node_modules/oidc-token-hash": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz", - "integrity": "sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.2.0.tgz", + "integrity": "sha512-6gj2m8cJZ+iSW8bm0FXdGF0YhIQbKrfP4yWTNzxc31U6MOjfEmB1rHvlYvxI1B7t7BCi1F2vYTT6YhtQRG4hxw==", + "license": "MIT", "engines": { "node": "^10.13.0 || >=12.0.0" } @@ -11990,6 +12348,7 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -12001,6 +12360,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -12019,6 +12379,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "license": "MIT", "dependencies": { "fn.name": "1.x.x" } @@ -12090,6 +12451,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "license": "MIT", "engines": { "node": ">=12.20" } @@ -12098,6 +12460,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -12109,25 +12472,15 @@ } }, "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -12137,6 +12490,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", "engines": { "node": ">=6" } @@ -12160,6 +12514,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/package-json-path": { @@ -12207,6 +12562,12 @@ "node": ">=0.10.0" } }, + "node_modules/package-json/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, "node_modules/package-json/node_modules/lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -12243,6 +12604,12 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/package-json/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, "node_modules/package-json/node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", @@ -12339,6 +12706,7 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -12410,37 +12778,20 @@ "node": ">=6" } }, - "node_modules/patch-package/node_modules/tmp": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.7.tgz", - "integrity": "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==", - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", "engines": { "node": ">=8" } @@ -12452,31 +12803,44 @@ "license": "MIT" }, "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": ">=16 || 14 >=14.18" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", + "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, "node_modules/path-to-regexp": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", - "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==" + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -12485,14 +12849,16 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true + "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -12542,6 +12908,62 @@ "node": ">=8" } }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/pngjs": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", @@ -12570,15 +12992,16 @@ } }, "node_modules/pretty-format": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz", - "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==", + "version": "30.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.5.0.tgz", + "integrity": "sha512-mzNzBErpHwM0zpmWS7ExOv62yhQhvd546nUuFqVR0dmnJB59tfrw9sjDF0DJknwsr59OXP0buwJ7PaKguczHSg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/schemas": "30.0.5", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" + "@jest/react-is-18": "npm:react-is@^18.3.1", + "@jest/react-is-19": "npm:react-is@^19.2.5", + "@jest/schemas": "30.5.0", + "ansi-styles": "^5.2.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -12601,6 +13024,7 @@ "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", "engines": { "node": ">= 0.6.0" } @@ -12632,7 +13056,8 @@ "node_modules/promise-polyfill": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-1.1.6.tgz", - "integrity": "sha512-7rrONfyLkDEc7OJ5QBkqa4KI4EBhCd340xRuIUPGCfu13znS+vx+VDdrT9ODAJHlXm7w4lbxN3DRjyv58EuzDg==" + "integrity": "sha512-7rrONfyLkDEc7OJ5QBkqa4KI4EBhCd340xRuIUPGCfu13znS+vx+VDdrT9ODAJHlXm7w4lbxN3DRjyv58EuzDg==", + "license": "MIT" }, "node_modules/prop-types": { "version": "15.8.1", @@ -12645,16 +13070,11 @@ "react-is": "^16.13.1" } }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, "node_modules/proper-lockfile": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "retry": "^0.12.0", @@ -12664,7 +13084,8 @@ "node_modules/property-expr": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz", - "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==" + "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==", + "license": "MIT" }, "node_modules/protocols": { "version": "2.0.2", @@ -12673,9 +13094,10 @@ "license": "MIT" }, "node_modules/pump": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", - "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -12685,6 +13107,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", "engines": { "node": ">=6" } @@ -12734,6 +13157,72 @@ "wrap-ansi": "^6.2.0" } }, + "node_modules/qrcode/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/qrcode/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/qrcode/node_modules/y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", @@ -12793,12 +13282,14 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/quick-lru": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-7.0.0.tgz", - "integrity": "sha512-MX8gB7cVYTrYcFfAnfLlhRd0+Toyl8yX8uBx1MrX7K0jegiz9TumwOK27ldXrgDlHRdVi+MqU9Ssw6dr4BNreg==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-7.3.0.tgz", + "integrity": "sha512-k9lSsjl36EJdK7I06v7APZCbyGT2vMTsYSRX1Q2nbYmnkBqgUhRkAuzH08Ciotteu/PLJmIF2+tti7o3C/ts2g==", + "license": "MIT", "engines": { "node": ">=18" }, @@ -12826,17 +13317,18 @@ } }, "node_modules/raw-body": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", - "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.6.3", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.10" } }, "node_modules/rc": { @@ -12879,6 +13371,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-1.1.3.tgz", "integrity": "sha512-ny6CI7m2bq4lfQQmDYvcb2l1F9KtGwz9chipX4oWu2aAtVoXjb7k3d8J1EsgAsEbMXnBipB/iuRen5H2fwRWWQ==", + "license": "MIT", "dependencies": { "@rdfjs/types": "^1.0.0" } @@ -12887,6 +13380,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/rdf-dereference/-/rdf-dereference-2.2.0.tgz", "integrity": "sha512-6geM3CSUlXTK3n4OoKsL95M7XwKXoxiwK7cf4e/+Dj0X/ll77ihFN5j9VhLGXNYbMXDlm30kBg/VU6ymMv6o/Q==", + "license": "MIT", "dependencies": { "@comunica/actor-dereference-fallback": "^2.0.2", "@comunica/actor-dereference-file": "^2.0.2", @@ -12926,20 +13420,79 @@ } }, "node_modules/rdf-isomorphic": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/rdf-isomorphic/-/rdf-isomorphic-1.3.1.tgz", - "integrity": "sha512-6uIhsXTVp2AtO6f41PdnRV5xZsa0zVZQDTBdn0br+DZuFf5M/YD+T6m8hKDUnALI6nFL/IujTMLgEs20MlNidQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/rdf-isomorphic/-/rdf-isomorphic-2.0.1.tgz", + "integrity": "sha512-8pfA3PeDs1sVrZ2R3dCR4KRM69m3pQGhzviNQq5Az/+Zch4I+fKstjGxCZ5ADAFPsm9zxHk8zMEQ/BFcqlnLKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "imurmurhash": "^0.1.4", + "rdf-string": "^2.0.0", + "rdf-terms": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/rdf-isomorphic/node_modules/@rdfjs/types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-2.0.1.tgz", + "integrity": "sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/rdf-isomorphic/node_modules/rdf-data-factory": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-2.0.2.tgz", + "integrity": "sha512-WzPoYHwQYWvIP9k+7IBLY1b4nIDitzAK4mA37WumAF/Cjvu/KOtYJH9IPZnUTWNSd5K2+pq4vrcE9WZC4sRHhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rdfjs/types": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/rdf-isomorphic/node_modules/rdf-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/rdf-string/-/rdf-string-2.0.1.tgz", + "integrity": "sha512-SMW4ponnKNrsP9kYpOLyICeM4UJmEXIeS3zri7kPK9gzLFsHD88oiza8LnokNYxd76zW4JoYWD+v4x0g8rJBjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "rdf-data-factory": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/rdf-isomorphic/node_modules/rdf-terms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/rdf-terms/-/rdf-terms-2.0.0.tgz", + "integrity": "sha512-9O+ifVcvY4ZktOr+uXKswoOV6airAsIKeqCr+C47kFZBB8X+NyPSqDRGgI6X+je8It6z2e9jZhWwjJiEZ8Yn5Q==", + "dev": true, + "license": "MIT", "dependencies": { - "@rdfjs/types": "*", - "hash.js": "^1.1.7", - "rdf-string": "^1.6.0", - "rdf-terms": "^1.7.0" + "rdf-data-factory": "^2.0.0", + "rdf-string": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" } }, "node_modules/rdf-literal": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/rdf-literal/-/rdf-literal-1.3.2.tgz", "integrity": "sha512-79Stlu3sXy0kq9/decHFLf3xNPuY6sfhFPhd/diWErgaFr0Ekyg38Vh9bnVcqDYu48CFRi0t+hrFii49n92Hbw==", + "license": "MIT", "dependencies": { "@rdfjs/types": "*", "rdf-data-factory": "^1.1.0" @@ -12949,6 +13502,7 @@ "version": "1.14.0", "resolved": "https://registry.npmjs.org/rdf-object/-/rdf-object-1.14.0.tgz", "integrity": "sha512-/KSUWr7onDtL7d81kOpcUzJ2vHYOYJc2KU9WzBZRYydBhK0Sksh5Hg4VCQNaxUEvYEgdrrTuq9SLpOOCmag0rQ==", + "license": "MIT", "dependencies": { "@rdfjs/types": "*", "jsonld-context-parser": "^2.0.2", @@ -12961,6 +13515,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/rdf-parse/-/rdf-parse-2.3.3.tgz", "integrity": "sha512-N5XEHm+ajFzwo/vVNzB4tDtvqMwBosbVJmZl5DlzplQM9ejlJBlN/43i0ImAb/NMtJJgQPC3jYnkCKGA7wdo/w==", + "license": "MIT", "dependencies": { "@comunica/actor-http-fetch": "^2.0.1", "@comunica/actor-http-proxy": "^2.0.1", @@ -12992,6 +13547,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/rdf-quad/-/rdf-quad-1.5.0.tgz", "integrity": "sha512-LnCYx8XbRVW1wr6UiZPSy2Tv7bXAtEwuyck/68dANhFu8VMnGS+QfUNP3b9YI6p4Bfd/fyDx5E3x81IxGV6BzA==", + "license": "MIT", "dependencies": { "rdf-data-factory": "^1.0.1", "rdf-literal": "^1.2.0", @@ -13002,6 +13558,7 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/rdf-serialize/-/rdf-serialize-2.2.3.tgz", "integrity": "sha512-t3AvH3lw1NUufCUjf6/pxOyU/cPBJ0J3TkMP+FuUJKMmsJ1FzFdNkpsIMp9QFmWtqUYijyhYpVfJ4Tqprl+1RA==", + "license": "MIT", "dependencies": { "@comunica/actor-rdf-serialize-jsonld": "^2.6.6", "@comunica/actor-rdf-serialize-n3": "^2.6.6", @@ -13022,6 +13579,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/rdf-store-stream/-/rdf-store-stream-2.0.1.tgz", "integrity": "sha512-znGaibHLvbRE0BrDcXHRleRcLKlHYP6ADr1RFJ3yA28QBmhOjxxgbBFTvCMzgsxvBIqdaFS8Vd2FG4NefJL4Mg==", + "license": "MIT", "dependencies": { "@rdfjs/types": "*", "rdf-stores": "^1.0.0" @@ -13031,6 +13589,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/rdf-stores/-/rdf-stores-1.0.0.tgz", "integrity": "sha512-wqp7M5409rbhpWQE0C1vyVysbz++aD2vEkZ6yueSxhDtyLvznS41R3cKiuUpm3ikc/yTpaCZwPo4iyKEaAwBIg==", + "license": "MIT", "dependencies": { "@rdfjs/types": "*", "asynciterator": "^3.8.0", @@ -13043,6 +13602,7 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/rdf-streaming-store/-/rdf-streaming-store-1.1.5.tgz", "integrity": "sha512-Rfd3qo1otF/Jfau/lAFX8J1ZPorN0eaHoIkAlenIIcdZjq9AoIP85rEa4Sn+yMZOqNU1Kc4cCPUv5CFHhpAT2Q==", + "license": "MIT", "dependencies": { "@rdfjs/types": "*", "@types/n3": "^1.10.4", @@ -13053,19 +13613,11 @@ "readable-stream": "^4.3.0" } }, - "node_modules/rdf-streaming-store/node_modules/@types/readable-stream": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.18.tgz", - "integrity": "sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA==", - "dependencies": { - "@types/node": "*", - "safe-buffer": "~5.1.1" - } - }, "node_modules/rdf-string": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/rdf-string/-/rdf-string-1.6.3.tgz", "integrity": "sha512-HIVwQ2gOqf+ObsCLSUAGFZMIl3rh9uGcRf1KbM85UDhKqP+hy6qj7Vz8FKt3GA54RiThqK3mNcr66dm1LP0+6g==", + "license": "MIT", "dependencies": { "@rdfjs/types": "*", "rdf-data-factory": "^1.1.0" @@ -13075,6 +13627,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/rdf-string-ttl/-/rdf-string-ttl-1.3.2.tgz", "integrity": "sha512-yqolaVoUvTaSC5aaQuMcB4BL54G/pCGsV4jQH87f0TvAx8zHZG0koh7XWrjva/IPGcVb1QTtaeEdfda5mcddJg==", + "license": "MIT", "dependencies": { "@rdfjs/types": "*", "rdf-data-factory": "^1.1.0" @@ -13084,6 +13637,7 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/rdf-terms/-/rdf-terms-1.11.0.tgz", "integrity": "sha512-iKlVgnMopRKl9pHVNrQrax7PtZKRCT/uJIgYqvuw1VVQb88zDvurtDr1xp0rt7N9JtKtFwUXoIQoEsjyRo20qQ==", + "license": "MIT", "dependencies": { "@rdfjs/types": "*", "rdf-data-factory": "^1.1.0", @@ -13094,6 +13648,7 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/rdf-validate-datatype/-/rdf-validate-datatype-0.1.5.tgz", "integrity": "sha512-gU+cD+AT1LpFwbemuEmTDjwLyFwJDiw21XHyIofKhFnEpXODjShBuxhgDGnZqW3qIEwu/vECjOecuD60e5ngiQ==", + "license": "MIT", "dependencies": { "@rdfjs/namespace": "^1.1.0", "@rdfjs/to-ntriples": "^2.0.0" @@ -13106,6 +13661,7 @@ "version": "0.4.5", "resolved": "https://registry.npmjs.org/rdf-validate-shacl/-/rdf-validate-shacl-0.4.5.tgz", "integrity": "sha512-tGYnssuPzmsPua1dju4hEtGkT1zouvwzVTNrFhNiqj2aZFO5pQ7lvLd9Cv9H9vKAlpIdC/x0zL6btxG3PCss0w==", + "license": "MIT", "dependencies": { "@rdfjs/dataset": "^1.1.1", "@rdfjs/namespace": "^1.0.0", @@ -13120,6 +13676,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/rdfa-streaming-parser/-/rdfa-streaming-parser-2.0.1.tgz", "integrity": "sha512-7Yyaj030LO7iQ38Wh/RNLVeYrVFJeyx3dpCK7C1nvX55eIN/gE4HWfbg4BYI9X7Bd+eUIUMVeiKYLmYjV6apow==", + "license": "MIT", "dependencies": { "@rdfjs/types": "*", "htmlparser2": "^8.0.0", @@ -13139,6 +13696,7 @@ "url": "https://github.com/sponsors/fb55" } ], + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -13174,9 +13732,9 @@ } }, "node_modules/rdflib/node_modules/n3": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/n3/-/n3-2.0.3.tgz", - "integrity": "sha512-um/toGVENTarHBYIK2TdH6ByBhW75WpdKpv8iTYt9wF2QfBk8s8a16iaWZFUAAC1BKfGdb99kfgx6pltdDwfKA==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/n3/-/n3-2.6.4.tgz", + "integrity": "sha512-CsZsQz2x16SkRbAp9eTg9d26fmq30B2ewW7lYDfRFAOjVoE+PwT+eBlUZQqJlgpCe97xSS1X2CZ8hmomIjnTHg==", "license": "MIT", "dependencies": { "buffer": "^6.0.3", @@ -13190,6 +13748,7 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/rdfxml-streaming-parser/-/rdfxml-streaming-parser-2.4.0.tgz", "integrity": "sha512-f+tdI1wxOiPzMbFWRtOwinwPsqac0WIN80668yFKcVdFCSTGOWTM70ucQGUSdDZZo7pce/UvZgV0C3LDj0P7tg==", + "license": "MIT", "dependencies": { "@rdfjs/types": "*", "@rubensworks/saxes": "^6.0.1", @@ -13201,6 +13760,22 @@ "validate-iri": "^1.0.0" } }, + "node_modules/rdfxml-streaming-parser/node_modules/@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/rdfxml-streaming-parser/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, "node_modules/react": { "version": "19.2.8", "resolved": "https://registry.npmjs.org/react/-/react-19.2.8.tgz", @@ -13229,10 +13804,9 @@ } }, "node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "license": "MIT" }, "node_modules/react-jss": { @@ -13270,6 +13844,12 @@ "node": ">=0.10.0" } }, + "node_modules/read-all-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, "node_modules/read-all-stream/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -13285,6 +13865,12 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/read-all-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, "node_modules/read-all-stream/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -13304,19 +13890,11 @@ "readable-stream": "^4.0.0" } }, - "node_modules/readable-from-web/node_modules/@types/readable-stream": { - "version": "4.0.23", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.23.tgz", - "integrity": "sha512-wwXrtQvbMHxCbBgjHaMGEmImFTQxxpfMOR/ZoQnXxB1woqkUbdLGFDgauo00Py9IudiaqSeiBiulSV9i6XIPig==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/readable-stream": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -13331,12 +13909,14 @@ "node_modules/readable-stream-node-to-web": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/readable-stream-node-to-web/-/readable-stream-node-to-web-1.0.1.tgz", - "integrity": "sha512-OGzi2VKLa8H259kAx7BIwuRrXHGcxeHj4RdASSgEGBP9Q2wowdPvBc65upF4Q9O05qWgKqBw1+9PiLTtObl7uQ==" + "integrity": "sha512-OGzi2VKLa8H259kAx7BIwuRrXHGcxeHj4RdASSgEGBP9Q2wowdPvBc65upF4Q9O05qWgKqBw1+9PiLTtObl7uQ==", + "license": "MIT" }, "node_modules/redis-errors": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", + "license": "MIT", "engines": { "node": ">=4" } @@ -13345,6 +13925,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", + "license": "MIT", "dependencies": { "redis-errors": "^1.0.0" }, @@ -13375,14 +13956,20 @@ } }, "node_modules/relative-to-absolute-iri": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/relative-to-absolute-iri/-/relative-to-absolute-iri-1.0.7.tgz", - "integrity": "sha512-Xjyl4HmIzg2jzK/Un2gELqbcE8Fxy85A/aLSHE6PE/3+OGsFwmKVA1vRyGaz6vLWSqLDMHA+5rjD/xbibSQN1Q==" + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/relative-to-absolute-iri/-/relative-to-absolute-iri-1.0.8.tgz", + "integrity": "sha512-U1TmhrhCmXKkDL9mI8gBbF5TN6TKcuv28k5+H3gMCAjoz0TyyHAICHlaGDZsTEBSu2Y3HhDKc8e6X9n33qeIqA==", + "license": "MIT", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -13417,7 +14004,8 @@ "node_modules/resolve-alpn": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "license": "MIT" }, "node_modules/resolve-cwd": { "version": "3.0.0", @@ -13432,19 +14020,30 @@ "node": ">=8" } }, - "node_modules/resolve-from": { + "node_modules/resolve-cwd/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/responselike": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "license": "MIT", "dependencies": { "lowercase-keys": "^3.0.0" }, @@ -13459,15 +14058,17 @@ "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -13492,19 +14093,36 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, "node_modules/safe-regex-test": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -13521,6 +14139,7 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", "engines": { "node": ">=10" } @@ -13528,7 +14147,8 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" }, "node_modules/scheduler": { "version": "0.27.0", @@ -13537,9 +14157,9 @@ "license": "MIT" }, "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -13580,25 +14200,85 @@ "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" }, "node_modules/shaclc-parse": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/shaclc-parse/-/shaclc-parse-1.4.0.tgz", - "integrity": "sha512-zyxjIYQH2ghg/wtMvOp+4Nr6aK8j9bqFiVT3w47K8WHPYN+S3Zgnh2ybT+dGgMwo9KjiOoywxhjC7d8Z6GCmfA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/shaclc-parse/-/shaclc-parse-1.4.3.tgz", + "integrity": "sha512-MQJWVFjfzzMUvieFO0STWjIo49ywy63UkVSsr0e8+8xHUns6X+i3yWYxNKd+GtSEJjBNZxxrUubog+hnd7PvRA==", + "license": "MIT", "dependencies": { - "@rdfjs/types": "^1.1.0", + "@rdfjs/types": "^2.0.0", "n3": "^1.16.3" } }, + "node_modules/shaclc-parse/node_modules/@rdfjs/types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-2.0.1.tgz", + "integrity": "sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/shaclc-write": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/shaclc-write/-/shaclc-write-1.4.3.tgz", - "integrity": "sha512-dtJ6LokIluzQuHRWCFvNnmGyh07FxBK2L4utkOQn/wYD9eNamUUCt7sDBcuFDyD3jAGv0Ipmv0EitTyKcM1f/w==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/shaclc-write/-/shaclc-write-1.6.3.tgz", + "integrity": "sha512-R6rHiDov9kppjXTTaSwuaOUC3JXhJWvlrxR++Eng1jNdtD3oywkAagRu6mS5rzTcMA4WBxLUXdJxu4CbPOG04A==", + "license": "MIT", "dependencies": { "@jeswr/prefixcc": "^1.2.1", - "n3": "^1.16.3", - "rdf-string-ttl": "^1.3.2" + "n3": "^2.0.0", + "rdf-string-ttl": "^2.0.1" + } + }, + "node_modules/shaclc-write/node_modules/@rdfjs/types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-2.0.1.tgz", + "integrity": "sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/shaclc-write/node_modules/n3": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/n3/-/n3-2.6.4.tgz", + "integrity": "sha512-CsZsQz2x16SkRbAp9eTg9d26fmq30B2ewW7lYDfRFAOjVoE+PwT+eBlUZQqJlgpCe97xSS1X2CZ8hmomIjnTHg==", + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/shaclc-write/node_modules/rdf-data-factory": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-2.0.2.tgz", + "integrity": "sha512-WzPoYHwQYWvIP9k+7IBLY1b4nIDitzAK4mA37WumAF/Cjvu/KOtYJH9IPZnUTWNSd5K2+pq4vrcE9WZC4sRHhg==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/shaclc-write/node_modules/rdf-string-ttl": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/rdf-string-ttl/-/rdf-string-ttl-2.0.1.tgz", + "integrity": "sha512-xIZdC6uur9OwaCQrOsjuzLpnQCNGuJFWnYIAdF48tg3wzG5QzsgDMTJISCVh+M2p1e9ivIXlEauSdWokAhpZgA==", + "license": "MIT", + "dependencies": { + "rdf-data-factory": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" } }, "node_modules/shallow-equal": { @@ -13611,6 +14291,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -13622,6 +14303,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", "engines": { "node": ">=8" } @@ -13639,26 +14321,15 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -13820,21 +14491,11 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, "node_modules/source-pane": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/source-pane/-/source-pane-3.2.0.tgz", @@ -13849,12 +14510,14 @@ "node_modules/spark-md5": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==" + "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", + "license": "(WTFPL OR MIT)" }, "node_modules/sparqlalgebrajs": { "version": "4.3.8", "resolved": "https://registry.npmjs.org/sparqlalgebrajs/-/sparqlalgebrajs-4.3.8.tgz", "integrity": "sha512-Xo1/5icRtVk2N38BrY9NXN8N/ZPjULlns7sDHv0nlcGOsOediBLWVy8LmV+Q90RHvb3atZZbrFy3VqrM4iXciA==", + "license": "MIT", "dependencies": { "@rdfjs/types": "*", "@types/sparqljs": "^3.1.3", @@ -13870,10 +14533,24 @@ "sparqlalgebrajs": "bin/sparqlalgebrajs.js" } }, + "node_modules/sparqlalgebrajs/node_modules/rdf-isomorphic": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rdf-isomorphic/-/rdf-isomorphic-1.3.1.tgz", + "integrity": "sha512-6uIhsXTVp2AtO6f41PdnRV5xZsa0zVZQDTBdn0br+DZuFf5M/YD+T6m8hKDUnALI6nFL/IujTMLgEs20MlNidQ==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "hash.js": "^1.1.7", + "rdf-string": "^1.6.0", + "rdf-terms": "^1.7.0" + } + }, "node_modules/sparqljs": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/sparqljs/-/sparqljs-3.7.3.tgz", - "integrity": "sha512-FQfHUhfwn5PD9WH6xPU7DhFfXMgqK/XoDrYDVxz/grhw66Il0OjRg3JBgwuEvwHnQt7oSTiKWEiCZCPNaUbqgg==", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/sparqljs/-/sparqljs-3.7.4.tgz", + "integrity": "sha512-hb4C84gf7KM7vz+iG595mPwvqxOvBJCm9L3dCxtV2zZDht6ZMmMG0tHeeqFeqwb9875yU9U4lhYe4LYRvWj0BQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "MIT", "dependencies": { "rdf-data-factory": "^1.1.2" }, @@ -13884,10 +14561,76 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/sparqljson-parse": { + "node_modules/sparqljson-parse": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/sparqljson-parse/-/sparqljson-parse-3.3.0.tgz", + "integrity": "sha512-XrmkCsrx4n69Ak63Ju7t91hVlWw7YhEPPdA+giW2GRTosQxPur0JWh7rQin/8aT0WjKZgBgGpsNnVBYyyWUq1w==", + "license": "MIT", + "dependencies": { + "@bergos/jsonparse": "^1.4.1", + "@types/readable-stream": "^4.0.0", + "rdf-data-factory": "^2.0.0", + "readable-stream": "^4.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/sparqljson-parse/node_modules/@rdfjs/types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-2.0.1.tgz", + "integrity": "sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/sparqljson-parse/node_modules/rdf-data-factory": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-2.0.2.tgz", + "integrity": "sha512-WzPoYHwQYWvIP9k+7IBLY1b4nIDitzAK4mA37WumAF/Cjvu/KOtYJH9IPZnUTWNSd5K2+pq4vrcE9WZC4sRHhg==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/sparqljson-to-tree": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sparqljson-to-tree/-/sparqljson-to-tree-3.0.2.tgz", + "integrity": "sha512-8h/ZEPPBhBlMbgMX1TOumJQku2mLYYdwd/octsDa/bdqdNcMeAcB7S2Qh4SEZ+0pPNed9CBk1d5TEUpwJlcdmw==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "*", + "rdf-literal": "^1.3.2", + "sparqljson-parse": "^2.0.0" + } + }, + "node_modules/sparqljson-to-tree/node_modules/@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/sparqljson-to-tree/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/sparqljson-to-tree/node_modules/sparqljson-parse": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/sparqljson-parse/-/sparqljson-parse-2.2.0.tgz", "integrity": "sha512-2TfvNvUsaJyWfCrq3ExdDdbF9LBLzIUCricg+D1YCYbbmyTzscgCtRk4KcIyJF178DtfCt4BkKzbKl8IXMHp8w==", + "license": "MIT", "dependencies": { "@bergos/jsonparse": "^1.4.1", "@rdfjs/types": "*", @@ -13896,27 +14639,43 @@ "readable-stream": "^4.0.0" } }, - "node_modules/sparqljson-to-tree": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/sparqljson-to-tree/-/sparqljson-to-tree-3.0.2.tgz", - "integrity": "sha512-8h/ZEPPBhBlMbgMX1TOumJQku2mLYYdwd/octsDa/bdqdNcMeAcB7S2Qh4SEZ+0pPNed9CBk1d5TEUpwJlcdmw==", - "dependencies": { - "@rdfjs/types": "*", - "rdf-literal": "^1.3.2", - "sparqljson-parse": "^2.0.0" - } - }, "node_modules/sparqlxml-parse": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/sparqlxml-parse/-/sparqlxml-parse-2.1.1.tgz", - "integrity": "sha512-71sltShF6gDAzuKWEHNeij7r0Mv5VqRrvJing6W4WHJ12GRe6+t1IRTv6MeqxYN3XJmKevs7B3HCBUo7wceeJQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/sparqlxml-parse/-/sparqlxml-parse-3.3.0.tgz", + "integrity": "sha512-FUVgcUr2YePDtDuu/UcMTF2ODiKBQdZdcfTSvaR3QhWVAcBmIGX4r4apsePK1zCc1kkRR53JBHXHJho/Pk538g==", + "license": "MIT", "dependencies": { - "@rdfjs/types": "*", "@rubensworks/saxes": "^6.0.1", - "@types/readable-stream": "^2.3.13", + "@types/readable-stream": "^4.0.0", "buffer": "^6.0.3", - "rdf-data-factory": "^1.1.0", - "readable-stream": "^4.0.0" + "rdf-data-factory": "^2.0.0", + "readable-stream": "^4.5.2" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" + } + }, + "node_modules/sparqlxml-parse/node_modules/@rdfjs/types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-2.0.1.tgz", + "integrity": "sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/sparqlxml-parse/node_modules/rdf-data-factory": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-2.0.2.tgz", + "integrity": "sha512-WzPoYHwQYWvIP9k+7IBLY1b4nIDitzAK4mA37WumAF/Cjvu/KOtYJH9IPZnUTWNSd5K2+pq4vrcE9WZC4sRHhg==", + "license": "MIT", + "dependencies": { + "@rdfjs/types": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/rubensworks/" } }, "node_modules/spdx-correct": { @@ -13962,6 +14721,7 @@ "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "license": "MIT", "engines": { "node": "*" } @@ -13992,12 +14752,14 @@ "node_modules/standard-as-callback": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", - "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==" + "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", + "license": "MIT" }, "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -14006,6 +14768,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/stream-to-string/-/stream-to-string-1.2.1.tgz", "integrity": "sha512-WsvTDNF8UYs369Yko3pcdTducQtYpzEZeOV7cTuReyFvOoA9S/DLJ6sYK+xPafSPHhUMpaxiljKYnT6JSFztIA==", + "license": "MIT", "dependencies": { "promise-polyfill": "^1.1.6" } @@ -14013,40 +14776,24 @@ "node_modules/streamify-array": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/streamify-array/-/streamify-array-1.0.1.tgz", - "integrity": "sha512-ZnswaBcC6B1bhPLSQOlC6CdaDUSzU0wr2lvvHpbHNms8V7+DLd8uEAzDAWpsjxbFkijBHhuObFO/qqu52DZUMA==" + "integrity": "sha512-ZnswaBcC6B1bhPLSQOlC6CdaDUSzU0wr2lvvHpbHNms8V7+DLd8uEAzDAWpsjxbFkijBHhuObFO/qqu52DZUMA==", + "license": "MIT" }, "node_modules/streamify-string": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/streamify-string/-/streamify-string-1.0.1.tgz", - "integrity": "sha512-RXvBglotrvSIuQQ7oC55pdV40wZ/17gTb68ipMC4LA0SqMN4Sqfsf31Dpei7qXpYqZQ8ueVnPglUvtep3tlhqw==" + "integrity": "sha512-RXvBglotrvSIuQQ7oC55pdV40wZ/17gTb68ipMC4LA0SqMN4Sqfsf31Dpei7qXpYqZQ8ueVnPglUvtep3tlhqw==", + "license": "MIT" }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -14080,6 +14827,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -14094,6 +14842,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -14106,6 +14855,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -14138,6 +14888,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", "engines": { "node": ">=8" }, @@ -14149,6 +14900,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -14178,13 +14930,13 @@ } }, "node_modules/synckit": { - "version": "0.11.12", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", - "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.13.tgz", + "integrity": "sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==", "dev": true, "license": "MIT", "dependencies": { - "@pkgr/core": "^0.2.9" + "@pkgr/core": "^0.3.6" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -14194,37 +14946,126 @@ } }, "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.2.tgz", + "integrity": "sha512-u9E6A+ZDYdp7a4WnarkXPZOx8Ilz46+kby6p1yZ8zsGTz9gYa6FIS7lj2oezzNKmtdyyJNNmmXDppga5GB7kSw==", "dev": true, "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "glob": "^10.4.1", + "minimatch": "^10.2.2" }, "engines": { - "node": ">=8" + "node": ">=18" + } + }, + "node_modules/test-exclude/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", + "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" } }, "node_modules/test-exclude/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "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" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/test-exclude/node_modules/glob/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/test-exclude/node_modules/glob/node_modules/brace-expansion": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", + "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/test-exclude/node_modules/glob/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.8" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/test-exclude/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -14233,7 +15074,8 @@ "node_modules/text-hex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", + "license": "MIT" }, "node_modules/theming": { "version": "3.3.0", @@ -14271,7 +15113,14 @@ "node_modules/tiny-case": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz", - "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==" + "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==", + "license": "MIT" + }, + "node_modules/tiny-set-immediate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tiny-set-immediate/-/tiny-set-immediate-1.0.2.tgz", + "integrity": "sha512-EVbaM4zXFWS4CIqVoPzY7XIioQ5LU1p49AHizwPO1KyFyp/gxy5SA8mDmfDVl/2WLQiHgUL+esO6Ig+KhpUxUw==", + "license": "MIT" }, "node_modules/tiny-warning": { "version": "1.0.3", @@ -14280,27 +15129,19 @@ "license": "MIT" }, "node_modules/tmp": { - "version": "0.0.28", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz", - "integrity": "sha512-c2mmfiBmND6SOVxzogm1oda0OJ1HZVIk/5n26N59dDTh80MUeavpiCls4PGAdkX1PFkKokLpcf7prSjCeXLsJg==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.7.tgz", + "integrity": "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==", "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.1" - }, "engines": { - "node": ">=0.4.0" + "node": ">=14.14" } }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -14312,6 +15153,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", "engines": { "node": ">=0.6" } @@ -14319,7 +15161,8 @@ "node_modules/toposort": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", - "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==" + "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==", + "license": "MIT" }, "node_modules/tr46": { "version": "0.0.3", @@ -14331,6 +15174,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "license": "MIT", "engines": { "node": ">= 14.0.0" } @@ -14342,19 +15186,19 @@ "license": "MIT" }, "node_modules/ts-jest": { - "version": "29.4.6", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.6.tgz", - "integrity": "sha512-fSpWtOO/1AjSNQguk43hb/JCo16oJDnMJf3CdEGNkqsEX3t0KX96xvyX1D7PfLCpVoKu4MfVrqUkFyblYoY4lA==", + "version": "29.4.12", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.12.tgz", + "integrity": "sha512-Ov6ClY53Fflh6BGAnY2DlTq1hYDrTycz2PVTXBWFW2CU+9zrEqAp9fWdGXl42EXO5RLSFAcAZ2JFKbP+zBTFfw==", "dev": true, "license": "MIT", "dependencies": { "bs-logger": "^0.2.6", "fast-json-stable-stringify": "^2.1.0", - "handlebars": "^4.7.8", + "handlebars": "^4.7.9", "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", - "semver": "^7.7.3", + "semver": "^7.8.5", "type-fest": "^4.41.0", "yargs-parser": "^21.1.1" }, @@ -14371,7 +15215,7 @@ "babel-jest": "^29.0.0 || ^30.0.0", "jest": "^29.0.0 || ^30.0.0", "jest-util": "^29.0.0 || ^30.0.0", - "typescript": ">=4.3 <6" + "typescript": ">=4.3 <7" }, "peerDependenciesMeta": { "@babel/core": { @@ -14411,12 +15255,14 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/tsscmp": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", + "license": "MIT", "engines": { "node": ">=0.6.x" } @@ -14426,6 +15272,7 @@ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^1.8.1" }, @@ -14475,6 +15322,7 @@ "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -14510,6 +15358,7 @@ "version": "3.19.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "license": "BSD-2-Clause", "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -14529,9 +15378,9 @@ } }, "node_modules/undici": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.23.0.tgz", - "integrity": "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==", + "version": "6.28.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.0.tgz", + "integrity": "sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==", "license": "MIT", "engines": { "node": ">=18.17" @@ -14540,12 +15389,14 @@ "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", "engines": { "node": ">= 10.0.0" } @@ -14554,43 +15405,47 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/unrs-resolver": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", - "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.12.2.tgz", + "integrity": "sha512-dmlRxBJJayXjqTwC+JtF1HhJmgf3ftQ3YejFcZrf4+KKtJv0qDsK1pjqaaVjG7wJ5NJ6UVP1OqRMQ71Z4C3rxQ==", "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { - "napi-postinstall": "^0.3.0" + "napi-postinstall": "^0.3.4" }, "funding": { "url": "https://opencollective.com/unrs-resolver" }, "optionalDependencies": { - "@unrs/resolver-binding-android-arm-eabi": "1.11.1", - "@unrs/resolver-binding-android-arm64": "1.11.1", - "@unrs/resolver-binding-darwin-arm64": "1.11.1", - "@unrs/resolver-binding-darwin-x64": "1.11.1", - "@unrs/resolver-binding-freebsd-x64": "1.11.1", - "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", - "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", - "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", - "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", - "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", - "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-x64-musl": "1.11.1", - "@unrs/resolver-binding-wasm32-wasi": "1.11.1", - "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", - "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", - "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" + "@unrs/resolver-binding-android-arm-eabi": "1.12.2", + "@unrs/resolver-binding-android-arm64": "1.12.2", + "@unrs/resolver-binding-darwin-arm64": "1.12.2", + "@unrs/resolver-binding-darwin-x64": "1.12.2", + "@unrs/resolver-binding-freebsd-x64": "1.12.2", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.12.2", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.12.2", + "@unrs/resolver-binding-linux-arm64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-arm64-musl": "1.12.2", + "@unrs/resolver-binding-linux-loong64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-loong64-musl": "1.12.2", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-riscv64-musl": "1.12.2", + "@unrs/resolver-binding-linux-s390x-gnu": "1.12.2", + "@unrs/resolver-binding-linux-x64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-x64-musl": "1.12.2", + "@unrs/resolver-binding-openharmony-arm64": "1.12.2", + "@unrs/resolver-binding-wasm32-wasi": "1.12.2", + "@unrs/resolver-binding-win32-arm64-msvc": "1.12.2", + "@unrs/resolver-binding-win32-ia32-msvc": "1.12.2", + "@unrs/resolver-binding-win32-x64-msvc": "1.12.2" } }, "node_modules/unzip-response": { @@ -14603,9 +15458,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", - "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.2.tgz", + "integrity": "sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw==", "dev": true, "funding": [ { @@ -14650,7 +15505,8 @@ "node_modules/url-join": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "license": "MIT" }, "node_modules/url-parse-lax": { "version": "1.0.0", @@ -14667,18 +15523,20 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" }, "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.1.tgz", + "integrity": "sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { - "uuid": "dist/bin/uuid" + "uuid": "dist/esm/bin/uuid" } }, "node_modules/v8-to-istanbul": { @@ -14705,7 +15563,8 @@ "node_modules/validate-iri": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/validate-iri/-/validate-iri-1.0.1.tgz", - "integrity": "sha512-gLXi7351CoyVVQw8XE5sgpYawRKatxE7kj/xmCxXOZS1kMdtcqC0ILIqLuVEVnAUQSL/evOGG3eQ+8VgbdnstA==" + "integrity": "sha512-gLXi7351CoyVVQw8XE5sgpYawRKatxE7kj/xmCxXOZS1kMdtcqC0ILIqLuVEVnAUQSL/evOGG3eQ+8VgbdnstA==", + "license": "MIT" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", @@ -14721,6 +15580,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -14731,15 +15591,6 @@ "integrity": "sha512-XadVyw0xE+oZ5FGApXsdswv96rOhStzKqL53uSe5UaTadABGkWIg1+DTx8kiZ/VqTZTBneoL0l65RcPe4W3ecw==", "license": "MIT" }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, "node_modules/web-streams-polyfill": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", @@ -14753,7 +15604,8 @@ "node_modules/web-streams-ponyfill": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/web-streams-ponyfill/-/web-streams-ponyfill-1.4.2.tgz", - "integrity": "sha512-LCHW+fE2UBJ2vjhqJujqmoxh1ytEDEr0dPO3CabMdMDJPKmsaxzS90V1Ar6LtNE5VHLqxR4YMEj1i4lzMAccIA==" + "integrity": "sha512-LCHW+fE2UBJ2vjhqJujqmoxh1ytEDEr0dPO3CabMdMDJPKmsaxzS90V1Ar6LtNE5VHLqxR4YMEj1i4lzMAccIA==", + "license": "MIT" }, "node_modules/webidl-conversions": { "version": "3.0.1", @@ -14775,6 +15627,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -14792,12 +15645,13 @@ "license": "ISC" }, "node_modules/winston": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", - "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.19.0.tgz", + "integrity": "sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==", + "license": "MIT", "dependencies": { "@colors/colors": "^1.6.0", - "@dabh/diagnostics": "^2.0.2", + "@dabh/diagnostics": "^2.0.8", "async": "^3.2.3", "is-stream": "^2.0.0", "logform": "^2.7.0", @@ -14816,6 +15670,7 @@ "version": "4.9.0", "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", + "license": "MIT", "dependencies": { "logform": "^2.7.0", "readable-stream": "^3.6.2", @@ -14829,6 +15684,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -14842,6 +15698,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -14863,12 +15720,13 @@ "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "license": "MIT" }, "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -14876,7 +15734,10 @@ "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/wrap-ansi-cjs": { @@ -14884,6 +15745,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -14900,7 +15762,8 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" }, "node_modules/write-file-atomic": { "version": "5.0.1", @@ -14930,9 +15793,10 @@ } }, "node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", + "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==", + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -14952,12 +15816,14 @@ "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "license": "MIT" }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", "engines": { "node": ">=10" } @@ -14985,9 +15851,10 @@ } }, "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -15005,6 +15872,7 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", "engines": { "node": ">=12" } @@ -15013,6 +15881,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.4.0.tgz", "integrity": "sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==", + "license": "MIT", "engines": { "node": ">= 4.0.0" } @@ -15021,6 +15890,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -15029,9 +15899,10 @@ } }, "node_modules/yup": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/yup/-/yup-1.6.1.tgz", - "integrity": "sha512-JED8pB50qbA4FOkDol0bYF/p60qSEDQqBD0/qeIrUCG1KbPBIQ776fCUNb9ldbPcSTxA69g/47XTo4TqWiuXOA==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/yup/-/yup-1.7.1.tgz", + "integrity": "sha512-GKHFX2nXul2/4Dtfxhozv701jLQHdf6J34YDh2cEkpqoo8le5Mg6/LrdseVLrFarmFygZTlfIhHx/QKfb/QWXw==", + "license": "MIT", "dependencies": { "property-expr": "^2.0.5", "tiny-case": "^1.0.3", @@ -15043,6 +15914,7 @@ "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=12.20" }, diff --git a/package.json b/package.json index 8b445c0..7f217cd 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "build:components": "componentsjs-generator -s src -c dist/components -i .componentsignore -r pivot", "build:ts": "tsc", "prepare": "npm run build", + "postinstall": "patch-package", "test": "jest" }, "files": [ @@ -37,7 +38,9 @@ ], "dependencies": { "@inrupt/solid-client-authn-core": "^3.1.1", + "@rdfjs/types": "^1.1.2", "@solid/community-server": "^7.2.0", + "arrayify-stream": "^2.0.1", "mashlib": "^2.3.3", "patch-package": "^8.0.1", "rdflib": "^2.4.0" @@ -47,8 +50,10 @@ "@types/jest": "^30.0.0", "@types/node-fetch": "^2.6.13", "componentsjs-generator": "^3.1.2", + "cross-fetch": "^4.1.0", "jest": "^30.3.0", "jest-rdf": "^2.0.0", + "n3": "^1.26.0", "node-fetch": "^3.3.2", "ts-jest": "^29.4.6", "typescript": "^5.9.3" diff --git a/patches/@solid+community-server+7.2.0.patch b/patches/@solid+community-server+7.2.0.patch new file mode 100644 index 0000000..0307c59 --- /dev/null +++ b/patches/@solid+community-server+7.2.0.patch @@ -0,0 +1,12 @@ +diff --git a/node_modules/@solid/community-server/config/identity/handler/base/adapter-factory.json b/node_modules/@solid/community-server/config/identity/handler/base/adapter-factory.json +index c2b9890..c406ba6 +--- a/node_modules/@solid/community-server/config/identity/handler/base/adapter-factory.json ++++ b/node_modules/@solid/community-server/config/identity/handler/base/adapter-factory.json +@@ -13,6 +13,7 @@ + "source": { + "@type": "ExpiringAdapterFactory", + "storage": { ++ "@id": "urn:solid-server:default:ExpiringAdapterStorage", + "@type": "WrappedExpiringStorage", + "source": { + "@type": "ContainerPathStorage", diff --git a/patches/proper-lockfile+4.1.2.patch b/patches/proper-lockfile+4.1.2.patch new file mode 100644 index 0000000..e2a8b2d --- /dev/null +++ b/patches/proper-lockfile+4.1.2.patch @@ -0,0 +1,18 @@ +diff --git a/node_modules/proper-lockfile/lib/lockfile.js b/node_modules/proper-lockfile/lib/lockfile.js +index 97b6637..25bd0a2 100644 +--- a/node_modules/proper-lockfile/lib/lockfile.js ++++ b/node_modules/proper-lockfile/lib/lockfile.js +@@ -99,6 +99,13 @@ function removeLock(file, options, callback) { + function updateLock(file, options) { + const lock = locks[file]; + ++ // Guard against a renewal timer racing with lock release: ++ // `locks[file]` may already be deleted when an in-flight fs callback recurses. ++ /* istanbul ignore if */ ++ if (!lock) { ++ return; ++ } ++ + // Just for safety, should never happen + /* istanbul ignore if */ + if (lock.updateTimeout) { diff --git a/scripts/benchmark-quota-c.js b/scripts/benchmark-quota-c.js new file mode 100644 index 0000000..38fa088 --- /dev/null +++ b/scripts/benchmark-quota-c.js @@ -0,0 +1,148 @@ +/** + * Rigorous benchmark: original CSS quota chain vs A+B vs design C. + * + * Everything is compared under identical conditions, with COLD (first write, + * no cache / bootstrap) and WARM (steady state) numbers separated: + * + * 1. WALK — a single getSize(podRoot): old Node walk / du walk / cached / + * counter (O(1)). + * 2. WRITE — quota guard over a 4 MB body in 64 KB chunks: + * old : per-chunk full walks (no cache — always cold) + * A+B : du walk once per write; COLD = first write, WARM = cached + * C : counter; COLD = bootstrap recount, WARM = O(1) + * + * Run: node scripts/benchmark-quota-c.js [fileCount] [fileBytes] + * (Put Git Bash du on PATH to use the real du path: add + * "C:\Program Files\Git\usr\bin" to PATH on Windows.) + */ +const { performance } = require('node:perf_hooks'); +const fsSync = require('node:fs'); +const { promises: fs } = require('node:fs'); +const os = require('node:os'); +const path = require('node:path'); +const { QuotaStrategy, FileSizeReporter } = require('@solid/community-server'); +const { DuSizeReporter } = require('../dist/storage/size-reporter/DuSizeReporter.js'); +const { FastQuotaStrategy } = require('../dist/storage/quota/FastQuotaStrategy.js'); +const { QuotaCounter } = require('../dist/storage/quota/QuotaCounter.js'); +const { IncrementalSizeReporter } = require('../dist/storage/quota/IncrementalSizeReporter.js'); + +const FILE_COUNT = Number(process.argv[2]) || 5000; +const FILE_BYTES = Number(process.argv[3]) || 1024; +const WRITE_BYTES = 4 * 1024 * 1024; +const CHUNK_BYTES = 64 * 1024; +const IGNORE = [ '^/\\.internal$' ]; + +function makeMapper(root) { + return { + async mapUrlToFilePath(identifier) { + const url = new URL(identifier.path); + return { identifier, filePath: path.join(root, url.pathname), contentType: undefined, isMetadata: false }; + }, + async mapFilePathToUrl() { throw new Error('n/a'); }, + }; +} + +class OldStrategy extends QuotaStrategy { + constructor(reporter, limit, pod) { super(reporter, limit); this.pod = pod; } + async getTotalSpaceUsed() { return this.reporter.getSize(this.pod); } +} +class FastStrategy extends FastQuotaStrategy { + constructor(reporter, limit, pod) { super(limit, reporter, {}, {}); this.pod = pod; } + async getTotalSpaceUsed() { return this.reporter.getSize(this.pod); } +} + +function seedPod(podRootPath, count, bytes) { + const inbox = path.join(podRootPath, 'inbox'); + fsSync.mkdirSync(inbox, { recursive: true }); + const buf = Buffer.alloc(bytes, 7); + for (let i = 0; i < count; i++) { + fsSync.writeFileSync(path.join(inbox, `f-${i}.bin`), buf); + } +} + +function writeThroughGuard(guard, totalBytes, chunkBytes) { + return new Promise((resolve, reject) => { + guard.on('data', () => {}); + guard.on('end', resolve); + guard.on('error', reject); + let remaining = totalBytes; + while (remaining > 0) { + const size = Math.min(chunkBytes, remaining); + guard.write(Buffer.alloc(size, 1)); + remaining -= size; + } + guard.end(); + }); +} + +async function timed(fn) { + const start = performance.now(); + await fn(); + return performance.now() - start; +} + +function pad(s, w) { return String(s).padStart(w); } + +async function main() { + const limit = { unit: 'bytes', amount: 10 * 1024 * 1024 * 1024 }; + const pod = { path: 'http://example.com/alice/' }; + const resource = { path: 'http://example.com/alice/new-file' }; + + const root = fsSync.mkdtempSync(path.join(os.tmpdir(), 'quota-c-')); + console.log(`Pod: ${FILE_COUNT} files × ${FILE_BYTES} B (write body ${WRITE_BYTES / 1024 / 1024} MB in ${CHUNK_BYTES / 1024} KB chunks)`); + seedPod(path.join(root, 'alice'), FILE_COUNT, FILE_BYTES); + const mapper = makeMapper(root); + + // ---- 1. WALK / read path ---- + console.log('\n1. WALK — getSize(podRoot):'); + const oldReporter = new FileSizeReporter(mapper, root); + const duReporter = new DuSizeReporter(mapper, root, IGNORE); + const counter = new QuotaCounter(mapper, root, IGNORE); + + const tOldWalk = await timed(() => oldReporter.getSize(pod)); + const tDuCold = await timed(() => duReporter.getSize(pod)); + const tDuWarm = await timed(() => duReporter.getSize(pod)); + await counter.register(pod); + await counter.add(pod, (await new DuSizeReporter(mapper, root, IGNORE).getSize(pod)).amount); + const incReporter = new IncrementalSizeReporter(counter); + const tCounter = await timed(() => incReporter.getSize(pod)); + + console.log(` old (Node walk) : ${pad(tOldWalk.toFixed(1), 8)} ms`); + console.log(` A+B du (cold walk) : ${pad(tDuCold.toFixed(1), 8)} ms`); + console.log(` A+B du (cached) : ${pad(tDuWarm.toFixed(3), 8)} ms`); + console.log(` C counter (O(1)) : ${pad(tCounter.toFixed(3), 8)} ms`); + + // ---- 2. WRITE / guard ---- + console.log('\n2. WRITE — quota guard:'); + const chunks = Math.ceil(WRITE_BYTES / CHUNK_BYTES); + + // old — always cold (no cache), per-chunk walks. + const oldStrategy = new OldStrategy(oldReporter, limit, pod); + const tOld = await timed(async () => writeThroughGuard(await oldStrategy.createQuotaGuard(resource), WRITE_BYTES, CHUNK_BYTES)); + + // A+B — cold (fresh reporter) then warm (pre-warmed cache). + const duFastCold = new FastStrategy(new DuSizeReporter(mapper, root, IGNORE), limit, pod); + const tDuColdWrite = await timed(async () => writeThroughGuard(await duFastCold.createQuotaGuard(resource), WRITE_BYTES, CHUNK_BYTES)); + // Warm: ensure the cache is warm, then measure. + await duReporter.getSize(pod); + const duFastWarm = new FastStrategy(duReporter, limit, pod); + const tDuWarmWrite = await timed(async () => writeThroughGuard(await duFastWarm.createQuotaGuard(resource), WRITE_BYTES, CHUNK_BYTES)); + + // C — cold (fresh counter, bootstrap recount) then warm (counter ready). + const coldCounter = new QuotaCounter(mapper, root, IGNORE); + const cCold = new FastStrategy(new IncrementalSizeReporter(coldCounter), limit, pod); + const tCCold = await timed(async () => writeThroughGuard(await cCold.createQuotaGuard(resource), WRITE_BYTES, CHUNK_BYTES)); + const cWarm = new FastStrategy(incReporter, limit, pod); + const tCWarm = await timed(async () => writeThroughGuard(await cWarm.createQuotaGuard(resource), WRITE_BYTES, CHUNK_BYTES)); + + console.log(` old (per-chunk walks) : ${pad(tOld.toFixed(1), 8)} ms (${chunks} walks)`); + console.log(` A+B cold (1 du walk) : ${pad(tDuColdWrite.toFixed(1), 8)} ms`); + console.log(` A+B warm (cached) : ${pad(tDuWarmWrite.toFixed(3), 8)} ms`); + console.log(` C cold (bootstrap) : ${pad(tCCold.toFixed(1), 8)} ms`); + console.log(` C warm (O(1)) : ${pad(tCWarm.toFixed(3), 8)} ms`); + + fsSync.rmSync(root, { recursive: true, force: true }); + console.log('\nNote: "old" has no cache (always cold). On Linux/WSL, du walks are 10-100x faster than on Windows+Git Bash.'); +} + +main().catch((e) => { console.error(e); process.exit(1); }); diff --git a/scripts/benchmark-quota.js b/scripts/benchmark-quota.js new file mode 100644 index 0000000..aebd87d --- /dev/null +++ b/scripts/benchmark-quota.js @@ -0,0 +1,145 @@ +/** + * Benchmark: CSS pod-quota chain — old (FileSizeReporter + QuotaStrategy) + * vs pivot (DuSizeReporter + FastQuotaStrategy). + * + * Measures exactly what was optimized: + * 1. Full pod walk cost (old recursive Node walk vs du walk) + * 2. The per-write quota guard (old: full walk PER CHUNK; new: walk once) + * 3. The TTL cache effect on repeated size queries + * + * Run: node scripts/benchmark-quota.js [fileCount] [fileBytes] + * e.g. node scripts/benchmark-quota.js 10000 1024 + * + * NOTE: on bare Windows there is no `du`, so the walk times will be similar + * between the two (the guard + cache wins still show). On Linux/WSL the du + * walk is 10-100x faster. + */ +const { performance } = require('node:perf_hooks'); +const fs = require('node:fs'); +const os = require('node:os'); +const path = require('node:path'); +const { PassThrough } = require('node:stream'); +const { + FileSizeReporter, + QuotaStrategy, +} = require('@solid/community-server'); +const { DuSizeReporter } = require('../dist/storage/size-reporter/DuSizeReporter.js'); +const { FastQuotaStrategy } = require('../dist/storage/quota/FastQuotaStrategy.js'); + +const FILE_COUNT = Number(process.argv[2]) || 5000; +const FILE_BYTES = Number(process.argv[3]) || 1024; +const WRITE_BYTES = 4 * 1024 * 1024; // simulated write body +const CHUNK_BYTES = 64 * 1024; + +function makeMapper(root) { + return { + async mapUrlToFilePath(identifier) { + const url = new URL(identifier.path); + return { identifier, filePath: path.join(root, url.pathname), contentType: undefined, isMetadata: false }; + }, + async mapFilePathToUrl() { throw new Error('n/a'); }, + }; +} + +// Old strategy: base QuotaStrategy whose pod size = reporter.getSize(podRoot) +class OldBenchStrategy extends QuotaStrategy { + constructor(reporter, limit, podRoot) { + super(reporter, limit); + this.podRoot = podRoot; + } + async getTotalSpaceUsed() { + return this.reporter.getSize(this.podRoot); + } +} + +// New strategy: FastQuotaStrategy with the same pod-size hook +class NewBenchStrategy extends FastQuotaStrategy { + constructor(reporter, limit, podRoot) { + super(limit, reporter, {}, {}); + this.podRoot = podRoot; + } + async getTotalSpaceUsed() { + return this.reporter.getSize(this.podRoot); + } +} + +function seedPod(root, count, bytes) { + const inbox = path.join(root, 'inbox'); + fs.mkdirSync(inbox, { recursive: true }); + const buf = Buffer.alloc(bytes, 7); + for (let i = 0; i < count; i++) { + fs.writeFileSync(path.join(inbox, `file-${i}.bin`), buf); + } +} + +function writeThroughGuard(guard, totalBytes, chunkBytes) { + return new Promise((resolve, reject) => { + const chunks = []; + let remaining = totalBytes; + guard.on('data', () => {}); + guard.on('end', () => resolve(chunks)); + guard.on('error', reject); + while (remaining > 0) { + const size = Math.min(chunkBytes, remaining); + guard.write(Buffer.alloc(size, 1)); + remaining -= size; + } + guard.end(); + }); +} + +async function timed(fn) { + const start = performance.now(); + await fn(); + return performance.now() - start; +} + +async function main() { + const root = fs.mkdtempSync(path.join(os.tmpdir(), 'quota-bench-')); + const podRoot = { path: 'http://example.com/' }; + const limit = { unit: 'bytes', amount: 10 * 1024 * 1024 * 1024 }; + + console.log(`Seeding ${FILE_COUNT} files × ${FILE_BYTES} B in ${root} …`); + const seedStart = performance.now(); + seedPod(root, FILE_COUNT, FILE_BYTES); + console.log(` seeded in ${(performance.now() - seedStart).toFixed(0)} ms\n`); + + const mapper = makeMapper(root); + const reporterOld = new FileSizeReporter(mapper, root); + const reporterNew = new DuSizeReporter(mapper, root, [ '^/\\.internal$' ]); + + // --- 1. Full pod walk (single getSize) --- + const walkOld = await timed(() => reporterOld.getSize(podRoot)); + const walkNew = await timed(() => reporterNew.getSize(podRoot)); + const walkCached = await timed(() => reporterNew.getSize(podRoot)); + + console.log('1. FULL POD WALK (getSize of pod root)'); + console.log(` old (Node recursive walk): ${walkOld.toFixed(1)} ms`); + console.log(` new (du, first call): ${walkNew.toFixed(1)} ms`); + console.log(` new (du, cached, TTL hit): ${walkCached.toFixed(3)} ms`); + if (walkNew > 0) { + console.log(` walk speedup (first call): ${(walkOld / walkNew).toFixed(1)}×`); + } + + // --- 2. Per-write guard (write body through the quota guard) --- + const strategyOld = new OldBenchStrategy(reporterOld, limit, podRoot); + const strategyNew = new NewBenchStrategy(reporterNew, limit, podRoot); + + const guardOld = await strategyOld.createQuotaGuard({ path: 'http://example.com/inbox/file-new.bin' }); + const guardNew = await strategyNew.createQuotaGuard({ path: 'http://example.com/inbox/file-new.bin' }); + + const guardOldMs = await timed(() => writeThroughGuard(guardOld, WRITE_BYTES, CHUNK_BYTES)); + const guardNewMs = await timed(() => writeThroughGuard(guardNew, WRITE_BYTES, CHUNK_BYTES)); + + console.log(`\n2. PER-WRITE QUOTA GUARD (${(WRITE_BYTES / 1024 / 1024).toFixed(0)} MB body, ${CHUNK_BYTES / 1024} KB chunks)`); + console.log(` old (walk per chunk, ${Math.ceil(WRITE_BYTES / CHUNK_BYTES)} chunks): ${guardOldMs.toFixed(1)} ms`); + console.log(` new (walk once + cache): ${guardNewMs.toFixed(1)} ms`); + if (guardNewMs > 0) { + console.log(` guard speedup: ${(guardOldMs / guardNewMs).toFixed(1)}×`); + } + + fs.rmSync(root, { recursive: true, force: true }); + console.log('\nDone.'); +} + +main().catch((err) => { console.error(err); process.exit(1); }); diff --git a/scripts/smoke-design-c.js b/scripts/smoke-design-c.js new file mode 100644 index 0000000..2d773be --- /dev/null +++ b/scripts/smoke-design-c.js @@ -0,0 +1,146 @@ +// Smoke test for design C against the compiled dist — replicates the jest +// scenarios that failed (mtime/sidecar handling + pod discovery). +// Run: node scripts/smoke-design-c.js +const { promises: fs } = require('node:fs'); +const os = require('node:os'); +const path = require('node:path'); +const { SingleRootIdentifierStrategy } = require('@solid/community-server'); +const { QuotaCounter } = require('../dist/storage/quota/QuotaCounter.js'); +const { IncrementalSizeReporter } = require('../dist/storage/quota/IncrementalSizeReporter.js'); +const { QuotaDeltaDataAccessor } = require('../dist/storage/quota/QuotaDeltaDataAccessor.js'); +const { DuSizeReporter } = require('../dist/storage/size-reporter/DuSizeReporter.js'); + +const IGNORE = [ '^/\\.internal$' ]; +const PIM_STORAGE = 'http://www.w3.org/ns/pim/space#Storage'; + +function createMapper(root) { + return { + async mapUrlToFilePath(identifier, isMetadata) { + const url = new URL(identifier.path); + const base = path.join(root, url.pathname); + return { identifier, filePath: isMetadata ? `${base}.meta` : base, contentType: undefined, isMetadata }; + }, + async mapFilePathToUrl() { throw new Error('n/a'); }, + }; +} + +async function walkExpected(root, mapper, pod) { + return (await new DuSizeReporter(mapper, root, IGNORE).getSize(pod)).amount; +} + +function createAccessor(root) { + const mapper = createMapper(root); + const meta = (isStorage) => ({ getAll: () => (isStorage ? [ { value: PIM_STORAGE } ] : []) }); + return { + async canHandle() {}, + async getData(id) { const { filePath } = await mapper.mapUrlToFilePath(id, false); return fs.createReadStream(filePath); }, + async getMetadata(id) { return meta(id.path.endsWith('/') && id.path !== 'http://example.com/'); }, + getChildren() { return (async function*() {})(); }, + async writeDocument(id, data) { + const { filePath } = await mapper.mapUrlToFilePath(id, false); + const chunks = []; + for await (const c of data) chunks.push(Buffer.from(c)); + await fs.mkdir(path.dirname(filePath), { recursive: true }); + await fs.writeFile(filePath, Buffer.concat(chunks)); + }, + async writeContainer(id) { + const { filePath } = await mapper.mapUrlToFilePath(id, false); + await fs.mkdir(filePath, { recursive: true }); + }, + async writeMetadata(id) { + const { filePath } = await mapper.mapUrlToFilePath(id, true); + await fs.mkdir(path.dirname(filePath), { recursive: true }); + await fs.writeFile(filePath, '{}'); + }, + async deleteResource(id) { + const data = await mapper.mapUrlToFilePath(id, false); + const meta = await mapper.mapUrlToFilePath(id, true); + await fs.rm(data.filePath, { recursive: true, force: true }); + await fs.rm(meta.filePath, { force: true }); + }, + }; +} + +let failures = 0; +function check(label, actual, expected) { + const ok = actual === expected; + console.log(` ${ok ? 'OK ' : 'FAIL'} ${label}: expected ${expected}, got ${actual}`); + if (!ok) failures++; +} + +async function main() { + const root = await fs.mkdtemp(path.join(os.tmpdir(), 'smoke-c-')); + const mapper = createMapper(root); + await fs.mkdir(path.join(root, 'alice')); + + // --- QuotaCounter --- + console.log('QuotaCounter:'); + const counter = new QuotaCounter(mapper, root, IGNORE); + const POD = { path: 'http://example.com/alice/' }; + await counter.register(POD); + await counter.add(POD, 100); + await counter.add(POD, 50); + check('accumulate 100+50', (await counter.getSize(POD)).amount, 150); + + // persistence across instances + const first = new QuotaCounter(mapper, root, IGNORE); + await first.register(POD); + await first.add(POD, 200); + const second = new QuotaCounter(mapper, root, IGNORE); + check('reload from sidecar (no re-walk)', (await second.getSize(POD)).amount, 200); + + // staleness + await fs.writeFile(path.join(root, 'alice', 'extra.bin'), Buffer.alloc(400)); + const stale = await second.getSize(POD); + check('staleness recount', stale.amount, await walkExpected(root, mapper, POD)); + + // remove → re-bootstrap + await second.remove(POD); + check('isPodRoot false after remove', await second.isPodRoot(POD), false); + check('re-bootstrap after remove', (await second.getSize(POD)).amount, await walkExpected(root, mapper, POD)); + + // --- IncrementalSizeReporter --- + console.log('IncrementalSizeReporter:'); + const counter2 = new QuotaCounter(mapper, root, IGNORE); + await counter2.register(POD); + await counter2.add(POD, 123); + const reporter = new IncrementalSizeReporter(counter2); + check('pod root → counter total', (await reporter.getSize(POD)).amount, 123); + await fs.writeFile(path.join(root, 'alice', 'foo'), Buffer.alloc(64)); + check('resource → stat', (await reporter.getSize({ path: 'http://example.com/alice/foo' })).amount, 64); + + // --- QuotaDeltaDataAccessor --- + console.log('QuotaDeltaDataAccessor (pod discovery + delta tracking):'); + const dRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'smoke-delta-')); + const dMapper = createMapper(dRoot); + const dCounter = new QuotaCounter(dMapper, dRoot, IGNORE); + const dAccessor = new QuotaDeltaDataAccessor( + createAccessor(dRoot), + new SingleRootIdentifierStrategy('http://example.com/'), + dCounter, + dMapper, + ); + const dPOD = { path: 'http://example.com/alice/' }; + const dRes = { path: 'http://example.com/alice/foo' }; + await dAccessor.writeContainer(dPOD, {}); + check('pod registered after createContainer', await dCounter.isPodRoot(dPOD), true); + await dAccessor.writeDocument(dRes, (async function*() { yield Buffer.alloc(100); })(), {}); + check('after create doc(100) == walk', (await dCounter.getSize(dPOD)).amount, await walkExpected(dRoot, dMapper, dPOD)); + await dAccessor.writeDocument(dRes, (async function*() { yield Buffer.alloc(150); })(), {}); + check('after overwrite(150) == walk', (await dCounter.getSize(dPOD)).amount, await walkExpected(dRoot, dMapper, dPOD)); + await dAccessor.writeMetadata(dRes, {}); + check('after writeMetadata == walk', (await dCounter.getSize(dPOD)).amount, await walkExpected(dRoot, dMapper, dPOD)); + await dAccessor.deleteResource(dRes); + check('after delete == walk', (await dCounter.getSize(dPOD)).amount, await walkExpected(dRoot, dMapper, dPOD)); + // pod root delete → counter dropped + await dAccessor.writeContainer(dPOD, {}); + await dAccessor.deleteResource(dPOD); + check('pod root delete drops counter', await dCounter.isPodRoot(dPOD), false); + + await fs.rm(root, { recursive: true, force: true }); + await fs.rm(dRoot, { recursive: true, force: true }); + console.log(failures === 0 ? '\nALL CHECKS PASSED' : `\n${failures} CHECK(S) FAILED`); + process.exit(failures === 0 ? 0 : 1); +} + +main().catch((e) => { console.error(e); process.exit(1); }); diff --git a/scripts/verify-size-equivalence.js b/scripts/verify-size-equivalence.js new file mode 100644 index 0000000..04407e5 --- /dev/null +++ b/scripts/verify-size-equivalence.js @@ -0,0 +1,120 @@ +/** + * Equivalence proof: DuSizeReporter vs CSS FileSizeReporter. + * + * Generates random pod trees and asserts both reporters return the EXACT same + * apparent-byte total (same ignoreFolders), for the du path and the Node-walk + * fallback. Exits non-zero on any mismatch. + * + * Run with GNU du on PATH to exercise the real du path, e.g. on Windows: + * $env:PATH = "C:\Program Files\Git\usr\bin;$env:PATH" + * node scripts/verify-size-equivalence.js [iterations] [maxFiles] + */ +const fs = require('node:fs'); +const os = require('node:os'); +const path = require('node:path'); +const { FileSizeReporter } = require('@solid/community-server'); +const { DuSizeReporter } = require('../dist/storage/size-reporter/DuSizeReporter.js'); + +const ITERATIONS = Number(process.argv[2]) || 10; +const MAX_FILES = Number(process.argv[3]) || 60; +const IGNORE = [ '^/\\.internal$' ]; + +class ForcedDu extends DuSizeReporter { + async detectDu() { return 'gnu'; } +} +class ForcedNode extends DuSizeReporter { + async detectDu() { return 'none'; } +} + +function makeMapper(root) { + return { + async mapUrlToFilePath(identifier) { + const url = new URL(identifier.path); + return { identifier, filePath: path.join(root, url.pathname), contentType: undefined, isMetadata: false }; + }, + async mapFilePathToUrl() { throw new Error('n/a'); }, + }; +} + +// Random names for nested content. .internal is handled separately below: +// CSS only ever places .internal at the pod ROOT (temp files), where the +// anchored regex ^/\.internal$ and du's basename --exclude=.internal agree. +const SEGMENTS = [ 'a', 'b', 'c', 'd', 'e', 'inbox', 'public', 'private', 'settings' ]; + +function randomTree(root, maxFiles) { + const files = []; + const count = 1 + Math.floor(Math.random() * maxFiles); + for (let i = 0; i < count; i++) { + // 1-4 nested segments, each a subdirectory (mkdirp on write). + const depth = 1 + Math.floor(Math.random() * 3); + const segs = []; + for (let d = 0; d < depth; d++) { + segs.push(SEGMENTS[Math.floor(Math.random() * SEGMENTS.length)]); + } + const dir = path.join(root, ...segs); + const file = path.join(dir, `f${i}.bin`); + const size = Math.floor(Math.random() * 50_000); + files.push({ dir, file, size }); + } + return files; +} + +function writeTree(root, files) { + for (const { dir, file, size } of files) { + fs.mkdirSync(dir, { recursive: true }); + fs.writeFileSync(file, Buffer.alloc(size, 42)); + } + // Root-level .internal (excluded by both paths identically). + fs.mkdirSync(path.join(root, '.internal', 'tempFiles'), { recursive: true }); + fs.writeFileSync(path.join(root, '.internal', 'tempFiles', 'tmp.bin'), Buffer.alloc(777, 9)); + // Some empty dirs too. + fs.mkdirSync(path.join(root, 'empty-dir-1'), { recursive: true }); + fs.mkdirSync(path.join(root, 'a', 'empty-dir-2'), { recursive: true }); +} + +function assertEqual(label, a, b) { + const same = a.amount === b.amount; + console.log(` ${same ? 'OK ' : 'FAIL'} ${label}: FileSizeReporter=${a.amount} DuSizeReporter=${b.amount}${same ? '' : ' <-- MISMATCH'}`); + return same; +} + +let allOk = true; + +async function main() { + for (let iter = 1; iter <= ITERATIONS; iter++) { + const root = fs.mkdtempSync(path.join(os.tmpdir(), 'equiv-')); + const files = randomTree(root, MAX_FILES); + writeTree(root, files); + + const mapper = makeMapper(root); + const oldReporter = new FileSizeReporter(mapper, root, IGNORE); + const duReporter = new ForcedDu(mapper, root, IGNORE); + const nodeReporter = new ForcedNode(mapper, root, IGNORE); + const podId = { path: 'http://example.com/' }; + + const oldSize = await oldReporter.getSize(podId); + const duSize = await duReporter.getSize(podId); + const nodeSize = await nodeReporter.getSize(podId); + + console.log(`Iteration ${iter} (${files.length} files):`); + const okDu = assertEqual('du path ', oldSize, duSize); + const okNode = assertEqual('node fallback', oldSize, nodeSize); + if (!okDu || !okNode) allOk = false; + console.log(''); + + fs.rmSync(root, { recursive: true, force: true }); + } +} + +main().then(() => { + if (allOk) { + console.log(`EQUIVALENT: DuSizeReporter matches FileSizeReporter across ${ITERATIONS} random trees.`); + process.exit(0); + } else { + console.error('MISMATCH FOUND — sizes are NOT equivalent.'); + process.exit(1); + } +}).catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/src/identity/interaction/account/util/SafeBaseLoginAccountStorage.ts b/src/identity/interaction/account/util/SafeBaseLoginAccountStorage.ts new file mode 100644 index 0000000..05ba222 --- /dev/null +++ b/src/identity/interaction/account/util/SafeBaseLoginAccountStorage.ts @@ -0,0 +1,47 @@ +import { + ACCOUNT_TYPE, + BaseLoginAccountStorage, + createErrorMessage, + getLoggerFor, +} from '@solid/community-server'; + +const LOGIN_COUNT = 'linkedLoginsCount'; + +/** + * A {@link BaseLoginAccountStorage} that prevents the periodic cleanup of accounts + * without login methods from crashing the process when a lock timeout occurs. + * + * The storage is typed as `any` (and the class is not generic) because the + * componentsjs-generator cannot resolve the `IndexedStorage`/`IndexTypeCollection` + * generic types from the installed Community Solid Server `.d.ts` (TS2415-safe + * `logger` is renamed to `safeLogger` for the same reason). + */ +export class SafeBaseLoginAccountStorage extends BaseLoginAccountStorage { + // Renamed (not `logger`) because the base class already declares a private `logger`, + // which cannot be re-declared in a subclass (TS2415). + private readonly safeLogger = getLoggerFor(this); + + private readonly timeout: number; + + public constructor(storage: any, expiration = 30 * 60) { + super(storage, expiration); + this.timeout = expiration * 1000; + } + + protected createAccountTimeout(id: string): void { + // eslint-disable-next-line @typescript-eslint/no-misused-promises + const timer = setTimeout(async(): Promise => { + try { + const account = await this.storage.get(ACCOUNT_TYPE, id); + if (account && account[LOGIN_COUNT] === 0) { + this.safeLogger.debug(`Removing account with no login methods ${id}`); + await this.storage.delete(ACCOUNT_TYPE, id); + } + } catch (error: unknown) { + // Prevent an unhandled rejection (e.g. a lock timeout) from crashing the process. + this.safeLogger.error(`Error during account cleanup of ${id}: ${createErrorMessage(error)}`); + } + }, this.timeout); + timer.unref(); + } +} diff --git a/src/identity/interaction/webid/util/GuardedWebIdStore.ts b/src/identity/interaction/webid/util/GuardedWebIdStore.ts new file mode 100644 index 0000000..172bda4 --- /dev/null +++ b/src/identity/interaction/webid/util/GuardedWebIdStore.ts @@ -0,0 +1,36 @@ +import { + AccountLoginStorage, + BaseWebIdStore, + WEBID_STORAGE_DESCRIPTION, + WEBID_STORAGE_TYPE, +} from '@solid/community-server'; + +type WebIdStorage = AccountLoginStorage<{ [WEBID_STORAGE_TYPE]: typeof WEBID_STORAGE_DESCRIPTION }>; + +/** + * A {@link BaseWebIdStore} that also determines whether a WebID is registered + * to any account on this server (`hasWebId`). + * + * The card guard needs to know whether a WebID is registered, which the + * upstream WebIdStore does not expose (yet). This subclass keeps the full + * upstream behavior and only adds the exact indexed lookup on the webId index. + */ +export class GuardedWebIdStore extends BaseWebIdStore { + private readonly webIdStorage: WebIdStorage; + + // Loosely typed so the Components.js generator does not need to resolve the + // external generic; Components.js does not type-check constructor arguments. + public constructor(storage: any) { + super(storage); + this.webIdStorage = storage as unknown as WebIdStorage; + } + + /** + * Determines if the given WebID is registered to an account on this server. + * + * @param webId - WebID to check. + */ + public async hasWebId(webId: string): Promise { + return (await this.webIdStorage.find(WEBID_STORAGE_TYPE, { webId })).length > 0; + } +} diff --git a/src/index.ts b/src/index.ts index 2d9b1a8..247d4b3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,14 @@ export * from "./storage/RdfPatchingStore"; +export * from './storage/ProfileCardGuard'; export * from "./storage/patch/ThrowingN3Patcher"; +export * from "./storage/quota/FastQuotaStrategy"; +export * from "./storage/quota/IncrementalSizeReporter"; +export * from "./storage/quota/QuotaCounter"; +export * from "./storage/quota/QuotaDeltaDataAccessor"; +export * from "./storage/size-reporter/DuSizeReporter"; export * from './FedcmHttpHandler'; export * from './http/output/PivotResponseWriter'; +export * from './identity/interaction/account/util/SafeBaseLoginAccountStorage'; export * from './identity/interaction/password/MigratedPasswordLoginHandler'; +export * from './identity/interaction/webid/util/GuardedWebIdStore'; export * from './identity/PivotOidcHttpHandler'; diff --git a/src/storage/ProfileCardGuard.ts b/src/storage/ProfileCardGuard.ts new file mode 100644 index 0000000..f931998 --- /dev/null +++ b/src/storage/ProfileCardGuard.ts @@ -0,0 +1,171 @@ +import arrayifyStream from 'arrayify-stream'; +import type { Quad } from '@rdfjs/types'; +import { + BadRequestHttpError, + ForbiddenHttpError, + INTERNAL_QUADS, + PassthroughStore, + RepresentationConverter, + SOLID, + cloneRepresentation, + createErrorMessage, + trimTrailingSlashes, +} from '@solid/community-server'; +import type { + ChangeMap, + Conditions, + Representation, + ResourceIdentifier, + ResourceStore, +} from '@solid/community-server'; +import type { GuardedWebIdStore } from '../identity/interaction/webid/util/GuardedWebIdStore'; + +/** + * Guards the profile card of WebIDs registered on this server. + * + * The location of these cards is given by the `relativeWebIdPaths` parameter, + * which lists the relative paths (including fragment) that are used for the + * WebIDs generated by this server, e.g. `/profile/card#me`. Multiple paths can + * be provided to also cover WebIDs generated with a previous configuration. + * Whether a document is actually protected is always verified against the + * {@link GuardedWebIdStore}, so only WebIDs that are registered to an account + * are guarded, independent of the storage backend used. + */ +export class ProfileCardGuard extends PassthroughStore { + private readonly webIdStore: GuardedWebIdStore; + private readonly baseUrl: string; + private readonly converter: RepresentationConverter; + private readonly relativeWebIdPaths: string[]; + + /** + * @param source - Store wrapped by this guard. + * @param webIdStore - Store tracking which WebIDs are registered to accounts. + * @param baseUrl - Base URL of the server, used to verify the `solid:oidcIssuer` triple. + * @param converter - Converts incoming representations to quads for validation. + * @param relativeWebIdPaths - Relative paths (including fragment) of generated WebIDs, + * e.g. `/profile/card#me`. + */ + public constructor( + source: ResourceStore, + webIdStore: GuardedWebIdStore, + baseUrl: string, + converter: RepresentationConverter, + relativeWebIdPaths: string[], + ) { + super(source); + this.webIdStore = webIdStore; + this.baseUrl = trimTrailingSlashes(baseUrl); + this.converter = converter; + this.relativeWebIdPaths = relativeWebIdPaths; + } + + public async setRepresentation( + identifier: ResourceIdentifier, + representation: Representation, + conditions?: Conditions, + ): Promise { + await this.validateCard(identifier, representation); + return this.source.setRepresentation(identifier, representation, conditions); + } + + public async addResource( + container: ResourceIdentifier, + representation: Representation, + conditions?: Conditions, + ): Promise { + // The final URL of a new resource is determined by the backend, + // so only validate if it is already known. A newly created resource + // cannot host a registered WebID yet anyway. + const identifier = representation.metadata.identifier?.value; + if (identifier) { + await this.validateCard({ path: identifier }, representation); + } + return this.source.addResource(container, representation, conditions); + } + + public async deleteResource(identifier: ResourceIdentifier, conditions?: Conditions): Promise { + if ((await this.getRegisteredWebIds(identifier)).length > 0) { + throw new ForbiddenHttpError( + `The profile card ${identifier.path} cannot be deleted while its WebID is registered to an account.`, + ); + } + return this.source.deleteResource(identifier, conditions); + } + + /** + * Returns the WebIDs registered on this server whose card is the given document. + * A WebID is considered if its relative path matches one of the configured + * `relativeWebIdPaths` and if it is still registered in the {@link GuardedWebIdStore}. + */ + protected async getRegisteredWebIds(identifier: ResourceIdentifier): Promise { + const webIds = new Set(); + for (const relativeWebIdPath of this.relativeWebIdPaths) { + const hashIndex = relativeWebIdPath.lastIndexOf('#'); + const relativePath = hashIndex >= 0 ? relativeWebIdPath.slice(0, hashIndex) : relativeWebIdPath; + if (!identifier.path.endsWith(relativePath)) { + continue; + } + const webId = hashIndex >= 0 ? `${identifier.path}#${relativeWebIdPath.slice(hashIndex + 1)}` : identifier.path; + if (await this.webIdStore.hasWebId(webId)) { + webIds.add(webId); + } + } + return [ ...webIds ]; + } + + /** + * Converts the representation of a document to quads, without consuming the + * original representation, which remains usable by the wrapped store. + */ + protected async parseToQuads(identifier: ResourceIdentifier, representation: Representation): Promise { + const copy = await cloneRepresentation(representation); + if (copy.metadata.contentType === INTERNAL_QUADS) { + return arrayifyStream(copy.data); + } + const converted = await this.converter.handleSafe({ + identifier, + representation: copy, + preferences: { type: { [INTERNAL_QUADS]: 1 }}, + }); + if (converted.metadata.contentType !== INTERNAL_QUADS) { + representation.data.destroy(); + throw new BadRequestHttpError(`Invalid profile card ${identifier.path}: could not be parsed as RDF.`); + } + return arrayifyStream(converted.data); + } + + /** + * Ensures that a write to the card of a registered WebID results in valid RDF + * that still contains the `solid:oidcIssuer` triple for that WebID. + */ + protected async validateCard(identifier: ResourceIdentifier, representation: Representation): Promise { + const webIds = await this.getRegisteredWebIds(identifier); + if (webIds.length === 0) { + return; + } + + let quads: Quad[]; + try { + quads = await this.parseToQuads(identifier, representation); + } catch (cause: unknown) { + representation.data.destroy(); + const message = `Invalid profile card ${identifier.path}: not valid RDF. ${createErrorMessage(cause)}`; + throw new BadRequestHttpError(message, { cause }); + } + + const valid = webIds.every((webId): boolean => + quads.some(({ subject, predicate, object }): boolean => + subject.value === webId && + predicate.value === SOLID.terms.oidcIssuer.value && + object.termType === 'NamedNode' && + object.value === `${this.baseUrl}/`)); + + if (!valid) { + representation.data.destroy(); + const expected = [ ...webIds ] + .map((webId): string => `<${webId}> solid:oidcIssuer <${this.baseUrl}/>`) + .join(' and '); + throw new BadRequestHttpError(`Invalid profile card ${identifier.path}: missing the ${expected} triple.`); + } + } +} diff --git a/src/storage/quota/FastQuotaStrategy.ts b/src/storage/quota/FastQuotaStrategy.ts new file mode 100644 index 0000000..d6e70dc --- /dev/null +++ b/src/storage/quota/FastQuotaStrategy.ts @@ -0,0 +1,105 @@ +import { PassThrough } from 'node:stream'; +import { + PodQuotaStrategy, + guardStream, +} from '@solid/community-server'; +// PayloadHttpError is not exported from the package root; deep import is +// needed to surface a 413 (Payload Too Large) on quota breaches. +import { PayloadHttpError } from '@solid/community-server/dist/util/errors/PayloadHttpError'; +import type { Guarded } from '@solid/community-server'; +import type { DataAccessor } from '@solid/community-server'; +import type { IdentifierStrategy } from '@solid/community-server'; +import type { ResourceIdentifier } from '@solid/community-server'; +import type { Size } from '@solid/community-server'; +import type { SizeReporter } from '@solid/community-server'; +import type { DuSizeReporter } from '../size-reporter/DuSizeReporter'; +import { isInternalPath } from './InternalPath'; +import { discoverPod } from './PodDiscovery'; + +/** + * Pod quota strategy that avoids the per-chunk full pod walk. + * + * CSS's default `QuotaStrategy.createQuotaGuard` calls `getAvailableSpace` + * (which performs a full pod walk) for EVERY stream chunk — `chunks × O(N)`. + * This override computes the available space ONCE before streaming, then only + * tracks the current write's own byte delta per chunk. When the write + * completes, the reporter's size cache is invalidated so the QuotaValidator's + * post-write check (and the next write's pre-check) re-walk fresh. + */ +export class FastQuotaStrategy extends PodQuotaStrategy { + private readonly discoveryStrategy: IdentifierStrategy; + private readonly discoveryAccessor: DataAccessor; + + public constructor( + limit: Size, + reporter: SizeReporter, + identifierStrategy: IdentifierStrategy, + accessor: DataAccessor, + ) { + super(limit, reporter, identifierStrategy, accessor); + this.discoveryStrategy = identifierStrategy; + this.discoveryAccessor = accessor; + } + + /** + * Exempt CSS internal paths from quota checks. The QuotaValidator calls + * `getAvailableSpace` before AND after every write (and `createQuotaGuard` + * mid-stream); for `/.internal/*` writes (e.g. the IDP AuthorizationCode + * store) the inherited pod-discovery + size walk could take longer than the + * `WrappedExpiringReadWriteLocker` 6s expiry. Returning unlimited here + * short-circuits the validator without any pod walk. + */ + public override async getAvailableSpace(identifier: ResourceIdentifier): Promise { + if (isInternalPath(identifier)) { + return { amount: Number.MAX_SAFE_INTEGER, unit: 'bytes' }; + } + // Corrected pod discovery (metadata before root-container test) so + // subdomain-mode pods are found — CSS's searchPimStorage returns unlimited + // for every subdomain pod root. + const pod = await discoverPod(identifier, this.discoveryAccessor, this.discoveryStrategy); + if (pod === null) { + return { amount: Number.MAX_SAFE_INTEGER, unit: this.limit.unit }; + } + // Pod total, minus the resource's own size (it will be overwritten, so its + // space counts as available) — mirrors QuotaStrategy.getAvailableSpace. + const totalUsed = (await this.reporter.getSize(pod)).amount + - (await this.reporter.getSize(identifier)).amount; + return { amount: this.limit.amount - totalUsed, unit: this.limit.unit }; + } + + public async createQuotaGuard(identifier: ResourceIdentifier): Promise> { + // Compute the available space ONCE. getAvailableSpace already subtracts + // the overwritten resource's own size, and nothing else about the pod + // changes mid-write (atomic writes go to /.internal/, excluded by the + // reporter), so this single value is safe for the whole stream. + const availableSpace = await this.getAvailableSpace(identifier); + const reporter = this.reporter as DuSizeReporter & SizeReporter; + let total = 0; + + return guardStream(new PassThrough({ + async transform(chunk: any, _encoding: string, done: () => void): Promise { + total += await reporter.calculateChunkSize(chunk); + if (availableSpace.amount < total) { + this.destroy(new PayloadHttpError( + `Quota exceeded by ${total - availableSpace.amount} ${availableSpace.unit} during write`, + )); + } + this.push(chunk); + done(); + }, + async flush(done: (error?: Error) => void): Promise { + // Drop the cached sizes (resource + its ancestors incl. the pod root) + // so the QuotaValidator's after-write check re-walks and sees the new + // state. Best-effort: a failure to invalidate must not fail the write. + if (typeof reporter.invalidate === 'function') { + try { + await reporter.invalidate(identifier); + } catch { + // Ignore cache invalidation errors. + } + } + done(); + }, + })); + } +} diff --git a/src/storage/quota/IncrementalSizeReporter.ts b/src/storage/quota/IncrementalSizeReporter.ts new file mode 100644 index 0000000..5cc23a8 --- /dev/null +++ b/src/storage/quota/IncrementalSizeReporter.ts @@ -0,0 +1,50 @@ +import { + UNIT_BYTES, +} from '@solid/community-server'; +import type { + RepresentationMetadata, + ResourceIdentifier, + Size, + SizeReporter, +} from '@solid/community-server'; +import type { QuotaCounter } from './QuotaCounter'; + +/** + * {@link SizeReporter} backed by the incremental {@link QuotaCounter}. + * + * - `getSize(podRoot)` → **O(1)** counter read (recount only on bootstrap / + * staleness). + * - `getSize(any other resource)` → single stat (used by + * `QuotaStrategy.getAvailableSpace` to subtract the overwritten resource). + * + * Replaces `urn:solid-server:default:SizeReporter` in design C. The apparent + * byte unit is unchanged, so the 70 MB limit keeps its meaning. + */ +export class IncrementalSizeReporter implements SizeReporter { + private readonly counter: QuotaCounter; + + public constructor(counter: QuotaCounter) { + this.counter = counter; + } + + public getUnit(): string { + return UNIT_BYTES; + } + + public async getSize(identifier: ResourceIdentifier): Promise { + if (await this.counter.isPodRoot(identifier)) { + return this.counter.getSize(identifier); + } + return { unit: UNIT_BYTES, amount: await this.counter.sizeOfResource(identifier) }; + } + + /** The size of a chunk is simply its length in bytes. */ + public async calculateChunkSize(chunk: unknown): Promise { + return Buffer.isBuffer(chunk) ? chunk.length : Number((chunk as any)?.length) || 0; + } + + /** The estimated size of a resource is simply the content-length header. */ + public async estimateSize(metadata: RepresentationMetadata): Promise { + return metadata.contentLength; + } +} diff --git a/src/storage/quota/InternalPath.ts b/src/storage/quota/InternalPath.ts new file mode 100644 index 0000000..dd355ba --- /dev/null +++ b/src/storage/quota/InternalPath.ts @@ -0,0 +1,20 @@ +import type { ResourceIdentifier } from '@solid/community-server'; + +/** + * CSS internal storage (locks, IDP adapter, ...) lives under `/.internal/`. + * + * IMPORTANT: `ResourceIdentifier.path` is the full canonical URL (e.g. + * `https://pod.example.org/.internal/...`), not a bare path — identifier + * strategies (e.g. `SubdomainIdentifierStrategy`) test it against URL regexes. + * We must extract the URL pathname before comparing, otherwise the check never + * matches. This works in both suffix and subdomain deployment modes. + */ +export function isInternalPath(identifier: ResourceIdentifier): boolean { + let path = identifier.path; + try { + path = new URL(identifier.path).pathname; + } catch { + // Not a parseable URL — use the raw path as-is. + } + return path === '/.internal' || path.startsWith('/.internal/'); +} diff --git a/src/storage/quota/PodDiscovery.ts b/src/storage/quota/PodDiscovery.ts new file mode 100644 index 0000000..b8d1526 --- /dev/null +++ b/src/storage/quota/PodDiscovery.ts @@ -0,0 +1,62 @@ +import { + NotFoundHttpError, +} from '@solid/community-server'; +import type { + DataAccessor, + IdentifierStrategy, + RepresentationMetadata, + ResourceIdentifier, +} from '@solid/community-server'; + +const RDF_TYPE = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'; +const PIM_STORAGE = 'http://www.w3.org/ns/pim/space#Storage'; +const TYPE_TERM = { termType: 'NamedNode', value: RDF_TYPE }; + +/** + * Finds the closest parent container that has `pim:Storage` as metadata. + * + * NOTE: unlike CSS's own `PodQuotaStrategy.searchPimStorage`, this reads the + * metadata BEFORE testing for a root container. CSS checks `isRootContainer` + * first and bails without reading metadata — in SUBDOMAIN mode that returns + * "no pod" for every pod root (each subdomain root IS a root container), so + * pod quota is silently unlimited and no pod is ever discovered there (and no + * counter sidecar is ever created). Design C fixes the order so pod discovery + * works in both suffix and subdomain modes. + */ +export async function discoverPod( + identifier: ResourceIdentifier, + accessor: DataAccessor, + identifierStrategy: IdentifierStrategy, +): Promise { + let metadata: RepresentationMetadata; + try { + metadata = await accessor.getMetadata(identifier); + } catch (error: unknown) { + if (NotFoundHttpError.isInstance(error)) { + // Resource and/or its metadata do not exist — walk up, but stop at a + // root container to avoid unbounded recursion. + if (identifierStrategy.isRootContainer(identifier)) { + return null; + } + return discoverPod( + identifierStrategy.getParentContainer(identifier), + accessor, + identifierStrategy, + ); + } + throw error; + } + const hasPimStorage = metadata.getAll(TYPE_TERM as any) + .some((term): boolean => term.value === PIM_STORAGE); + if (hasPimStorage) { + return identifier; + } + if (identifierStrategy.isRootContainer(identifier)) { + return null; + } + return discoverPod( + identifierStrategy.getParentContainer(identifier), + accessor, + identifierStrategy, + ); +} diff --git a/src/storage/quota/QuotaCounter.ts b/src/storage/quota/QuotaCounter.ts new file mode 100644 index 0000000..f2936a9 --- /dev/null +++ b/src/storage/quota/QuotaCounter.ts @@ -0,0 +1,259 @@ +import { promises as fs } from 'node:fs'; +import { join } from 'node:path'; +import { + UNIT_BYTES, + joinFilePath, + normalizeFilePath, +} from '@solid/community-server'; +import type { + FileIdentifierMapper, + ResourceIdentifier, + Size, +} from '@solid/community-server'; +import { DuSizeReporter } from '../size-reporter/DuSizeReporter'; + +// In-memory counter entry for one pod. +interface CounterEntry { + total: number; + valid: boolean; + podMtimeMs: number; +} + +/** + * Incremental per-pod byte counter (design C). + * + * Keeps the apparent-byte total of every pod in memory, updated O(1) per + * write by the {@link QuotaDeltaDataAccessor} delta hook, and persisted to a + * per-pod sidecar (`/.internal/pivot-quota.json`, atomic rename) so + * counters survive restarts. A full `du`/Node walk (via DuSizeReporter) is + * only used to bootstrap a pod (first access, no sidecar) or recover a + * de-synchronized counter. + * + * The counter is a cache; the filesystem is the source of truth. Staleness + * (out-of-band changes, crash window) is detected cheaply by comparing the + * pod root directory's mtime against the recorded one, then re-walking once. + */ +export class QuotaCounter { + private readonly fileIdentifierMapper: FileIdentifierMapper; + private readonly rootFilePath: string; + private readonly sidecarRelativePath: string; + private readonly walker: DuSizeReporter; + private readonly entries: Map = new Map(); + private readonly locks: Map> = new Map(); + + public constructor( + fileIdentifierMapper: FileIdentifierMapper, + rootFilePath: string, + ignoreFolders: string[] = [], + sidecarRelativePath = '/.internal/pivot-quota.json', + ) { + this.fileIdentifierMapper = fileIdentifierMapper; + this.rootFilePath = normalizeFilePath(rootFilePath); + this.sidecarRelativePath = sidecarRelativePath; + // Dedicated walker with no cache — every call is a fresh recount. + this.walker = new DuSizeReporter(fileIdentifierMapper, rootFilePath, ignoreFolders, 0); + } + + /** The QuotaCounter always reports in bytes. */ + public getUnit(): string { + return UNIT_BYTES; + } + + /** + * Returns the pod's current total, performing a recount (walk) only when + * the pod has no valid counter (first access, no sidecar, or staleness). + */ + public async getSize(podIdentifier: ResourceIdentifier): Promise { + const path = await this.mapDataPath(podIdentifier); + const entry = await this.ensureEntry(path, podIdentifier); + return { unit: UNIT_BYTES, amount: entry.total }; + } + + /** + * Marks a path as a pod root so {@link IncrementalSizeReporter} routes + * pod-root identifiers to the counter. Called by the delta hook when it + * first discovers a pod. + */ + public async register(podIdentifier: ResourceIdentifier): Promise { + const path = await this.mapDataPath(podIdentifier); + if (!this.entries.has(path)) { + this.entries.set(path, { total: 0, valid: false, podMtimeMs: 0 }); + } + } + + /** Whether the given identifier maps to a known pod root. */ + public async isPodRoot(identifier: ResourceIdentifier): Promise { + return this.entries.has(await this.mapDataPath(identifier)); + } + + /** + * Applies a size delta to the pod. Updates the in-memory counter and + * persists the sidecar atomically. Per-pod mutex serializes concurrent + * writes. + */ + public async add(podIdentifier: ResourceIdentifier, delta: number): Promise { + const path = await this.mapDataPath(podIdentifier); + await this.withLock(path, async (): Promise => { + const entry = this.entries.get(path) ?? { total: 0, valid: false, podMtimeMs: 0 }; + entry.total += delta; + entry.valid = true; + this.entries.set(path, entry); + await this.persistWithMtime(path, entry); + }); + } + + /** Drops the counter for a pod and removes its sidecar (pod deletion). */ + public async remove(podIdentifier: ResourceIdentifier): Promise { + const path = await this.mapDataPath(podIdentifier); + await this.withLock(path, async (): Promise => { + this.entries.delete(path); + await fs.rm(this.sidecarPath(path), { force: true }).catch(() => undefined); + }); + } + + /** + * Apparent size of a single resource (not a pod root) — used by the + * reporter for the overwritten-resource subtraction in + * `QuotaStrategy.getAvailableSpace`. Single stat for a document; walk for a + * container. + */ + public async sizeOfResource(identifier: ResourceIdentifier): Promise { + const filePath = await this.mapDataPath(identifier); + try { + const stat = await fs.stat(filePath); + if (stat.isFile()) { + return stat.size; + } + // Container — walk it (rare: only the overwritten resource is a file). + return (await this.walker.getSize(identifier)).amount; + } catch { + return 0; + } + } + + /** Maps an identifier to its data file path (normalized). */ + public async mapDataPath(identifier: ResourceIdentifier): Promise { + const { filePath } = await this.fileIdentifierMapper.mapUrlToFilePath(identifier, false); + return normalizeFilePath(filePath); + } + + /** + * Full apparent-byte walk of a resource/container (used by the delta hook + * for container before/after sizing — rare, e.g. create/delete container). + */ + public async walk(identifier: ResourceIdentifier): Promise { + return (await this.walker.getSize(identifier)).amount; + } + + // --- Internals --- + + private async ensureEntry(path: string, podIdentifier: ResourceIdentifier): Promise { + let entry = this.entries.get(path); + if (entry && entry.valid) { + const mtime = await this.podRootMtime(path); + if (entry.podMtimeMs === mtime) { + return entry; + } + // Pod root mtime moved — the counter may be stale, recount below. + } + // Try the sidecar first (persisted counter), then a full walk. + return this.withLock(path, async (): Promise => { + entry = this.entries.get(path); + if (entry && entry.valid) { + const mtime = await this.podRootMtime(path); + if (entry.podMtimeMs === mtime) { + return entry; + } + } + const loaded = await this.loadSidecar(path); + if (loaded && loaded.valid) { + const mtime = await this.podRootMtime(path); + if (loaded.podMtimeMs === mtime) { + this.entries.set(path, loaded); + return loaded; + } + } + // No valid counter — full walk (bootstrap / recovery). + const total = (await this.walker.getSize(podIdentifier)).amount; + const fresh: CounterEntry = { total, valid: true, podMtimeMs: 0 }; + this.entries.set(path, fresh); + await this.persistWithMtime(path, fresh); + return fresh; + }); + } + + private async podRootMtime(path: string): Promise { + try { + const stat = await fs.stat(path); + return stat.isDirectory() ? stat.mtimeMs : 0; + } catch { + return 0; + } + } + + private sidecarPath(podRootPath: string): string { + return normalizeFilePath(joinFilePath(podRootPath, this.sidecarRelativePath)); + } + + private async loadSidecar(path: string): Promise { + try { + const raw = await fs.readFile(this.sidecarPath(path), 'utf8'); + const parsed = JSON.parse(raw); + if (typeof parsed?.total === 'number' && typeof parsed?.podMtimeMs === 'number') { + return { total: parsed.total, valid: true, podMtimeMs: parsed.podMtimeMs }; + } + } catch { + // Missing or malformed sidecar → recount. + } + return undefined; + } + + private async persist(path: string, entry: CounterEntry): Promise { + const sidecar = this.sidecarPath(path); + const tmp = `${sidecar}.tmp`; + try { + await fs.mkdir(join(path, '.internal'), { recursive: true }); + await fs.writeFile(tmp, JSON.stringify({ + version: 1, + total: entry.total, + podMtimeMs: entry.podMtimeMs, + updatedAt: new Date().toISOString(), + })); + await fs.rename(tmp, sidecar); + } catch { + // Persistence is best-effort: keep the in-memory counter authoritative. + } + } + + /** + * Persist, then record the pod root mtime AFTER the persist. Persisting the + * sidecar may create the `.internal/` directory (a new pod-root child), which + * bumps the pod root's mtime — recording the mtime before would leave every + * subsequent read thinking the counter is stale. + */ + private async persistWithMtime(path: string, entry: CounterEntry): Promise { + await this.persist(path, entry); + entry.podMtimeMs = await this.podRootMtime(path); + await this.persist(path, entry); + } + + private async withLock(key: string, fn: () => Promise): Promise { + const previous = this.locks.get(key) ?? Promise.resolve(); + let release: () => void = () => undefined; + const gate = new Promise((resolve): void => { + release = resolve; + }); + // Waiters chain on `previous`, then wait for this call's `gate` to open. + const next = previous.then(() => gate); + this.locks.set(key, next); + await previous; + try { + return await fn(); + } finally { + release(); + if (this.locks.get(key) === next) { + this.locks.delete(key); + } + } + } +} diff --git a/src/storage/quota/QuotaDeltaDataAccessor.ts b/src/storage/quota/QuotaDeltaDataAccessor.ts new file mode 100644 index 0000000..d436e33 --- /dev/null +++ b/src/storage/quota/QuotaDeltaDataAccessor.ts @@ -0,0 +1,156 @@ +import { promises as fs } from 'node:fs'; +import type { Readable } from 'node:stream'; +import { + PassthroughDataAccessor, +} from '@solid/community-server'; +import type { + DataAccessor, + FileIdentifierMapper, + IdentifierStrategy, + RepresentationMetadata, + ResourceIdentifier, +} from '@solid/community-server'; +import type { Guarded } from '@solid/community-server'; +import type { QuotaCounter } from './QuotaCounter'; +import { isInternalPath } from './InternalPath'; +import { discoverPod } from './PodDiscovery'; + +/** + * Delta hook for design C. Wraps the top of the file accessor chain and, for + * every mutation, computes the resource's apparent-byte delta (before/after) + * and feeds it to the {@link QuotaCounter}. + * + * Plugs into the existing chain untouched: this wrapper's `accessor` is the + * original `FileDataAccessor` (FilterMetadata → Validating → Atomic), so the + * quota validation and content-length filtering are preserved. + * + * Cases handled: + * - create/overwrite document: Δ = new − old (data + metadata file) + * - delete resource: Δ = −(data + metadata size) + * - create/delete container: Δ from a walk (captures directory sizes) + */ +export class QuotaDeltaDataAccessor extends PassthroughDataAccessor { + private readonly identifierStrategy: IdentifierStrategy; + private readonly counter: QuotaCounter; + private readonly fileIdentifierMapper: FileIdentifierMapper; + private readonly podCache: Map = new Map(); + + public constructor( + accessor: DataAccessor, + identifierStrategy: IdentifierStrategy, + counter: QuotaCounter, + fileIdentifierMapper: FileIdentifierMapper, + ) { + super(accessor); + this.identifierStrategy = identifierStrategy; + this.counter = counter; + this.fileIdentifierMapper = fileIdentifierMapper; + } + + public async writeDocument( + identifier: ResourceIdentifier, + data: Guarded, + metadata: RepresentationMetadata, + ): Promise { + await this.track(identifier, (): Promise => this.accessor.writeDocument(identifier, data, metadata)); + } + + public async writeContainer(identifier: ResourceIdentifier, metadata: RepresentationMetadata): Promise { + await this.track(identifier, (): Promise => this.accessor.writeContainer(identifier, metadata)); + } + + public async writeMetadata(identifier: ResourceIdentifier, metadata: RepresentationMetadata): Promise { + await this.track(identifier, (): Promise => this.accessor.writeMetadata(identifier, metadata)); + } + + public async deleteResource(identifier: ResourceIdentifier): Promise { + if (isInternalPath(identifier)) { + await this.accessor.deleteResource(identifier); + return; + } + const before = await this.sizeOf(identifier); + await this.accessor.deleteResource(identifier); + const after = await this.sizeOf(identifier); + const delta = after - before; + const pod = await this.findPod(identifier); + if (pod === null) { + return; + } + // Deleting the pod root itself → drop the counter entirely. + if (pod.path === identifier.path) { + await this.counter.remove(identifier); + return; + } + if (delta !== 0) { + await this.counter.register(pod); + await this.counter.add(pod, delta); + } + } + + // --- Delta tracking --- + + private async track(identifier: ResourceIdentifier, op: () => Promise): Promise { + // Skip the delta bookkeeping on CSS internal paths: the stat + pod-discovery + // walk + counter sidecar work can otherwise push internal writes (e.g. IDP + // authorization codes) past the WrappedExpiringReadWriteLocker's lock expiry. + if (isInternalPath(identifier)) { + await op(); + return; + } + const before = await this.sizeOf(identifier); + await op(); + const after = await this.sizeOf(identifier); + const pod = await this.findPod(identifier); + if (pod === null) { + return; + } + // Always register the pod so the reporter routes its reads to the counter + // (even when this particular write has a zero delta, e.g. an empty + // container on a filesystem that reports directory size 0). + await this.counter.register(pod); + const delta = after - before; + if (delta !== 0) { + await this.counter.add(pod, delta); + } + } + + /** Apparent size of the resource: data file + metadata file (+ walk for containers). */ + private async sizeOf(identifier: ResourceIdentifier): Promise { + const data = await this.stat(identifier, false); + const meta = await this.stat(identifier, true); + return data + meta; + } + + private async stat(identifier: ResourceIdentifier, isMetadata: boolean): Promise { + try { + const { filePath } = await this.fileIdentifierMapper.mapUrlToFilePath(identifier, isMetadata); + const stat = await fs.stat(filePath); + if (stat.isDirectory()) { + return this.counter.walk(identifier); + } + return stat.size; + } catch { + return 0; + } + } + + // --- Pod discovery (mirrors PodQuotaStrategy.searchPimStorage) --- + + private async findPod(identifier: ResourceIdentifier): Promise { + const path = await this.counter.mapDataPath(identifier); + const cached = this.podCache.get(path); + if (cached !== undefined) { + return cached; + } + const pod = await this.discoverPod(identifier); + this.podCache.set(path, pod); + return pod; + } + + private async discoverPod(identifier: ResourceIdentifier): Promise { + // Uses the corrected discovery (metadata check before the root-container + // test) so subdomain-mode pod roots are found — CSS's own searchPimStorage + // bails at root containers and never finds subdomain pods. + return discoverPod(identifier, this.accessor, this.identifierStrategy); + } +} diff --git a/src/storage/size-reporter/DuSizeReporter.ts b/src/storage/size-reporter/DuSizeReporter.ts new file mode 100644 index 0000000..eb1f80f --- /dev/null +++ b/src/storage/size-reporter/DuSizeReporter.ts @@ -0,0 +1,206 @@ +import { execFile } from 'node:child_process'; +import { promises as fsPromises } from 'node:fs'; +import { promisify } from 'node:util'; +import { + UNIT_BYTES, + joinFilePath, + normalizeFilePath, + trimTrailingSlashes, +} from '@solid/community-server'; +import type { + FileIdentifierMapper, + RepresentationMetadata, + ResourceIdentifier, + Size, + SizeReporter, +} from '@solid/community-server'; + +const execFileAsync = promisify(execFile); + +// Cache entry: computed size + expiry timestamp +interface CacheEntry { + size: number; + expiresAt: number; +} + +/** + * A {@link SizeReporter} that measures a resource (and its children) in + * apparent bytes, using GNU/BSD `du` as a fast C-level walk with a per-path + * TTL cache, falling back to a plain Node walk when no compatible `du` + * exists (e.g. bare Windows). + * + * The unit is apparent bytes (sum of `st_size`) — identical to CSS's + * `FileSizeReporter`, portable across servers/filesystems and + * user-manageable. `stat.blocks` (disk usage) is deliberately NOT used: + * the result would depend on the server's filesystem cluster size. + */ +export class DuSizeReporter implements SizeReporter { + private readonly fileIdentifierMapper: FileIdentifierMapper; + private readonly rootFilePath: string; + private readonly ignoreFolders: RegExp[]; + private readonly ttlMs: number; + private readonly cache: Map = new Map(); + private duFlavor: 'gnu' | 'bsd' | 'none' | null = null; + + public constructor( + fileIdentifierMapper: FileIdentifierMapper, + rootFilePath: string, + ignoreFolders: string[] = [], + ttl: number = 5000, + ) { + this.fileIdentifierMapper = fileIdentifierMapper; + this.rootFilePath = normalizeFilePath(rootFilePath); + this.ignoreFolders = ignoreFolders.map((folder): RegExp => new RegExp(folder, 'u')); + this.ttlMs = ttl; + } + + /** The DuSizeReporter always returns data in the form of bytes. */ + public getUnit(): string { + return UNIT_BYTES; + } + + /** + * Returns the size of the given resource (and its children) in apparent + * bytes, using the per-path TTL cache when possible. + */ + public async getSize(identifier: ResourceIdentifier): Promise { + const { filePath } = await this.fileIdentifierMapper.mapUrlToFilePath(identifier, false); + const normalized = normalizeFilePath(filePath); + const cached = this.cache.get(normalized); + if (cached && cached.expiresAt > Date.now()) { + return { unit: UNIT_BYTES, amount: cached.size }; + } + const amount = await this.computeTotalSize(normalized); + this.cache.set(normalized, { size: amount, expiresAt: Date.now() + this.ttlMs }); + return { unit: UNIT_BYTES, amount }; + } + + /** + * Drop the cached size for the given resource and all of its ancestors + * (e.g. the pod root). Called when a write to the resource completes, so + * the next size query re-walks and reflects the new content. + */ + public async invalidate(identifier: ResourceIdentifier): Promise { + try { + const { filePath } = await this.fileIdentifierMapper.mapUrlToFilePath(identifier, false); + const normalized = normalizeFilePath(filePath); + for (const key of this.cache.keys()) { + if (key === normalized || normalized.startsWith(key)) { + this.cache.delete(key); + } + } + } catch { + // Best-effort: if the resource cannot be mapped, leave the cache as-is. + } + } + + /** The size of a chunk is simply its length in bytes. */ + public async calculateChunkSize(chunk: unknown): Promise { + return Buffer.isBuffer(chunk) ? chunk.length : Number((chunk as any)?.length) || 0; + } + + /** The estimated size of a resource is simply the content-length header. */ + public async estimateSize(metadata: RepresentationMetadata): Promise { + return metadata.contentLength; + } + + // --- Walk implementations --- + + private async computeTotalSize(fileLocation: string): Promise { + const flavor = await this.detectDu(); + if (flavor !== 'none') { + try { + return await this.computeTotalSizeWithDu(fileLocation, flavor); + } catch { + // du failed (e.g. no du after all, permission error) — fall back to the Node walk. + } + } + return this.computeTotalSizeWithNode(fileLocation); + } + + private async computeTotalSizeWithDu(fileLocation: string, flavor: 'gnu' | 'bsd'): Promise { + const args: string[] = flavor === 'gnu' ? [ '-sb' ] : [ '-s', '-A', '-B', '1' ]; + for (const pattern of this.duExcludePatterns()) { + args.push(flavor === 'gnu' ? '--exclude' : '-I', pattern); + } + args.push(fileLocation); + const { stdout } = await execFileAsync('du', args, { maxBuffer: 64 * 1024 * 1024 }); + const amount = Number(stdout.trim().split(/\s+/)[0]); + if (!Number.isFinite(amount)) { + throw new Error(`Could not parse du output: ${stdout.trim()}`); + } + return amount; + } + + /** + * Plain Node recursive walk — the same semantics as CSS's + * `FileSizeReporter.getTotalSize`. Used when no compatible `du` exists. + */ + private async computeTotalSizeWithNode(fileLocation: string): Promise { + let stat; + try { + stat = await fsPromises.stat(fileLocation); + } catch { + return 0; + } + // If the file's location points to a file, simply return the file's size. + if (stat.isFile()) { + return stat.size; + } + // Recursively add all sizes of children to the total. + const childFiles = await fsPromises.readdir(fileLocation); + const rootFilePathLength = trimTrailingSlashes(this.rootFilePath).length; + let totalSize = stat.size; + for (const current of childFiles) { + const childFileLocation = normalizeFilePath(joinFilePath(fileLocation, current)); + // Exclude internal files, matching FileSizeReporter's behavior. + if (!this.ignoreFolders.some((folder): boolean => folder.test(childFileLocation.slice(rootFilePathLength)))) { + totalSize += await this.computeTotalSizeWithNode(childFileLocation); + } + } + return totalSize; + } + + protected async detectDu(): Promise<'gnu' | 'bsd' | 'none'> { + if (this.duFlavor) { + return this.duFlavor; + } + try { + await execFileAsync('du', [ '--version' ], { timeout: 1000 }); + this.duFlavor = 'gnu'; + } catch (error: any) { + // ENOENT: no `du` at all (e.g. bare Windows). Anything else means the + // GNU long option was rejected → assume BSD; if BSD flags fail at use + // time, the caller falls back to the Node walk. + this.duFlavor = error?.code === 'ENOENT' ? 'none' : 'bsd'; + } + return this.duFlavor; + } + + /** + * Convert the configured ignore-folder regexes into `du` exclude patterns. + * GNU/BSD `du` matches exclude patterns against path components/basenames + * (not against the full leading-slash path), so a regex like `^/\.internal$` + * becomes the exclude `.internal`. + * + * Only simple anchored folder patterns are convertible + * (`^/name$`); complex regexes that cannot be expressed as a du exclude are + * skipped here — the Node-walk fallback still applies them verbatim. + */ + private duExcludePatterns(): string[] { + const patterns: string[] = []; + for (const regex of this.ignoreFolders) { + // RegExp.source always escapes '/' as '\/' (e.g. `^/\.internal$` → + // `^\/\.internal$`). Strip the leading '^' + '/' (possibly '\/'), drop + // the trailing '$', then unescape the remaining escapes. + let src = regex.source.replace(/^\^?\\?\//, ''); + src = src.replace(/\$?$/, ''); + src = src.replace(/\\./g, '.'); + // Keep only patterns with no remaining regex metacharacters. + if (/^[A-Za-z0-9._-]+$/.test(src)) { + patterns.push(src); + } + } + return patterns; + } +} diff --git a/test/integration/ProfileCardGuard.test.ts b/test/integration/ProfileCardGuard.test.ts new file mode 100644 index 0000000..3475946 --- /dev/null +++ b/test/integration/ProfileCardGuard.test.ts @@ -0,0 +1,148 @@ +import fetch from 'cross-fetch'; +import type { App } from '@solid/community-server'; +import { joinUrl } from '@solid/community-server'; +import { getPort } from '../util/Util'; +import { getDefaultVariables, getTestConfigPath, instantiateFromConfig } from './Config'; + +const port = getPort('ProfileCardGuard'); +const baseUrl = `http://localhost:${port}/`; + +/** + * The full lifecycle of a WebID profile card on a server with the profile card guard: + * 1. a pod is created with a WebID, registered to the account, and the server is its IDP; + * 2. the card is protected as long as the WebID is registered; + * 3. after unlinking the WebID from the account, the card is no longer protected. + */ +describe('A server with the profile card guard', (): void => { + let app: App; + let cookie: string; + let controls: any; + let cardUrl: string; + let webId: string; + const email = 'test@example.com'; + const password = 'secret!'; + + beforeAll(async(): Promise => { + const instances = await instantiateFromConfig( + 'urn:solid-server:test:Instances', + getTestConfigPath('server-memory-guard.json'), + getDefaultVariables(port, baseUrl), + ) as Record; + ({ app } = instances); + await app.start(); + + // Fetch the account controls + let res = await fetch(joinUrl(baseUrl, '.account/')); + if (res.status !== 200) { + throw new Error(`Fetching the controls failed: ${await res.text()}`); + } + ({ controls } = await res.json()); + + // Create an account, which also logs us in + res = await fetch(controls.account.create, { method: 'POST' }); + if (res.status !== 200) { + throw new Error(`Creating the account failed: ${await res.text()}`); + } + const setCookie = res.headers.get('set-cookie')!; + cookie = setCookie.slice(0, setCookie.indexOf(';')); + + // Get the account-specific controls + res = await fetch(joinUrl(baseUrl, '.account/'), { headers: { cookie }}); + if (res.status !== 200) { + throw new Error(`Fetching the account controls failed: ${await res.text()}`); + } + ({ controls } = await res.json()); + + // Add a password login method + res = await fetch(controls.password.create, { + method: 'POST', + headers: { cookie, 'content-type': 'application/json' }, + body: JSON.stringify({ email, password }), + }); + if (res.status !== 200) { + throw new Error(`Adding the login method failed: ${await res.text()}`); + } + + // Create a pod, which registers its WebID to the account + res = await fetch(controls.account.pod, { + method: 'POST', + headers: { cookie, 'content-type': 'application/json' }, + body: JSON.stringify({ name: 'test' }), + }); + if (res.status !== 200) { + throw new Error(`Creating the pod failed: ${await res.text()}`); + } + const { webId: createdWebId } = await res.json(); + ({ webId } = { webId: createdWebId }); + cardUrl = webId.slice(0, webId.indexOf('#')); + }); + + afterAll(async(): Promise => { + await app.stop(); + }); + + it('creates the card with the server as its issuer.', async(): Promise => { + const res = await fetch(cardUrl, { headers: { accept: 'text/turtle' }}); + expect(res.status).toBe(200); + await expect(res.text()).resolves.toContain('solid:oidcIssuer'); + expect(webId).toBe(`${cardUrl}#me`); + }); + + it('forbids deleting the card while its WebID is registered.', async(): Promise => { + const res = await fetch(cardUrl, { method: 'DELETE' }); + expect(res.status).toBe(403); + }); + + it('rejects a card update that drops the issuer triple.', async(): Promise => { + const turtle = `<${webId}> "Alice".`; + const res = await fetch(cardUrl, { + method: 'PUT', + headers: { 'content-type': 'text/turtle' }, + body: turtle, + }); + expect(res.status).toBe(400); + }); + + it('accepts a card update that keeps the issuer triple.', async(): Promise => { + const turtle = `@prefix solid: . +<${webId}> solid:oidcIssuer <${baseUrl}>; solid:name "Alice".`; + const res = await fetch(cardUrl, { + method: 'PUT', + headers: { 'content-type': 'text/turtle' }, + body: turtle, + }); + expect(res.status).toBe(205); + }); + + it('does not protect documents that host no registered WebID.', async(): Promise => { + const note = joinUrl(baseUrl, 'test/notes'); + let res = await fetch(note, { + method: 'PUT', + headers: { 'content-type': 'text/turtle' }, + body: ' "note".', + }); + expect(res.status).toBe(201); + res = await fetch(note, { method: 'DELETE' }); + expect(res.status).toBe(205); + }); + + it('no longer protects the card after the WebID is unlinked.', async(): Promise => { + // Unlink the WebID from the account + let res = await fetch(controls.account.webId, { headers: { cookie }}); + expect(res.status).toBe(200); + const { webIdLinks } = await res.json(); + expect(webIdLinks[webId]).toBeDefined(); + + res = await fetch(webIdLinks[webId], { method: 'DELETE', headers: { cookie }}); + expect(res.status).toBe(200); + + // Verify the WebID is no longer registered + res = await fetch(controls.account.webId, { headers: { cookie }}); + expect(res.status).toBe(200); + expect((await res.json()).webIdLinks[webId]).toBeUndefined(); + + // The card can now be deleted + res = await fetch(cardUrl, { method: 'DELETE' }); + expect(res.status).toBe(205); + }); +}); diff --git a/test/integration/config/server-memory-guard.json b/test/integration/config/server-memory-guard.json new file mode 100644 index 0000000..7da93c4 --- /dev/null +++ b/test/integration/config/server-memory-guard.json @@ -0,0 +1,59 @@ +{ + "@context": [ + "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^7.0.0/components/context.jsonld", + "https://linkedsoftwaredependencies.org/bundles/npm/@solid/pivot/^1.0.0/components/context.jsonld" + ], + "import": [ + "css:config/app/init/initialize-root.json", + "css:config/app/main/default.json", + "css:config/http/handler/default.json", + "css:config/http/middleware/default.json", + "css:config/http/notifications/all.json", + "css:config/http/server-factory/http.json", + "css:config/http/static/default.json", + "css:config/identity/access/public.json", + "css:config/identity/handler/default.json", + "css:config/identity/oidc/default.json", + "css:config/identity/ownership/token.json", + "css:config/identity/pod/static.json", + "css:config/ldp/authentication/dpop-bearer.json", + "css:config/ldp/authorization/allow-all.json", + "css:config/ldp/handler/default.json", + "css:config/ldp/metadata-parser/default.json", + "css:config/ldp/metadata-writer/default.json", + "css:config/ldp/modes/default.json", + "css:config/storage/backend/memory.json", + "css:config/storage/key-value/resource-store.json", + "css:config/storage/location/root.json", + "pivot:config/storage/middleware/default.json", + "pivot:config/storage/profile-card-guard.json", + "css:config/util/auxiliary/acl.json", + "css:config/util/identifiers/suffix.json", + "css:config/util/index/default.json", + "css:config/util/logging/winston.json", + "css:config/util/representation-conversion/default.json", + "css:config/util/resource-locker/memory.json", + "css:config/util/variables/default.json" + ], + "@graph": [ + { + "@id": "urn:solid-server:test:Instances", + "@type": "RecordObject", + "record": [ + { + "RecordObject:_record_key": "app", + "RecordObject:_record_value": { "@id": "urn:solid-server:default:App" } + } + ] + }, + { + "@id": "urn:solid-server:default:EmailSender", + "@type": "BaseEmailSender", + "args_senderName": "Solid Server", + "args_emailConfig_host": "smtp.example.email", + "args_emailConfig_port": 587, + "args_emailConfig_auth_user": "alice@example.email", + "args_emailConfig_auth_pass": "NYEaCsqV7aVStRCbmC" + } + ] +} diff --git a/test/unit/storage/DuSizeReporter.test.ts b/test/unit/storage/DuSizeReporter.test.ts new file mode 100644 index 0000000..ae013e5 --- /dev/null +++ b/test/unit/storage/DuSizeReporter.test.ts @@ -0,0 +1,135 @@ +import { promises as fs } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; +import type { FileIdentifierMapper, ResourceIdentifier, Size } from '@solid/community-server'; +import { DuSizeReporter } from '../../../src/storage/size-reporter/DuSizeReporter'; + +// Force the du-based path (works even where du is absent — the Node walk +// produces the same apparent-byte sum for a simple tree). +class ForceDuReporter extends DuSizeReporter { + protected override async detectDu(): Promise<'gnu' | 'bsd' | 'none'> { + return 'gnu'; + } +} + +// Force the Node-walk fallback path. +class ForceNodeReporter extends DuSizeReporter { + protected override async detectDu(): Promise<'gnu' | 'bsd' | 'none'> { + return 'none'; + } +} + +function createMapper(root: string): FileIdentifierMapper { + return { + async mapUrlToFilePath(identifier: ResourceIdentifier): Promise { + const url = new URL(identifier.path); + return { identifier, filePath: join(root, url.pathname), contentType: undefined, isMetadata: false }; + }, + async mapFilePathToUrl(): Promise { + throw new Error('Not implemented'); + }, + }; +} + +describe('A DuSizeReporter', (): void => { + let root: string; + let mapper: FileIdentifierMapper; + + beforeEach(async(): Promise => { + root = await fs.mkdtemp(join(tmpdir(), 'du-size-reporter-')); + mapper = createMapper(root); + }); + + afterEach(async(): Promise => { + await fs.rm(root, { recursive: true, force: true }); + }); + + it('returns the apparent size of a file.', async(): Promise => { + const reporter = new DuSizeReporter(mapper, root); + await fs.writeFile(join(root, 'a.txt'), Buffer.alloc(100)); + const size = await reporter.getSize({ path: 'http://example.com/a.txt' }); + expect(size).toEqual({ unit: 'bytes', amount: 100 }); + }); + + it('reports the same size whether du or the Node fallback is used.', async(): Promise => { + await fs.mkdir(join(root, 'dir')); + await fs.writeFile(join(root, 'dir', 'a.txt'), Buffer.alloc(100)); + await fs.writeFile(join(root, 'dir', 'b.txt'), Buffer.alloc(50)); + const viaDu = await new ForceDuReporter(mapper, root).getSize({ path: 'http://example.com/dir/a.txt' }); + const viaNode = await new ForceNodeReporter(mapper, root).getSize({ path: 'http://example.com/dir/a.txt' }); + expect(viaDu.amount).toBe(100); + expect(viaNode.amount).toBe(100); + }); + + it('serves a cached result within the TTL window without re-walking.', async(): Promise => { + const reporter = new ForceDuReporter(mapper, root, [], 60_000); + await fs.writeFile(join(root, 'a.txt'), Buffer.alloc(100)); + const first = await reporter.getSize({ path: 'http://example.com/a.txt' }); + // Change the file without invalidating — the cache must still serve the old size. + await fs.writeFile(join(root, 'a.txt'), Buffer.alloc(200)); + const cached = await reporter.getSize({ path: 'http://example.com/a.txt' }); + expect(first.amount).toBe(100); + expect(cached.amount).toBe(100); + }); + + it('recomputes after invalidation.', async(): Promise => { + const reporter = new DuSizeReporter(mapper, root, [], 60_000); + await fs.writeFile(join(root, 'a.txt'), Buffer.alloc(100)); + await reporter.getSize({ path: 'http://example.com/a.txt' }); + await fs.writeFile(join(root, 'a.txt'), Buffer.alloc(200)); + await reporter.invalidate({ path: 'http://example.com/a.txt' }); + const after = await reporter.getSize({ path: 'http://example.com/a.txt' }); + expect(after.amount).toBe(200); + }); + + it('invalidates ancestor entries (e.g. the pod root) as well.', async(): Promise => { + const reporter = new DuSizeReporter(mapper, root, [], 60_000); + await fs.mkdir(join(root, 'dir')); + await fs.writeFile(join(root, 'dir', 'a.txt'), Buffer.alloc(100)); + const rootSize = await reporter.getSize({ path: 'http://example.com/' }); + expect(rootSize.amount).toBeGreaterThanOrEqual(100); + await fs.writeFile(join(root, 'dir', 'a.txt'), Buffer.alloc(300)); + await reporter.invalidate({ path: 'http://example.com/dir/a.txt' }); + const newRootSize = await reporter.getSize({ path: 'http://example.com/' }); + expect(newRootSize.amount).toBe(rootSize.amount + 200); + }); + + it('excludes the ignoreFolders from the total.', async(): Promise => { + const reporter = new DuSizeReporter(mapper, root, [ '^/\\.internal$' ]); + await fs.mkdir(join(root, '.internal')); + await fs.writeFile(join(root, '.internal', 'x.txt'), Buffer.alloc(1000)); + const without = await reporter.getSize({ path: 'http://example.com/' }); + // Adding a file inside .internal must not change the reported size. + await fs.writeFile(join(root, '.internal', 'y.txt'), Buffer.alloc(1000)); + await reporter.invalidate({ path: 'http://example.com/' }); + const still = await reporter.getSize({ path: 'http://example.com/' }); + expect(still.amount).toBe(without.amount); + // Adding a normal file must increase it. + await fs.writeFile(join(root, 'a.txt'), Buffer.alloc(50)); + await reporter.invalidate({ path: 'http://example.com/' }); + const increased = await reporter.getSize({ path: 'http://example.com/' }); + expect(increased.amount).toBe(without.amount + 50); + }); + + it('returns the content-length as the estimated size.', async(): Promise => { + const reporter = new DuSizeReporter(mapper, root); + await expect(reporter.estimateSize({ contentLength: 42 } as any)).resolves.toBe(42); + await expect(reporter.estimateSize({} as any)).resolves.toBeUndefined(); + }); + + it('calculates the chunk size as the buffer length.', async(): Promise => { + const reporter = new DuSizeReporter(mapper, root); + await expect(reporter.calculateChunkSize(Buffer.alloc(17))).resolves.toBe(17); + }); + + it('returns the byte unit.', async(): Promise => { + const reporter = new DuSizeReporter(mapper, root); + expect(reporter.getUnit()).toBe('bytes'); + }); + + it('reports a size of 0 for a missing resource.', async(): Promise => { + const reporter = new DuSizeReporter(mapper, root); + const size: Size = await reporter.getSize({ path: 'http://example.com/nope' }); + expect(size.amount).toBe(0); + }); +}); diff --git a/test/unit/storage/FastQuotaStrategy.test.ts b/test/unit/storage/FastQuotaStrategy.test.ts new file mode 100644 index 0000000..4cae748 --- /dev/null +++ b/test/unit/storage/FastQuotaStrategy.test.ts @@ -0,0 +1,128 @@ +import { PassThrough } from 'node:stream'; +import type { + DataAccessor, + IdentifierStrategy, + RepresentationMetadata, + ResourceIdentifier, + Size, + SizeReporter, +} from '@solid/community-server'; +import { FastQuotaStrategy } from '../../../src/storage/quota/FastQuotaStrategy'; + +const PIM_STORAGE = 'http://www.w3.org/ns/pim/space#Storage'; +const POD = { path: 'http://example.com/' }; + +// A strategy with a fixed pod total so createQuotaGuard can be exercised +// without a real pod/accessor setup. Discovery is mocked so `getAvailableSpace` +// finds POD and the reporter reports `podTotal` for it and `resourceSize` for +// the resource being written. With `noPod` discovery reports no pod (quota +// does not apply → unlimited). +function createStrategy( + podTotal: number, + resourceSize: number, + limit: Size, + reporter: jest.Mocked> & { invalidate: jest.Mock }, + noPod = false, +): FastQuotaStrategy { + const accessor: any = { + getMetadata: jest.fn(async (id: ResourceIdentifier): Promise => ({ + getAll: (): any[] => (id.path === POD.path ? [{ value: PIM_STORAGE }] : []), + })), + }; + const identifierStrategy: any = { + isRootContainer: jest.fn((): boolean => noPod), + getParentContainer: jest.fn((): ResourceIdentifier => POD), + }; + reporter.getSize.mockImplementation(async (id: ResourceIdentifier): Promise => + id.path === POD.path ? { unit: 'bytes', amount: podTotal } : { unit: 'bytes', amount: resourceSize }); + return new FastQuotaStrategy(limit, reporter, identifierStrategy, accessor); +} + +function mockReporter(oldResourceSize: number): jest.Mocked> & { invalidate: jest.Mock } { + const reporter: any = { + getUnit: jest.fn((): string => 'bytes'), + getSize: jest.fn(async(): Promise => ({ unit: 'bytes', amount: oldResourceSize })), + calculateChunkSize: jest.fn(async(chunk: Buffer): Promise => chunk.length), + estimateSize: jest.fn(async(): Promise => undefined), + invalidate: jest.fn(async(): Promise => undefined), + }; + return reporter; +} + +// Writes all chunks into the guard and waits for it to end (or error). +function writeChunks(guard: PassThrough, chunks: Buffer[]): Promise { + return new Promise((resolve, reject): void => { + guard.on('data', (): void => { + // consume + }); + guard.on('end', resolve); + guard.on('error', reject); + for (const chunk of chunks) { + guard.write(chunk); + } + guard.end(); + }); +} + +describe('A FastQuotaStrategy', (): void => { + const identifier: ResourceIdentifier = { path: 'http://example.com/foo' }; + // available space = limit - pod total + overwritten resource size + // = 100 - 90 + 10 = 20 bytes + const limit: Size = { unit: 'bytes', amount: 100 }; + + it('calls getAvailableSpace (the pod walk) only once per write, not per chunk.', async(): Promise => { + const reporter = mockReporter(10); + const strategy = createStrategy(90, 10, limit, reporter); + const guard = await strategy.createQuotaGuard(identifier); + // Two 5-byte chunks → 10 bytes total, under the 20-byte budget. + await writeChunks(guard, [ Buffer.alloc(5), Buffer.alloc(5) ]); + // getSize is called exactly twice by getAvailableSpace (once for the pod, + // once for the overwritten resource) and must NOT be called again per chunk. + expect(reporter.getSize).toHaveBeenCalledTimes(2); + }); + + it('passes chunks through while the write stays under the available space.', async(): Promise => { + const reporter = mockReporter(10); + const strategy = createStrategy(90, 10, limit, reporter); + const guard = await strategy.createQuotaGuard(identifier); + const received: Buffer[] = []; + guard.on('data', (chunk: Buffer): void => { + received.push(chunk); + }); + await writeChunks(guard, [ Buffer.alloc(5), Buffer.alloc(10) ]); + expect(received.reduce((sum, chunk): number => sum + chunk.length, 0)).toBe(15); + }); + + it('errors when the write exceeds the available space.', async(): Promise => { + const reporter = mockReporter(10); + const strategy = createStrategy(90, 10, limit, reporter); + const guard = await strategy.createQuotaGuard(identifier); + // 25 bytes > 20 available. + await expect(writeChunks(guard, [ Buffer.alloc(25) ])).rejects.toThrow(/Quota exceeded/); + }); + + it('invalidates the reporter cache when the write completes.', async(): Promise => { + const reporter = mockReporter(10); + const strategy = createStrategy(90, 10, limit, reporter); + const guard = await strategy.createQuotaGuard(identifier); + await writeChunks(guard, [ Buffer.alloc(5) ]); + expect(reporter.invalidate).toHaveBeenCalledTimes(1); + expect(reporter.invalidate).toHaveBeenLastCalledWith(identifier); + }); + + it('does not fail the write when cache invalidation fails.', async(): Promise => { + const reporter = mockReporter(10); + reporter.invalidate.mockRejectedValue(new Error('mapping failed')); + const strategy = createStrategy(90, 10, limit, reporter); + const guard = await strategy.createQuotaGuard(identifier); + await expect(writeChunks(guard, [ Buffer.alloc(5) ])).resolves.toBeUndefined(); + }); + + it('never errors when the quota does not apply (infinite space).', async(): Promise => { + const reporter = mockReporter(0); + // noPod → discovery finds no storage → unlimited space. + const strategy = createStrategy(0, 0, limit, reporter, true); + const guard = await strategy.createQuotaGuard(identifier); + await expect(writeChunks(guard, [ Buffer.alloc(10_000) ])).resolves.toBeUndefined(); + }); +}); diff --git a/test/unit/storage/IncrementalSizeReporter.test.ts b/test/unit/storage/IncrementalSizeReporter.test.ts new file mode 100644 index 0000000..a27d7cf --- /dev/null +++ b/test/unit/storage/IncrementalSizeReporter.test.ts @@ -0,0 +1,63 @@ +import { promises as fs } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; +import type { FileIdentifierMapper, ResourceIdentifier } from '@solid/community-server'; +import { IncrementalSizeReporter } from '../../../src/storage/quota/IncrementalSizeReporter'; +import { QuotaCounter } from '../../../src/storage/quota/QuotaCounter'; + +const IGNORE = [ '^/\\.internal$' ]; + +function createMapper(root: string): FileIdentifierMapper { + return { + async mapUrlToFilePath(identifier: ResourceIdentifier, isMetadata: boolean): Promise { + const url = new URL(identifier.path); + const base = join(root, url.pathname); + return { + identifier, + filePath: isMetadata ? `${base}.meta` : base, + contentType: undefined, + isMetadata, + }; + }, + async mapFilePathToUrl(): Promise { + throw new Error('Not implemented'); + }, + }; +} + +const POD = { path: 'http://example.com/alice/' }; +const RESOURCE = { path: 'http://example.com/alice/foo' }; + +describe('An IncrementalSizeReporter', (): void => { + let root: string; + let counter: QuotaCounter; + let reporter: IncrementalSizeReporter; + + beforeEach(async(): Promise => { + root = await fs.mkdtemp(join(tmpdir(), 'inc-reporter-')); + await fs.mkdir(join(root, 'alice')); + counter = new QuotaCounter(createMapper(root), root, IGNORE); + reporter = new IncrementalSizeReporter(counter); + }); + + afterEach(async(): Promise => { + await fs.rm(root, { recursive: true, force: true }); + }); + + it('returns the counter total for a registered pod root.', async(): Promise => { + await counter.register(POD); + await counter.add(POD, 123); + await expect(reporter.getSize(POD)).resolves.toEqual({ unit: 'bytes', amount: 123 }); + }); + + it('stats a regular resource (not a pod root).', async(): Promise => { + await fs.writeFile(join(root, 'alice', 'foo'), Buffer.alloc(64)); + await expect(reporter.getSize(RESOURCE)).resolves.toEqual({ unit: 'bytes', amount: 64 }); + }); + + it('returns the byte unit and chunk/content-length helpers.', async(): Promise => { + expect(reporter.getUnit()).toBe('bytes'); + await expect(reporter.calculateChunkSize(Buffer.alloc(9))).resolves.toBe(9); + await expect(reporter.estimateSize({ contentLength: 42 } as any)).resolves.toBe(42); + }); +}); diff --git a/test/unit/storage/ProfileCardGuard.test.ts b/test/unit/storage/ProfileCardGuard.test.ts new file mode 100644 index 0000000..1f992f7 --- /dev/null +++ b/test/unit/storage/ProfileCardGuard.test.ts @@ -0,0 +1,249 @@ +import type { Quad } from '@rdfjs/types'; +import { DataFactory } from 'n3'; +import { + BasicRepresentation, + BadRequestHttpError, + ForbiddenHttpError, + INTERNAL_QUADS, + RepresentationMetadata, + SOLID, + guardedStreamFrom, + readableToString, +} from '@solid/community-server'; +import type { Representation, ResourceIdentifier, ResourceStore } from '@solid/community-server'; +import type { GuardedWebIdStore } from '../../../src/identity/interaction/webid/util/GuardedWebIdStore'; +import { ProfileCardGuard } from '../../../src/storage/ProfileCardGuard'; + +const { namedNode, quad } = DataFactory; + +const CARD: ResourceIdentifier = { path: 'http://example.com/alice/profile/card' }; +const OTHER: ResourceIdentifier = { path: 'http://example.com/alice/notes' }; +const WEBID = 'http://example.com/alice/profile/card#me'; +const ISSUER = 'http://example.com/'; +const WEB_ID_PATHS = [ '/profile/card#me' ]; + +function representation(data: any, contentType: string, identifier?: string): Representation { + const metadata = identifier ? new RepresentationMetadata({ path: identifier }) : new RepresentationMetadata(); + metadata.contentType = contentType; + return new BasicRepresentation(data, metadata); +} + +function quadRepresentation(quads: Quad[]): Representation { + return representation(guardedStreamFrom(quads), INTERNAL_QUADS); +} + +function issuerQuad(webId = WEBID, issuer = ISSUER): Quad { + return quad(namedNode(webId), namedNode(SOLID.terms.oidcIssuer.value), namedNode(issuer)); +} + +describe('A ProfileCardGuard', (): void => { + const source: jest.Mocked = { + getRepresentation: jest.fn(async(): Promise => 'get'), + addResource: jest.fn(async(): Promise => 'add'), + setRepresentation: jest.fn(async(): Promise => 'set'), + deleteResource: jest.fn(async(): Promise => 'delete'), + modifyResource: jest.fn(), + } as any; + const converter: { handleSafe: jest.Mock } = { handleSafe: jest.fn() }; + let registered: string[]; + let webIdStore: { hasWebId: jest.Mock }; + let guard: ProfileCardGuard; + + beforeEach(async(): Promise => { + jest.clearAllMocks(); + registered = [ WEBID ]; + webIdStore = { + hasWebId: jest.fn(async(webId: string): Promise => registered.includes(webId)), + }; + converter.handleSafe.mockResolvedValue(quadRepresentation([ issuerQuad() ])); + guard = new ProfileCardGuard( + source, + webIdStore as unknown as GuardedWebIdStore, + ISSUER, + converter as any, + WEB_ID_PATHS, + ); + }); + + it('passes through writes to documents outside the configured card locations.', async(): Promise => { + const rep = representation('data', 'text/plain'); + await guard.setRepresentation(OTHER, rep); + expect(source.setRepresentation).toHaveBeenCalledTimes(1); + expect(source.setRepresentation).toHaveBeenLastCalledWith(OTHER, rep, undefined); + expect(webIdStore.hasWebId).toHaveBeenCalledTimes(0); + expect(converter.handleSafe).toHaveBeenCalledTimes(0); + }); + + it('passes through writes to a card location that hosts no registered WebID.', async(): Promise => { + registered = []; + const rep = representation('anything', 'text/plain'); + await guard.setRepresentation(CARD, rep); + expect(webIdStore.hasWebId).toHaveBeenCalledTimes(1); + expect(webIdStore.hasWebId).toHaveBeenLastCalledWith(WEBID); + expect(converter.handleSafe).toHaveBeenCalledTimes(0); + expect(source.setRepresentation).toHaveBeenCalledTimes(1); + }); + + it('passes through a valid card write that keeps the issuer triple.', async(): Promise => { + const turtle = ' solid:oidcIssuer .'; + const rep = representation(turtle, 'text/turtle'); + await guard.setRepresentation(CARD, rep); + expect(converter.handleSafe).toHaveBeenCalledTimes(1); + expect(source.setRepresentation).toHaveBeenCalledTimes(1); + expect(source.setRepresentation).toHaveBeenLastCalledWith(CARD, rep, undefined); + // The original data is still streamable + await expect(readableToString(rep.data)).resolves.toContain('solid:oidcIssuer'); + }); + + it('does not require the card to be sent as Turtle.', async(): Promise => { + const rep = representation('{ "@id": "http://example.com/alice/profile/card#me" }', 'application/ld+json'); + await guard.setRepresentation(CARD, rep); + expect(converter.handleSafe).toHaveBeenCalledTimes(1); + expect(source.setRepresentation).toHaveBeenCalledTimes(1); + }); + + it('accepts a card write provided as internal quads, as produced by a PATCH.', async(): Promise => { + const rep = representation(guardedStreamFrom([ issuerQuad() ]), INTERNAL_QUADS); + await guard.setRepresentation(CARD, rep); + expect(converter.handleSafe).toHaveBeenCalledTimes(0); + expect(source.setRepresentation).toHaveBeenCalledTimes(1); + expect(source.setRepresentation).toHaveBeenLastCalledWith(CARD, rep, undefined); + }); + + it('rejects a card write without the issuer triple.', async(): Promise => { + converter.handleSafe.mockResolvedValueOnce(quadRepresentation([ + quad(namedNode(WEBID), namedNode('http://purl.org/dc/terms/name'), namedNode('Alice')), + ])); + const rep = representation('data', 'text/turtle'); + await expect(guard.setRepresentation(CARD, rep)).rejects.toThrow(BadRequestHttpError); + expect(source.setRepresentation).toHaveBeenCalledTimes(0); + expect(rep.data.destroyed).toBe(true); + }); + + it('rejects a card write pointing to another issuer.', async(): Promise => { + converter.handleSafe.mockResolvedValueOnce(quadRepresentation([ issuerQuad(WEBID, 'http://other.example/') ])); + const rep = representation('data', 'text/turtle'); + await expect(guard.setRepresentation(CARD, rep)).rejects.toThrow(BadRequestHttpError); + expect(source.setRepresentation).toHaveBeenCalledTimes(0); + expect(rep.data.destroyed).toBe(true); + }); + + it('rejects a card write that is not valid RDF.', async(): Promise => { + converter.handleSafe.mockRejectedValueOnce(new Error('could not parse')); + const rep = representation('not valid', 'text/turtle'); + await expect(guard.setRepresentation(CARD, rep)).rejects.toThrow(BadRequestHttpError); + expect(source.setRepresentation).toHaveBeenCalledTimes(0); + expect(rep.data.destroyed).toBe(true); + }); + + it('rejects a card write when the conversion result is not quads.', async(): Promise => { + converter.handleSafe.mockResolvedValueOnce(representation('not quads', 'text/turtle')); + const rep = representation('data', 'text/turtle'); + await expect(guard.setRepresentation(CARD, rep)).rejects.toThrow(BadRequestHttpError); + expect(source.setRepresentation).toHaveBeenCalledTimes(0); + expect(rep.data.destroyed).toBe(true); + }); + + it('protects cards at any pod root, as the path only has to match the suffix.', async(): Promise => { + const rootCard: ResourceIdentifier = { path: 'http://example.com/profile/card' }; + const rootWebId = 'http://example.com/profile/card#me'; + registered = [ rootWebId ]; + converter.handleSafe.mockResolvedValue(quadRepresentation([ issuerQuad(rootWebId) ])); + const rep = representation('data', 'text/turtle'); + await guard.setRepresentation(rootCard, rep); + expect(webIdStore.hasWebId).toHaveBeenLastCalledWith(rootWebId); + expect(source.setRepresentation).toHaveBeenCalledTimes(1); + }); + + it('supports multiple configured WebID locations, e.g. after a config change.', async(): Promise => { + const oldCard: ResourceIdentifier = { path: 'http://example.com/alice/old/location' }; + const oldWebId = 'http://example.com/alice/old/location#this'; + registered = [ WEBID, oldWebId ]; + guard = new ProfileCardGuard( + source, + webIdStore as unknown as GuardedWebIdStore, + ISSUER, + converter as any, + [ '/profile/card#me', '/old/location#this' ], + ); + + converter.handleSafe.mockResolvedValue(quadRepresentation([ issuerQuad(oldWebId) ])); + await guard.setRepresentation(oldCard, representation('data', 'text/turtle')); + expect(webIdStore.hasWebId).toHaveBeenLastCalledWith(oldWebId); + expect(source.setRepresentation).toHaveBeenCalledTimes(1); + }); + + it('requires the issuer triple for every registered WebID on the document.', async(): Promise => { + const secondWebId = 'http://example.com/alice/profile/card#this'; + registered = [ WEBID, secondWebId ]; + guard = new ProfileCardGuard( + source, + webIdStore as unknown as GuardedWebIdStore, + ISSUER, + converter as any, + [ '/profile/card#me', '/profile/card#this' ], + ); + + // Only one of the two WebIDs keeps its issuer triple + converter.handleSafe.mockResolvedValueOnce(quadRepresentation([ issuerQuad() ])); + await expect(guard.setRepresentation(CARD, representation('data', 'text/turtle'))) + .rejects.toThrow(BadRequestHttpError); + expect(source.setRepresentation).toHaveBeenCalledTimes(0); + + // Both WebIDs keep their issuer triple + converter.handleSafe.mockResolvedValueOnce(quadRepresentation([ + issuerQuad(), + issuerQuad(secondWebId), + ])); + await guard.setRepresentation(CARD, representation('data', 'text/turtle')); + expect(source.setRepresentation).toHaveBeenCalledTimes(1); + }); + + it('validates a card created through addResource when its URL is known.', async(): Promise => { + const rep = representation('data', 'text/turtle', CARD.path); + await guard.addResource({ path: 'http://example.com/alice/' }, rep); + expect(webIdStore.hasWebId).toHaveBeenLastCalledWith(WEBID); + expect(converter.handleSafe).toHaveBeenCalledTimes(1); + expect(source.addResource).toHaveBeenCalledTimes(1); + }); + + it('does not validate addResource calls without a known URL.', async(): Promise => { + const rep = representation('data', 'text/plain'); + await guard.addResource({ path: 'http://example.com/alice/' }, rep); + // The metadata only contains a generated blank-node identifier, so nothing is validated + expect(converter.handleSafe).toHaveBeenCalledTimes(0); + expect(source.addResource).toHaveBeenCalledTimes(1); + }); + + it('supports configured WebID paths without a fragment.', async(): Promise => { + const plainCard: ResourceIdentifier = { path: 'http://example.com/alice/plain' }; + const plainWebId = 'http://example.com/alice/plain'; + registered = [ plainWebId ]; + guard = new ProfileCardGuard( + source, + webIdStore as unknown as GuardedWebIdStore, + ISSUER, + converter as any, + [ '/plain' ], + ); + converter.handleSafe.mockResolvedValue(quadRepresentation([ issuerQuad(plainWebId) ])); + await guard.setRepresentation(plainCard, representation('data', 'text/turtle')); + expect(webIdStore.hasWebId).toHaveBeenLastCalledWith(plainWebId); + expect(source.setRepresentation).toHaveBeenCalledTimes(1); + }); + + it('forbids deleting the card of a registered WebID.', async(): Promise => { + await expect(guard.deleteResource(CARD)).rejects.toThrow(ForbiddenHttpError); + expect(webIdStore.hasWebId).toHaveBeenLastCalledWith(WEBID); + expect(source.deleteResource).toHaveBeenCalledTimes(0); + }); + + it('allows deleting documents that host no registered WebID.', async(): Promise => { + registered = []; + await guard.deleteResource(CARD); + expect(source.deleteResource).toHaveBeenCalledTimes(1); + + await guard.deleteResource(OTHER); + expect(source.deleteResource).toHaveBeenCalledTimes(2); + }); +}); diff --git a/test/unit/storage/QuotaCounter.test.ts b/test/unit/storage/QuotaCounter.test.ts new file mode 100644 index 0000000..a7cc203 --- /dev/null +++ b/test/unit/storage/QuotaCounter.test.ts @@ -0,0 +1,114 @@ +import { promises as fs } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; +import type { FileIdentifierMapper, ResourceIdentifier } from '@solid/community-server'; +import { QuotaCounter } from '../../../src/storage/quota/QuotaCounter'; +import { DuSizeReporter } from '../../../src/storage/size-reporter/DuSizeReporter'; + +const IGNORE = [ '^/\\.internal$' ]; + +function createMapper(root: string): FileIdentifierMapper { + return { + async mapUrlToFilePath(identifier: ResourceIdentifier, isMetadata: boolean): Promise { + const url = new URL(identifier.path); + const base = join(root, url.pathname); + return { + identifier, + filePath: isMetadata ? `${base}.meta` : base, + contentType: undefined, + isMetadata, + }; + }, + async mapFilePathToUrl(): Promise { + throw new Error('Not implemented'); + }, + }; +} + +// The same walk engine the counter uses for recounts. +async function expectedWalk(root: string, mapper: FileIdentifierMapper, pod: ResourceIdentifier): Promise { + return (await new DuSizeReporter(mapper, root, IGNORE).getSize(pod)).amount; +} + +const POD = { path: 'http://example.com/alice/' }; +const RESOURCE = { path: 'http://example.com/alice/foo' }; + +describe('A QuotaCounter', (): void => { + let root: string; + let mapper: FileIdentifierMapper; + + beforeEach(async(): Promise => { + root = await fs.mkdtemp(join(tmpdir(), 'quota-counter-')); + await fs.mkdir(join(root, 'alice')); + mapper = createMapper(root); + }); + + afterEach(async(): Promise => { + await fs.rm(root, { recursive: true, force: true }); + }); + + it('accumulates deltas and returns the total (O(1)).', async(): Promise => { + const counter = new QuotaCounter(mapper, root, IGNORE); + await counter.register(POD); + await counter.add(POD, 100); + await counter.add(POD, 50); + await expect(counter.getSize(POD)).resolves.toEqual({ unit: 'bytes', amount: 150 }); + }); + + it('bootstraps by walking when no counter or sidecar exists.', async(): Promise => { + await fs.writeFile(join(root, 'alice', 'a.txt'), Buffer.alloc(120)); + const counter = new QuotaCounter(mapper, root, IGNORE); + const size = await counter.getSize(POD); + expect(size.amount).toBe(await expectedWalk(root, mapper, POD)); + expect(size.amount).toBeGreaterThanOrEqual(120); + }); + + it('persists the sidecar and reloads it on a fresh instance (no re-walk).', async(): Promise => { + const first = new QuotaCounter(mapper, root, IGNORE); + await first.register(POD); + await first.add(POD, 200); + // Fresh counter — same pod, sidecar matches mtime → loaded, no walk. + const second = new QuotaCounter(mapper, root, IGNORE); + await expect(second.getSize(POD)).resolves.toEqual({ unit: 'bytes', amount: 200 }); + }); + + it('detects staleness (out-of-band change) and recounts.', async(): Promise => { + const counter = new QuotaCounter(mapper, root, IGNORE); + await counter.register(POD); + await counter.add(POD, 100); + // Out-of-band change: a direct child appears in the pod root. + await fs.writeFile(join(root, 'alice', 'extra.bin'), Buffer.alloc(400)); + const size = await counter.getSize(POD); + expect(size.amount).toBe(await expectedWalk(root, mapper, POD)); + expect(size.amount).toBeGreaterThanOrEqual(400); + }); + + it('returns the size of a single resource via stat.', async(): Promise => { + await fs.writeFile(join(root, 'alice', 'foo'), Buffer.alloc(77)); + const counter = new QuotaCounter(mapper, root, IGNORE); + await expect(counter.sizeOfResource(RESOURCE)).resolves.toBe(77); + }); + + it('returns 0 for a missing resource.', async(): Promise => { + const counter = new QuotaCounter(mapper, root, IGNORE); + await expect(counter.sizeOfResource(RESOURCE)).resolves.toBe(0); + }); + + it('drops the entry and sidecar on remove, then bootstraps again.', async(): Promise => { + const counter = new QuotaCounter(mapper, root, IGNORE); + await counter.register(POD); + await counter.add(POD, 100); + await counter.remove(POD); + expect(await counter.isPodRoot(POD)).toBe(false); + // The sidecar is gone and the counter is dropped → next read re-walks. + const size = await counter.getSize(POD); + expect(size.amount).toBe(await expectedWalk(root, mapper, POD)); + }); + + it('serializes concurrent adds with a per-pod lock.', async(): Promise => { + const counter = new QuotaCounter(mapper, root, IGNORE); + await counter.register(POD); + await Promise.all([ counter.add(POD, 10), counter.add(POD, 20), counter.add(POD, 30) ]); + await expect(counter.getSize(POD)).resolves.toEqual({ unit: 'bytes', amount: 60 }); + }); +}); diff --git a/test/unit/storage/QuotaDeltaDataAccessor.test.ts b/test/unit/storage/QuotaDeltaDataAccessor.test.ts new file mode 100644 index 0000000..f634d24 --- /dev/null +++ b/test/unit/storage/QuotaDeltaDataAccessor.test.ts @@ -0,0 +1,166 @@ +import { createReadStream } from 'node:fs'; +import { promises as fs } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; +import { + SingleRootIdentifierStrategy, +} from '@solid/community-server'; +import type { + DataAccessor, + FileIdentifierMapper, + RepresentationMetadata, + ResourceIdentifier, +} from '@solid/community-server'; +import { QuotaCounter } from '../../../src/storage/quota/QuotaCounter'; +import { QuotaDeltaDataAccessor } from '../../../src/storage/quota/QuotaDeltaDataAccessor'; +import { DuSizeReporter } from '../../../src/storage/size-reporter/DuSizeReporter'; + +const IGNORE = [ '^/\\.internal$' ]; +const PIM_STORAGE = 'http://www.w3.org/ns/pim/space#Storage'; + +function createMapper(root: string): FileIdentifierMapper { + return { + async mapUrlToFilePath(identifier: ResourceIdentifier, isMetadata: boolean): Promise { + const url = new URL(identifier.path); + const base = join(root, url.pathname); + return { identifier, filePath: isMetadata ? `${base}.meta` : base, contentType: undefined, isMetadata }; + }, + async mapFilePathToUrl(): Promise { + throw new Error('Not implemented'); + }, + }; +} + +async function readStream(stream: NodeJS.ReadableStream): Promise { + const chunks: Buffer[] = []; + for await (const chunk of stream as any) { + chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)); + } + return Buffer.concat(chunks); +} + +// Recursive walk — same engine as the counter (du/Node fallback). +async function expectedWalk(root: string, mapper: FileIdentifierMapper): Promise { + return (await new DuSizeReporter(mapper, root, IGNORE).getSize({ path: 'http://example.com/alice/' })).amount; +} + +// A minimal accessor that stores to the real filesystem and reports +// pim:Storage on the pod root (so pod discovery works). +function createAccessor(root: string): DataAccessor { + const mapper = createMapper(root); + const meta = (isStorage: boolean): RepresentationMetadata => ({ + getAll: (): any[] => (isStorage ? [{ value: PIM_STORAGE }] : []), + } as any); + + return { + async canHandle(): Promise { /* no-op */ }, + async getData(identifier: ResourceIdentifier): Promise { + const { filePath } = await mapper.mapUrlToFilePath(identifier, false); + return createReadStream(filePath) as any; + }, + async getMetadata(identifier: ResourceIdentifier): Promise { + return meta(identifier.path.endsWith('/') && identifier.path !== 'http://example.com/'); + }, + getChildren(): AsyncIterableIterator { + return (async function*(): AsyncIterableIterator { })(); + }, + async writeDocument(identifier: ResourceIdentifier, data: any): Promise { + const { filePath } = await mapper.mapUrlToFilePath(identifier, false); + const buffer = await readStream(data); + await fs.mkdir(join(filePath, '..'), { recursive: true }); + await fs.writeFile(filePath, buffer); + }, + async writeContainer(identifier: ResourceIdentifier): Promise { + const { filePath } = await mapper.mapUrlToFilePath(identifier, false); + await fs.mkdir(filePath, { recursive: true }); + }, + async writeMetadata(identifier: ResourceIdentifier, metadata: RepresentationMetadata): Promise { + const { filePath } = await mapper.mapUrlToFilePath(identifier, true); + await fs.mkdir(join(filePath, '..'), { recursive: true }); + await fs.writeFile(filePath, '{}'); + }, + async deleteResource(identifier: ResourceIdentifier): Promise { + const data = await mapper.mapUrlToFilePath(identifier, false); + const meta = await mapper.mapUrlToFilePath(identifier, true); + await fs.rm(data.filePath, { recursive: true, force: true }); + await fs.rm(meta.filePath, { force: true }); + }, + }; +} + +const POD = { path: 'http://example.com/alice/' }; +const RESOURCE = { path: 'http://example.com/alice/foo' }; +const SUB = { path: 'http://example.com/alice/sub/' }; +const SUB_RESOURCE = { path: 'http://example.com/alice/sub/bar' }; + +async function writeDoc(accessor: QuotaDeltaDataAccessor, identifier: ResourceIdentifier, size: number): Promise { + const stream = (async function*(): AsyncIterableIterator { + yield Buffer.alloc(size, 1); + })(); + await accessor.writeDocument(identifier, stream as any, {} as RepresentationMetadata); +} + +describe('A QuotaDeltaDataAccessor', (): void => { + let root: string; + let counter: QuotaCounter; + let accessor: QuotaDeltaDataAccessor; + + beforeEach(async(): Promise => { + root = await fs.mkdtemp(join(tmpdir(), 'delta-')); + const mapper = createMapper(root); + const source = createAccessor(root); + counter = new QuotaCounter(mapper, root, IGNORE); + accessor = new QuotaDeltaDataAccessor( + source, + new SingleRootIdentifierStrategy('http://example.com/'), + counter, + mapper, + ); + }); + + afterEach(async(): Promise => { + await fs.rm(root, { recursive: true, force: true }); + }); + + it('tracks container creation, writes, overwrites and deletes so the counter equals a real walk.', async(): Promise => { + // Create the pod root container. + await accessor.writeContainer(POD, {} as RepresentationMetadata); + // Create a document (100 bytes). + await writeDoc(accessor, RESOURCE, 100); + expect((await counter.getSize(POD)).amount).toBe(await expectedWalk(root, createMapper(root))); + + // Overwrite it with a bigger body (150 bytes) → +50. + await writeDoc(accessor, RESOURCE, 150); + expect((await counter.getSize(POD)).amount).toBe(await expectedWalk(root, createMapper(root))); + + // Nested container + resource. + await accessor.writeContainer(SUB, {} as RepresentationMetadata); + await writeDoc(accessor, SUB_RESOURCE, 40); + expect((await counter.getSize(POD)).amount).toBe(await expectedWalk(root, createMapper(root))); + + // Write metadata for a resource (the .meta file). + await accessor.writeMetadata(RESOURCE, {} as RepresentationMetadata); + expect((await counter.getSize(POD)).amount).toBe(await expectedWalk(root, createMapper(root))); + + // Delete the document → counter drops back to the walk. + await accessor.deleteResource(RESOURCE); + expect((await counter.getSize(POD)).amount).toBe(await expectedWalk(root, createMapper(root))); + }); + + it('drops the counter entirely when the pod root itself is deleted.', async(): Promise => { + await accessor.writeContainer(POD, {} as RepresentationMetadata); + await writeDoc(accessor, RESOURCE, 50); + expect(await counter.isPodRoot(POD)).toBe(true); + await accessor.deleteResource(POD); + expect(await counter.isPodRoot(POD)).toBe(false); + }); + + it('does not track resources outside any pod (no pim:Storage).', async(): Promise => { + const outside = { path: 'http://example.com/root-file' }; + await writeDoc(accessor, outside, 999); + // No pod was registered → the file is not counted anywhere. + expect(await counter.isPodRoot({ path: 'http://example.com/' })).toBe(false); + // And it doesn't crash. + await accessor.deleteResource(outside); + }); +}); diff --git a/test/unit/storage/QuotaDeltaDataAccessorSubdomain.test.ts b/test/unit/storage/QuotaDeltaDataAccessorSubdomain.test.ts new file mode 100644 index 0000000..cd94c85 --- /dev/null +++ b/test/unit/storage/QuotaDeltaDataAccessorSubdomain.test.ts @@ -0,0 +1,156 @@ +import { createReadStream } from 'node:fs'; +import { promises as fs } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; +import { + SubdomainIdentifierStrategy, +} from '@solid/community-server'; +import type { + DataAccessor, + FileIdentifierMapper, + RepresentationMetadata, + ResourceIdentifier, +} from '@solid/community-server'; +import { QuotaCounter } from '../../../src/storage/quota/QuotaCounter'; +import { QuotaDeltaDataAccessor } from '../../../src/storage/quota/QuotaDeltaDataAccessor'; +import { DuSizeReporter } from '../../../src/storage/size-reporter/DuSizeReporter'; + +const IGNORE = [ '^/\\.internal$' ]; +const PIM_STORAGE = 'http://www.w3.org/ns/pim/space#Storage'; +const BASE = 'http://example.com/'; +const BASE_HOST = 'example.com'; + +// Subdomain-aware mapper: http://alice.example.com/foo -> /alice/foo +function createMapper(root: string): FileIdentifierMapper { + return { + async mapUrlToFilePath(identifier: ResourceIdentifier, isMetadata: boolean): Promise { + const url = new URL(identifier.path); + const host = url.hostname; + const pod = host === BASE_HOST ? '' : host.slice(0, -(BASE_HOST.length + 1)); + const base = join(root, pod, url.pathname); + return { identifier, filePath: isMetadata ? `${base}.meta` : base, contentType: undefined, isMetadata }; + }, + async mapFilePathToUrl(): Promise { + throw new Error('Not implemented'); + }, + }; +} + +async function readStream(stream: NodeJS.ReadableStream): Promise { + const chunks: Buffer[] = []; + for await (const chunk of stream as any) { + chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)); + } + return Buffer.concat(chunks); +} + +// Recursive walk — same engine as the counter (du/Node fallback). +async function expectedWalk(root: string, mapper: FileIdentifierMapper, pod: ResourceIdentifier): Promise { + return (await new DuSizeReporter(mapper, root, IGNORE).getSize(pod)).amount; +} + +// A minimal accessor that stores to the real filesystem and reports +// pim:Storage on the subdomain pod root (so pod discovery works). +function createAccessor(root: string): DataAccessor { + const mapper = createMapper(root); + const meta = (isStorage: boolean): RepresentationMetadata => ({ + getAll: (): any[] => (isStorage ? [{ value: PIM_STORAGE }] : []), + } as any); + + return { + async canHandle(): Promise { /* no-op */ }, + async getData(identifier: ResourceIdentifier): Promise { + const { filePath } = await mapper.mapUrlToFilePath(identifier, false); + return createReadStream(filePath) as any; + }, + async getMetadata(identifier: ResourceIdentifier): Promise { + // A subdomain pod root (ends with '/', is not the base root) is a storage. + return meta(identifier.path.endsWith('/') && identifier.path !== BASE); + }, + getChildren(): AsyncIterableIterator { + return (async function*(): AsyncIterableIterator { })(); + }, + async writeDocument(identifier: ResourceIdentifier, data: any): Promise { + const { filePath } = await mapper.mapUrlToFilePath(identifier, false); + const buffer = await readStream(data); + await fs.mkdir(join(filePath, '..'), { recursive: true }); + await fs.writeFile(filePath, buffer); + }, + async writeContainer(identifier: ResourceIdentifier): Promise { + const { filePath } = await mapper.mapUrlToFilePath(identifier, false); + await fs.mkdir(filePath, { recursive: true }); + }, + async writeMetadata(identifier: ResourceIdentifier, metadata: RepresentationMetadata): Promise { + const { filePath } = await mapper.mapUrlToFilePath(identifier, true); + await fs.mkdir(join(filePath, '..'), { recursive: true }); + await fs.writeFile(filePath, '{}'); + }, + async deleteResource(identifier: ResourceIdentifier): Promise { + const data = await mapper.mapUrlToFilePath(identifier, false); + const meta = await mapper.mapUrlToFilePath(identifier, true); + await fs.rm(data.filePath, { recursive: true, force: true }); + await fs.rm(meta.filePath, { force: true }); + }, + }; +} + +const POD = { path: 'http://alice.example.com/' }; +const RESOURCE = { path: 'http://alice.example.com/foo' }; + +async function writeDoc(accessor: QuotaDeltaDataAccessor, identifier: ResourceIdentifier, size: number): Promise { + const stream = (async function*(): AsyncIterableIterator { + yield Buffer.alloc(size, 1); + })(); + await accessor.writeDocument(identifier, stream as any, {} as RepresentationMetadata); +} + +describe('A QuotaDeltaDataAccessor in subdomain mode', (): void => { + let root: string; + let counter: QuotaCounter; + let accessor: QuotaDeltaDataAccessor; + + beforeEach(async(): Promise => { + root = await fs.mkdtemp(join(tmpdir(), 'delta-sub-')); + const mapper = createMapper(root); + const source = createAccessor(root); + counter = new QuotaCounter(mapper, root, IGNORE); + accessor = new QuotaDeltaDataAccessor( + source, + new SubdomainIdentifierStrategy(BASE), + counter, + mapper, + ); + }); + + afterEach(async(): Promise => { + await fs.rm(root, { recursive: true, force: true }); + }); + + it('discovers subdomain pod roots and tracks deltas (regression: CSS searchPimStorage bails at root containers).', async(): Promise => { + // Create the pod root container. In subdomain mode the pod root IS a root + // container — discovery must read its metadata (pim:Storage) before the + // root-container stop, otherwise no pod is ever found (and no counter is + // created). This used to fail: `pod registered` stayed false. + await accessor.writeContainer(POD, {} as RepresentationMetadata); + expect(await counter.isPodRoot(POD)).toBe(true); + + // Create a document (100 bytes) inside the subdomain pod. + await writeDoc(accessor, RESOURCE, 100); + expect((await counter.getSize(POD)).amount).toBe(await expectedWalk(root, createMapper(root), POD)); + + // Overwrite it with a bigger body (150 bytes) → +50. + await writeDoc(accessor, RESOURCE, 150); + expect((await counter.getSize(POD)).amount).toBe(await expectedWalk(root, createMapper(root), POD)); + + // The sidecar is persisted per pod: /alice/.internal/pivot-quota.json + const sidecar = join(root, 'alice', '.internal', 'pivot-quota.json'); + await expect(fs.stat(sidecar)).resolves.toBeTruthy(); + }); + + it('does not treat the base root as a pod (writes outside any pod are untracked).', async(): Promise => { + const baseFile = { path: 'http://example.com/root-file' }; + await writeDoc(accessor, baseFile, 999); + expect(await counter.isPodRoot({ path: BASE })).toBe(false); + await accessor.deleteResource(baseFile); + }); +}); diff --git a/test/util/Util.ts b/test/util/Util.ts index b22ea00..555763e 100644 --- a/test/util/Util.ts +++ b/test/util/Util.ts @@ -20,6 +20,7 @@ const portNames = [ 'Middleware', 'N3Patch', 'PermissionTable', + 'ProfileCardGuard', 'PodCreation', 'PodQuota', 'RedisLocker',