From 8eec02946349445907d1dbb93843d9eccc67a655 Mon Sep 17 00:00:00 2001 From: 0xf965 <40121100+0xf965@users.noreply.github.com> Date: Tue, 31 Mar 2026 21:19:42 +0200 Subject: [PATCH 01/23] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index db50db5..81d072b 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Represents a specific location (URL) where a file with a specific hash can be fo * **R4**: `FILE_SOURCE` * **R5**: `raw_file_hash` (Hash function digest). **This is the anchor.** Users search by this hash. * **R6**: `false` (Unlocked). If the link dies, the owner spends this box and outputs a new one with the *same* R5 (hash) but updated R9 (URL). -* **R9**: `Coll[Coll[Byte]]` — A single source entry (serialized as a one-element array), containing: +* **R9**: `Coll[Byte]` JSON utf-8 tuple (ergoscript doesn't support this structure) — A single source entry (serialized as a one-element array), containing: * `hash_function_id` — The ID of the hash function, determined by `HASH(EMPTY_INPUT)` ([spec](https://github.com/celaut-project/docs/blob/master/FAQ.md#hash-algorithm-identification)) * `url_link` — Link to a GET resource with the content file * `content_format` — The file format extension of the content (e.g. `.tar.gz`, `.zip`) From 715b76914e944daefde0b1b5cb591911c49e644f Mon Sep 17 00:00:00 2001 From: Captain Efficiency Date: Wed, 1 Apr 2026 06:10:26 -0400 Subject: [PATCH 02/23] fix: calculateHashFromUrl uses selected algorithm + chunked support - Replaced hardcoded blake2b256 with downloadAndHash() from hashUtils - calculateHashFromUrl now uses the selected hash algorithm (sha3_256, blake2b, sha256, keccak256) - Chunked files: downloadAndHash fetches all chunks from manifest, concatenates, then hashes the complete content - handleAddSource validation also uses correct algorithm + chunked support - handleFileUpload uses computeHash with selected algorithm - Removed unused blake2b256 and uint8ArrayToHex imports - Custom algorithm shows 'select a known hash algorithm first' error --- src/lib/components/FileSourceCreation.svelte | 46 ++++++++++++-------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/src/lib/components/FileSourceCreation.svelte b/src/lib/components/FileSourceCreation.svelte index e0f7b14..a00fa72 100644 --- a/src/lib/components/FileSourceCreation.svelte +++ b/src/lib/components/FileSourceCreation.svelte @@ -9,8 +9,8 @@ import { Textarea } from "$lib/components/ui/textarea"; import { AlertTriangle, Download, Upload, Loader2 } from "lucide-svelte"; import { type ReputationProof } from "$lib/ergo/object"; - import { blake2b256 } from "@fleet-sdk/crypto"; - import { uint8ArrayToHex } from "$lib/ergo/utils"; + import { downloadAndHash } from "$lib/ergo/hashUtils"; + import { type Writable } from "svelte/store"; import { HASH_OPTIONS, validateHash } from "$lib/ergo/hashUtils"; @@ -175,16 +175,19 @@ const url = entryUrlLink.trim(); if (!url) return; + const algorithmId = entryHashFunctionId || hashFunctionId; + if (!algorithmId || algorithmId === '__custom__') { + hashError = "Cannot verify: select a known hash algorithm first"; + return; + } + isCalculatingHash = true; hashError = null; urlMismatch = false; try { - const response = await fetch(url); - if (!response.ok) - throw new Error(`Failed to fetch file: ${response.statusText}`); - const buffer = await response.arrayBuffer(); - const bytes = new Uint8Array(buffer); - const hashResult = uint8ArrayToHex(blake2b256(bytes)); + // downloadAndHash handles both chunked (manifest) and regular URLs + // and uses the correct hash algorithm + const hashResult = await downloadAndHash(url, algorithmId, isChunked); if (isHashFixed && hashResult !== currentHashValue) { urlMismatch = true; @@ -204,14 +207,22 @@ const input = event.target as HTMLInputElement; if (!input.files || input.files.length === 0) return; + const algorithmId = entryHashFunctionId || hashFunctionId; + if (!algorithmId || algorithmId === '__custom__') { + hashError = "Cannot verify: select a known hash algorithm first"; + return; + } + const file = input.files[0]; isCalculatingHash = true; hashError = null; try { const buffer = await file.arrayBuffer(); const bytes = new Uint8Array(buffer); - const hashResult = blake2b256(bytes); - updateHash(uint8ArrayToHex(hashResult)); + const { computeHash } = await import("$lib/ergo/hashUtils"); + const hashResult = computeHash(bytes, algorithmId); + if (!hashResult) throw new Error(`Unsupported hash algorithm: ${algorithmId}`); + updateHash(hashResult); } catch (err: any) { console.error("Error calculating hash from file:", err); hashError = err?.message || "Failed to calculate hash from file"; @@ -232,17 +243,16 @@ // If it's fixed, we MUST validate the URL content before adding if (isHashFixed && entryUrlLink.trim()) { + const algorithmId = entryHashFunctionId || hashFunctionId; + if (!algorithmId || algorithmId === '__custom__') { + hashError = "Cannot verify: select a known hash algorithm first"; + return; + } isCalculatingHash = true; hashError = null; try { - const response = await fetch(entryUrlLink.trim()); - if (!response.ok) - throw new Error( - `Failed to fetch file: ${response.statusText}`, - ); - const buffer = await response.arrayBuffer(); - const bytes = new Uint8Array(buffer); - const hashResult = uint8ArrayToHex(blake2b256(bytes)); + // Use downloadAndHash with correct algorithm + chunked support + const hashResult = await downloadAndHash(entryUrlLink.trim(), algorithmId, isChunked); if (hashResult !== currentHashValue) { urlMismatch = true; From 254b8559b9db39e635a78a217ef773292eaa70f2 Mon Sep 17 00:00:00 2001 From: Captain Efficiency Date: Fri, 3 Apr 2026 07:09:31 -0400 Subject: [PATCH 03/23] feat: hash validation toggle in settings + fallback profile detection MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Hash Validation Toggle: - Added hashValidationEnabled store (persisted, default false) - Added checkbox toggle in SettingsModal under 'Verification' section - FileSourceCreation now respects the setting — skips URL hash verification when disabled - Exported hashValidationEnabled from index.ts 2. Profile Detection Fallback: - Added fallbackProfileDetection() for wallets where the reputation-system library fails to detect profiles due to R5 UTF-8 encoding edge case (R5 stores hex(utf8(tokenId)) instead of raw bytes) - Queries Explorer API directly with ergoTreeTemplateHash + R4/R7 register filters, then checks both raw hex and UTF-8 decoded R5 - Falls back automatically when standard detection returns nothing 3. Fixed createProfileBox parameter order bug in sourceStore.ts (explorerUri was in wrong position) --- src/lib/components/FileSourceCreation.svelte | 7 +- src/lib/components/SettingsModal.svelte | 26 +++ src/lib/ergo/envs.ts | 3 + src/lib/ergo/sourceStore.ts | 2 +- src/lib/ergo/store.ts | 11 +- src/lib/index.ts | 5 + src/routes/App.svelte | 214 ++++++++++++++++++- 7 files changed, 260 insertions(+), 8 deletions(-) diff --git a/src/lib/components/FileSourceCreation.svelte b/src/lib/components/FileSourceCreation.svelte index a00fa72..7e6942a 100644 --- a/src/lib/components/FileSourceCreation.svelte +++ b/src/lib/components/FileSourceCreation.svelte @@ -21,6 +21,9 @@ export let onSourceAdded: ((txId: string) => void) | null = null; export let hash: Writable | undefined = undefined; + /** When false, skip automatic hash verification when adding a source. */ + export let hashValidationEnabled: boolean = false; + export let title: string = "Add New File Source"; let className: string = ""; export { className as class }; @@ -241,8 +244,8 @@ newFileHash = currentHashValue; } - // If it's fixed, we MUST validate the URL content before adding - if (isHashFixed && entryUrlLink.trim()) { + // If hash validation is enabled and hash is fixed, validate the URL content before adding + if (hashValidationEnabled && isHashFixed && entryUrlLink.trim()) { const algorithmId = entryHashFunctionId || hashFunctionId; if (!algorithmId || algorithmId === '__custom__') { hashError = "Cannot verify: select a known hash algorithm first"; diff --git a/src/lib/components/SettingsModal.svelte b/src/lib/components/SettingsModal.svelte index ebb7bd4..b7302a7 100644 --- a/src/lib/components/SettingsModal.svelte +++ b/src/lib/components/SettingsModal.svelte @@ -9,11 +9,13 @@ export let webTx: string; export let webAddr: string; export let webTkn: string; + export let hashValidation: boolean = false; export let onSave: (settings: { explorerUri: string; webTx: string; webAddr: string; webTkn: string; + hashValidation: boolean; }) => void; // Valores por defecto definidos en constantes para fácil mantenimiento @@ -28,6 +30,7 @@ let localWebTx = webTx; let localWebAddr = webAddr; let localWebTkn = webTkn; + let localHashValidation = hashValidation; // Sync local state when props change (e.g. when modal opens) $: if (show) { @@ -35,6 +38,7 @@ localWebTx = webTx; localWebAddr = webAddr; localWebTkn = webTkn; + localHashValidation = hashValidation; } function close() { @@ -47,6 +51,7 @@ webTx: localWebTx, webAddr: localWebAddr, webTkn: localWebTkn, + hashValidation: localHashValidation, }); close(); } @@ -57,6 +62,7 @@ localWebTx = DEFAULTS.tx; localWebAddr = DEFAULTS.addr; localWebTkn = DEFAULTS.tkn; + localHashValidation = false; } @@ -122,6 +128,26 @@ URL prefix for viewing tokens.

+ +
+

Verification

+
+ +
+ +

+ When enabled, adding a source will download the file from the URL + and verify its hash matches before submitting the transaction. + This may cause issues with large files or CORS-restricted URLs. +

+
+
+
{ const profileTxId = await create_profile( + explorerUri, PROFILE_TOTAL_SUPPLY, PROFILE_TYPE_NFT_ID, - explorerUri, { name: "Anon" } ); diff --git a/src/lib/ergo/store.ts b/src/lib/ergo/store.ts index e2d8cb3..0920621 100644 --- a/src/lib/ergo/store.ts +++ b/src/lib/ergo/store.ts @@ -99,4 +99,13 @@ export const profileInvalidations = createPersistentStore>('source_profile_unavailabilities', {}); export const profileOpinionsGiven = createPersistentStore>('source_profile_opinions_given', {}); export const isLoading = writable(false); -export const error = writable(null); \ No newline at end of file +export const error = writable(null); + +// --- SETTINGS --- + +/** + * When enabled, adding a source will download the file from the URL and verify + * its hash matches before submitting the transaction. Disabled by default to + * avoid large downloads and CORS issues in the browser. + */ +export const hashValidationEnabled = createPersistentStore('hash_validation_enabled', false); \ No newline at end of file diff --git a/src/lib/index.ts b/src/lib/index.ts index 422c8c7..5123193 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -70,6 +70,11 @@ export { PROFILE_OPINION_TYPE_NFT_ID, } from './ergo/envs'; +// ===== SETTINGS STORES ===== +export { + hashValidationEnabled +} from './ergo/store'; + // ===== SVELTE COMPONENTS ===== export { default as ProfileCard } from './components/ProfileCard.svelte'; export { default as FileSourceCreation } from './components/FileSourceCreation.svelte'; diff --git a/src/routes/App.svelte b/src/routes/App.svelte index 532ee5b..ddeaf48 100644 --- a/src/routes/App.svelte +++ b/src/routes/App.svelte @@ -24,13 +24,15 @@ web_explorer_uri_tx, web_explorer_uri_addr, web_explorer_uri_tkn, + hashValidationEnabled, } from "$lib/ergo/store"; - import { PROFILE_TYPE_NFT_ID } from "$lib/ergo/envs"; + import { PROFILE_TYPE_NFT_ID, ERGO_TREE_HASH } from "$lib/ergo/envs"; import { User, Settings, Search, Plus, UserPlus } from "lucide-svelte"; import { get, writable } from "svelte/store"; import SettingsModal from "$lib/components/SettingsModal.svelte"; import ProfileModal from "$lib/components/ProfileModal.svelte"; - import { fetchAllUserProfiles, fetchTypeNfts } from "reputation-system"; + import { fetchAllUserProfiles, fetchTypeNfts, convertToRPBox } from "reputation-system"; + import type { TypeNFT, ApiBox } from "reputation-system"; import { createProfileBox } from "$lib/ergo/sourceStore"; import { searchByHash, loadProfileData } from "$lib/ergo/sourceFetch"; import ProfileSources from "$lib/components/ProfileSources.svelte"; @@ -154,18 +156,218 @@ } } + /** + * Decode a hex string to its UTF-8 text representation. + */ + function hexToUtf8(hex: string): string | null { + try { + if (hex.length % 2 !== 0) return null; + const bytes = new Uint8Array(hex.match(/.{1,2}/g)!.map(b => parseInt(b, 16))); + return new TextDecoder('utf-8').decode(bytes); + } catch { return null; } + } + + /** + * Fallback profile detection that handles the R5 encoding issue. + * + * The reputation-system library compares parseCollByteToHex(R5.renderedValue) + * with the token ID for `is_self_defined` detection. However, profile boxes + * store R5 as the UTF-8 encoding of the token ID hex string (64 ASCII bytes) + * rather than the raw 32 bytes. This causes `parseCollByteToHex` to return + * the hex of the ASCII representation, which doesn't match the token ID. + * + * This fallback directly queries the explorer API for boxes matching the + * user's ErgoTree (R7), then checks both the raw hex and the UTF-8 decoded + * form of R5 to find self-referencing profile boxes. + */ + async function fallbackProfileDetection( + explorerUri: string, + availableTypes: Map + ): Promise { + try { + if (typeof ergo === 'undefined') return null; + + const { ErgoAddress, SColl, SByte } = await import('@fleet-sdk/core'); + const changeAddress = await ergo.get_change_address(); + if (!changeAddress) return null; + + const userAddress = ErgoAddress.fromBase58(changeAddress); + + // Build serialized R7 and strip type prefix for rendered form + function hexToBytes(h: string): Uint8Array | null { + if (!h || !/^[0-9a-fA-F]*$/.test(h) || h.length % 2 !== 0) return null; + const arr = new Uint8Array(h.length / 2); + for (let i = 0; i < arr.length; i++) arr[i] = parseInt(h.substring(i*2, i*2+2), 16); + return arr; + } + + const r7Serialized = SColl(SByte, userAddress.ergoTree).toHex(); + // Strip Coll[Byte] prefix (0e + length byte(s)) + const r7Rendered = r7Serialized.startsWith('0e') ? r7Serialized.substring(4) : r7Serialized; + + // Also compute the R4 rendered value for PROFILE_TYPE_NFT_ID + const profileTypeBytes = hexToBytes(PROFILE_TYPE_NFT_ID); + if (!profileTypeBytes) return null; + + // Query the Explorer API for boxes matching our ergo tree, R7, and R4 + const ergo_tree_hash = ERGO_TREE_HASH; + + const allBoxes: ApiBox[] = []; + let offset = 0; + const limit = 100; + let more = true; + + while (more) { + const url = `${explorerUri}/api/v1/boxes/unspent/search?offset=${offset}&limit=${limit}`; + const body = { + ergoTreeTemplateHash: ergo_tree_hash, + registers: { + R4: PROFILE_TYPE_NFT_ID, + R7: r7Rendered, + }, + assets: [], + }; + + const resp = await fetch(url, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(body), + }); + + if (!resp.ok) { more = false; continue; } + const data = await resp.json(); + if (!data.items || data.items.length === 0) { more = false; continue; } + allBoxes.push(...data.items); + offset += limit; + if (data.items.length < limit) more = false; + } + + if (allBoxes.length === 0) return null; + + // Find profile (self-referencing) boxes + // Check both raw hex and UTF-8 decoded forms of R5 + const profileBoxes = allBoxes.filter(box => { + if (!box.assets?.length) return false; + if (!box.additionalRegisters?.R5?.renderedValue) return false; + if (!box.additionalRegisters?.R6) return false; + + // R6 must be false (unlocked) + const r6 = box.additionalRegisters.R6.renderedValue; + if (r6 !== 'false' && r6 !== false) return false; + + const tokenId = box.assets[0].tokenId; + const r5Rendered = box.additionalRegisters.R5.renderedValue as string; + + // Direct match: R5 rendered value equals token ID + if (r5Rendered === tokenId) return true; + + // UTF-8 decode: R5 might be hex(utf8(tokenId)) + const decoded = hexToUtf8(r5Rendered); + if (decoded === tokenId) return true; + + return false; + }); + + if (profileBoxes.length === 0) return null; + + // Group by token ID and build a ReputationProof for the first profile + const tokenId = profileBoxes[0].assets[0].tokenId; + + // Fetch emission amount for this token + let totalAmount = 0; + try { + const tokenResp = await fetch(`${explorerUri}/api/v1/tokens/${tokenId}`); + if (tokenResp.ok) { + const tokenData = await tokenResp.json(); + totalAmount = Number(tokenData.emissionAmount || 0); + } + } catch (e) { + console.warn('Error fetching token emission amount:', e); + } + + // Fetch ALL boxes for this token to build complete proof + const allTokenBoxes: ApiBox[] = []; + let tokenOffset = 0; + let tokenMore = true; + while (tokenMore) { + const url = `${explorerUri}/api/v1/boxes/unspent/byTokenId/${tokenId}?offset=${tokenOffset}&limit=100`; + try { + const resp = await fetch(url); + if (!resp.ok) { tokenMore = false; continue; } + const data = await resp.json(); + if (!data.items || data.items.length === 0) { tokenMore = false; continue; } + allTokenBoxes.push(...data.items); + tokenOffset += 100; + if (data.items.length < 100) tokenMore = false; + } catch { tokenMore = false; } + } + + // Build the ReputationProof + const r7Val = profileBoxes[0].additionalRegisters.R7; + const proof: import('reputation-system').ReputationProof = { + token_id: tokenId, + types: [], + data: {}, + total_amount: totalAmount, + owner_ergotree: (r7Val?.renderedValue as string) ?? '', + owner_serialized: r7Val?.serializedValue ?? '', + can_be_spend: true, + current_boxes: [], + number_of_boxes: 0, + network: 'ergo', + }; + + const uniqueTypeIds = new Set(); + for (const box of allTokenBoxes) { + const rpbox = convertToRPBox(box, tokenId, availableTypes); + if (rpbox) { + proof.current_boxes.push(rpbox); + proof.number_of_boxes += 1; + + // Check if this is a self-referencing box (profile type) + // Handle both raw and UTF-8 encoded R5 values + const r5Match = rpbox.object_pointer === tokenId + || hexToUtf8(rpbox.object_pointer) === tokenId; + if (r5Match) { + const typeId = rpbox.type.tokenId; + if (!uniqueTypeIds.has(typeId)) { + uniqueTypeIds.add(typeId); + proof.types.push(rpbox.type); + } + } + } + } + + console.log('Fallback profile detection found proof:', proof); + return proof; + } catch (err) { + console.error('Fallback profile detection error:', err); + return null; + } + } + async function loadUserProfile() { try { const types = await fetchTypeNfts(get(explorer_uri)); + + // First try the library's standard profile detection const proofs = await fetchAllUserProfiles( get(explorer_uri), true, [PROFILE_TYPE_NFT_ID], types, ); - const proof = proofs[0]; // TODO Select one. + let proof = proofs[0]; + + // If the library didn't find a profile, try the fallback detection + // which handles the R5 UTF-8 encoding edge case + if (!proof) { + console.log('Standard profile detection found nothing, trying fallback...'); + proof = await fallbackProfileDetection(get(explorer_uri), types) ?? undefined as any; + } + console.log("Fetched profile proof:", proof); - reputation_proof.set(proof); + reputation_proof.set(proof ?? null); console.log("Profile loaded:", proof); } catch (err) { console.error("Error loading profile:", err); @@ -231,11 +433,13 @@ webTx: string; webAddr: string; webTkn: string; + hashValidation: boolean; }) { explorer_uri.set(settings.explorerUri); web_explorer_uri_tx.set(settings.webTx); web_explorer_uri_addr.set(settings.webAddr); web_explorer_uri_tkn.set(settings.webTkn); + hashValidationEnabled.set(settings.hashValidation); } // --- Centralized State Actions --- @@ -408,6 +612,7 @@ webTx={$web_explorer_uri_tx} webAddr={$web_explorer_uri_addr} webTkn={$web_explorer_uri_tkn} + hashValidation={$hashValidationEnabled} onSave={handleSettingsSave} /> @@ -498,6 +703,7 @@ explorerUri={$explorer_uri} {source_explorer_url} hash={creationHashStore} + hashValidationEnabled={$hashValidationEnabled} /> {/if}
From 137a2e6eb0ddee3ed0eb70e843dd6a0c052a2fcd Mon Sep 17 00:00:00 2001 From: Captain Efficiency Date: Sat, 4 Apr 2026 11:41:46 -0400 Subject: [PATCH 04/23] fix: accept any profile type for detection, not just PROFILE_TYPE_NFT_ID Josemi's wallet has a JUDGE-type profile (from GoP) but the source app was filtering by PROFILE_TYPE_NFT_ID only. Now: 1. fetchAllUserProfiles called with empty types array [] to accept any type 2. Fallback detection no longer filters by R4 register This matches Game of Prompts behavior where profiles of any type are detected. --- src/routes/App.svelte | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/routes/App.svelte b/src/routes/App.svelte index ddeaf48..2ec8aa7 100644 --- a/src/routes/App.svelte +++ b/src/routes/App.svelte @@ -205,11 +205,8 @@ // Strip Coll[Byte] prefix (0e + length byte(s)) const r7Rendered = r7Serialized.startsWith('0e') ? r7Serialized.substring(4) : r7Serialized; - // Also compute the R4 rendered value for PROFILE_TYPE_NFT_ID - const profileTypeBytes = hexToBytes(PROFILE_TYPE_NFT_ID); - if (!profileTypeBytes) return null; - - // Query the Explorer API for boxes matching our ergo tree, R7, and R4 + // Query the Explorer API for boxes matching our ergo tree and R7 + // Don't filter by R4 type — accept any profile type const ergo_tree_hash = ERGO_TREE_HASH; const allBoxes: ApiBox[] = []; @@ -222,7 +219,6 @@ const body = { ergoTreeTemplateHash: ergo_tree_hash, registers: { - R4: PROFILE_TYPE_NFT_ID, R7: r7Rendered, }, assets: [], @@ -351,10 +347,11 @@ const types = await fetchTypeNfts(get(explorer_uri)); // First try the library's standard profile detection + // Pass empty array to accept any profile type (JUDGE, PROFILE, etc.) const proofs = await fetchAllUserProfiles( get(explorer_uri), true, - [PROFILE_TYPE_NFT_ID], + [], types, ); let proof = proofs[0]; From b9cbf1777d65965a845858a53e353d946d1ee2bf Mon Sep 17 00:00:00 2001 From: Captain Efficiency Date: Sat, 4 Apr 2026 12:10:37 -0400 Subject: [PATCH 05/23] feat: add GitHub Pages deployment with dynamic base path and esRawPlugin - Update svelte.config.js with dynamic BASE_PATH for GitHub Pages - Add esRawPlugin to vite.config.ts for .es contract files - Clean up vite.config.ts (remove unused config block) - Update deploy.yml to follow standardized template - Layout already has ssr=false and prerender=true --- .github/workflows/deploy.yml | 43 ++++++++++++++---------------------- svelte.config.js | 15 ++++++------- vite.config.ts | 36 +++++++++++++++++------------- 3 files changed, 45 insertions(+), 49 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index bcbb02e..83620ae 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,4 +1,4 @@ -name: Deploy to GitHub Pages & Package +name: Deploy to GitHub Pages on: push: @@ -11,41 +11,32 @@ permissions: id-token: write concurrency: - group: pages - cancel-in-progress: true + group: "pages" + cancel-in-progress: false jobs: - build-and-deploy: + build: runs-on: ubuntu-latest - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version: 20 cache: npm - - - name: Install dependencies - run: npm ci - - - name: Build site - run: npm run build + - run: npm ci + - run: npm run build env: NODE_ENV: production - - - name: Package library - run: npm run package - - - name: Upload Pages artifact - uses: actions/upload-pages-artifact@v3 + - uses: actions/upload-pages-artifact@v3 with: path: build - - name: Deploy to GitHub Pages - id: deployment + deploy: + needs: build + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - id: deployment uses: actions/deploy-pages@v4 diff --git a/svelte.config.js b/svelte.config.js index 025e1c0..b0db292 100644 --- a/svelte.config.js +++ b/svelte.config.js @@ -1,24 +1,23 @@ import adapter from '@sveltejs/adapter-static'; import { vitePreprocess } from '@sveltejs/kit/vite'; +const base = process.env.BASE_PATH ?? (process.env.NODE_ENV === 'production' + ? `/${(process.env.GITHUB_REPOSITORY ?? '').split('/')[1] ?? ''}`.replace(/\/$/, '') + : ''); + /** @type {import('@sveltejs/kit').Config} */ const config = { - // Consult https://kit.svelte.dev/docs/integrations#preprocessors - // for more information about preprocessors preprocess: vitePreprocess(), kit: { - // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. - // If your environment is not supported or you settled on a specific environment, switch out the adapter. - // See https://kit.svelte.dev/docs/adapters for more information about adapters. adapter: adapter({ pages: 'build', assets: 'build', - fallback: null + fallback: 'index.html' }), paths: { - base: '' - } + base + } } }; diff --git a/vite.config.ts b/vite.config.ts index 5e7dd1f..a491ec0 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,18 +1,31 @@ import { sveltekit } from '@sveltejs/kit/vite'; import { defineConfig } from 'vite'; +import { readFileSync } from 'node:fs'; import path from "path"; +function esRawPlugin() { + return { + name: 'es-raw', + enforce: 'pre' as const, + load(id: string) { + if (!id.endsWith('.es')) return null; + const source = readFileSync(id, 'utf-8'); + return `export default ${JSON.stringify(source)};`; + } + }; +} + export default defineConfig({ - plugins: [sveltekit()], + plugins: [esRawPlugin(), sveltekit()], test: { - globals: true, - environment: 'node', + globals: true, + environment: 'node', + }, + resolve: { + alias: { + $lib: path.resolve("./src/lib"), + }, }, - resolve: { - alias: { - $lib: path.resolve("./src/lib"), - }, - }, optimizeDeps: { esbuildOptions: { loader: { @@ -21,10 +34,3 @@ export default defineConfig({ }, }, }); - -const config = { - // … - ssr: { - noExternal: ['three'] - } - } From f195df9b47d24a12cdfd15fd077b836f302397ae Mon Sep 17 00:00:00 2001 From: Captain Efficiency Date: Mon, 6 Apr 2026 06:55:33 -0400 Subject: [PATCH 06/23] feat: export all library components (SearchByHash, ProfileSources, Timeline, modals, etc.) Previously only 4 components were exported. Now all components from src/lib/components/ are available to library consumers, matching the full web app experience. --- src/lib/index.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/lib/index.ts b/src/lib/index.ts index 5123193..7fef254 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -75,8 +75,22 @@ export { hashValidationEnabled } from './ergo/store'; +// ===== HASH UTILITIES ===== +export { + HASH_OPTIONS, + SEARCH_HASH_ALGORITHMS +} from './ergo/hashUtils'; + // ===== SVELTE COMPONENTS ===== export { default as ProfileCard } from './components/ProfileCard.svelte'; export { default as FileSourceCreation } from './components/FileSourceCreation.svelte'; export { default as FileSourceCard } from './components/FileSourceCard.svelte'; -export { default as FileCard } from './components/FileCard.svelte'; \ No newline at end of file +export { default as FileCard } from './components/FileCard.svelte'; +export { default as SearchByHash } from './components/SearchByHash.svelte'; +export { default as ProfileSources } from './components/ProfileSources.svelte'; +export { default as DownloadSourceCard } from './components/DownloadSourceCard.svelte'; +export { default as ProfileSourceGroupView } from './components/ProfileSourceGroup.svelte'; +export { default as Timeline } from './components/Timeline.svelte'; +export { default as SettingsModal } from './components/SettingsModal.svelte'; +export { default as ProfileModal } from './components/ProfileModal.svelte'; +export { default as AddSource } from './components/AddSource.svelte'; \ No newline at end of file From 257556a9bc6c95c994a9b77e4b4811941f5e01ea Mon Sep 17 00:00:00 2001 From: Captain Efficiency Date: Tue, 7 Apr 2026 06:46:33 -0400 Subject: [PATCH 07/23] build: package updated library with hash function, format fields, and validation FileSourceCreation now includes: - Hash Function ID selector with known algorithms - Content Hash + Content Format fields - Raw Format (toggleable via content-equals-raw checkbox) - Chunked file manifest support - Hash validation per algorithm - URL parameter pre-fill support Co-Authored-By: Claude Opus 4.6 --- dist/components/AddSource.svelte | 88 +++- dist/components/AddSource.svelte.d.ts | 3 + dist/components/DownloadSourceCard.svelte | 13 +- dist/components/FileCard.svelte | 28 +- dist/components/FileSourceCard.svelte | 198 +++++++-- dist/components/FileSourceCreation.svelte | 410 ++++++++++++++---- .../components/FileSourceCreation.svelte.d.ts | 1 + dist/components/ProfileSourceGroup.svelte | 8 +- dist/components/ProfileSources.svelte | 5 +- dist/components/SearchByHash.svelte | 89 ++-- dist/components/SearchByHash.svelte.d.ts | 2 +- dist/components/SettingsModal.svelte | 27 +- dist/components/SettingsModal.svelte.d.ts | 2 + dist/ergo/envs.d.ts | 1 + dist/ergo/envs.js | 2 + dist/ergo/hashUtils.d.ts | 77 ++++ dist/ergo/hashUtils.js | 153 +++++++ dist/ergo/sourceFetch.d.ts | 2 +- dist/ergo/sourceFetch.js | 67 +-- dist/ergo/sourceObject.d.ts | 55 ++- dist/ergo/sourceObject.js | 143 +++++- dist/ergo/sourceStore.d.ts | 26 +- dist/ergo/sourceStore.js | 48 +- dist/ergo/store.d.ts | 10 + dist/ergo/store.js | 7 + dist/index.d.ts | 14 +- dist/index.js | 14 +- 27 files changed, 1259 insertions(+), 234 deletions(-) create mode 100644 dist/ergo/hashUtils.d.ts create mode 100644 dist/ergo/hashUtils.js diff --git a/dist/components/AddSource.svelte b/dist/components/AddSource.svelte index 35c5060..6facff8 100644 --- a/dist/components/AddSource.svelte +++ b/dist/components/AddSource.svelte @@ -1,27 +1,58 @@ @@ -107,6 +112,26 @@ function restoreDefaults() { URL prefix for viewing tokens.

+ +
+

Verification

+
+ +
+ +

+ When enabled, adding a source will download the file from the URL + and verify its hash matches before submitting the transaction. + This may cause issues with large files or CORS-restricted URLs. +

+
+
+
void; }; events: { diff --git a/dist/ergo/envs.d.ts b/dist/ergo/envs.d.ts index 3a22e27..1ce836a 100644 --- a/dist/ergo/envs.d.ts +++ b/dist/ergo/envs.d.ts @@ -9,4 +9,5 @@ export declare const FILE_SOURCE_TYPE_NFT_ID = "8299d98e15ebee7fa39ad716de7c8bb1 export declare const INVALID_FILE_SOURCE_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000002"; export declare const UNAVAILABLE_SOURCE_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000003"; export declare const PROFILE_OPINION_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000004"; +export declare const ERGO_TREE_HASH = "e84b95d84a30df33aa258fe2b9d24c3e75e27a67c6453983c19703029112d147"; export declare const SOURCE_OPINION_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000005"; diff --git a/dist/ergo/envs.js b/dist/ergo/envs.js index 7dd9c0a..fa97eaf 100644 --- a/dist/ergo/envs.js +++ b/dist/ergo/envs.js @@ -15,5 +15,7 @@ export const FILE_SOURCE_TYPE_NFT_ID = "8299d98e15ebee7fa39ad716de7c8bb191790a1b export const INVALID_FILE_SOURCE_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000002"; export const UNAVAILABLE_SOURCE_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000003"; export const PROFILE_OPINION_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000004"; +// Reputation proof contract hash (from reputation-system library) +export const ERGO_TREE_HASH = "e84b95d84a30df33aa258fe2b9d24c3e75e27a67c6453983c19703029112d147"; // Deprecated export const SOURCE_OPINION_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000005"; diff --git a/dist/ergo/hashUtils.d.ts b/dist/ergo/hashUtils.d.ts new file mode 100644 index 0000000..83e1193 --- /dev/null +++ b/dist/ergo/hashUtils.d.ts @@ -0,0 +1,77 @@ +/** + * Hash utility functions for source verification. + * Supports SHA3-256, SHA-256, Keccak-256, and Blake2b. + * Uses @noble/hashes (already a transitive dependency via @fleet-sdk/crypto). + */ +/** Known hash algorithm IDs used in the application */ +export declare const HASH_ALGORITHMS: readonly [{ + readonly label: "SHA3-256"; + readonly value: "sha3_256"; +}, { + readonly label: "Blake2b"; + readonly value: "blake2b"; +}, { + readonly label: "SHA-256"; + readonly value: "sha256"; +}, { + readonly label: "Keccak-256"; + readonly value: "keccak256"; +}]; +/** All algorithm values including custom */ +export declare const HASH_OPTIONS: readonly [{ + readonly label: "SHA3-256"; + readonly value: "sha3_256"; +}, { + readonly label: "Blake2b"; + readonly value: "blake2b"; +}, { + readonly label: "SHA-256"; + readonly value: "sha256"; +}, { + readonly label: "Keccak-256"; + readonly value: "keccak256"; +}, { + readonly label: "Custom"; + readonly value: "__custom__"; +}]; +/** Algorithm values for search (no custom — frontend can't compute unknown algorithms) */ +export declare const SEARCH_HASH_ALGORITHMS: readonly [{ + readonly label: "SHA3-256"; + readonly value: "sha3_256"; +}, { + readonly label: "Blake2b"; + readonly value: "blake2b"; +}, { + readonly label: "SHA-256"; + readonly value: "sha256"; +}, { + readonly label: "Keccak-256"; + readonly value: "keccak256"; +}]; +/** + * Compute a hash of the given data using the specified algorithm. + * @returns hex string of the hash, or null if algorithm is unknown/custom + */ +export declare function computeHash(data: Uint8Array, algorithmId: string): string | null; +/** + * Validate a hex hash string for a given algorithm. + * Returns null if valid, or an error message if invalid. + */ +export declare function validateHash(hash: string, algorithmId: string): string | null; +/** + * Get the human-readable label for an algorithm ID. + */ +export declare function getAlgorithmLabel(algorithmId: string): string; +/** + * Download content from a URL and compute its hash. + * Supports chunked files (manifest-based): if isChunked is true, + * the URL is treated as a manifest where each line is a chunk URL. + * + * @param url - The URL to fetch (or manifest URL if chunked) + * @param algorithmId - Hash algorithm to use + * @param isChunked - Whether this is a chunked manifest + * @param onProgress - Optional progress callback (current, total) for chunked downloads + * @returns hex hash string + * @throws if algorithm is custom/unknown, fetch fails, etc. + */ +export declare function downloadAndHash(url: string, algorithmId: string, isChunked?: boolean, onProgress?: (current: number, total: number) => void): Promise; diff --git a/dist/ergo/hashUtils.js b/dist/ergo/hashUtils.js new file mode 100644 index 0000000..24f8c0a --- /dev/null +++ b/dist/ergo/hashUtils.js @@ -0,0 +1,153 @@ +/** + * Hash utility functions for source verification. + * Supports SHA3-256, SHA-256, Keccak-256, and Blake2b. + * Uses @noble/hashes (already a transitive dependency via @fleet-sdk/crypto). + */ +import { sha256 } from '@noble/hashes/sha256'; +import { sha3_256, keccak_256 } from '@noble/hashes/sha3'; +import { blake2b } from '@noble/hashes/blake2b'; +/** Known hash algorithm IDs used in the application */ +export const HASH_ALGORITHMS = [ + { label: "SHA3-256", value: "sha3_256" }, + { label: "Blake2b", value: "blake2b" }, + { label: "SHA-256", value: "sha256" }, + { label: "Keccak-256", value: "keccak256" }, +]; +/** All algorithm values including custom */ +export const HASH_OPTIONS = [ + ...HASH_ALGORITHMS, + { label: "Custom", value: "__custom__" }, +]; +/** Algorithm values for search (no custom — frontend can't compute unknown algorithms) */ +export const SEARCH_HASH_ALGORITHMS = HASH_ALGORITHMS; +function uint8ArrayToHex(array) { + return [...array].map(x => x.toString(16).padStart(2, '0')).join(''); +} +/** + * Compute a hash of the given data using the specified algorithm. + * @returns hex string of the hash, or null if algorithm is unknown/custom + */ +export function computeHash(data, algorithmId) { + switch (algorithmId) { + case 'sha256': + return uint8ArrayToHex(sha256(data)); + case 'sha3_256': + return uint8ArrayToHex(sha3_256(data)); + case 'keccak256': + return uint8ArrayToHex(keccak_256(data)); + case 'blake2b': + // Default to 256-bit (32 bytes) output + return uint8ArrayToHex(blake2b(data, { dkLen: 32 })); + default: + return null; + } +} +/** + * Validate a hex hash string for a given algorithm. + * Returns null if valid, or an error message if invalid. + */ +export function validateHash(hash, algorithmId) { + if (!hash || hash.trim() === '') { + return 'Hash cannot be empty'; + } + const trimmed = hash.trim(); + // Check hex characters + if (!/^[0-9a-fA-F]+$/.test(trimmed)) { + return 'Hash must contain only hexadecimal characters (0-9, a-f)'; + } + switch (algorithmId) { + case 'sha3_256': + case 'sha256': + case 'keccak256': + if (trimmed.length !== 64) { + return `${getAlgorithmLabel(algorithmId)} hash must be exactly 64 hex characters (256-bit). Got ${trimmed.length}.`; + } + break; + case 'blake2b': + if (trimmed.length !== 64 && trimmed.length !== 128) { + return `Blake2b hash must be 64 hex characters (256-bit) or 128 hex characters (512-bit). Got ${trimmed.length}.`; + } + break; + case '__custom__': + // Custom algorithm — only validate hex and non-empty + break; + default: + // Unknown algorithm id — only validate hex + break; + } + return null; +} +/** + * Get the human-readable label for an algorithm ID. + */ +export function getAlgorithmLabel(algorithmId) { + const found = HASH_OPTIONS.find(o => o.value === algorithmId); + return found ? found.label : algorithmId; +} +/** + * Download content from a URL and compute its hash. + * Supports chunked files (manifest-based): if isChunked is true, + * the URL is treated as a manifest where each line is a chunk URL. + * + * @param url - The URL to fetch (or manifest URL if chunked) + * @param algorithmId - Hash algorithm to use + * @param isChunked - Whether this is a chunked manifest + * @param onProgress - Optional progress callback (current, total) for chunked downloads + * @returns hex hash string + * @throws if algorithm is custom/unknown, fetch fails, etc. + */ +export async function downloadAndHash(url, algorithmId, isChunked = false, onProgress) { + if (algorithmId === '__custom__' || !HASH_ALGORITHMS.some(a => a.value === algorithmId)) { + throw new Error('Cannot verify: custom hash algorithm'); + } + let data; + if (isChunked) { + // Fetch manifest + const manifestResponse = await fetch(url); + if (!manifestResponse.ok) { + throw new Error(`Failed to fetch manifest: ${manifestResponse.statusText}`); + } + const manifestText = await manifestResponse.text(); + const chunkUrls = manifestText.trim().split('\n').filter(line => line.trim() !== ''); + if (chunkUrls.length === 0) { + throw new Error('Manifest is empty — no chunk URLs found'); + } + // Download all chunks in order + const chunks = []; + let totalSize = 0; + for (let i = 0; i < chunkUrls.length; i++) { + if (onProgress) + onProgress(i, chunkUrls.length); + const chunkResponse = await fetch(chunkUrls[i].trim()); + if (!chunkResponse.ok) { + throw new Error(`Failed to fetch chunk ${i + 1}/${chunkUrls.length}: ${chunkResponse.statusText}`); + } + const chunkBuffer = await chunkResponse.arrayBuffer(); + const chunkBytes = new Uint8Array(chunkBuffer); + chunks.push(chunkBytes); + totalSize += chunkBytes.length; + } + if (onProgress) + onProgress(chunkUrls.length, chunkUrls.length); + // Concatenate all chunks + data = new Uint8Array(totalSize); + let offset = 0; + for (const chunk of chunks) { + data.set(chunk, offset); + offset += chunk.length; + } + } + else { + const response = await fetch(url); + if (!response.ok) { + throw new Error(`Failed to fetch file: ${response.statusText}`); + } + const buffer = await response.arrayBuffer(); + data = new Uint8Array(buffer); + } + const result = computeHash(data, algorithmId); + if (result === null) { + throw new Error(`Cannot verify: unsupported hash algorithm "${algorithmId}"`); + } + return result; +} diff --git a/dist/ergo/sourceFetch.d.ts b/dist/ergo/sourceFetch.d.ts index 488bba7..588af80 100644 --- a/dist/ergo/sourceFetch.d.ts +++ b/dist/ergo/sourceFetch.d.ts @@ -1,7 +1,7 @@ import { type FileSource, type ProfileOpinion, type SearchResult, type ProfileData, type InvalidFileSource, type UnavailableSource } from './sourceObject'; /** * Fetch all FILE_SOURCE boxes for a specific file hash. - * Returns all sources (URLs) where this file can be found. + * Returns all sources where this file can be found. */ export declare function fetchFileSourcesByHash(fileHash: string, explorerUri: string): Promise; /** diff --git a/dist/ergo/sourceFetch.js b/dist/ergo/sourceFetch.js index 105ceb2..4f385c1 100644 --- a/dist/ergo/sourceFetch.js +++ b/dist/ergo/sourceFetch.js @@ -1,10 +1,31 @@ +import { deserializeSourceEntry } from './sourceObject'; import { hexToUtf8 } from './utils'; import { FILE_SOURCE_TYPE_NFT_ID, INVALID_FILE_SOURCE_TYPE_NFT_ID, UNAVAILABLE_SOURCE_TYPE_NFT_ID, PROFILE_OPINION_TYPE_NFT_ID } from './envs'; import DOMPurify from "dompurify"; import { getTimestampFromBlockId, searchBoxes } from 'reputation-system'; +/** + * Parse R9 content from a box into SourceEntry[]. + * Handles both new JSON format and legacy plain URL string. + */ +function parseR9Content(box) { + let rawContent = "[Unreadable Content]"; + try { + const rawValue = box.additionalRegisters.R9?.renderedValue; + if (rawValue) { + rawContent = hexToUtf8(rawValue) ?? "[Empty Content]"; + // Sanitize for display safety + rawContent = DOMPurify.sanitize(rawContent); + } + } + catch (e) { + console.warn(`Error decoding R9 for box ${box.boxId}`, e); + rawContent = ""; + } + return { source: deserializeSourceEntry(rawContent) }; +} /** * Fetch all FILE_SOURCE boxes for a specific file hash. - * Returns all sources (URLs) where this file can be found. + * Returns all sources where this file can be found. */ export async function fetchFileSourcesByHash(fileHash, explorerUri) { console.log("Fetching file sources for hash:", fileHash); @@ -19,22 +40,14 @@ export async function fetchFileSourcesByHash(fileHash, explorerUri) { continue; if (!box.additionalRegisters.R9?.renderedValue) continue; - let sourceUrl = "[Unreadable URL]"; - try { - const rawValue = box.additionalRegisters.R9.renderedValue; - if (rawValue) { - sourceUrl = hexToUtf8(rawValue) ?? "[Empty URL]"; - // Sanitize URL for display - sourceUrl = DOMPurify.sanitize(sourceUrl); - } - } - catch (e) { - console.warn(`Error decoding R9 for box ${box.boxId}`, e); - } + const { source: sourceEntry } = parseR9Content(box); + // Extract hashFunctionId from the source entry + const hashFunctionId = sourceEntry.hashFunctionId || ''; const source = { id: box.boxId, fileHash: fileHash, - sourceUrl: sourceUrl, + hashFunctionId: hashFunctionId, + source: sourceEntry, ownerTokenId: box.assets[0].tokenId, reputationAmount: Number(box.assets[0].amount), timestamp: await getTimestampFromBlockId(explorerUri, box.blockId), @@ -146,21 +159,13 @@ export async function fetchFileSourcesByProfile(profileTokenId, limit = 50, expl catch (e) { console.warn(`Error decoding R5 for box ${box.boxId}`, e); } - let sourceUrl = "[Unreadable URL]"; - try { - const rawValue = box.additionalRegisters.R9.renderedValue; - if (rawValue) { - sourceUrl = hexToUtf8(rawValue) ?? "[Empty URL]"; - sourceUrl = DOMPurify.sanitize(sourceUrl); - } - } - catch (e) { - console.warn(`Error decoding R9 for box ${box.boxId}`, e); - } + const { source: sourceEntry } = parseR9Content(box); + const hashFunctionId = sourceEntry.hashFunctionId || ''; const source = { id: box.boxId, fileHash: fileHash, - sourceUrl: sourceUrl, + hashFunctionId: hashFunctionId, + source: sourceEntry, ownerTokenId: box.assets[0].tokenId, reputationAmount: Number(box.assets[0].amount), timestamp: await getTimestampFromBlockId(explorerUri, box.blockId), @@ -251,12 +256,12 @@ export async function searchByHash(fileHash, explorerUri) { const invs = await fetchInvalidFileSources(source.id, explorerUri); if (invs.length > 0) invalidations[source.id] = invs; - // Fetch unavailabilities for this URL - // Optimization: check if we already fetched for this URL - if (!unavailabilities[source.sourceUrl]) { - const unavs = await fetchUnavailableSources(explorerUri, source.sourceUrl); + // Fetch unavailabilities for the source URL + const url = source.source?.urlLink; + if (url && !unavailabilities[url]) { + const unavs = await fetchUnavailableSources(url, explorerUri); if (unavs.length > 0) - unavailabilities[source.sourceUrl] = unavs; + unavailabilities[url] = unavs; } } return { sources, invalidations, unavailabilities }; diff --git a/dist/ergo/sourceObject.d.ts b/dist/ergo/sourceObject.d.ts index 35b9fc1..e0a046b 100644 --- a/dist/ergo/sourceObject.d.ts +++ b/dist/ergo/sourceObject.d.ts @@ -4,10 +4,19 @@ * This module defines the core interfaces for the decentralized File Discovery * and Verification system built on Ergo blockchain. */ +export interface SourceEntry { + hashFunctionId: string; + contentFormat: string; + contentHash: string; + rawFormat: string; + urlLink: string; + isChunked?: boolean; +} export interface FileSource { id: string; fileHash: string; - sourceUrl: string; + hashFunctionId: string; + source: SourceEntry; ownerTokenId: string; reputationAmount: number; timestamp: number; @@ -99,7 +108,18 @@ export interface ProfileSourceGroup { sources: FileSource[]; } /** - * Group file sources by their download URL. + * Get the primary URL from a FileSource. + * Returns the first source entry's URL, or an empty string if no sources. + */ +export declare function getPrimaryUrl(source: FileSource): string; +/** + * Get all URLs from a FileSource. + * With single source entry, returns an array with one URL. + */ +export declare function getAllUrls(source: FileSource): string[]; +/** + * Group file sources by their download URLs. + * A FileSource can contain multiple URLs; it will appear in each group. */ export declare function groupByDownloadSource(sources: FileSource[], invalidationsMap: Record s.id === source.id)) { + groups[url].sources.push(source); + } + if (!groups[url].owners.includes(source.ownerTokenId)) { + groups[url].owners.push(source.ownerTokenId); } // Add invalidations for this specific box const boxInvalidations = invalidationsMap[source.id]?.data || []; - groups[source.sourceUrl].invalidations.push(...boxInvalidations); + groups[url].invalidations.push(...boxInvalidations); } return Object.values(groups).sort((a, b) => b.sources.length - a.sources.length); } @@ -62,14 +83,15 @@ export function calculateProfileTrust(profileTokenId, opinions) { * Aggregate opinions into score data for a file source. */ export function aggregateSourceScore(source, allSources, invalidations, unavailabilities, profileOpinions = []) { - // Confirmations are other sources with same hash and URL + // Confirmations are other sources with same hash and same URL + const sourceUrl = source.source?.urlLink || ''; const confirmations = allSources.filter(s => s.id !== source.id && s.fileHash === source.fileHash && - s.sourceUrl === source.sourceUrl); + s.source?.urlLink === sourceUrl); // Invalidations for this specific box const filteredInvalidations = invalidations.filter(inv => inv.targetBoxId === source.id); - // Unavailabilities for this specific URL - const filteredUnavailabilities = unavailabilities.filter(un => un.sourceUrl === source.sourceUrl); + // Unavailabilities for the URL in this source + const filteredUnavailabilities = unavailabilities.filter(un => un.sourceUrl === sourceUrl); const confirmationScore = confirmations.reduce((sum, s) => sum + s.reputationAmount, 0); const invalidationScore = filteredInvalidations.reduce((sum, inv) => sum + inv.reputationAmount, 0); const unavailabilityScore = filteredUnavailabilities.reduce((sum, un) => sum + un.reputationAmount, 0); @@ -85,3 +107,98 @@ export function aggregateSourceScore(source, allSources, invalidations, unavaila ownerTrustScore }; } +// --- SERIALIZATION HELPERS --- +/** + * Serialize source entries to a JSON string for R9 content. + * The reputation-system library encodes this as Coll[Byte] (UTF-8 bytes). + * + * Format: Coll[Coll[Byte]] — a JSON array containing one tuple (array): + * [hash_function_id, content_format, content_hash, raw_format, url_link, is_chunked] + * + * Serialization format: Coll[Coll[Byte]] + * The output represents a Coll[Coll[Byte]] structure — an array containing + * one tuple (inner Coll[Byte]) with the source entry fields: + * [[hashFunctionId, contentFormat, contentHash, rawFormat, urlLink, isChunked]] + * + * The reputation-system library encodes this JSON string as Coll[Byte] for R9. + * Since encoding operates on the raw UTF-8 bytes of the JSON string (not on + * individual tuple elements), mixed types (string + boolean) within the tuple + * are fine — JSON.parse restores original types on deserialization. + */ +export function serializeSourceEntry(entry) { + // Coll[Coll[Byte]]: outer array = Coll, inner tuple = Coll[Byte] elements + const tuple = [ + entry.hashFunctionId, + entry.contentFormat, + entry.contentHash, + entry.rawFormat, + entry.urlLink, + entry.isChunked ?? false + ]; + return JSON.stringify([tuple]); // Coll[Coll[Byte]] serialized as JSON string +} +/** + * Deserialize source entries from R9 content string. + * + * Supports three formats (tried in order): + * 1. Coll[Coll[Byte]] tuple format: [[hashFnId, contentFmt, contentHash, rawFmt, urlLink, isChunked]] + * 2. Legacy JSON object format: [{ hashFunctionId, contentFormat, ... }] + * 3. Legacy plain URL string + * + * Note: tuple[5] (isChunked) is a boolean while other elements are strings. + * This is fine because the JSON string is what gets encoded as Coll[Byte], + * and JSON.parse restores the original types. + */ +export function deserializeSourceEntry(content) { + const empty = { + hashFunctionId: '', + contentFormat: '', + contentHash: '', + rawFormat: '', + urlLink: '' + }; + if (!content || content.trim() === '') + return empty; + try { + const parsed = JSON.parse(content); + if (Array.isArray(parsed) && parsed.length > 0) { + const tuple = parsed[0]; + // Format 1: Coll[Coll[Byte]] tuple array + // [[hashFnId, contentFmt, contentHash, rawFmt, urlLink, isChunked?]] + if (Array.isArray(tuple) && tuple.length >= 5) { + return { + hashFunctionId: tuple[0] || '', + contentFormat: tuple[1] || '', + contentHash: tuple[2] || '', + rawFormat: tuple[3] || '', + urlLink: tuple[4] || '', + isChunked: tuple[5] === true + }; + } + // Format 2: Legacy JSON object format + // [{ hashFunctionId, contentFormat, contentHash, rawFormat, urlLink, isChunked }] + if (typeof tuple === 'object' && tuple !== null && !Array.isArray(tuple)) { + return { + hashFunctionId: tuple.hashFunctionId || '', + contentFormat: tuple.contentFormat || tuple.contentFormatNftId || '', + contentHash: tuple.contentHash || '', + rawFormat: tuple.rawFormat || tuple.rawFormatNftId || '', + urlLink: tuple.urlLink || '', + isChunked: tuple.isChunked === true + }; + } + } + } + catch { + // Not JSON — treat as legacy plain URL string + } + // Format 3: Legacy plain URL string + return { + hashFunctionId: '', + contentFormat: '', + contentHash: '', + rawFormat: '', + urlLink: content, + isChunked: false + }; +} diff --git a/dist/ergo/sourceStore.d.ts b/dist/ergo/sourceStore.d.ts index 7b6319f..9d72ee2 100644 --- a/dist/ergo/sourceStore.d.ts +++ b/dist/ergo/sourceStore.d.ts @@ -1,24 +1,36 @@ import { type ReputationProof } from 'reputation-system'; -import { type FileSource } from './sourceObject'; +import { type FileSource, type SourceEntry } from './sourceObject'; /** * Creates a user profile box (same as forum). */ export declare function createProfileBox(explorerUri: string): Promise; /** * Add a new FILE_SOURCE box. - * Creates a box with R5=fileHash, R9=sourceUrl. + * Creates a box with R5=fileHash (raw file hash), R9=serialized source entries. + * + * @param fileHash - The raw file hash digest (R5 anchor) + * @param hashFunctionId - ID of the hash function used (HASH(EMPTY_INPUT)) + * @param sourceEntry - Single SourceEntry object for R9 + * @param proof - User's reputation proof + * @param explorerUri - Explorer API endpoint */ -export declare function addFileSource(fileHash: string, sourceUrl: string, proof: ReputationProof | null, explorerUri: string): Promise; +export declare function addFileSource(fileHash: string, hashFunctionId: string, sourceEntry: SourceEntry, proof: ReputationProof | null, explorerUri: string): Promise; /** - * Update a FILE_SOURCE box (spend old, create new with same hash but new URL). + * Update a FILE_SOURCE box (spend old, create new with same hash but new source entries). * The old box must be owned by the current user. + * + * @param oldBoxId - Box ID of the existing FILE_SOURCE to update + * @param fileHash - The raw file hash (must match existing) + * @param newSourceEntry - New SourceEntry object for R9 + * @param proof - User's reputation proof + * @param explorerUri - Explorer API endpoint */ -export declare function updateFileSource(oldBoxId: string, fileHash: string, newSourceUrl: string, proof: ReputationProof | null, explorerUri: string): Promise; +export declare function updateFileSource(oldBoxId: string, fileHash: string, newSourceEntry: SourceEntry, proof: ReputationProof | null, explorerUri: string): Promise; /** * Confirm a FILE_SOURCE box. - * Creates a new FILE_SOURCE box with same hash and URL. + * Creates a new FILE_SOURCE box with same hash and source entries. */ -export declare function confirmSource(fileHash: string, sourceUrl: string, proof: ReputationProof | null, currentSources: FileSource[], explorerUri: string): Promise; +export declare function confirmSource(fileHash: string, hashFunctionId: string, sourceEntry: SourceEntry, proof: ReputationProof | null, currentSources: FileSource[], explorerUri: string): Promise; /** * Mark a FILE_SOURCE box as invalid. * Creates an INVALID_FILE_SOURCE box with R5=sourceBoxId. diff --git a/dist/ergo/sourceStore.js b/dist/ergo/sourceStore.js index e8af626..f0b7ff0 100644 --- a/dist/ergo/sourceStore.js +++ b/dist/ergo/sourceStore.js @@ -1,4 +1,5 @@ import { create_profile, create_opinion, update_opinion } from 'reputation-system'; +import { serializeSourceEntry } from './sourceObject'; import { FILE_SOURCE_TYPE_NFT_ID, INVALID_FILE_SOURCE_TYPE_NFT_ID, UNAVAILABLE_SOURCE_TYPE_NFT_ID, PROFILE_OPINION_TYPE_NFT_ID, PROFILE_TOTAL_SUPPLY, PROFILE_TYPE_NFT_ID, } from './envs'; /** * Gets the main profile box from a ReputationProof. @@ -14,7 +15,7 @@ function getMainProfileBox(proof) { * Creates a user profile box (same as forum). */ export async function createProfileBox(explorerUri) { - const profileTxId = await create_profile(PROFILE_TOTAL_SUPPLY, PROFILE_TYPE_NFT_ID, explorerUri, { name: "Anon" }); + const profileTxId = await create_profile(explorerUri, PROFILE_TOTAL_SUPPLY, PROFILE_TYPE_NFT_ID, { name: "Anon" }); if (!profileTxId) { throw new Error("Fatal error: The profile creation transaction failed to send."); } @@ -23,10 +24,16 @@ export async function createProfileBox(explorerUri) { } /** * Add a new FILE_SOURCE box. - * Creates a box with R5=fileHash, R9=sourceUrl. + * Creates a box with R5=fileHash (raw file hash), R9=serialized source entries. + * + * @param fileHash - The raw file hash digest (R5 anchor) + * @param hashFunctionId - ID of the hash function used (HASH(EMPTY_INPUT)) + * @param sourceEntry - Single SourceEntry object for R9 + * @param proof - User's reputation proof + * @param explorerUri - Explorer API endpoint */ -export async function addFileSource(fileHash, sourceUrl, proof, explorerUri) { - console.log("API: addFileSource", { fileHash, sourceUrl }); +export async function addFileSource(fileHash, hashFunctionId, sourceEntry, proof, explorerUri) { + console.log("API: addFileSource", { fileHash, hashFunctionId, sourceEntry }); console.log("Proof:", proof); if (!proof) { throw new Error("Reputation proof is required to add a file source."); @@ -36,12 +43,14 @@ export async function addFileSource(fileHash, sourceUrl, proof, explorerUri) { if (!mainBox) { throw new Error("Profile box required but not available yet. Please wait for profile creation to confirm."); } + // Serialize single source entry as JSON for R9 content + const serializedContent = serializeSourceEntry(sourceEntry); const tx = await create_opinion(explorerUri, // explorerUri: Explorer API endpoint 1, // token_amount: 1 token for the new file source box FILE_SOURCE_TYPE_NFT_ID, // type_nft_id: Type NFT for FILE_SOURCE - fileHash, // object_pointer: R5 - The file hash + fileHash, // object_pointer: R5 - The raw file hash true, // polarization: R8 - Positive opinion - sourceUrl, // content: R9 - The source URL + serializedContent, // content: R9 - Serialized source entry false, // is_locked: R6 - Unlocked mainBox // main_box: The profile box to split from ); @@ -51,17 +60,25 @@ export async function addFileSource(fileHash, sourceUrl, proof, explorerUri) { return tx; } /** - * Update a FILE_SOURCE box (spend old, create new with same hash but new URL). + * Update a FILE_SOURCE box (spend old, create new with same hash but new source entries). * The old box must be owned by the current user. + * + * @param oldBoxId - Box ID of the existing FILE_SOURCE to update + * @param fileHash - The raw file hash (must match existing) + * @param newSourceEntry - New SourceEntry object for R9 + * @param proof - User's reputation proof + * @param explorerUri - Explorer API endpoint */ -export async function updateFileSource(oldBoxId, fileHash, newSourceUrl, proof, explorerUri) { - console.log("API: updateFileSource", { oldBoxId, fileHash, newSourceUrl }); +export async function updateFileSource(oldBoxId, fileHash, newSourceEntry, proof, explorerUri) { + console.log("API: updateFileSource", { oldBoxId, fileHash, newSourceEntry }); // Find the existing file source box to update const existingBox = proof?.current_boxes.find((b) => b.box.boxId === oldBoxId) || null; if (!existingBox) { throw new Error("File source box to update not found."); } - const tx = await update_opinion(explorerUri, existingBox, true, newSourceUrl); + // Serialize new source entry as JSON for R9 content + const serializedContent = serializeSourceEntry(newSourceEntry); + const tx = await update_opinion(explorerUri, existingBox, true, serializedContent); if (!tx) throw new Error("File source update transaction failed."); console.log("File source update transaction sent, ID:", tx); @@ -69,16 +86,17 @@ export async function updateFileSource(oldBoxId, fileHash, newSourceUrl, proof, } /** * Confirm a FILE_SOURCE box. - * Creates a new FILE_SOURCE box with same hash and URL. + * Creates a new FILE_SOURCE box with same hash and source entries. */ -export async function confirmSource(fileHash, sourceUrl, proof, currentSources, explorerUri) { - console.log("API: confirmSource", { fileHash, sourceUrl }); +export async function confirmSource(fileHash, hashFunctionId, sourceEntry, proof, currentSources, explorerUri) { + console.log("API: confirmSource", { fileHash, sourceEntry }); // Safety check: has the user already confirmed this? const userTokenId = proof?.token_id; - if (userTokenId && currentSources.some(s => s.sourceUrl === sourceUrl && s.ownerTokenId === userTokenId)) { + const primaryUrl = sourceEntry.urlLink || ''; + if (userTokenId && currentSources.some(s => s.source?.urlLink === primaryUrl && s.ownerTokenId === userTokenId)) { throw new Error("You have already confirmed this source."); } - return await addFileSource(fileHash, sourceUrl, proof, explorerUri); + return await addFileSource(fileHash, hashFunctionId, sourceEntry, proof, explorerUri); } /** * Mark a FILE_SOURCE box as invalid. diff --git a/dist/ergo/store.d.ts b/dist/ergo/store.d.ts index a5b1a10..13a6bf1 100644 --- a/dist/ergo/store.d.ts +++ b/dist/ergo/store.d.ts @@ -77,3 +77,13 @@ export declare const profileOpinionsGiven: { }; export declare const isLoading: import("svelte/store").Writable; export declare const error: import("svelte/store").Writable; +/** + * When enabled, adding a source will download the file from the URL and verify + * its hash matches before submitting the transaction. Disabled by default to + * avoid large downloads and CORS issues in the browser. + */ +export declare const hashValidationEnabled: { + subscribe: (this: void, run: import("svelte/store").Subscriber, invalidate?: import("svelte/store").Invalidator | undefined) => import("svelte/store").Unsubscriber; + set: (value: boolean) => void; + update: (fn: (value: boolean) => boolean) => void; +}; diff --git a/dist/ergo/store.js b/dist/ergo/store.js index ebfa901..6735ca8 100644 --- a/dist/ergo/store.js +++ b/dist/ergo/store.js @@ -87,3 +87,10 @@ export const profileUnavailabilities = createPersistentStore('source_profile_una export const profileOpinionsGiven = createPersistentStore('source_profile_opinions_given', {}); export const isLoading = writable(false); export const error = writable(null); +// --- SETTINGS --- +/** + * When enabled, adding a source will download the file from the URL and verify + * its hash matches before submitting the transaction. Disabled by default to + * avoid large downloads and CORS issues in the browser. + */ +export const hashValidationEnabled = createPersistentStore('hash_validation_enabled', false); diff --git a/dist/index.d.ts b/dist/index.d.ts index 4060215..246df74 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -1,10 +1,20 @@ export { fetchFileSourcesByHash, fetchInvalidFileSources, fetchUnavailableSources, fetchProfileOpinions, fetchFileSourcesByProfile, fetchInvalidFileSourcesByProfile, fetchUnavailableSourcesByProfile, fetchProfileOpinionsByAuthor, searchByHash, loadProfileData } from './ergo/sourceFetch'; export { createProfileBox, addFileSource, updateFileSource, confirmSource, markInvalidSource, markUnavailableSource, trustProfile } from './ergo/sourceStore'; -export type { FileSource, InvalidFileSource, UnavailableSource, ProfileOpinion, TimelineEvent, FileSourceWithScore, DownloadSourceGroup, ProfileSourceGroup, SearchResult, ProfileData } from './ergo/sourceObject'; -export { groupByDownloadSource, groupByProfile, calculateProfileTrust, aggregateSourceScore } from './ergo/sourceObject'; +export type { SourceEntry, FileSource, InvalidFileSource, UnavailableSource, ProfileOpinion, TimelineEvent, FileSourceWithScore, DownloadSourceGroup, ProfileSourceGroup, SearchResult, ProfileData } from './ergo/sourceObject'; +export { groupByDownloadSource, groupByProfile, calculateProfileTrust, aggregateSourceScore, getPrimaryUrl, getAllUrls, serializeSourceEntry, deserializeSourceEntry } from './ergo/sourceObject'; export type { ReputationProof, RPBox, TypeNFT, ApiBox } from './ergo/object'; export { PROFILE_TYPE_NFT_ID, PROFILE_TOTAL_SUPPLY, FILE_SOURCE_TYPE_NFT_ID, INVALID_FILE_SOURCE_TYPE_NFT_ID, UNAVAILABLE_SOURCE_TYPE_NFT_ID, PROFILE_OPINION_TYPE_NFT_ID, } from './ergo/envs'; +export { hashValidationEnabled } from './ergo/store'; +export { HASH_OPTIONS, SEARCH_HASH_ALGORITHMS } from './ergo/hashUtils'; export { default as ProfileCard } from './components/ProfileCard.svelte'; export { default as FileSourceCreation } from './components/FileSourceCreation.svelte'; export { default as FileSourceCard } from './components/FileSourceCard.svelte'; export { default as FileCard } from './components/FileCard.svelte'; +export { default as SearchByHash } from './components/SearchByHash.svelte'; +export { default as ProfileSources } from './components/ProfileSources.svelte'; +export { default as DownloadSourceCard } from './components/DownloadSourceCard.svelte'; +export { default as ProfileSourceGroupView } from './components/ProfileSourceGroup.svelte'; +export { default as Timeline } from './components/Timeline.svelte'; +export { default as SettingsModal } from './components/SettingsModal.svelte'; +export { default as ProfileModal } from './components/ProfileModal.svelte'; +export { default as AddSource } from './components/AddSource.svelte'; diff --git a/dist/index.js b/dist/index.js index a29b8a4..6fe630d 100644 --- a/dist/index.js +++ b/dist/index.js @@ -4,11 +4,23 @@ export { fetchFileSourcesByHash, fetchInvalidFileSources, fetchUnavailableSources, fetchProfileOpinions, fetchFileSourcesByProfile, fetchInvalidFileSourcesByProfile, fetchUnavailableSourcesByProfile, fetchProfileOpinionsByAuthor, searchByHash, loadProfileData } from './ergo/sourceFetch'; // ===== SOURCE STORE FUNCTIONS ===== export { createProfileBox, addFileSource, updateFileSource, confirmSource, markInvalidSource, markUnavailableSource, trustProfile } from './ergo/sourceStore'; -export { groupByDownloadSource, groupByProfile, calculateProfileTrust, aggregateSourceScore } from './ergo/sourceObject'; +export { groupByDownloadSource, groupByProfile, calculateProfileTrust, aggregateSourceScore, getPrimaryUrl, getAllUrls, serializeSourceEntry, deserializeSourceEntry } from './ergo/sourceObject'; // ===== ENVIRONMENT CONSTANTS ===== export { PROFILE_TYPE_NFT_ID, PROFILE_TOTAL_SUPPLY, FILE_SOURCE_TYPE_NFT_ID, INVALID_FILE_SOURCE_TYPE_NFT_ID, UNAVAILABLE_SOURCE_TYPE_NFT_ID, PROFILE_OPINION_TYPE_NFT_ID, } from './ergo/envs'; +// ===== SETTINGS STORES ===== +export { hashValidationEnabled } from './ergo/store'; +// ===== HASH UTILITIES ===== +export { HASH_OPTIONS, SEARCH_HASH_ALGORITHMS } from './ergo/hashUtils'; // ===== SVELTE COMPONENTS ===== export { default as ProfileCard } from './components/ProfileCard.svelte'; export { default as FileSourceCreation } from './components/FileSourceCreation.svelte'; export { default as FileSourceCard } from './components/FileSourceCard.svelte'; export { default as FileCard } from './components/FileCard.svelte'; +export { default as SearchByHash } from './components/SearchByHash.svelte'; +export { default as ProfileSources } from './components/ProfileSources.svelte'; +export { default as DownloadSourceCard } from './components/DownloadSourceCard.svelte'; +export { default as ProfileSourceGroupView } from './components/ProfileSourceGroup.svelte'; +export { default as Timeline } from './components/Timeline.svelte'; +export { default as SettingsModal } from './components/SettingsModal.svelte'; +export { default as ProfileModal } from './components/ProfileModal.svelte'; +export { default as AddSource } from './components/AddSource.svelte'; From afc0de24c95ea0a58a59dd2e36d34db05c0ae3e1 Mon Sep 17 00:00:00 2001 From: Captain Efficiency Date: Tue, 7 Apr 2026 07:11:53 -0400 Subject: [PATCH 08/23] ci: auto-build dist on push to master Runs `npm run package` and commits updated dist/ when src/lib changes. No more need to run `npm run package` locally. Co-Authored-By: Claude Opus 4.6 --- .github/workflows/package.yml | 42 +++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 .github/workflows/package.yml diff --git a/.github/workflows/package.yml b/.github/workflows/package.yml new file mode 100644 index 0000000..1f6c6ff --- /dev/null +++ b/.github/workflows/package.yml @@ -0,0 +1,42 @@ +name: Build & commit dist + +on: + push: + branches: [master] + paths: + - 'src/lib/**' + - 'package.json' + - 'package-lock.json' + - 'svelte.config.js' + - 'tsconfig.json' + +permissions: + contents: write + +jobs: + package: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + token: ${{ secrets.GITHUB_TOKEN }} + + - uses: actions/setup-node@v4 + with: + node-version: 20 + cache: npm + + - run: npm ci + - run: npm run package + + - name: Commit dist if changed + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add dist/ + if git diff --cached --quiet; then + echo "No dist changes to commit" + else + git commit -m "build: auto-package dist [skip ci]" + git push + fi From 5c9ae48df6a526cff9696171e3074074547337af Mon Sep 17 00:00:00 2001 From: 0xf965 <40121100+0xf965@users.noreply.github.com> Date: Wed, 8 Apr 2026 08:11:40 +0200 Subject: [PATCH 09/23] improved library - fixed mode, no hash function id --- .gitignore | 3 +- LIBRARY.md | 4 + dist/components/FileSourceCreation.svelte | 92 +++++++++------- .../components/FileSourceCreation.svelte.d.ts | 1 + dist/ergo/hashUtils.d.ts | 4 + dist/ergo/hashUtils.js | 24 ++++- src/lib/components/FileSourceCreation.svelte | 100 +++++++++++------- src/lib/ergo/hashUtils.ts | 26 ++++- 8 files changed, 165 insertions(+), 89 deletions(-) diff --git a/.gitignore b/.gitignore index 37af162..a2d1d00 100644 --- a/.gitignore +++ b/.gitignore @@ -46,4 +46,5 @@ yarn-error.log *.apk .metals/ .scala-build/ -.test.scala \ No newline at end of file +.test.scala +.codex \ No newline at end of file diff --git a/LIBRARY.md b/LIBRARY.md index 4985f83..b9673c3 100644 --- a/LIBRARY.md +++ b/LIBRARY.md @@ -60,6 +60,7 @@ Form for adding new file sources to the network. It supports two modes: a "free" - `explorerUri: string` - Ergo Explorer API endpoint. - `source_explorer_url: string` - Base URL for the source explorer (used for deep links). - `hash?: Writable` - Optional. A Svelte writable store for the file hash. +- `fixedHashFunctionId?: string` - Optional. Hash algorithm for the fixed anchor hash. In fixed mode the default is `blake2b256`. - `title?: string` - Optional. Custom title for the component (default: "Add New File Source"). - `onSourceAdded?: (txId: string) => void` - Callback when source is added. @@ -67,8 +68,10 @@ Form for adding new file sources to the network. It supports two modes: a "free" - **Always Visible**: The current hash is always displayed at the top of the component. - **Fixed Hash Mode** (when `hash` store has a value): - Manual hash input and file upload fields are hidden. + - The anchor hash function comes from `fixedHashFunctionId` instead of the form UI. - The "Compute hash from URL" button is hidden. - When clicking "Add Source", the component automatically downloads the file from the URL, calculates its hash, and verifies it matches the fixed hash before proceeding. + - Source-entry metadata such as content hash, content hash function id, and formats remain optional. - **Free Mode** (when `hash` store is empty or undefined): - User can provide the hash manually. - User can upload a local file to calculate its hash. @@ -96,6 +99,7 @@ Form for adding new file sources to the network. It supports two modes: a "free" {explorerUri} {source_explorer_url} hash={fileHashStore} + fixedHashFunctionId="blake2b256" title="Add Download Link" onSourceAdded={(tx) => console.log('Source added:', tx)} /> diff --git a/dist/components/FileSourceCreation.svelte b/dist/components/FileSourceCreation.svelte index aa7ae4b..8c67c59 100644 --- a/dist/components/FileSourceCreation.svelte +++ b/dist/components/FileSourceCreation.svelte @@ -10,12 +10,13 @@ import { AlertTriangle, Download, Upload, Loader2 } from "lucide-svelte"; import {} from "../ergo/object"; import { downloadAndHash } from "../ergo/hashUtils"; import {} from "svelte/store"; -import { HASH_OPTIONS, validateHash } from "../ergo/hashUtils"; +import { HASH_OPTIONS, getAlgorithmLabel, normalizeHashAlgorithmId, validateHash } from "../ergo/hashUtils"; export let profile = null; export let explorerUri; export let source_explorer_url; export let onSourceAdded = null; export let hash = void 0; +export let fixedHashFunctionId = "blake2b256"; export let hashValidationEnabled = false; export let title = "Add New File Source"; let className = ""; @@ -23,7 +24,7 @@ export { className as class }; const hasProfile = profile !== null; const baseClasses = "bg-card p-6 rounded-lg border"; let newFileHash = ""; -let hashFunctionId = ""; +let effectiveHashFunctionId = ""; let isAddingSource = false; let addError = null; let isCalculatingHash = false; @@ -43,16 +44,11 @@ let rawFormatType = "extension"; let fileHashValidationError = null; let contentHashValidationError = null; let rawHashValidationError = null; +$: + effectiveHashFunctionId = isHashFixed ? fixedHashFunctionId.trim() || "blake2b256" : hashSelectValue === "__custom__" ? customHashFunctionId : hashSelectValue; $: { - if (hashSelectValue === "__custom__") { - hashFunctionId = customHashFunctionId; - } else { - hashFunctionId = hashSelectValue; - } -} -$: { - if (newFileHash.trim() && hashSelectValue && hashSelectValue !== "__custom__") { - fileHashValidationError = validateHash(newFileHash.trim(), hashSelectValue); + if (newFileHash.trim() && effectiveHashFunctionId) { + fileHashValidationError = validateHash(newFileHash.trim(), effectiveHashFunctionId); } else if (newFileHash.trim() && hashSelectValue === "__custom__" && customHashFunctionId) { fileHashValidationError = validateHash(newFileHash.trim(), "__custom__"); } else { @@ -60,8 +56,11 @@ $: { } } $: { - if (entryContentHash.trim() && hashSelectValue && hashSelectValue !== "__custom__") { - contentHashValidationError = validateHash(entryContentHash.trim(), hashSelectValue); + if (entryContentHash.trim() && (entryHashFunctionId.trim() || effectiveHashFunctionId)) { + contentHashValidationError = validateHash( + entryContentHash.trim(), + entryHashFunctionId.trim() || effectiveHashFunctionId + ); } else { contentHashValidationError = null; } @@ -99,9 +98,10 @@ onMount(() => { updateHash(pFileHash); } if (pHashFunctionId) { - const knownOption = HASH_OPTIONS.find((o) => o.value === pHashFunctionId); + const normalizedHashFunctionId = normalizeHashAlgorithmId(pHashFunctionId); + const knownOption = HASH_OPTIONS.find((o) => o.value === normalizedHashFunctionId); if (knownOption && knownOption.value !== "__custom__") { - hashSelectValue = pHashFunctionId; + hashSelectValue = knownOption.value; } else { hashSelectValue = "__custom__"; customHashFunctionId = pHashFunctionId; @@ -135,7 +135,7 @@ async function calculateHashFromUrl() { const url = entryUrlLink.trim(); if (!url) return; - const algorithmId = entryHashFunctionId || hashFunctionId; + const algorithmId = entryHashFunctionId || effectiveHashFunctionId; if (!algorithmId || algorithmId === "__custom__") { hashError = "Cannot verify: select a known hash algorithm first"; return; @@ -162,7 +162,7 @@ async function handleFileUpload(event) { const input = event.target; if (!input.files || input.files.length === 0) return; - const algorithmId = entryHashFunctionId || hashFunctionId; + const algorithmId = entryHashFunctionId || effectiveHashFunctionId; if (!algorithmId || algorithmId === "__custom__") { hashError = "Cannot verify: select a known hash algorithm first"; return; @@ -195,7 +195,7 @@ async function handleAddSource() { newFileHash = currentHashValue; } if (hashValidationEnabled && isHashFixed && entryUrlLink.trim()) { - const algorithmId = entryHashFunctionId || hashFunctionId; + const algorithmId = entryHashFunctionId || effectiveHashFunctionId; if (!algorithmId || algorithmId === "__custom__") { hashError = "Cannot verify: select a known hash algorithm first"; return; @@ -236,7 +236,7 @@ async function handleAddSource() { }; const tx = await addFileSource( newFileHash.trim(), - hashFunctionId.trim(), + effectiveHashFunctionId.trim(), entry, profile, explorerUri @@ -245,7 +245,6 @@ async function handleAddSource() { if (!isHashFixed) { updateHash(""); } - hashFunctionId = ""; hashSelectValue = ""; customHashFunctionId = ""; entryHashFunctionId = ""; @@ -367,29 +366,42 @@ async function handleAddSource() {
- - {#if hashSelectValue === "__custom__"} + {#if isHashFixed} +

+ Fixed Hash Mode uses `{effectiveHashFunctionId}` ({getAlgorithmLabel(effectiveHashFunctionId)}) for the anchor hash. +

+ {:else} + + {#if hashSelectValue === "__custom__"} + + {/if} +

+ Identifies the hash algorithm used. Per convention: output of HASH(EMPTY_INPUT). +

{/if} -

- Identifies the hash algorithm used. Per convention: output of HASH(EMPTY_INPUT). -

@@ -457,7 +469,7 @@ async function handleAddSource() { type="text" id="entry-hash-fn" bind:value={entryHashFunctionId} - placeholder="Hash function identifier" + placeholder={`Optional. Defaults to ${effectiveHashFunctionId}`} class="font-mono text-xs" disabled={!hasProfile} /> diff --git a/dist/components/FileSourceCreation.svelte.d.ts b/dist/components/FileSourceCreation.svelte.d.ts index f59a33a..f060d3f 100644 --- a/dist/components/FileSourceCreation.svelte.d.ts +++ b/dist/components/FileSourceCreation.svelte.d.ts @@ -8,6 +8,7 @@ declare const __propDef: { source_explorer_url: string; onSourceAdded?: ((txId: string) => void) | null; hash?: Writable | undefined; + fixedHashFunctionId?: string; /** When false, skip automatic hash verification when adding a source. */ hashValidationEnabled?: boolean; title?: string; class?: string; diff --git a/dist/ergo/hashUtils.d.ts b/dist/ergo/hashUtils.d.ts index 83e1193..6aa2749 100644 --- a/dist/ergo/hashUtils.d.ts +++ b/dist/ergo/hashUtils.d.ts @@ -48,6 +48,10 @@ export declare const SEARCH_HASH_ALGORITHMS: readonly [{ readonly label: "Keccak-256"; readonly value: "keccak256"; }]; +/** + * Normalize supported aliases to the internal algorithm identifiers used by the UI. + */ +export declare function normalizeHashAlgorithmId(algorithmId: string): string; /** * Compute a hash of the given data using the specified algorithm. * @returns hex string of the hash, or null if algorithm is unknown/custom diff --git a/dist/ergo/hashUtils.js b/dist/ergo/hashUtils.js index 24f8c0a..cc2e433 100644 --- a/dist/ergo/hashUtils.js +++ b/dist/ergo/hashUtils.js @@ -23,12 +23,24 @@ export const SEARCH_HASH_ALGORITHMS = HASH_ALGORITHMS; function uint8ArrayToHex(array) { return [...array].map(x => x.toString(16).padStart(2, '0')).join(''); } +/** + * Normalize supported aliases to the internal algorithm identifiers used by the UI. + */ +export function normalizeHashAlgorithmId(algorithmId) { + const normalized = algorithmId.trim().toLowerCase(); + switch (normalized) { + case 'blake2b256': + return 'blake2b'; + default: + return normalized; + } +} /** * Compute a hash of the given data using the specified algorithm. * @returns hex string of the hash, or null if algorithm is unknown/custom */ export function computeHash(data, algorithmId) { - switch (algorithmId) { + switch (normalizeHashAlgorithmId(algorithmId)) { case 'sha256': return uint8ArrayToHex(sha256(data)); case 'sha3_256': @@ -55,7 +67,7 @@ export function validateHash(hash, algorithmId) { if (!/^[0-9a-fA-F]+$/.test(trimmed)) { return 'Hash must contain only hexadecimal characters (0-9, a-f)'; } - switch (algorithmId) { + switch (normalizeHashAlgorithmId(algorithmId)) { case 'sha3_256': case 'sha256': case 'keccak256': @@ -81,6 +93,9 @@ export function validateHash(hash, algorithmId) { * Get the human-readable label for an algorithm ID. */ export function getAlgorithmLabel(algorithmId) { + if (normalizeHashAlgorithmId(algorithmId) === 'blake2b') { + return 'Blake2b-256'; + } const found = HASH_OPTIONS.find(o => o.value === algorithmId); return found ? found.label : algorithmId; } @@ -97,7 +112,8 @@ export function getAlgorithmLabel(algorithmId) { * @throws if algorithm is custom/unknown, fetch fails, etc. */ export async function downloadAndHash(url, algorithmId, isChunked = false, onProgress) { - if (algorithmId === '__custom__' || !HASH_ALGORITHMS.some(a => a.value === algorithmId)) { + const normalizedAlgorithmId = normalizeHashAlgorithmId(algorithmId); + if (normalizedAlgorithmId === '__custom__' || !HASH_ALGORITHMS.some(a => a.value === normalizedAlgorithmId)) { throw new Error('Cannot verify: custom hash algorithm'); } let data; @@ -145,7 +161,7 @@ export async function downloadAndHash(url, algorithmId, isChunked = false, onPro const buffer = await response.arrayBuffer(); data = new Uint8Array(buffer); } - const result = computeHash(data, algorithmId); + const result = computeHash(data, normalizedAlgorithmId); if (result === null) { throw new Error(`Cannot verify: unsupported hash algorithm "${algorithmId}"`); } diff --git a/src/lib/components/FileSourceCreation.svelte b/src/lib/components/FileSourceCreation.svelte index 7e6942a..ee9fc0b 100644 --- a/src/lib/components/FileSourceCreation.svelte +++ b/src/lib/components/FileSourceCreation.svelte @@ -12,7 +12,12 @@ import { downloadAndHash } from "$lib/ergo/hashUtils"; import { type Writable } from "svelte/store"; - import { HASH_OPTIONS, validateHash } from "$lib/ergo/hashUtils"; + import { + HASH_OPTIONS, + getAlgorithmLabel, + normalizeHashAlgorithmId, + validateHash, + } from "$lib/ergo/hashUtils"; // Props for island mode export let profile: ReputationProof | null = null; @@ -20,6 +25,7 @@ export let source_explorer_url: string; export let onSourceAdded: ((txId: string) => void) | null = null; export let hash: Writable | undefined = undefined; + export let fixedHashFunctionId: string = "blake2b256"; /** When false, skip automatic hash verification when adding a source. */ export let hashValidationEnabled: boolean = false; @@ -32,7 +38,7 @@ const baseClasses = "bg-card p-6 rounded-lg border"; let newFileHash = ""; - let hashFunctionId = ""; + let effectiveHashFunctionId = ""; let isAddingSource = false; let addError: string | null = null; @@ -66,18 +72,14 @@ let contentHashValidationError: string | null = null; let rawHashValidationError: string | null = null; - $: { - if (hashSelectValue === "__custom__") { - hashFunctionId = customHashFunctionId; - } else { - hashFunctionId = hashSelectValue; - } - } + $: effectiveHashFunctionId = isHashFixed + ? (fixedHashFunctionId.trim() || "blake2b256") + : (hashSelectValue === "__custom__" ? customHashFunctionId : hashSelectValue); // Validate file hash when it changes $: { - if (newFileHash.trim() && hashSelectValue && hashSelectValue !== "__custom__") { - fileHashValidationError = validateHash(newFileHash.trim(), hashSelectValue); + if (newFileHash.trim() && effectiveHashFunctionId) { + fileHashValidationError = validateHash(newFileHash.trim(), effectiveHashFunctionId); } else if (newFileHash.trim() && hashSelectValue === "__custom__" && customHashFunctionId) { fileHashValidationError = validateHash(newFileHash.trim(), "__custom__"); } else { @@ -87,8 +89,11 @@ // Validate content hash when it changes $: { - if (entryContentHash.trim() && hashSelectValue && hashSelectValue !== "__custom__") { - contentHashValidationError = validateHash(entryContentHash.trim(), hashSelectValue); + if (entryContentHash.trim() && (entryHashFunctionId.trim() || effectiveHashFunctionId)) { + contentHashValidationError = validateHash( + entryContentHash.trim(), + entryHashFunctionId.trim() || effectiveHashFunctionId, + ); } else { contentHashValidationError = null; } @@ -139,9 +144,12 @@ if (pHashFunctionId) { // Match against known hash algorithms in the dropdown - const knownOption = HASH_OPTIONS.find(o => o.value === pHashFunctionId); + const normalizedHashFunctionId = normalizeHashAlgorithmId(pHashFunctionId); + const knownOption = HASH_OPTIONS.find( + (o) => o.value === normalizedHashFunctionId, + ); if (knownOption && knownOption.value !== "__custom__") { - hashSelectValue = pHashFunctionId; + hashSelectValue = knownOption.value; } else { // Not a known short label — treat as custom hash function ID hashSelectValue = "__custom__"; @@ -178,7 +186,7 @@ const url = entryUrlLink.trim(); if (!url) return; - const algorithmId = entryHashFunctionId || hashFunctionId; + const algorithmId = entryHashFunctionId || effectiveHashFunctionId; if (!algorithmId || algorithmId === '__custom__') { hashError = "Cannot verify: select a known hash algorithm first"; return; @@ -210,7 +218,7 @@ const input = event.target as HTMLInputElement; if (!input.files || input.files.length === 0) return; - const algorithmId = entryHashFunctionId || hashFunctionId; + const algorithmId = entryHashFunctionId || effectiveHashFunctionId; if (!algorithmId || algorithmId === '__custom__') { hashError = "Cannot verify: select a known hash algorithm first"; return; @@ -246,7 +254,7 @@ // If hash validation is enabled and hash is fixed, validate the URL content before adding if (hashValidationEnabled && isHashFixed && entryUrlLink.trim()) { - const algorithmId = entryHashFunctionId || hashFunctionId; + const algorithmId = entryHashFunctionId || effectiveHashFunctionId; if (!algorithmId || algorithmId === '__custom__') { hashError = "Cannot verify: select a known hash algorithm first"; return; @@ -294,7 +302,7 @@ const tx = await addFileSource( newFileHash.trim(), - hashFunctionId.trim(), + effectiveHashFunctionId.trim(), entry, profile, explorerUri, @@ -303,7 +311,6 @@ if (!isHashFixed) { updateHash(""); } - hashFunctionId = ""; hashSelectValue = ""; customHashFunctionId = ""; entryHashFunctionId = ""; @@ -426,29 +433,42 @@
- - {#if hashSelectValue === "__custom__"} + {#if isHashFixed} +

+ Fixed Hash Mode uses `{effectiveHashFunctionId}` ({getAlgorithmLabel(effectiveHashFunctionId)}) for the anchor hash. +

+ {:else} + + {#if hashSelectValue === "__custom__"} + + {/if} +

+ Identifies the hash algorithm used. Per convention: output of HASH(EMPTY_INPUT). +

{/if} -

- Identifies the hash algorithm used. Per convention: output of HASH(EMPTY_INPUT). -

@@ -516,7 +536,7 @@ type="text" id="entry-hash-fn" bind:value={entryHashFunctionId} - placeholder="Hash function identifier" + placeholder={`Optional. Defaults to ${effectiveHashFunctionId}`} class="font-mono text-xs" disabled={!hasProfile} /> diff --git a/src/lib/ergo/hashUtils.ts b/src/lib/ergo/hashUtils.ts index 47464fb..693564b 100644 --- a/src/lib/ergo/hashUtils.ts +++ b/src/lib/ergo/hashUtils.ts @@ -29,12 +29,25 @@ function uint8ArrayToHex(array: Uint8Array): string { return [...array].map(x => x.toString(16).padStart(2, '0')).join(''); } +/** + * Normalize supported aliases to the internal algorithm identifiers used by the UI. + */ +export function normalizeHashAlgorithmId(algorithmId: string): string { + const normalized = algorithmId.trim().toLowerCase(); + switch (normalized) { + case 'blake2b256': + return 'blake2b'; + default: + return normalized; + } +} + /** * Compute a hash of the given data using the specified algorithm. * @returns hex string of the hash, or null if algorithm is unknown/custom */ export function computeHash(data: Uint8Array, algorithmId: string): string | null { - switch (algorithmId) { + switch (normalizeHashAlgorithmId(algorithmId)) { case 'sha256': return uint8ArrayToHex(sha256(data)); case 'sha3_256': @@ -65,7 +78,7 @@ export function validateHash(hash: string, algorithmId: string): string | null { return 'Hash must contain only hexadecimal characters (0-9, a-f)'; } - switch (algorithmId) { + switch (normalizeHashAlgorithmId(algorithmId)) { case 'sha3_256': case 'sha256': case 'keccak256': @@ -93,6 +106,10 @@ export function validateHash(hash: string, algorithmId: string): string | null { * Get the human-readable label for an algorithm ID. */ export function getAlgorithmLabel(algorithmId: string): string { + if (normalizeHashAlgorithmId(algorithmId) === 'blake2b') { + return 'Blake2b-256'; + } + const found = HASH_OPTIONS.find(o => o.value === algorithmId); return found ? found.label : algorithmId; } @@ -115,7 +132,8 @@ export async function downloadAndHash( isChunked: boolean = false, onProgress?: (current: number, total: number) => void ): Promise { - if (algorithmId === '__custom__' || !HASH_ALGORITHMS.some(a => a.value === algorithmId)) { + const normalizedAlgorithmId = normalizeHashAlgorithmId(algorithmId); + if (normalizedAlgorithmId === '__custom__' || !HASH_ALGORITHMS.some(a => a.value === normalizedAlgorithmId)) { throw new Error('Cannot verify: custom hash algorithm'); } @@ -169,7 +187,7 @@ export async function downloadAndHash( data = new Uint8Array(buffer); } - const result = computeHash(data, algorithmId); + const result = computeHash(data, normalizedAlgorithmId); if (result === null) { throw new Error(`Cannot verify: unsupported hash algorithm "${algorithmId}"`); } From 5b1bdd4b03a36ada09e2f025fb2a628cfafc3743 Mon Sep 17 00:00:00 2001 From: 0xf965 <40121100+0xf965@users.noreply.github.com> Date: Wed, 8 Apr 2026 08:25:41 +0200 Subject: [PATCH 10/23] fixed hash function usage --- LIBRARY.md | 7 +- README.md | 17 +- dist/components/AddSource.svelte | 157 ----- dist/components/AddSource.svelte.d.ts | 21 - dist/components/DownloadSourceCard.svelte | 210 ------- .../components/DownloadSourceCard.svelte.d.ts | 27 - dist/components/FileCard.svelte | 291 --------- dist/components/FileCard.svelte.d.ts | 30 - dist/components/FileSourceCard.svelte | 530 ---------------- dist/components/FileSourceCard.svelte.d.ts | 28 - dist/components/FileSourceCreation.svelte | 576 ------------------ .../components/FileSourceCreation.svelte.d.ts | 28 - dist/components/ProfileCard.svelte | 157 ----- dist/components/ProfileCard.svelte.d.ts | 23 - dist/components/ProfileModal.svelte | 298 --------- dist/components/ProfileModal.svelte.d.ts | 24 - dist/components/ProfileSourceGroup.svelte | 97 --- .../components/ProfileSourceGroup.svelte.d.ts | 24 - dist/components/ProfileSources.svelte | 296 --------- dist/components/ProfileSources.svelte.d.ts | 37 -- dist/components/SearchByHash.svelte | 266 -------- dist/components/SearchByHash.svelte.d.ts | 31 - dist/components/SettingsModal.svelte | 194 ------ dist/components/SettingsModal.svelte.d.ts | 30 - dist/components/Timeline.svelte | 225 ------- dist/components/Timeline.svelte.d.ts | 22 - .../ui/alert/alert-description.svelte | 8 - .../ui/alert/alert-description.svelte.d.ts | 19 - dist/components/ui/alert/alert-title.svelte | 13 - .../ui/alert/alert-title.svelte.d.ts | 22 - dist/components/ui/alert/alert.svelte | 10 - dist/components/ui/alert/alert.svelte.d.ts | 22 - dist/components/ui/alert/index.d.ts | 43 -- dist/components/ui/alert/index.js | 19 - dist/components/ui/badge/badge.svelte | 16 - dist/components/ui/badge/badge.svelte.d.ts | 23 - dist/components/ui/badge/index.d.ts | 53 -- dist/components/ui/badge/index.js | 16 - dist/components/ui/button/button.svelte | 20 - dist/components/ui/button/button.svelte.d.ts | 16 - dist/components/ui/button/index.d.ts | 117 ---- dist/components/ui/button/index.js | 28 - .../ui/calendar/calendar-cell.svelte | 17 - .../ui/calendar/calendar-cell.svelte.d.ts | 19 - .../ui/calendar/calendar-day.svelte | 37 -- .../ui/calendar/calendar-day.svelte.d.ts | 38 -- .../ui/calendar/calendar-grid-body.svelte | 9 - .../calendar/calendar-grid-body.svelte.d.ts | 19 - .../ui/calendar/calendar-grid-head.svelte | 9 - .../calendar/calendar-grid-head.svelte.d.ts | 19 - .../ui/calendar/calendar-grid-row.svelte | 9 - .../ui/calendar/calendar-grid-row.svelte.d.ts | 19 - .../ui/calendar/calendar-grid.svelte | 9 - .../ui/calendar/calendar-grid.svelte.d.ts | 19 - .../ui/calendar/calendar-head-cell.svelte | 12 - .../calendar/calendar-head-cell.svelte.d.ts | 19 - .../ui/calendar/calendar-header.svelte | 12 - .../ui/calendar/calendar-header.svelte.d.ts | 19 - .../ui/calendar/calendar-heading.svelte | 15 - .../ui/calendar/calendar-heading.svelte.d.ts | 21 - .../ui/calendar/calendar-months.svelte | 11 - .../ui/calendar/calendar-months.svelte.d.ts | 19 - .../ui/calendar/calendar-next-button.svelte | 22 - .../calendar/calendar-next-button.svelte.d.ts | 30 - .../ui/calendar/calendar-prev-button.svelte | 22 - .../calendar/calendar-prev-button.svelte.d.ts | 30 - dist/components/ui/calendar/calendar.svelte | 52 -- .../ui/calendar/calendar.svelte.d.ts | 13 - dist/components/ui/calendar/index.d.ts | 14 - dist/components/ui/calendar/index.js | 16 - dist/components/ui/card/card-content.svelte | 8 - .../ui/card/card-content.svelte.d.ts | 19 - .../ui/card/card-description.svelte | 8 - .../ui/card/card-description.svelte.d.ts | 19 - dist/components/ui/card/card-footer.svelte | 8 - .../ui/card/card-footer.svelte.d.ts | 19 - dist/components/ui/card/card-header.svelte | 8 - .../ui/card/card-header.svelte.d.ts | 19 - dist/components/ui/card/card-title.svelte | 13 - .../components/ui/card/card-title.svelte.d.ts | 22 - dist/components/ui/card/card.svelte | 11 - dist/components/ui/card/card.svelte.d.ts | 19 - dist/components/ui/card/index.d.ts | 8 - dist/components/ui/card/index.js | 9 - .../ui/carousel/carousel-content.svelte | 29 - .../ui/carousel/carousel-content.svelte.d.ts | 19 - .../ui/carousel/carousel-item.svelte | 20 - .../ui/carousel/carousel-item.svelte.d.ts | 19 - .../ui/carousel/carousel-next.svelte | 31 - .../ui/carousel/carousel-next.svelte.d.ts | 17 - .../ui/carousel/carousel-previous.svelte | 31 - .../ui/carousel/carousel-previous.svelte.d.ts | 17 - dist/components/ui/carousel/carousel.svelte | 90 --- .../ui/carousel/carousel.svelte.d.ts | 22 - dist/components/ui/carousel/context.d.ts | 32 - dist/components/ui/carousel/context.js | 12 - dist/components/ui/carousel/index.d.ts | 5 - dist/components/ui/carousel/index.js | 5 - dist/components/ui/checkbox/checkbox.svelte | 30 - .../ui/checkbox/checkbox.svelte.d.ts | 13 - dist/components/ui/checkbox/index.d.ts | 2 - dist/components/ui/checkbox/index.js | 4 - .../ui/dialog/dialog-content.svelte | 32 - .../ui/dialog/dialog-content.svelte.d.ts | 19 - .../ui/dialog/dialog-description.svelte | 12 - .../ui/dialog/dialog-description.svelte.d.ts | 19 - .../components/ui/dialog/dialog-footer.svelte | 11 - .../ui/dialog/dialog-footer.svelte.d.ts | 19 - .../components/ui/dialog/dialog-header.svelte | 8 - .../ui/dialog/dialog-header.svelte.d.ts | 19 - .../ui/dialog/dialog-overlay.svelte | 17 - .../ui/dialog/dialog-overlay.svelte.d.ts | 17 - .../components/ui/dialog/dialog-portal.svelte | 6 - .../ui/dialog/dialog-portal.svelte.d.ts | 19 - dist/components/ui/dialog/dialog-title.svelte | 12 - .../ui/dialog/dialog-title.svelte.d.ts | 19 - dist/components/ui/dialog/index.d.ts | 12 - dist/components/ui/dialog/index.js | 14 - .../dropdown-menu-checkbox-item.svelte | 30 - .../dropdown-menu-checkbox-item.svelte.d.ts | 15 - .../dropdown-menu-content.svelte | 22 - .../dropdown-menu-content.svelte.d.ts | 15 - .../dropdown-menu/dropdown-menu-item.svelte | 24 - .../dropdown-menu-item.svelte.d.ts | 17 - .../dropdown-menu/dropdown-menu-label.svelte | 13 - .../dropdown-menu-label.svelte.d.ts | 23 - .../dropdown-menu-radio-group.svelte | 7 - .../dropdown-menu-radio-group.svelte.d.ts | 19 - .../dropdown-menu-radio-item.svelte | 30 - .../dropdown-menu-radio-item.svelte.d.ts | 15 - .../dropdown-menu-separator.svelte | 10 - .../dropdown-menu-separator.svelte.d.ts | 17 - .../dropdown-menu-shortcut.svelte | 8 - .../dropdown-menu-shortcut.svelte.d.ts | 19 - .../dropdown-menu-sub-content.svelte | 25 - .../dropdown-menu-sub-content.svelte.d.ts | 15 - .../dropdown-menu-sub-trigger.svelte | 25 - .../dropdown-menu-sub-trigger.svelte.d.ts | 21 - dist/components/ui/dropdown-menu/index.d.ts | 16 - dist/components/ui/dropdown-menu/index.js | 18 - dist/components/ui/form/form-button.svelte | 6 - .../ui/form/form-button.svelte.d.ts | 15 - .../ui/form/form-description.svelte | 13 - .../ui/form/form-description.svelte.d.ts | 25 - .../ui/form/form-element-field.svelte | 15 - .../ui/form/form-element-field.svelte.d.ts | 24 - .../ui/form/form-field-errors.svelte | 20 - .../ui/form/form-field-errors.svelte.d.ts | 36 -- dist/components/ui/form/form-field.svelte | 15 - .../components/ui/form/form-field.svelte.d.ts | 24 - dist/components/ui/form/form-fieldset.svelte | 21 - .../ui/form/form-fieldset.svelte.d.ts | 23 - dist/components/ui/form/form-label.svelte | 11 - .../components/ui/form/form-label.svelte.d.ts | 21 - dist/components/ui/form/form-legend.svelte | 13 - .../ui/form/form-legend.svelte.d.ts | 24 - dist/components/ui/form/index.d.ts | 11 - dist/components/ui/form/index.js | 13 - dist/components/ui/input/index.d.ts | 23 - dist/components/ui/input/index.js | 4 - dist/components/ui/input/input.svelte | 32 - dist/components/ui/input/input.svelte.d.ts | 14 - dist/components/ui/label/index.d.ts | 2 - dist/components/ui/label/index.js | 4 - dist/components/ui/label/label.svelte | 16 - dist/components/ui/label/label.svelte.d.ts | 15 - dist/components/ui/menubar/index.d.ts | 17 - dist/components/ui/menubar/index.js | 19 - .../ui/menubar/menubar-checkbox-item.svelte | 30 - .../menubar/menubar-checkbox-item.svelte.d.ts | 15 - .../ui/menubar/menubar-content.svelte | 28 - .../ui/menubar/menubar-content.svelte.d.ts | 15 - .../components/ui/menubar/menubar-item.svelte | 24 - .../ui/menubar/menubar-item.svelte.d.ts | 17 - .../ui/menubar/menubar-label.svelte | 13 - .../ui/menubar/menubar-label.svelte.d.ts | 23 - .../ui/menubar/menubar-radio-item.svelte | 30 - .../ui/menubar/menubar-radio-item.svelte.d.ts | 15 - .../ui/menubar/menubar-separator.svelte | 7 - .../ui/menubar/menubar-separator.svelte.d.ts | 17 - .../ui/menubar/menubar-shortcut.svelte | 11 - .../ui/menubar/menubar-shortcut.svelte.d.ts | 19 - .../ui/menubar/menubar-sub-content.svelte | 22 - .../menubar/menubar-sub-content.svelte.d.ts | 15 - .../ui/menubar/menubar-sub-trigger.svelte | 25 - .../menubar/menubar-sub-trigger.svelte.d.ts | 21 - .../ui/menubar/menubar-trigger.svelte | 18 - .../ui/menubar/menubar-trigger.svelte.d.ts | 15 - dist/components/ui/menubar/menubar.svelte | 12 - .../components/ui/menubar/menubar.svelte.d.ts | 19 - dist/components/ui/progress/index.d.ts | 2 - dist/components/ui/progress/index.js | 4 - dist/components/ui/progress/progress.svelte | 22 - .../ui/progress/progress.svelte.d.ts | 17 - dist/components/ui/resizable/index.d.ts | 4 - dist/components/ui/resizable/index.js | 6 - .../ui/resizable/resizable-handle.svelte | 22 - .../ui/resizable/resizable-handle.svelte.d.ts | 23 - .../ui/resizable/resizable-pane-group.svelte | 18 - .../resizable-pane-group.svelte.d.ts | 19 - dist/components/ui/scroll-area/index.d.ts | 3 - dist/components/ui/scroll-area/index.js | 5 - .../scroll-area/scroll-area-scrollbar.svelte | 21 - .../scroll-area-scrollbar.svelte.d.ts | 25 - .../ui/scroll-area/scroll-area.svelte | 24 - .../ui/scroll-area/scroll-area.svelte.d.ts | 29 - dist/components/ui/select/index.d.ts | 11 - dist/components/ui/select/index.js | 13 - .../ui/select/select-content.svelte | 33 - .../ui/select/select-content.svelte.d.ts | 15 - dist/components/ui/select/select-item.svelte | 35 -- .../ui/select/select-item.svelte.d.ts | 15 - dist/components/ui/select/select-label.svelte | 12 - .../ui/select/select-label.svelte.d.ts | 19 - .../ui/select/select-separator.svelte | 7 - .../ui/select/select-separator.svelte.d.ts | 17 - .../ui/select/select-trigger.svelte | 22 - .../ui/select/select-trigger.svelte.d.ts | 31 - dist/components/ui/textarea/index.d.ts | 19 - dist/components/ui/textarea/index.js | 4 - dist/components/ui/textarea/textarea.svelte | 28 - .../ui/textarea/textarea.svelte.d.ts | 14 - dist/contracts/digital_public_good.es | 80 --- dist/contracts/reputation_proof.es | 200 ------ dist/ergo/envs.d.ts | 13 - dist/ergo/envs.js | 21 - dist/ergo/hashUtils.d.ts | 81 --- dist/ergo/hashUtils.js | 169 ----- dist/ergo/object.d.ts | 2 - dist/ergo/object.js | 1 - dist/ergo/sourceFetch.d.ts | 44 -- dist/ergo/sourceFetch.js | 292 --------- dist/ergo/sourceObject.d.ts | 171 ------ dist/ergo/sourceObject.js | 204 ------- dist/ergo/sourceStore.d.ts | 48 -- dist/ergo/sourceStore.js | 148 ----- dist/ergo/store.d.ts | 89 --- dist/ergo/store.js | 96 --- dist/ergo/utils.d.ts | 44 -- dist/ergo/utils.js | 193 ------ dist/index.d.ts | 20 - dist/index.js | 26 - dist/utils.d.ts | 11 - dist/utils.js | 38 -- src/lib/components/AddSource.svelte | 8 +- src/lib/components/FileSourceCreation.svelte | 9 +- src/lib/components/SearchByHash.svelte | 8 +- src/lib/ergo/hashUtils.ts | 84 ++- src/lib/index.ts | 6 +- 249 files changed, 94 insertions(+), 9326 deletions(-) delete mode 100644 dist/components/AddSource.svelte delete mode 100644 dist/components/AddSource.svelte.d.ts delete mode 100644 dist/components/DownloadSourceCard.svelte delete mode 100644 dist/components/DownloadSourceCard.svelte.d.ts delete mode 100644 dist/components/FileCard.svelte delete mode 100644 dist/components/FileCard.svelte.d.ts delete mode 100644 dist/components/FileSourceCard.svelte delete mode 100644 dist/components/FileSourceCard.svelte.d.ts delete mode 100644 dist/components/FileSourceCreation.svelte delete mode 100644 dist/components/FileSourceCreation.svelte.d.ts delete mode 100644 dist/components/ProfileCard.svelte delete mode 100644 dist/components/ProfileCard.svelte.d.ts delete mode 100644 dist/components/ProfileModal.svelte delete mode 100644 dist/components/ProfileModal.svelte.d.ts delete mode 100644 dist/components/ProfileSourceGroup.svelte delete mode 100644 dist/components/ProfileSourceGroup.svelte.d.ts delete mode 100644 dist/components/ProfileSources.svelte delete mode 100644 dist/components/ProfileSources.svelte.d.ts delete mode 100644 dist/components/SearchByHash.svelte delete mode 100644 dist/components/SearchByHash.svelte.d.ts delete mode 100644 dist/components/SettingsModal.svelte delete mode 100644 dist/components/SettingsModal.svelte.d.ts delete mode 100644 dist/components/Timeline.svelte delete mode 100644 dist/components/Timeline.svelte.d.ts delete mode 100644 dist/components/ui/alert/alert-description.svelte delete mode 100644 dist/components/ui/alert/alert-description.svelte.d.ts delete mode 100644 dist/components/ui/alert/alert-title.svelte delete mode 100644 dist/components/ui/alert/alert-title.svelte.d.ts delete mode 100644 dist/components/ui/alert/alert.svelte delete mode 100644 dist/components/ui/alert/alert.svelte.d.ts delete mode 100644 dist/components/ui/alert/index.d.ts delete mode 100644 dist/components/ui/alert/index.js delete mode 100644 dist/components/ui/badge/badge.svelte delete mode 100644 dist/components/ui/badge/badge.svelte.d.ts delete mode 100644 dist/components/ui/badge/index.d.ts delete mode 100644 dist/components/ui/badge/index.js delete mode 100644 dist/components/ui/button/button.svelte delete mode 100644 dist/components/ui/button/button.svelte.d.ts delete mode 100644 dist/components/ui/button/index.d.ts delete mode 100644 dist/components/ui/button/index.js delete mode 100644 dist/components/ui/calendar/calendar-cell.svelte delete mode 100644 dist/components/ui/calendar/calendar-cell.svelte.d.ts delete mode 100644 dist/components/ui/calendar/calendar-day.svelte delete mode 100644 dist/components/ui/calendar/calendar-day.svelte.d.ts delete mode 100644 dist/components/ui/calendar/calendar-grid-body.svelte delete mode 100644 dist/components/ui/calendar/calendar-grid-body.svelte.d.ts delete mode 100644 dist/components/ui/calendar/calendar-grid-head.svelte delete mode 100644 dist/components/ui/calendar/calendar-grid-head.svelte.d.ts delete mode 100644 dist/components/ui/calendar/calendar-grid-row.svelte delete mode 100644 dist/components/ui/calendar/calendar-grid-row.svelte.d.ts delete mode 100644 dist/components/ui/calendar/calendar-grid.svelte delete mode 100644 dist/components/ui/calendar/calendar-grid.svelte.d.ts delete mode 100644 dist/components/ui/calendar/calendar-head-cell.svelte delete mode 100644 dist/components/ui/calendar/calendar-head-cell.svelte.d.ts delete mode 100644 dist/components/ui/calendar/calendar-header.svelte delete mode 100644 dist/components/ui/calendar/calendar-header.svelte.d.ts delete mode 100644 dist/components/ui/calendar/calendar-heading.svelte delete mode 100644 dist/components/ui/calendar/calendar-heading.svelte.d.ts delete mode 100644 dist/components/ui/calendar/calendar-months.svelte delete mode 100644 dist/components/ui/calendar/calendar-months.svelte.d.ts delete mode 100644 dist/components/ui/calendar/calendar-next-button.svelte delete mode 100644 dist/components/ui/calendar/calendar-next-button.svelte.d.ts delete mode 100644 dist/components/ui/calendar/calendar-prev-button.svelte delete mode 100644 dist/components/ui/calendar/calendar-prev-button.svelte.d.ts delete mode 100644 dist/components/ui/calendar/calendar.svelte delete mode 100644 dist/components/ui/calendar/calendar.svelte.d.ts delete mode 100644 dist/components/ui/calendar/index.d.ts delete mode 100644 dist/components/ui/calendar/index.js delete mode 100644 dist/components/ui/card/card-content.svelte delete mode 100644 dist/components/ui/card/card-content.svelte.d.ts delete mode 100644 dist/components/ui/card/card-description.svelte delete mode 100644 dist/components/ui/card/card-description.svelte.d.ts delete mode 100644 dist/components/ui/card/card-footer.svelte delete mode 100644 dist/components/ui/card/card-footer.svelte.d.ts delete mode 100644 dist/components/ui/card/card-header.svelte delete mode 100644 dist/components/ui/card/card-header.svelte.d.ts delete mode 100644 dist/components/ui/card/card-title.svelte delete mode 100644 dist/components/ui/card/card-title.svelte.d.ts delete mode 100644 dist/components/ui/card/card.svelte delete mode 100644 dist/components/ui/card/card.svelte.d.ts delete mode 100644 dist/components/ui/card/index.d.ts delete mode 100644 dist/components/ui/card/index.js delete mode 100644 dist/components/ui/carousel/carousel-content.svelte delete mode 100644 dist/components/ui/carousel/carousel-content.svelte.d.ts delete mode 100644 dist/components/ui/carousel/carousel-item.svelte delete mode 100644 dist/components/ui/carousel/carousel-item.svelte.d.ts delete mode 100644 dist/components/ui/carousel/carousel-next.svelte delete mode 100644 dist/components/ui/carousel/carousel-next.svelte.d.ts delete mode 100644 dist/components/ui/carousel/carousel-previous.svelte delete mode 100644 dist/components/ui/carousel/carousel-previous.svelte.d.ts delete mode 100644 dist/components/ui/carousel/carousel.svelte delete mode 100644 dist/components/ui/carousel/carousel.svelte.d.ts delete mode 100644 dist/components/ui/carousel/context.d.ts delete mode 100644 dist/components/ui/carousel/context.js delete mode 100644 dist/components/ui/carousel/index.d.ts delete mode 100644 dist/components/ui/carousel/index.js delete mode 100644 dist/components/ui/checkbox/checkbox.svelte delete mode 100644 dist/components/ui/checkbox/checkbox.svelte.d.ts delete mode 100644 dist/components/ui/checkbox/index.d.ts delete mode 100644 dist/components/ui/checkbox/index.js delete mode 100644 dist/components/ui/dialog/dialog-content.svelte delete mode 100644 dist/components/ui/dialog/dialog-content.svelte.d.ts delete mode 100644 dist/components/ui/dialog/dialog-description.svelte delete mode 100644 dist/components/ui/dialog/dialog-description.svelte.d.ts delete mode 100644 dist/components/ui/dialog/dialog-footer.svelte delete mode 100644 dist/components/ui/dialog/dialog-footer.svelte.d.ts delete mode 100644 dist/components/ui/dialog/dialog-header.svelte delete mode 100644 dist/components/ui/dialog/dialog-header.svelte.d.ts delete mode 100644 dist/components/ui/dialog/dialog-overlay.svelte delete mode 100644 dist/components/ui/dialog/dialog-overlay.svelte.d.ts delete mode 100644 dist/components/ui/dialog/dialog-portal.svelte delete mode 100644 dist/components/ui/dialog/dialog-portal.svelte.d.ts delete mode 100644 dist/components/ui/dialog/dialog-title.svelte delete mode 100644 dist/components/ui/dialog/dialog-title.svelte.d.ts delete mode 100644 dist/components/ui/dialog/index.d.ts delete mode 100644 dist/components/ui/dialog/index.js delete mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte delete mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts delete mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-content.svelte delete mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-content.svelte.d.ts delete mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-item.svelte delete mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-item.svelte.d.ts delete mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-label.svelte delete mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-label.svelte.d.ts delete mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte delete mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte.d.ts delete mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte delete mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte.d.ts delete mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte delete mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte.d.ts delete mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte delete mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte.d.ts delete mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte delete mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte.d.ts delete mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte delete mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte.d.ts delete mode 100644 dist/components/ui/dropdown-menu/index.d.ts delete mode 100644 dist/components/ui/dropdown-menu/index.js delete mode 100644 dist/components/ui/form/form-button.svelte delete mode 100644 dist/components/ui/form/form-button.svelte.d.ts delete mode 100644 dist/components/ui/form/form-description.svelte delete mode 100644 dist/components/ui/form/form-description.svelte.d.ts delete mode 100644 dist/components/ui/form/form-element-field.svelte delete mode 100644 dist/components/ui/form/form-element-field.svelte.d.ts delete mode 100644 dist/components/ui/form/form-field-errors.svelte delete mode 100644 dist/components/ui/form/form-field-errors.svelte.d.ts delete mode 100644 dist/components/ui/form/form-field.svelte delete mode 100644 dist/components/ui/form/form-field.svelte.d.ts delete mode 100644 dist/components/ui/form/form-fieldset.svelte delete mode 100644 dist/components/ui/form/form-fieldset.svelte.d.ts delete mode 100644 dist/components/ui/form/form-label.svelte delete mode 100644 dist/components/ui/form/form-label.svelte.d.ts delete mode 100644 dist/components/ui/form/form-legend.svelte delete mode 100644 dist/components/ui/form/form-legend.svelte.d.ts delete mode 100644 dist/components/ui/form/index.d.ts delete mode 100644 dist/components/ui/form/index.js delete mode 100644 dist/components/ui/input/index.d.ts delete mode 100644 dist/components/ui/input/index.js delete mode 100644 dist/components/ui/input/input.svelte delete mode 100644 dist/components/ui/input/input.svelte.d.ts delete mode 100644 dist/components/ui/label/index.d.ts delete mode 100644 dist/components/ui/label/index.js delete mode 100644 dist/components/ui/label/label.svelte delete mode 100644 dist/components/ui/label/label.svelte.d.ts delete mode 100644 dist/components/ui/menubar/index.d.ts delete mode 100644 dist/components/ui/menubar/index.js delete mode 100644 dist/components/ui/menubar/menubar-checkbox-item.svelte delete mode 100644 dist/components/ui/menubar/menubar-checkbox-item.svelte.d.ts delete mode 100644 dist/components/ui/menubar/menubar-content.svelte delete mode 100644 dist/components/ui/menubar/menubar-content.svelte.d.ts delete mode 100644 dist/components/ui/menubar/menubar-item.svelte delete mode 100644 dist/components/ui/menubar/menubar-item.svelte.d.ts delete mode 100644 dist/components/ui/menubar/menubar-label.svelte delete mode 100644 dist/components/ui/menubar/menubar-label.svelte.d.ts delete mode 100644 dist/components/ui/menubar/menubar-radio-item.svelte delete mode 100644 dist/components/ui/menubar/menubar-radio-item.svelte.d.ts delete mode 100644 dist/components/ui/menubar/menubar-separator.svelte delete mode 100644 dist/components/ui/menubar/menubar-separator.svelte.d.ts delete mode 100644 dist/components/ui/menubar/menubar-shortcut.svelte delete mode 100644 dist/components/ui/menubar/menubar-shortcut.svelte.d.ts delete mode 100644 dist/components/ui/menubar/menubar-sub-content.svelte delete mode 100644 dist/components/ui/menubar/menubar-sub-content.svelte.d.ts delete mode 100644 dist/components/ui/menubar/menubar-sub-trigger.svelte delete mode 100644 dist/components/ui/menubar/menubar-sub-trigger.svelte.d.ts delete mode 100644 dist/components/ui/menubar/menubar-trigger.svelte delete mode 100644 dist/components/ui/menubar/menubar-trigger.svelte.d.ts delete mode 100644 dist/components/ui/menubar/menubar.svelte delete mode 100644 dist/components/ui/menubar/menubar.svelte.d.ts delete mode 100644 dist/components/ui/progress/index.d.ts delete mode 100644 dist/components/ui/progress/index.js delete mode 100644 dist/components/ui/progress/progress.svelte delete mode 100644 dist/components/ui/progress/progress.svelte.d.ts delete mode 100644 dist/components/ui/resizable/index.d.ts delete mode 100644 dist/components/ui/resizable/index.js delete mode 100644 dist/components/ui/resizable/resizable-handle.svelte delete mode 100644 dist/components/ui/resizable/resizable-handle.svelte.d.ts delete mode 100644 dist/components/ui/resizable/resizable-pane-group.svelte delete mode 100644 dist/components/ui/resizable/resizable-pane-group.svelte.d.ts delete mode 100644 dist/components/ui/scroll-area/index.d.ts delete mode 100644 dist/components/ui/scroll-area/index.js delete mode 100644 dist/components/ui/scroll-area/scroll-area-scrollbar.svelte delete mode 100644 dist/components/ui/scroll-area/scroll-area-scrollbar.svelte.d.ts delete mode 100644 dist/components/ui/scroll-area/scroll-area.svelte delete mode 100644 dist/components/ui/scroll-area/scroll-area.svelte.d.ts delete mode 100644 dist/components/ui/select/index.d.ts delete mode 100644 dist/components/ui/select/index.js delete mode 100644 dist/components/ui/select/select-content.svelte delete mode 100644 dist/components/ui/select/select-content.svelte.d.ts delete mode 100644 dist/components/ui/select/select-item.svelte delete mode 100644 dist/components/ui/select/select-item.svelte.d.ts delete mode 100644 dist/components/ui/select/select-label.svelte delete mode 100644 dist/components/ui/select/select-label.svelte.d.ts delete mode 100644 dist/components/ui/select/select-separator.svelte delete mode 100644 dist/components/ui/select/select-separator.svelte.d.ts delete mode 100644 dist/components/ui/select/select-trigger.svelte delete mode 100644 dist/components/ui/select/select-trigger.svelte.d.ts delete mode 100644 dist/components/ui/textarea/index.d.ts delete mode 100644 dist/components/ui/textarea/index.js delete mode 100644 dist/components/ui/textarea/textarea.svelte delete mode 100644 dist/components/ui/textarea/textarea.svelte.d.ts delete mode 100644 dist/contracts/digital_public_good.es delete mode 100644 dist/contracts/reputation_proof.es delete mode 100644 dist/ergo/envs.d.ts delete mode 100644 dist/ergo/envs.js delete mode 100644 dist/ergo/hashUtils.d.ts delete mode 100644 dist/ergo/hashUtils.js delete mode 100644 dist/ergo/object.d.ts delete mode 100644 dist/ergo/object.js delete mode 100644 dist/ergo/sourceFetch.d.ts delete mode 100644 dist/ergo/sourceFetch.js delete mode 100644 dist/ergo/sourceObject.d.ts delete mode 100644 dist/ergo/sourceObject.js delete mode 100644 dist/ergo/sourceStore.d.ts delete mode 100644 dist/ergo/sourceStore.js delete mode 100644 dist/ergo/store.d.ts delete mode 100644 dist/ergo/store.js delete mode 100644 dist/ergo/utils.d.ts delete mode 100644 dist/ergo/utils.js delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/utils.d.ts delete mode 100644 dist/utils.js diff --git a/LIBRARY.md b/LIBRARY.md index b9673c3..8d12996 100644 --- a/LIBRARY.md +++ b/LIBRARY.md @@ -60,7 +60,7 @@ Form for adding new file sources to the network. It supports two modes: a "free" - `explorerUri: string` - Ergo Explorer API endpoint. - `source_explorer_url: string` - Base URL for the source explorer (used for deep links). - `hash?: Writable` - Optional. A Svelte writable store for the file hash. -- `fixedHashFunctionId?: string` - Optional. Hash algorithm for the fixed anchor hash. In fixed mode the default is `blake2b256`. +- `fixedHashFunctionId?: string` - Optional. Hash algorithm ID for the fixed anchor hash. Use the canonical `HASH("")` value. In fixed mode the default is Blake2b-256: `0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8`. - `title?: string` - Optional. Custom title for the component (default: "Add New File Source"). - `onSourceAdded?: (txId: string) => void` - Callback when source is added. @@ -71,7 +71,8 @@ Form for adding new file sources to the network. It supports two modes: a "free" - The anchor hash function comes from `fixedHashFunctionId` instead of the form UI. - The "Compute hash from URL" button is hidden. - When clicking "Add Source", the component automatically downloads the file from the URL, calculates its hash, and verifies it matches the fixed hash before proceeding. - - Source-entry metadata such as content hash, content hash function id, and formats remain optional. + - If the source-entry hash function id is omitted, the component stores the same canonical algorithm id used by the fixed anchor hash. + - Source-entry metadata such as content hash and formats remain optional. - **Free Mode** (when `hash` store is empty or undefined): - User can provide the hash manually. - User can upload a local file to calculate its hash. @@ -99,7 +100,7 @@ Form for adding new file sources to the network. It supports two modes: a "free" {explorerUri} {source_explorer_url} hash={fileHashStore} - fixedHashFunctionId="blake2b256" + fixedHashFunctionId="0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8" title="Add Download Link" onSourceAdded={(tx) => console.log('Source added:', tx)} /> diff --git a/README.md b/README.md index 81d072b..cc00eb1 100644 --- a/README.md +++ b/README.md @@ -124,7 +124,7 @@ The "Add Source" form can be pre-filled using URL query parameters. This is usef | Parameter | Description | Example | |-----------|-------------|---------| | `fileHash` | Raw file hash digest (R5 anchor) | `a1b2c3...` (64 hex chars) | -| `hashFunctionId` | Hash algorithm ID (`sha3_256`, `blake2b`, `sha256`, `keccak256`, or custom) | `sha3_256` | +| `hashFunctionId` | Hash algorithm ID, defined as `HASH("")` for the selected algorithm | `a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a` | | `urlLink` | Download URL for the file | `https://example.com/file.tar.gz` | | `contentFormat` | Content format (extension or format box ID) | `.tar.gz` | | `contentHash` | Hash of the content at the URL | `d4e5f6...` (64 hex chars) | @@ -136,22 +136,22 @@ The "Add Source" form can be pre-filled using URL query parameters. This is usef **Basic source link:** ``` -https://your-app.com/?tab=add&fileHash=a1b2c3d4e5f6...&hashFunctionId=blake2b&urlLink=https://example.com/file.zip +https://your-app.com/?tab=add&fileHash=a1b2c3d4e5f6...&hashFunctionId=0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8&urlLink=https://example.com/file.zip ``` **Full source with content hash and format:** ``` -https://your-app.com/?tab=add&fileHash=a1b2c3d4...&hashFunctionId=sha3_256&urlLink=https://example.com/archive.tar.gz&contentFormat=.tar.gz&contentHash=d4e5f6a7... +https://your-app.com/?tab=add&fileHash=a1b2c3d4...&hashFunctionId=a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a&urlLink=https://example.com/archive.tar.gz&contentFormat=.tar.gz&contentHash=d4e5f6a7... ``` **Chunked file source:** ``` -https://your-app.com/?tab=add&fileHash=a1b2c3d4...&hashFunctionId=blake2b&urlLink=https://example.com/manifest&isChunked=true&contentFormat=.bin +https://your-app.com/?tab=add&fileHash=a1b2c3d4...&hashFunctionId=0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8&urlLink=https://example.com/manifest&isChunked=true&contentFormat=.bin ``` **With separate raw format (content ≠ raw):** ``` -https://your-app.com/?tab=add&fileHash=a1b2c3d4...&hashFunctionId=sha256&urlLink=https://example.com/file.tar.gz&contentFormat=.tar.gz&rawFormat=.bin&rawHash=e5f6a7b8... +https://your-app.com/?tab=add&fileHash=a1b2c3d4...&hashFunctionId=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855&urlLink=https://example.com/file.tar.gz&contentFormat=.tar.gz&rawFormat=.bin&rawHash=e5f6a7b8... ``` ### Example URLs @@ -166,7 +166,12 @@ https://reputation-systems.github.io/source-application?tab=add&fileHash=683626b - When `rawFormat` or `rawHash` is provided, the "Content is same as raw" checkbox is automatically unchecked. - When `isChunked=true`, the URL field label changes to "Manifest URL". -- If `hashFunctionId` doesn't match a known algorithm, it is treated as a custom hash function. +- Known built-in ids are: + - `SHA3-256`: `a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a` + - `Blake2b-256`: `0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8` + - `SHA-256`: `e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855` + - `Keccak-256`: `c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470` +- Legacy aliases such as `sha3_256`, `blake2b`, `blake2b256`, `sha256`, and `keccak256` are still accepted by the UI, but canonical ids are what should be sent and stored. - Parameters are read on component mount; changes to the URL after initial load don't re-trigger pre-fill. --- diff --git a/dist/components/AddSource.svelte b/dist/components/AddSource.svelte deleted file mode 100644 index 6facff8..0000000 --- a/dist/components/AddSource.svelte +++ /dev/null @@ -1,157 +0,0 @@ - - -
-

Add New File Source

- -
- -
- Security Warning: Always verify URLs before downloading. - Malicious actors may post harmful links. The URL you provide will be - publicly visible and immutable on the blockchain. -
-
- - {#if addError} -
-

{addError}

-
- {/if} - -
-
- - - {#if fileHashValidationError} -

{fileHashValidationError}

- {:else} -

- This is the unique identifier for the file. Users will search by - this hash. -

- {/if} -
- -
- - - {#if hashSelectValue === "__custom__"} - - {/if} -
- -
- - diff --git a/dist/components/ui/textarea/textarea.svelte.d.ts b/dist/components/ui/textarea/textarea.svelte.d.ts deleted file mode 100644 index 8fd0fb4..0000000 --- a/dist/components/ui/textarea/textarea.svelte.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { SvelteComponent } from "svelte"; -import type { HTMLTextareaAttributes } from "svelte/elements"; -import type { TextareaEvents } from "./index.js"; -declare const __propDef: { - props: HTMLTextareaAttributes; - slots: {}; - events: TextareaEvents; -}; -export type TextareaProps = typeof __propDef.props; -type TextareaEvents_ = typeof __propDef.events; -export { TextareaEvents_ as TextareaEvents }; -export type TextareaSlots = typeof __propDef.slots; -export default class Textarea extends SvelteComponent { -} diff --git a/dist/contracts/digital_public_good.es b/dist/contracts/digital_public_good.es deleted file mode 100644 index 3cd45b4..0000000 --- a/dist/contracts/digital_public_good.es +++ /dev/null @@ -1,80 +0,0 @@ -/** -* =================================================================================== -* Contract for a "Digital Public Good" (used for Type NFTs) -* =================================================================================== -* -* PURPOSE: -* To protect a box containing an NFT and its metadata in registers, ensuring -* the information serves as a permanent and immutable standard for the ecosystem. -* -* SPENDING RULES: -* 1. Anyone can spend this box (no signature required). -* 2. Spending is only valid if a single output box is created that is an -* exact replica of the input, except for its ERG value, which must -* be greater than or equal. This allows for top-ups to pay storage rent. -* -* ----------------------------------------------------------------------------------- -* R4: Coll[Byte] -> typeName -* - Purpose: Human-readable name of the type (e.g., "Web URL"). -* -* R5: Coll[Byte] -> description -* - Purpose: Brief description of the type's use and purpose. -* -* R6: Coll[Byte] -> schemaURI -* - Purpose: URI to a schema (JSON Schema, IPFS) that defines the data -* structure for proofs that use this type. -* -* R7: Boolean -> isReputationProof -* - Purpose: Boolean value that is `true` if this type is used for -* a reputation proof, and `false` otherwise. -* -* R8: (Empty) -> reserved_1 -* - Purpose: Reserved for future extensions. -* -* R9: (Empty) -> reserved_2 -* - Purpose: Reserved for future extensions. -* ----------------------------------------------------------------------------------- -*/ -{ - // Filters the outputs to find the one containing the same NFT as this box (SELF). - val successorOutputs = OUTPUTS.filter { (box: Box) => - box.tokens.size > 0 && box.tokens(0)._1 == SELF.tokens(0)._1 - } - - // Validates that exactly one successor box has been found. - if (successorOutputs.size == 1) { - val successor = successorOutputs(0) - - // Defines the immutability conditions. - // Each register from R4 to R9 must be checked individually. - // R7 now checks for a Boolean instead of a Coll[Byte]. - val registersAreImmutable = ( - successor.R4[Coll[Byte]] == SELF.R4[Coll[Byte]] && - successor.R5[Coll[Byte]] == SELF.R5[Coll[Byte]] && - successor.R6[Coll[Byte]] == SELF.R6[Coll[Byte]] && - successor.R7[Boolean] == SELF.R7[Boolean] && - successor.R8[Coll[Byte]] == SELF.R8[Coll[Byte]] && - successor.R9[Coll[Byte]] == SELF.R9[Coll[Byte]] - ) - - val dataIsImmutable = ( - // The protection script cannot change. - successor.propositionBytes == SELF.propositionBytes && - // The NFT token must be preserved identically. - successor.tokens(0) == SELF.tokens(0) && - // Registers R4-R9 must be identical. - registersAreImmutable - ) - - // The ERG value of the output must be greater than or equal to the input's. - val canOnlyAddErgs = successor.value >= SELF.value - - // The transaction is valid if the immutability and value conditions are met. - sigmaProp(dataIsImmutable && canOnlyAddErgs) - - } else { - // Fails if exactly one successor is not found, to prevent - // the destruction or duplication of the NFT. - sigmaProp(false) - } -} \ No newline at end of file diff --git a/dist/contracts/reputation_proof.es b/dist/contracts/reputation_proof.es deleted file mode 100644 index e07af8a..0000000 --- a/dist/contracts/reputation_proof.es +++ /dev/null @@ -1,200 +0,0 @@ -/** -* =================================================================================== -* Contract for a "Reputation Token" -* =================================================================================== -* -* PURPOSE: -* To govern a box that is part of a collection of "reputation" boxes. -* This contract ensures that the entire collection remains coherent, that data -* is unique, and that only the owner can authorize changes. It acts as a -* piece of a distributed state that is validated atomically. -* -* SPENDING RULES: -* There are two ways to spend this box: -* -* 1. ADMIN PATH (SIGNATURE REQUIRED): -* a. AUTHORIZATION: The transaction must be signed by the owner (R7). -* b. BINDING TO A STANDARD: The "Type NFT" box must be provided -* in dataInputs[0]. The R4 register must match the token ID of that NFT. -* c. OUTPUT RULES: Rules for uniqueness, metadata preservation, -* and locking logic (frozen/mutable) apply. -* -* 2. ERG TOP-UP PATH (PUBLIC AND SIGNATURE-FREE): -* a. ANYONE can spend this box to prevent "demurrage" (storage rent). -* b. CONDITION: The transaction is only valid if it creates a single output box that -* is an EXACT REPLICA of the input (same tokens, registers, and script), -* but with an equal or greater ERG value. No other changes are allowed. -* -* RECOMMENDED REGISTER AND TOKEN STRUCTURE: -* ----------------------------------------------------------------------------------- -* Token(0): (Coll[Byte], Long) -> (repTokenId, amount) -* - Purpose: The reputation token that this contract protects. -* -* R4: Coll[Byte] -> typeNftTokenId -* - Purpose: ID of the "Type NFT" token to which this box adheres. -* -* R5: Coll[Byte] -> uniqueObjectData -* - Purpose: Data that, together with R4, uniquely identifies this object -* within the collection. -* -* R6: Boolean -> isLocked -* - Purpose: Lock status -* -* R7: Coll[Byte] -> propositionBytes of the owner (must be spent one box with this script to confirm ownership) -* -* R8: Boolean -> customFlag -* - Purpose: A boolean flag for custom application logic. -* -* R9: Coll[Byte] -> reserved_1 -* - Purpose: Reserved for future extensions. -* ----------------------------------------------------------------------------------- -*/ -{ - - val DIGITAL_PUBLIC_GOOD = fromBase16("`+DIGITAL_PUBLIC_GOOD_SCRIPT_HASH+`") - - // --- Path 1: Admin Transaction (signed by the owner) --- - val ownerSignedPath = { - val isOwner = INPUTS.exists { (b: Box) => b.propositionBytes == SELF.R7[Coll[Byte]].get } - if (isOwner) { - - // Extract data from this box's (SELF) register structure. - val isLocked = SELF.R6[Boolean].get - val repTokenId = SELF.tokens(0)._1 - - // PROOF OF COMPLETENESS - - val repBoxesOnInputs = INPUTS.filter { (b: Box) => - blake2b256(b.propositionBytes) == blake2b256(SELF.propositionBytes) && - b.tokens.size > 0 && b.tokens(0)._1 == repTokenId && - b.R7[Coll[Byte]].get == SELF.R7[Coll[Byte]].get && - b.R4[Coll[Byte]].isDefined && - b.R5[Coll[Byte]].isDefined && - b.R8[Boolean].isDefined - } - - val repBoxesOnOutputs = OUTPUTS.filter { (b: Box) => - blake2b256(b.propositionBytes) == blake2b256(SELF.propositionBytes) && - b.tokens.size > 0 && b.tokens(0)._1 == repTokenId && - b.R7[Coll[Byte]].get == SELF.R7[Coll[Byte]].get && - b.R4[Coll[Byte]].isDefined && - b.R5[Coll[Byte]].isDefined && - b.R8[Boolean].isDefined - } - - val correctManagedSupply = { - val inputsAmount = repBoxesOnInputs.fold(0L, { (sum: Long, b: Box) => sum + b.tokens(0)._2 }) - val outputsAmount = repBoxesOnOutputs.fold(0L, { (sum: Long, b: Box) => sum + b.tokens(0)._2 }) - - val valuePreserved = { - - val tokensArePreserved = { - val secondaryInputTokens = repBoxesOnInputs.flatMap({ (b: Box) => - if (b.tokens.size > 1) { b.tokens.slice(1, b.tokens.size) } else { Coll[(Coll[Byte], Long)]() } - }) - val secondaryOutputTokens = repBoxesOnOutputs.flatMap({ (b: Box) => - if (b.tokens.size > 1) { b.tokens.slice(1, b.tokens.size) } else { Coll[(Coll[Byte], Long)]() } - }) - - val uniqueTokenIds = secondaryInputTokens.fold(Coll[Coll[Byte]](), { (acc: Coll[Coll[Byte]], t: (Coll[Byte], Long)) => - if (acc.exists({ (x: Coll[Byte]) => x == t._1 })) acc else acc.append(Coll(t._1)) - }) - - uniqueTokenIds.forall({ (tokenId: Coll[Byte]) => - val totalIn = secondaryInputTokens - .filter({ (t: (Coll[Byte], Long)) => t._1 == tokenId }) - .fold(0L, { (sum: Long, t: (Coll[Byte], Long)) => sum + t._2 }) - val totalOut = secondaryOutputTokens - .filter({ (t: (Coll[Byte], Long)) => t._1 == tokenId }) - .fold(0L, { (sum: Long, t: (Coll[Byte], Long)) => sum + t._2 }) - totalOut >= totalIn - }) - } - - val nativeErgIsPreserved = { - val totalNativeIn = repBoxesOnInputs.fold(0L, { (sum: Long, b: Box) => sum + b.value }) - val totalNativeOut = repBoxesOnOutputs.fold(0L, { (sum: Long, b: Box) => sum + b.value }) - totalNativeOut >= totalNativeIn - } - - tokensArePreserved && nativeErgIsPreserved - } - - inputsAmount == outputsAmount && // Reputation proof tokens are preserved. - valuePreserved - } - - val typeExists: Boolean = { - // Get the token ID to check from the box's register R4 - val typeTokenIdToCheck: Coll[Byte] = SELF.R4[Coll[Byte]].get - - // Extract the token IDs from the collection of type NFT boxes - val availableTypeTokenIds: Coll[Coll[Byte]] = CONTEXT.dataInputs.filter { (b: Box) => - blake2b256(b.propositionBytes) == DIGITAL_PUBLIC_GOOD && - b.creationInfo._1 < CONTEXT.HEIGHT - }.map { (b: Box) => - b.tokens(0)._1 - } - - availableTypeTokenIds.exists { (id: Coll[Byte]) => - id == typeTokenIdToCheck - } - } - - // LOCKING LOGIC - val correctLock = { - if (isLocked) { - repBoxesOnOutputs.exists { (x: Box) => { - x.tokens(0)._2 >= SELF.tokens(0)._2 && // Preserve token amount or increase it. - x.R4[Coll[Byte]].get == SELF.R4[Coll[Byte]].get && // Preserve type NFT ID. - x.R5[Coll[Byte]].get == SELF.R5[Coll[Byte]].get && // Preserve unique object data. - x.R6[Boolean].get == true && // Once locked, always locked. - x.R9[Coll[Byte]].get == SELF.R9[Coll[Byte]].get // Preserve reserved data. - }} - } - else { true } - } - - correctManagedSupply && typeExists && correctLock - } - else { false } - } - - // --- Path 2: ERG Top-Up (public, no signature) --- - val publicTopUpPath = { - // Filter the outputs to find the one that is a successor to this box. - val successorOutputs = OUTPUTS.filter { (box: Box) => - box.propositionBytes == SELF.propositionBytes && - box.tokens.size > 0 && - box.tokens(0)._1 == SELF.tokens(0)._1 - } - - // If exactly one successor is found... - if (successorOutputs.size == 1) { - val successor = successorOutputs(0) - - // Define the conditions for total immutability. - val registersAreImmutable = ( - successor.R4[Coll[Byte]] == SELF.R4[Coll[Byte]] && - successor.R5[Coll[Byte]] == SELF.R5[Coll[Byte]] && - successor.R6[Boolean] == SELF.R6[Boolean] && - successor.R7[Coll[Byte]] == SELF.R7[Coll[Byte]] && - successor.R8[Boolean] == SELF.R8[Boolean] && - successor.R9[Coll[Byte]] == SELF.R9[Coll[Byte]] - ) - - val tokensAreImmutable = successor.tokens == SELF.tokens - - // The ERG value of the output must be greater than or equal to the input's. - val canOnlyAddErgs = successor.value >= SELF.value - - // The transaction is valid if everything is immutable and only ERGs are added. - registersAreImmutable && tokensAreImmutable && canOnlyAddErgs - } else { - false - } - } - - // The transaction is valid if it meets the owner path OR the public top-up path. - sigmaProp(ownerSignedPath || publicTopUpPath) -} \ No newline at end of file diff --git a/dist/ergo/envs.d.ts b/dist/ergo/envs.d.ts deleted file mode 100644 index 1ce836a..0000000 --- a/dist/ergo/envs.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -export declare const network_id: "mainnet" | "testnet"; -export declare const explorer_uri: string; -export declare const web_explorer_uri_tx: string; -export declare const web_explorer_uri_addr: string; -export declare const web_explorer_uri_tkn: string; -export declare const PROFILE_TYPE_NFT_ID = "1820fd428a0b92d61ce3f86cd98240fdeeee8a392900f0b19a2e017d66f79926"; -export declare const PROFILE_TOTAL_SUPPLY = 99999999; -export declare const FILE_SOURCE_TYPE_NFT_ID = "8299d98e15ebee7fa39ad716de7c8bb191790a1bf4b7c3f91af35a0e36187706"; -export declare const INVALID_FILE_SOURCE_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000002"; -export declare const UNAVAILABLE_SOURCE_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000003"; -export declare const PROFILE_OPINION_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000004"; -export declare const ERGO_TREE_HASH = "e84b95d84a30df33aa258fe2b9d24c3e75e27a67c6453983c19703029112d147"; -export declare const SOURCE_OPINION_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000005"; diff --git a/dist/ergo/envs.js b/dist/ergo/envs.js deleted file mode 100644 index fa97eaf..0000000 --- a/dist/ergo/envs.js +++ /dev/null @@ -1,21 +0,0 @@ -export const network_id = "mainnet"; -const default_explorer_uri = (network_id == "mainnet") ? "https://api.ergoplatform.com" : "https://api-testnet.ergoplatform.com"; -const default_web_tx = (network_id == "mainnet") ? "https://sigmaspace.io/en/transaction/" : "https://testnet.ergoplatform.com/transactions/"; -const default_web_addr = (network_id == "mainnet") ? "https://sigmaspace.io/en/address/" : "https://testnet.ergoplatform.com/addresses/"; -const default_web_tkn = (network_id == "mainnet") ? "https://sigmaspace.io/en/token/" : "https://testnet.ergoplatform.com/tokens/"; -export const explorer_uri = default_explorer_uri; -export const web_explorer_uri_tx = default_web_tx; -export const web_explorer_uri_addr = default_web_addr; -export const web_explorer_uri_tkn = default_web_tkn; -// Profile Type NFT (unchanged) -export const PROFILE_TYPE_NFT_ID = "1820fd428a0b92d61ce3f86cd98240fdeeee8a392900f0b19a2e017d66f79926"; -export const PROFILE_TOTAL_SUPPLY = 99999999; -// Source Application Type NFT IDs (PLACEHOLDER - replace with actual NFT IDs) -export const FILE_SOURCE_TYPE_NFT_ID = "8299d98e15ebee7fa39ad716de7c8bb191790a1bf4b7c3f91af35a0e36187706"; -export const INVALID_FILE_SOURCE_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000002"; -export const UNAVAILABLE_SOURCE_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000003"; -export const PROFILE_OPINION_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000004"; -// Reputation proof contract hash (from reputation-system library) -export const ERGO_TREE_HASH = "e84b95d84a30df33aa258fe2b9d24c3e75e27a67c6453983c19703029112d147"; -// Deprecated -export const SOURCE_OPINION_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000005"; diff --git a/dist/ergo/hashUtils.d.ts b/dist/ergo/hashUtils.d.ts deleted file mode 100644 index 6aa2749..0000000 --- a/dist/ergo/hashUtils.d.ts +++ /dev/null @@ -1,81 +0,0 @@ -/** - * Hash utility functions for source verification. - * Supports SHA3-256, SHA-256, Keccak-256, and Blake2b. - * Uses @noble/hashes (already a transitive dependency via @fleet-sdk/crypto). - */ -/** Known hash algorithm IDs used in the application */ -export declare const HASH_ALGORITHMS: readonly [{ - readonly label: "SHA3-256"; - readonly value: "sha3_256"; -}, { - readonly label: "Blake2b"; - readonly value: "blake2b"; -}, { - readonly label: "SHA-256"; - readonly value: "sha256"; -}, { - readonly label: "Keccak-256"; - readonly value: "keccak256"; -}]; -/** All algorithm values including custom */ -export declare const HASH_OPTIONS: readonly [{ - readonly label: "SHA3-256"; - readonly value: "sha3_256"; -}, { - readonly label: "Blake2b"; - readonly value: "blake2b"; -}, { - readonly label: "SHA-256"; - readonly value: "sha256"; -}, { - readonly label: "Keccak-256"; - readonly value: "keccak256"; -}, { - readonly label: "Custom"; - readonly value: "__custom__"; -}]; -/** Algorithm values for search (no custom — frontend can't compute unknown algorithms) */ -export declare const SEARCH_HASH_ALGORITHMS: readonly [{ - readonly label: "SHA3-256"; - readonly value: "sha3_256"; -}, { - readonly label: "Blake2b"; - readonly value: "blake2b"; -}, { - readonly label: "SHA-256"; - readonly value: "sha256"; -}, { - readonly label: "Keccak-256"; - readonly value: "keccak256"; -}]; -/** - * Normalize supported aliases to the internal algorithm identifiers used by the UI. - */ -export declare function normalizeHashAlgorithmId(algorithmId: string): string; -/** - * Compute a hash of the given data using the specified algorithm. - * @returns hex string of the hash, or null if algorithm is unknown/custom - */ -export declare function computeHash(data: Uint8Array, algorithmId: string): string | null; -/** - * Validate a hex hash string for a given algorithm. - * Returns null if valid, or an error message if invalid. - */ -export declare function validateHash(hash: string, algorithmId: string): string | null; -/** - * Get the human-readable label for an algorithm ID. - */ -export declare function getAlgorithmLabel(algorithmId: string): string; -/** - * Download content from a URL and compute its hash. - * Supports chunked files (manifest-based): if isChunked is true, - * the URL is treated as a manifest where each line is a chunk URL. - * - * @param url - The URL to fetch (or manifest URL if chunked) - * @param algorithmId - Hash algorithm to use - * @param isChunked - Whether this is a chunked manifest - * @param onProgress - Optional progress callback (current, total) for chunked downloads - * @returns hex hash string - * @throws if algorithm is custom/unknown, fetch fails, etc. - */ -export declare function downloadAndHash(url: string, algorithmId: string, isChunked?: boolean, onProgress?: (current: number, total: number) => void): Promise; diff --git a/dist/ergo/hashUtils.js b/dist/ergo/hashUtils.js deleted file mode 100644 index cc2e433..0000000 --- a/dist/ergo/hashUtils.js +++ /dev/null @@ -1,169 +0,0 @@ -/** - * Hash utility functions for source verification. - * Supports SHA3-256, SHA-256, Keccak-256, and Blake2b. - * Uses @noble/hashes (already a transitive dependency via @fleet-sdk/crypto). - */ -import { sha256 } from '@noble/hashes/sha256'; -import { sha3_256, keccak_256 } from '@noble/hashes/sha3'; -import { blake2b } from '@noble/hashes/blake2b'; -/** Known hash algorithm IDs used in the application */ -export const HASH_ALGORITHMS = [ - { label: "SHA3-256", value: "sha3_256" }, - { label: "Blake2b", value: "blake2b" }, - { label: "SHA-256", value: "sha256" }, - { label: "Keccak-256", value: "keccak256" }, -]; -/** All algorithm values including custom */ -export const HASH_OPTIONS = [ - ...HASH_ALGORITHMS, - { label: "Custom", value: "__custom__" }, -]; -/** Algorithm values for search (no custom — frontend can't compute unknown algorithms) */ -export const SEARCH_HASH_ALGORITHMS = HASH_ALGORITHMS; -function uint8ArrayToHex(array) { - return [...array].map(x => x.toString(16).padStart(2, '0')).join(''); -} -/** - * Normalize supported aliases to the internal algorithm identifiers used by the UI. - */ -export function normalizeHashAlgorithmId(algorithmId) { - const normalized = algorithmId.trim().toLowerCase(); - switch (normalized) { - case 'blake2b256': - return 'blake2b'; - default: - return normalized; - } -} -/** - * Compute a hash of the given data using the specified algorithm. - * @returns hex string of the hash, or null if algorithm is unknown/custom - */ -export function computeHash(data, algorithmId) { - switch (normalizeHashAlgorithmId(algorithmId)) { - case 'sha256': - return uint8ArrayToHex(sha256(data)); - case 'sha3_256': - return uint8ArrayToHex(sha3_256(data)); - case 'keccak256': - return uint8ArrayToHex(keccak_256(data)); - case 'blake2b': - // Default to 256-bit (32 bytes) output - return uint8ArrayToHex(blake2b(data, { dkLen: 32 })); - default: - return null; - } -} -/** - * Validate a hex hash string for a given algorithm. - * Returns null if valid, or an error message if invalid. - */ -export function validateHash(hash, algorithmId) { - if (!hash || hash.trim() === '') { - return 'Hash cannot be empty'; - } - const trimmed = hash.trim(); - // Check hex characters - if (!/^[0-9a-fA-F]+$/.test(trimmed)) { - return 'Hash must contain only hexadecimal characters (0-9, a-f)'; - } - switch (normalizeHashAlgorithmId(algorithmId)) { - case 'sha3_256': - case 'sha256': - case 'keccak256': - if (trimmed.length !== 64) { - return `${getAlgorithmLabel(algorithmId)} hash must be exactly 64 hex characters (256-bit). Got ${trimmed.length}.`; - } - break; - case 'blake2b': - if (trimmed.length !== 64 && trimmed.length !== 128) { - return `Blake2b hash must be 64 hex characters (256-bit) or 128 hex characters (512-bit). Got ${trimmed.length}.`; - } - break; - case '__custom__': - // Custom algorithm — only validate hex and non-empty - break; - default: - // Unknown algorithm id — only validate hex - break; - } - return null; -} -/** - * Get the human-readable label for an algorithm ID. - */ -export function getAlgorithmLabel(algorithmId) { - if (normalizeHashAlgorithmId(algorithmId) === 'blake2b') { - return 'Blake2b-256'; - } - const found = HASH_OPTIONS.find(o => o.value === algorithmId); - return found ? found.label : algorithmId; -} -/** - * Download content from a URL and compute its hash. - * Supports chunked files (manifest-based): if isChunked is true, - * the URL is treated as a manifest where each line is a chunk URL. - * - * @param url - The URL to fetch (or manifest URL if chunked) - * @param algorithmId - Hash algorithm to use - * @param isChunked - Whether this is a chunked manifest - * @param onProgress - Optional progress callback (current, total) for chunked downloads - * @returns hex hash string - * @throws if algorithm is custom/unknown, fetch fails, etc. - */ -export async function downloadAndHash(url, algorithmId, isChunked = false, onProgress) { - const normalizedAlgorithmId = normalizeHashAlgorithmId(algorithmId); - if (normalizedAlgorithmId === '__custom__' || !HASH_ALGORITHMS.some(a => a.value === normalizedAlgorithmId)) { - throw new Error('Cannot verify: custom hash algorithm'); - } - let data; - if (isChunked) { - // Fetch manifest - const manifestResponse = await fetch(url); - if (!manifestResponse.ok) { - throw new Error(`Failed to fetch manifest: ${manifestResponse.statusText}`); - } - const manifestText = await manifestResponse.text(); - const chunkUrls = manifestText.trim().split('\n').filter(line => line.trim() !== ''); - if (chunkUrls.length === 0) { - throw new Error('Manifest is empty — no chunk URLs found'); - } - // Download all chunks in order - const chunks = []; - let totalSize = 0; - for (let i = 0; i < chunkUrls.length; i++) { - if (onProgress) - onProgress(i, chunkUrls.length); - const chunkResponse = await fetch(chunkUrls[i].trim()); - if (!chunkResponse.ok) { - throw new Error(`Failed to fetch chunk ${i + 1}/${chunkUrls.length}: ${chunkResponse.statusText}`); - } - const chunkBuffer = await chunkResponse.arrayBuffer(); - const chunkBytes = new Uint8Array(chunkBuffer); - chunks.push(chunkBytes); - totalSize += chunkBytes.length; - } - if (onProgress) - onProgress(chunkUrls.length, chunkUrls.length); - // Concatenate all chunks - data = new Uint8Array(totalSize); - let offset = 0; - for (const chunk of chunks) { - data.set(chunk, offset); - offset += chunk.length; - } - } - else { - const response = await fetch(url); - if (!response.ok) { - throw new Error(`Failed to fetch file: ${response.statusText}`); - } - const buffer = await response.arrayBuffer(); - data = new Uint8Array(buffer); - } - const result = computeHash(data, normalizedAlgorithmId); - if (result === null) { - throw new Error(`Cannot verify: unsupported hash algorithm "${algorithmId}"`); - } - return result; -} diff --git a/dist/ergo/object.d.ts b/dist/ergo/object.d.ts deleted file mode 100644 index 9b96c78..0000000 --- a/dist/ergo/object.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { type ReputationProof, type TypeNFT, type RPBox, type ApiBox } from 'reputation-system'; -export { type ReputationProof, type TypeNFT, type RPBox, type ApiBox }; diff --git a/dist/ergo/object.js b/dist/ergo/object.js deleted file mode 100644 index cb0ff5c..0000000 --- a/dist/ergo/object.js +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/dist/ergo/sourceFetch.d.ts b/dist/ergo/sourceFetch.d.ts deleted file mode 100644 index 588af80..0000000 --- a/dist/ergo/sourceFetch.d.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { type FileSource, type ProfileOpinion, type SearchResult, type ProfileData, type InvalidFileSource, type UnavailableSource } from './sourceObject'; -/** - * Fetch all FILE_SOURCE boxes for a specific file hash. - * Returns all sources where this file can be found. - */ -export declare function fetchFileSourcesByHash(fileHash: string, explorerUri: string): Promise; -/** - * Fetch all INVALID_FILE_SOURCE boxes for a specific source box. - */ -export declare function fetchInvalidFileSources(sourceBoxId: string, explorerUri: string): Promise; -/** - * Fetch all UNAVAILABLE_SOURCE boxes for a specific URL. - */ -export declare function fetchUnavailableSources(sourceUrl: string, explorerUri: string): Promise; -/** - * Fetch all PROFILE_OPINION boxes targeting a specific profile. - * Returns all trust/distrust opinions for this profile. - */ -export declare function fetchProfileOpinions(profileTokenId: string, explorerUri: string): Promise; -/** - * Fetch all FILE_SOURCE boxes for a specific profile token ID. - * Returns file sources created by this profile. - */ -export declare function fetchFileSourcesByProfile(profileTokenId: string, limit: number | undefined, explorerUri: string): Promise; -/** - * Fetch all INVALID_FILE_SOURCE boxes created by a specific profile. - */ -export declare function fetchInvalidFileSourcesByProfile(profileTokenId: string, limit: number | undefined, explorerUri: string): Promise; -/** - * Fetch all UNAVAILABLE_SOURCE boxes created by a specific profile. - */ -export declare function fetchUnavailableSourcesByProfile(profileTokenId: string, limit: number | undefined, explorerUri: string): Promise; -/** - * Fetch all PROFILE_OPINION boxes created by a specific profile. - */ -export declare function fetchProfileOpinionsByAuthor(authorTokenId: string, explorerUri: string): Promise; -/** - * Load file sources by hash. - */ -export declare function searchByHash(fileHash: string, explorerUri: string): Promise; -/** - * Load all data related to a profile. - */ -export declare function loadProfileData(profileTokenId: string, explorerUri: string): Promise; diff --git a/dist/ergo/sourceFetch.js b/dist/ergo/sourceFetch.js deleted file mode 100644 index 4f385c1..0000000 --- a/dist/ergo/sourceFetch.js +++ /dev/null @@ -1,292 +0,0 @@ -import { deserializeSourceEntry } from './sourceObject'; -import { hexToUtf8 } from './utils'; -import { FILE_SOURCE_TYPE_NFT_ID, INVALID_FILE_SOURCE_TYPE_NFT_ID, UNAVAILABLE_SOURCE_TYPE_NFT_ID, PROFILE_OPINION_TYPE_NFT_ID } from './envs'; -import DOMPurify from "dompurify"; -import { getTimestampFromBlockId, searchBoxes } from 'reputation-system'; -/** - * Parse R9 content from a box into SourceEntry[]. - * Handles both new JSON format and legacy plain URL string. - */ -function parseR9Content(box) { - let rawContent = "[Unreadable Content]"; - try { - const rawValue = box.additionalRegisters.R9?.renderedValue; - if (rawValue) { - rawContent = hexToUtf8(rawValue) ?? "[Empty Content]"; - // Sanitize for display safety - rawContent = DOMPurify.sanitize(rawContent); - } - } - catch (e) { - console.warn(`Error decoding R9 for box ${box.boxId}`, e); - rawContent = ""; - } - return { source: deserializeSourceEntry(rawContent) }; -} -/** - * Fetch all FILE_SOURCE boxes for a specific file hash. - * Returns all sources where this file can be found. - */ -export async function fetchFileSourcesByHash(fileHash, explorerUri) { - console.log("Fetching file sources for hash:", fileHash); - const generator = searchBoxes(explorerUri, undefined, FILE_SOURCE_TYPE_NFT_ID, fileHash, undefined, undefined, undefined, undefined, undefined, undefined); - const boxes = await collectBoxes(generator); - const sources = []; - console.log(`Found ${boxes.length} boxes for file hash ${fileHash}`); - for (const box of boxes) { - if (!box.assets?.length) - continue; - if (box.additionalRegisters.R6?.renderedValue !== "false") - continue; - if (!box.additionalRegisters.R9?.renderedValue) - continue; - const { source: sourceEntry } = parseR9Content(box); - // Extract hashFunctionId from the source entry - const hashFunctionId = sourceEntry.hashFunctionId || ''; - const source = { - id: box.boxId, - fileHash: fileHash, - hashFunctionId: hashFunctionId, - source: sourceEntry, - ownerTokenId: box.assets[0].tokenId, - reputationAmount: Number(box.assets[0].amount), - timestamp: await getTimestampFromBlockId(explorerUri, box.blockId), - isLocked: false, - transactionId: box.transactionId - }; - sources.push(source); - } - sources.sort((a, b) => b.timestamp - a.timestamp); - console.log(`Returning ${sources.length} valid sources for file hash ${fileHash}`); - return sources; -} -/** - * Fetch all INVALID_FILE_SOURCE boxes for a specific source box. - */ -export async function fetchInvalidFileSources(sourceBoxId, explorerUri) { - console.log("Fetching invalidations for source:", sourceBoxId); - const generator = searchBoxes(explorerUri, undefined, INVALID_FILE_SOURCE_TYPE_NFT_ID, sourceBoxId, undefined, undefined, undefined, undefined, undefined, undefined); - const boxes = await collectBoxes(generator); - const invalidations = []; - for (const box of boxes) { - if (!box.assets?.length) - continue; - const invalidation = { - id: box.boxId, - targetBoxId: sourceBoxId, - authorTokenId: box.assets[0].tokenId, - reputationAmount: Number(box.assets[0].amount), - timestamp: await getTimestampFromBlockId(explorerUri, box.blockId), - transactionId: box.transactionId - }; - invalidations.push(invalidation); - } - return invalidations; -} -/** - * Fetch all UNAVAILABLE_SOURCE boxes for a specific URL. - */ -export async function fetchUnavailableSources(sourceUrl, explorerUri) { - console.log("Fetching unavailabilities for URL:", sourceUrl); - const generator = searchBoxes(explorerUri, undefined, UNAVAILABLE_SOURCE_TYPE_NFT_ID, sourceUrl, undefined, undefined, undefined, undefined, undefined, undefined); - const boxes = await collectBoxes(generator); - const unavailabilities = []; - for (const box of boxes) { - if (!box.assets?.length) - continue; - const unavailability = { - id: box.boxId, - sourceUrl: sourceUrl, - authorTokenId: box.assets[0].tokenId, - reputationAmount: Number(box.assets[0].amount), - timestamp: await getTimestampFromBlockId(explorerUri, box.blockId), - transactionId: box.transactionId - }; - unavailabilities.push(unavailability); - } - return unavailabilities; -} -/** - * Fetch all PROFILE_OPINION boxes targeting a specific profile. - * Returns all trust/distrust opinions for this profile. - */ -export async function fetchProfileOpinions(profileTokenId, explorerUri) { - console.log("Fetching profile opinions for:", profileTokenId); - const generator = searchBoxes(explorerUri, undefined, PROFILE_OPINION_TYPE_NFT_ID, profileTokenId, undefined, undefined, undefined, undefined, undefined, undefined); - const boxes = await collectBoxes(generator); - const opinions = []; - for (const box of boxes) { - if (!box.assets?.length) - continue; - if (box.additionalRegisters.R6?.renderedValue === "false") - continue; - const opinion = { - id: box.boxId, - targetProfileTokenId: profileTokenId, - isTrusted: box.additionalRegisters.R8?.renderedValue === 'true', - authorTokenId: box.assets[0].tokenId, - reputationAmount: Number(box.assets[0].amount), - timestamp: await getTimestampFromBlockId(explorerUri, box.blockId), - transactionId: box.transactionId - }; - opinions.push(opinion); - } - return opinions; -} -/** - * Fetch all FILE_SOURCE boxes for a specific profile token ID. - * Returns file sources created by this profile. - */ -export async function fetchFileSourcesByProfile(profileTokenId, limit = 50, explorerUri) { - console.log("Fetching file sources for profile:", profileTokenId); - const generator = searchBoxes(explorerUri, profileTokenId, FILE_SOURCE_TYPE_NFT_ID, undefined, undefined, undefined, undefined, undefined, limit, undefined); - const boxes = await collectBoxes(generator); - const sources = []; - for (const box of boxes) { - if (!box.assets?.length) - continue; - if (box.additionalRegisters.R6?.renderedValue !== "false") - continue; - if (!box.additionalRegisters.R9?.renderedValue) - continue; - let fileHash = "[Unknown]"; - try { - const rawR5 = box.additionalRegisters.R5?.renderedValue; - if (rawR5) { - fileHash = rawR5; - } - } - catch (e) { - console.warn(`Error decoding R5 for box ${box.boxId}`, e); - } - const { source: sourceEntry } = parseR9Content(box); - const hashFunctionId = sourceEntry.hashFunctionId || ''; - const source = { - id: box.boxId, - fileHash: fileHash, - hashFunctionId: hashFunctionId, - source: sourceEntry, - ownerTokenId: box.assets[0].tokenId, - reputationAmount: Number(box.assets[0].amount), - timestamp: await getTimestampFromBlockId(explorerUri, box.blockId), - isLocked: false, - transactionId: box.transactionId - }; - sources.push(source); - } - sources.sort((a, b) => b.timestamp - a.timestamp); - return sources; -} -/** - * Fetch all INVALID_FILE_SOURCE boxes created by a specific profile. - */ -export async function fetchInvalidFileSourcesByProfile(profileTokenId, limit = 50, explorerUri) { - console.log("Fetching invalidations by profile:", profileTokenId); - const generator = searchBoxes(explorerUri, profileTokenId, INVALID_FILE_SOURCE_TYPE_NFT_ID, undefined, undefined, undefined, undefined, undefined, limit, undefined); - const boxes = await collectBoxes(generator); - const invalidations = []; - for (const box of boxes) { - if (!box.assets?.length) - continue; - invalidations.push({ - id: box.boxId, - targetBoxId: hexToUtf8(box.additionalRegisters.R5?.renderedValue || "") || "", - authorTokenId: box.assets[0].tokenId, - reputationAmount: Number(box.assets[0].amount), - timestamp: await getTimestampFromBlockId(explorerUri, box.blockId), - transactionId: box.transactionId - }); - } - return invalidations; -} -/** - * Fetch all UNAVAILABLE_SOURCE boxes created by a specific profile. - */ -export async function fetchUnavailableSourcesByProfile(profileTokenId, limit = 50, explorerUri) { - console.log("Fetching unavailabilities by profile:", profileTokenId); - const generator = searchBoxes(explorerUri, profileTokenId, UNAVAILABLE_SOURCE_TYPE_NFT_ID, undefined, undefined, undefined, undefined, undefined, limit, undefined); - const boxes = await collectBoxes(generator); - const unavailabilities = []; - for (const box of boxes) { - if (!box.assets?.length) - continue; - unavailabilities.push({ - id: box.boxId, - sourceUrl: hexToUtf8(box.additionalRegisters.R5?.renderedValue || "") || "", - authorTokenId: box.assets[0].tokenId, - reputationAmount: Number(box.assets[0].amount), - timestamp: await getTimestampFromBlockId(explorerUri, box.blockId), - transactionId: box.transactionId - }); - } - return unavailabilities; -} -/** - * Fetch all PROFILE_OPINION boxes created by a specific profile. - */ -export async function fetchProfileOpinionsByAuthor(authorTokenId, explorerUri) { - console.log("Fetching profile opinions by author:", authorTokenId); - const generator = searchBoxes(explorerUri, authorTokenId, PROFILE_OPINION_TYPE_NFT_ID, undefined, undefined, undefined, undefined, undefined, undefined, undefined); - const boxes = await collectBoxes(generator); - const opinions = []; - for (const box of boxes) { - if (!box.assets?.length) - continue; - opinions.push({ - id: box.boxId, - targetProfileTokenId: hexToUtf8(box.additionalRegisters.R5?.renderedValue || "") || "", - isTrusted: box.additionalRegisters.R8?.renderedValue === 'true', - authorTokenId: box.assets[0].tokenId, - reputationAmount: Number(box.assets[0].amount), - timestamp: await getTimestampFromBlockId(explorerUri, box.blockId), - transactionId: box.transactionId - }); - } - return opinions; -} -/** - * Load file sources by hash. - */ -export async function searchByHash(fileHash, explorerUri) { - const sources = await fetchFileSourcesByHash(fileHash, explorerUri); - const invalidations = {}; - const unavailabilities = {}; - for (const source of sources) { - // Fetch invalidations for this box - const invs = await fetchInvalidFileSources(source.id, explorerUri); - if (invs.length > 0) - invalidations[source.id] = invs; - // Fetch unavailabilities for the source URL - const url = source.source?.urlLink; - if (url && !unavailabilities[url]) { - const unavs = await fetchUnavailableSources(url, explorerUri); - if (unavs.length > 0) - unavailabilities[url] = unavs; - } - } - return { sources, invalidations, unavailabilities }; -} -/** - * Load all data related to a profile. - */ -export async function loadProfileData(profileTokenId, explorerUri) { - const sources = await fetchFileSourcesByProfile(profileTokenId, 50, explorerUri); - const invalidations = await fetchInvalidFileSourcesByProfile(profileTokenId, 50, explorerUri); - const unavailabilities = await fetchUnavailableSourcesByProfile(profileTokenId, 50, explorerUri); - const opinions = await fetchProfileOpinions(profileTokenId, explorerUri); - const opinionsGiven = await fetchProfileOpinionsByAuthor(profileTokenId, explorerUri); - return { - sources, - invalidations, - unavailabilities, - opinions, - opinionsGiven - }; -} -async function collectBoxes(generator) { - const boxes = []; - for await (const batch of generator) { - boxes.push(...batch); - } - return boxes; -} diff --git a/dist/ergo/sourceObject.d.ts b/dist/ergo/sourceObject.d.ts deleted file mode 100644 index e0a046b..0000000 --- a/dist/ergo/sourceObject.d.ts +++ /dev/null @@ -1,171 +0,0 @@ -/** - * Data models for Source Application - * - * This module defines the core interfaces for the decentralized File Discovery - * and Verification system built on Ergo blockchain. - */ -export interface SourceEntry { - hashFunctionId: string; - contentFormat: string; - contentHash: string; - rawFormat: string; - urlLink: string; - isChunked?: boolean; -} -export interface FileSource { - id: string; - fileHash: string; - hashFunctionId: string; - source: SourceEntry; - ownerTokenId: string; - reputationAmount: number; - timestamp: number; - isLocked: boolean; - transactionId: string; -} -export interface InvalidFileSource { - id: string; - targetBoxId: string; - authorTokenId: string; - reputationAmount: number; - timestamp: number; - transactionId: string; -} -export interface UnavailableSource { - id: string; - sourceUrl: string; - authorTokenId: string; - reputationAmount: number; - timestamp: number; - transactionId: string; -} -export interface ProfileOpinion { - id: string; - targetProfileTokenId: string; - isTrusted: boolean; - authorTokenId: string; - reputationAmount: number; - timestamp: number; - transactionId: string; -} -export interface TimelineEvent { - timestamp: number; - type: 'FILE_SOURCE' | 'INVALID_FILE_SOURCE' | 'UNAVAILABLE_SOURCE' | 'PROFILE_OPINION'; - label: string; - color: string; - authorTokenId?: string; - data: any; -} -export interface SearchResult { - sources: FileSource[]; - invalidations: { - [sourceId: string]: InvalidFileSource[]; - }; - unavailabilities: { - [sourceUrl: string]: UnavailableSource[]; - }; -} -export interface ProfileData { - sources: FileSource[]; - invalidations: InvalidFileSource[]; - unavailabilities: UnavailableSource[]; - opinions: ProfileOpinion[]; - opinionsGiven: ProfileOpinion[]; -} -export interface CachedData { - [key: string]: { - data: T; - timestamp: number; - }; -} -/** - * File source with aggregated opinion data - */ -export interface FileSourceWithScore extends FileSource { - confirmations: FileSource[]; - invalidations: InvalidFileSource[]; - unavailabilities: UnavailableSource[]; - confirmationScore: number; - invalidationScore: number; - unavailabilityScore: number; - ownerTrustScore: number; -} -/** - * Data for a unique download source (URL) - */ -export interface DownloadSourceGroup { - sourceUrl: string; - sources: FileSource[]; - owners: string[]; - invalidations: InvalidFileSource[]; - unavailabilities: UnavailableSource[]; -} -/** - * Data for a specific profile's contributions to a hash - */ -export interface ProfileSourceGroup { - profileTokenId: string; - sources: FileSource[]; -} -/** - * Get the primary URL from a FileSource. - * Returns the first source entry's URL, or an empty string if no sources. - */ -export declare function getPrimaryUrl(source: FileSource): string; -/** - * Get all URLs from a FileSource. - * With single source entry, returns an array with one URL. - */ -export declare function getAllUrls(source: FileSource): string[]; -/** - * Group file sources by their download URLs. - * A FileSource can contain multiple URLs; it will appear in each group. - */ -export declare function groupByDownloadSource(sources: FileSource[], invalidationsMap: Record, unavailabilitiesMap: Record): DownloadSourceGroup[]; -/** - * Group file sources by the profile that submitted them. - */ -export declare function groupByProfile(sources: FileSource[]): ProfileSourceGroup[]; -/** - * Calculate the trust score for a profile based on PROFILE_OPINION boxes. - */ -export declare function calculateProfileTrust(profileTokenId: string, opinions: ProfileOpinion[]): number; -/** - * Aggregate opinions into score data for a file source. - */ -export declare function aggregateSourceScore(source: FileSource, allSources: FileSource[], invalidations: InvalidFileSource[], unavailabilities: UnavailableSource[], profileOpinions?: ProfileOpinion[]): FileSourceWithScore; -/** - * Serialize source entries to a JSON string for R9 content. - * The reputation-system library encodes this as Coll[Byte] (UTF-8 bytes). - * - * Format: Coll[Coll[Byte]] — a JSON array containing one tuple (array): - * [hash_function_id, content_format, content_hash, raw_format, url_link, is_chunked] - * - * Serialization format: Coll[Coll[Byte]] - * The output represents a Coll[Coll[Byte]] structure — an array containing - * one tuple (inner Coll[Byte]) with the source entry fields: - * [[hashFunctionId, contentFormat, contentHash, rawFormat, urlLink, isChunked]] - * - * The reputation-system library encodes this JSON string as Coll[Byte] for R9. - * Since encoding operates on the raw UTF-8 bytes of the JSON string (not on - * individual tuple elements), mixed types (string + boolean) within the tuple - * are fine — JSON.parse restores original types on deserialization. - */ -export declare function serializeSourceEntry(entry: SourceEntry): string; -/** - * Deserialize source entries from R9 content string. - * - * Supports three formats (tried in order): - * 1. Coll[Coll[Byte]] tuple format: [[hashFnId, contentFmt, contentHash, rawFmt, urlLink, isChunked]] - * 2. Legacy JSON object format: [{ hashFunctionId, contentFormat, ... }] - * 3. Legacy plain URL string - * - * Note: tuple[5] (isChunked) is a boolean while other elements are strings. - * This is fine because the JSON string is what gets encoded as Coll[Byte], - * and JSON.parse restores the original types. - */ -export declare function deserializeSourceEntry(content: string): SourceEntry; diff --git a/dist/ergo/sourceObject.js b/dist/ergo/sourceObject.js deleted file mode 100644 index 7e4882d..0000000 --- a/dist/ergo/sourceObject.js +++ /dev/null @@ -1,204 +0,0 @@ -/** - * Data models for Source Application - * - * This module defines the core interfaces for the decentralized File Discovery - * and Verification system built on Ergo blockchain. - */ -// --- HELPER FUNCTIONS --- -/** - * Get the primary URL from a FileSource. - * Returns the first source entry's URL, or an empty string if no sources. - */ -export function getPrimaryUrl(source) { - return source.source?.urlLink || ''; -} -/** - * Get all URLs from a FileSource. - * With single source entry, returns an array with one URL. - */ -export function getAllUrls(source) { - return source.source?.urlLink ? [source.source.urlLink] : []; -} -/** - * Group file sources by their download URLs. - * A FileSource can contain multiple URLs; it will appear in each group. - */ -export function groupByDownloadSource(sources, invalidationsMap, unavailabilitiesMap) { - const groups = {}; - for (const source of sources) { - const url = source.source?.urlLink; - if (!url) - continue; - if (!groups[url]) { - groups[url] = { - sourceUrl: url, - sources: [], - owners: [], - invalidations: [], - unavailabilities: unavailabilitiesMap[url]?.data || [] - }; - } - // Avoid duplicating the same source in the same group - if (!groups[url].sources.some(s => s.id === source.id)) { - groups[url].sources.push(source); - } - if (!groups[url].owners.includes(source.ownerTokenId)) { - groups[url].owners.push(source.ownerTokenId); - } - // Add invalidations for this specific box - const boxInvalidations = invalidationsMap[source.id]?.data || []; - groups[url].invalidations.push(...boxInvalidations); - } - return Object.values(groups).sort((a, b) => b.sources.length - a.sources.length); -} -/** - * Group file sources by the profile that submitted them. - */ -export function groupByProfile(sources) { - const groups = {}; - for (const source of sources) { - if (!groups[source.ownerTokenId]) { - groups[source.ownerTokenId] = { - profileTokenId: source.ownerTokenId, - sources: [] - }; - } - groups[source.ownerTokenId].sources.push(source); - } - return Object.values(groups).sort((a, b) => b.sources.length - a.sources.length); -} -/** - * Calculate the trust score for a profile based on PROFILE_OPINION boxes. - */ -export function calculateProfileTrust(profileTokenId, opinions) { - const trust = opinions - .filter(op => op.isTrusted) - .reduce((sum, op) => sum + op.reputationAmount, 0); - const distrust = opinions - .filter(op => !op.isTrusted) - .reduce((sum, op) => sum + op.reputationAmount, 0); - return trust - distrust; -} -/** - * Aggregate opinions into score data for a file source. - */ -export function aggregateSourceScore(source, allSources, invalidations, unavailabilities, profileOpinions = []) { - // Confirmations are other sources with same hash and same URL - const sourceUrl = source.source?.urlLink || ''; - const confirmations = allSources.filter(s => s.id !== source.id && - s.fileHash === source.fileHash && - s.source?.urlLink === sourceUrl); - // Invalidations for this specific box - const filteredInvalidations = invalidations.filter(inv => inv.targetBoxId === source.id); - // Unavailabilities for the URL in this source - const filteredUnavailabilities = unavailabilities.filter(un => un.sourceUrl === sourceUrl); - const confirmationScore = confirmations.reduce((sum, s) => sum + s.reputationAmount, 0); - const invalidationScore = filteredInvalidations.reduce((sum, inv) => sum + inv.reputationAmount, 0); - const unavailabilityScore = filteredUnavailabilities.reduce((sum, un) => sum + un.reputationAmount, 0); - const ownerTrustScore = calculateProfileTrust(source.ownerTokenId, profileOpinions); - return { - ...source, - confirmations, - invalidations: filteredInvalidations, - unavailabilities: filteredUnavailabilities, - confirmationScore, - invalidationScore, - unavailabilityScore, - ownerTrustScore - }; -} -// --- SERIALIZATION HELPERS --- -/** - * Serialize source entries to a JSON string for R9 content. - * The reputation-system library encodes this as Coll[Byte] (UTF-8 bytes). - * - * Format: Coll[Coll[Byte]] — a JSON array containing one tuple (array): - * [hash_function_id, content_format, content_hash, raw_format, url_link, is_chunked] - * - * Serialization format: Coll[Coll[Byte]] - * The output represents a Coll[Coll[Byte]] structure — an array containing - * one tuple (inner Coll[Byte]) with the source entry fields: - * [[hashFunctionId, contentFormat, contentHash, rawFormat, urlLink, isChunked]] - * - * The reputation-system library encodes this JSON string as Coll[Byte] for R9. - * Since encoding operates on the raw UTF-8 bytes of the JSON string (not on - * individual tuple elements), mixed types (string + boolean) within the tuple - * are fine — JSON.parse restores original types on deserialization. - */ -export function serializeSourceEntry(entry) { - // Coll[Coll[Byte]]: outer array = Coll, inner tuple = Coll[Byte] elements - const tuple = [ - entry.hashFunctionId, - entry.contentFormat, - entry.contentHash, - entry.rawFormat, - entry.urlLink, - entry.isChunked ?? false - ]; - return JSON.stringify([tuple]); // Coll[Coll[Byte]] serialized as JSON string -} -/** - * Deserialize source entries from R9 content string. - * - * Supports three formats (tried in order): - * 1. Coll[Coll[Byte]] tuple format: [[hashFnId, contentFmt, contentHash, rawFmt, urlLink, isChunked]] - * 2. Legacy JSON object format: [{ hashFunctionId, contentFormat, ... }] - * 3. Legacy plain URL string - * - * Note: tuple[5] (isChunked) is a boolean while other elements are strings. - * This is fine because the JSON string is what gets encoded as Coll[Byte], - * and JSON.parse restores the original types. - */ -export function deserializeSourceEntry(content) { - const empty = { - hashFunctionId: '', - contentFormat: '', - contentHash: '', - rawFormat: '', - urlLink: '' - }; - if (!content || content.trim() === '') - return empty; - try { - const parsed = JSON.parse(content); - if (Array.isArray(parsed) && parsed.length > 0) { - const tuple = parsed[0]; - // Format 1: Coll[Coll[Byte]] tuple array - // [[hashFnId, contentFmt, contentHash, rawFmt, urlLink, isChunked?]] - if (Array.isArray(tuple) && tuple.length >= 5) { - return { - hashFunctionId: tuple[0] || '', - contentFormat: tuple[1] || '', - contentHash: tuple[2] || '', - rawFormat: tuple[3] || '', - urlLink: tuple[4] || '', - isChunked: tuple[5] === true - }; - } - // Format 2: Legacy JSON object format - // [{ hashFunctionId, contentFormat, contentHash, rawFormat, urlLink, isChunked }] - if (typeof tuple === 'object' && tuple !== null && !Array.isArray(tuple)) { - return { - hashFunctionId: tuple.hashFunctionId || '', - contentFormat: tuple.contentFormat || tuple.contentFormatNftId || '', - contentHash: tuple.contentHash || '', - rawFormat: tuple.rawFormat || tuple.rawFormatNftId || '', - urlLink: tuple.urlLink || '', - isChunked: tuple.isChunked === true - }; - } - } - } - catch { - // Not JSON — treat as legacy plain URL string - } - // Format 3: Legacy plain URL string - return { - hashFunctionId: '', - contentFormat: '', - contentHash: '', - rawFormat: '', - urlLink: content, - isChunked: false - }; -} diff --git a/dist/ergo/sourceStore.d.ts b/dist/ergo/sourceStore.d.ts deleted file mode 100644 index 9d72ee2..0000000 --- a/dist/ergo/sourceStore.d.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { type ReputationProof } from 'reputation-system'; -import { type FileSource, type SourceEntry } from './sourceObject'; -/** - * Creates a user profile box (same as forum). - */ -export declare function createProfileBox(explorerUri: string): Promise; -/** - * Add a new FILE_SOURCE box. - * Creates a box with R5=fileHash (raw file hash), R9=serialized source entries. - * - * @param fileHash - The raw file hash digest (R5 anchor) - * @param hashFunctionId - ID of the hash function used (HASH(EMPTY_INPUT)) - * @param sourceEntry - Single SourceEntry object for R9 - * @param proof - User's reputation proof - * @param explorerUri - Explorer API endpoint - */ -export declare function addFileSource(fileHash: string, hashFunctionId: string, sourceEntry: SourceEntry, proof: ReputationProof | null, explorerUri: string): Promise; -/** - * Update a FILE_SOURCE box (spend old, create new with same hash but new source entries). - * The old box must be owned by the current user. - * - * @param oldBoxId - Box ID of the existing FILE_SOURCE to update - * @param fileHash - The raw file hash (must match existing) - * @param newSourceEntry - New SourceEntry object for R9 - * @param proof - User's reputation proof - * @param explorerUri - Explorer API endpoint - */ -export declare function updateFileSource(oldBoxId: string, fileHash: string, newSourceEntry: SourceEntry, proof: ReputationProof | null, explorerUri: string): Promise; -/** - * Confirm a FILE_SOURCE box. - * Creates a new FILE_SOURCE box with same hash and source entries. - */ -export declare function confirmSource(fileHash: string, hashFunctionId: string, sourceEntry: SourceEntry, proof: ReputationProof | null, currentSources: FileSource[], explorerUri: string): Promise; -/** - * Mark a FILE_SOURCE box as invalid. - * Creates an INVALID_FILE_SOURCE box with R5=sourceBoxId. - */ -export declare function markInvalidSource(sourceBoxId: string, proof: ReputationProof | null, explorerUri: string): Promise; -/** - * Mark a source URL as unavailable. - * Creates an UNAVAILABLE_SOURCE box with R5=sourceUrl. - */ -export declare function markUnavailableSource(sourceUrl: string, proof: ReputationProof | null, explorerUri: string): Promise; -/** - * Trust or distrust a profile. - * Creates a PROFILE_OPINION box with R5=profileTokenId, R8=isTrusted. - */ -export declare function trustProfile(profileTokenId: string, isTrusted: boolean, proof: ReputationProof | null, explorerUri: string): Promise; diff --git a/dist/ergo/sourceStore.js b/dist/ergo/sourceStore.js deleted file mode 100644 index f0b7ff0..0000000 --- a/dist/ergo/sourceStore.js +++ /dev/null @@ -1,148 +0,0 @@ -import { create_profile, create_opinion, update_opinion } from 'reputation-system'; -import { serializeSourceEntry } from './sourceObject'; -import { FILE_SOURCE_TYPE_NFT_ID, INVALID_FILE_SOURCE_TYPE_NFT_ID, UNAVAILABLE_SOURCE_TYPE_NFT_ID, PROFILE_OPINION_TYPE_NFT_ID, PROFILE_TOTAL_SUPPLY, PROFILE_TYPE_NFT_ID, } from './envs'; -/** - * Gets the main profile box from a ReputationProof. - * Returns the first box with PROFILE_TYPE_NFT_ID as its type. - */ -function getMainProfileBox(proof) { - if (!proof) - return null; - return proof.current_boxes.find((b) => b.object_pointer === proof.token_id) || null; -} -// --- PROFILE MANAGEMENT --- -/** - * Creates a user profile box (same as forum). - */ -export async function createProfileBox(explorerUri) { - const profileTxId = await create_profile(explorerUri, PROFILE_TOTAL_SUPPLY, PROFILE_TYPE_NFT_ID, { name: "Anon" }); - if (!profileTxId) { - throw new Error("Fatal error: The profile creation transaction failed to send."); - } - console.warn("User profile not found. A new one has been created. Please wait ~2 minutes for the transaction to confirm and try again."); - return profileTxId; -} -/** - * Add a new FILE_SOURCE box. - * Creates a box with R5=fileHash (raw file hash), R9=serialized source entries. - * - * @param fileHash - The raw file hash digest (R5 anchor) - * @param hashFunctionId - ID of the hash function used (HASH(EMPTY_INPUT)) - * @param sourceEntry - Single SourceEntry object for R9 - * @param proof - User's reputation proof - * @param explorerUri - Explorer API endpoint - */ -export async function addFileSource(fileHash, hashFunctionId, sourceEntry, proof, explorerUri) { - console.log("API: addFileSource", { fileHash, hashFunctionId, sourceEntry }); - console.log("Proof:", proof); - if (!proof) { - throw new Error("Reputation proof is required to add a file source."); - } - const mainBox = getMainProfileBox(proof); - console.log("Opinion box (profile):", mainBox); - if (!mainBox) { - throw new Error("Profile box required but not available yet. Please wait for profile creation to confirm."); - } - // Serialize single source entry as JSON for R9 content - const serializedContent = serializeSourceEntry(sourceEntry); - const tx = await create_opinion(explorerUri, // explorerUri: Explorer API endpoint - 1, // token_amount: 1 token for the new file source box - FILE_SOURCE_TYPE_NFT_ID, // type_nft_id: Type NFT for FILE_SOURCE - fileHash, // object_pointer: R5 - The raw file hash - true, // polarization: R8 - Positive opinion - serializedContent, // content: R9 - Serialized source entry - false, // is_locked: R6 - Unlocked - mainBox // main_box: The profile box to split from - ); - if (!tx) - throw new Error("File source transaction failed."); - console.log("File source transaction sent, ID:", tx); - return tx; -} -/** - * Update a FILE_SOURCE box (spend old, create new with same hash but new source entries). - * The old box must be owned by the current user. - * - * @param oldBoxId - Box ID of the existing FILE_SOURCE to update - * @param fileHash - The raw file hash (must match existing) - * @param newSourceEntry - New SourceEntry object for R9 - * @param proof - User's reputation proof - * @param explorerUri - Explorer API endpoint - */ -export async function updateFileSource(oldBoxId, fileHash, newSourceEntry, proof, explorerUri) { - console.log("API: updateFileSource", { oldBoxId, fileHash, newSourceEntry }); - // Find the existing file source box to update - const existingBox = proof?.current_boxes.find((b) => b.box.boxId === oldBoxId) || null; - if (!existingBox) { - throw new Error("File source box to update not found."); - } - // Serialize new source entry as JSON for R9 content - const serializedContent = serializeSourceEntry(newSourceEntry); - const tx = await update_opinion(explorerUri, existingBox, true, serializedContent); - if (!tx) - throw new Error("File source update transaction failed."); - console.log("File source update transaction sent, ID:", tx); - return tx; -} -/** - * Confirm a FILE_SOURCE box. - * Creates a new FILE_SOURCE box with same hash and source entries. - */ -export async function confirmSource(fileHash, hashFunctionId, sourceEntry, proof, currentSources, explorerUri) { - console.log("API: confirmSource", { fileHash, sourceEntry }); - // Safety check: has the user already confirmed this? - const userTokenId = proof?.token_id; - const primaryUrl = sourceEntry.urlLink || ''; - if (userTokenId && currentSources.some(s => s.source?.urlLink === primaryUrl && s.ownerTokenId === userTokenId)) { - throw new Error("You have already confirmed this source."); - } - return await addFileSource(fileHash, hashFunctionId, sourceEntry, proof, explorerUri); -} -/** - * Mark a FILE_SOURCE box as invalid. - * Creates an INVALID_FILE_SOURCE box with R5=sourceBoxId. - */ -export async function markInvalidSource(sourceBoxId, proof, explorerUri) { - console.log("API: markInvalidSource", { sourceBoxId }); - const mainBox = getMainProfileBox(proof); - if (!mainBox) { - throw new Error("Profile box required but not available yet."); - } - const tx = await create_opinion(explorerUri, 1, INVALID_FILE_SOURCE_TYPE_NFT_ID, sourceBoxId, false, null, false, mainBox); - if (!tx) - throw new Error("Invalid source transaction failed."); - console.log("Invalid source transaction sent, ID:", tx); - return tx; -} -/** - * Mark a source URL as unavailable. - * Creates an UNAVAILABLE_SOURCE box with R5=sourceUrl. - */ -export async function markUnavailableSource(sourceUrl, proof, explorerUri) { - console.log("API: markUnavailableSource", sourceUrl); - const mainBox = getMainProfileBox(proof); - if (!mainBox) { - throw new Error("Profile box required but not available yet."); - } - const tx = await create_opinion(explorerUri, 1, UNAVAILABLE_SOURCE_TYPE_NFT_ID, sourceUrl, false, null, false, mainBox); - if (!tx) - throw new Error("Unavailable source transaction failed."); - console.log("Unavailable source transaction sent, ID:", tx); - return tx; -} -/** - * Trust or distrust a profile. - * Creates a PROFILE_OPINION box with R5=profileTokenId, R8=isTrusted. - */ -export async function trustProfile(profileTokenId, isTrusted, proof, explorerUri) { - console.log("API: trustProfile", { profileTokenId, isTrusted }); - const opinionBox = getMainProfileBox(proof); - if (!opinionBox) { - throw new Error("Profile box required but not available yet."); - } - const tx = await create_opinion(explorerUri, 1, PROFILE_OPINION_TYPE_NFT_ID, profileTokenId, isTrusted, null, false, opinionBox); - if (!tx) - throw new Error("Profile opinion transaction failed."); - console.log("Profile opinion transaction sent, ID:", tx); - return tx; -} diff --git a/dist/ergo/store.d.ts b/dist/ergo/store.d.ts deleted file mode 100644 index 13a6bf1..0000000 --- a/dist/ergo/store.d.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { type ReputationProof, type TypeNFT } from 'reputation-system'; -import { type FileSource, type InvalidFileSource, type UnavailableSource, type ProfileOpinion, type CachedData } from './sourceObject'; -export declare const address: import("svelte/store").Writable; -export declare const network: import("svelte/store").Writable; -export declare const connected: import("svelte/store").Writable; -export declare const balance: import("svelte/store").Writable; -export declare const compute_deep_level: import("svelte/store").Writable; -export declare const searchStore: import("svelte/store").Writable; -export declare const data_store: import("svelte/store").Writable; -export declare const types: import("svelte/store").Writable>; -export declare const proofs: import("svelte/store").Writable>; -export declare const reputation_proof: import("svelte/store").Writable; -export declare const explorer_uri: { - subscribe: (this: void, run: import("svelte/store").Subscriber, invalidate?: import("svelte/store").Invalidator | undefined) => import("svelte/store").Unsubscriber; - set: (value: string) => void; - update: (this: void, updater: import("svelte/store").Updater) => void; -}; -export declare const web_explorer_uri_tx: { - subscribe: (this: void, run: import("svelte/store").Subscriber, invalidate?: import("svelte/store").Invalidator | undefined) => import("svelte/store").Unsubscriber; - set: (value: string) => void; - update: (this: void, updater: import("svelte/store").Updater) => void; -}; -export declare const web_explorer_uri_addr: { - subscribe: (this: void, run: import("svelte/store").Subscriber, invalidate?: import("svelte/store").Invalidator | undefined) => import("svelte/store").Unsubscriber; - set: (value: string) => void; - update: (this: void, updater: import("svelte/store").Updater) => void; -}; -export declare const web_explorer_uri_tkn: { - subscribe: (this: void, run: import("svelte/store").Subscriber, invalidate?: import("svelte/store").Invalidator | undefined) => import("svelte/store").Unsubscriber; - set: (value: string) => void; - update: (this: void, updater: import("svelte/store").Updater) => void; -}; -export declare const CACHE_DURATION: number; -/** - * Helper to create a writable store that persists to localStorage. - */ -export declare function createPersistentStore(key: string, initialValue: T): { - subscribe: (this: void, run: import("svelte/store").Subscriber, invalidate?: import("svelte/store").Invalidator | undefined) => import("svelte/store").Unsubscriber; - set: (value: T) => void; - update: (fn: (value: T) => T) => void; -}; -export declare const fileSources: { - subscribe: (this: void, run: import("svelte/store").Subscriber>, invalidate?: import("svelte/store").Invalidator> | undefined) => import("svelte/store").Unsubscriber; - set: (value: CachedData) => void; - update: (fn: (value: CachedData) => CachedData) => void; -}; -export declare const currentSearchHash: import("svelte/store").Writable; -export declare const invalidFileSources: { - subscribe: (this: void, run: import("svelte/store").Subscriber>, invalidate?: import("svelte/store").Invalidator> | undefined) => import("svelte/store").Unsubscriber; - set: (value: CachedData) => void; - update: (fn: (value: CachedData) => CachedData) => void; -}; -export declare const unavailableSources: { - subscribe: (this: void, run: import("svelte/store").Subscriber>, invalidate?: import("svelte/store").Invalidator> | undefined) => import("svelte/store").Unsubscriber; - set: (value: CachedData) => void; - update: (fn: (value: CachedData) => CachedData) => void; -}; -export declare const profileOpinions: { - subscribe: (this: void, run: import("svelte/store").Subscriber>, invalidate?: import("svelte/store").Invalidator> | undefined) => import("svelte/store").Unsubscriber; - set: (value: CachedData) => void; - update: (fn: (value: CachedData) => CachedData) => void; -}; -export declare const profileInvalidations: { - subscribe: (this: void, run: import("svelte/store").Subscriber>, invalidate?: import("svelte/store").Invalidator> | undefined) => import("svelte/store").Unsubscriber; - set: (value: CachedData) => void; - update: (fn: (value: CachedData) => CachedData) => void; -}; -export declare const profileUnavailabilities: { - subscribe: (this: void, run: import("svelte/store").Subscriber>, invalidate?: import("svelte/store").Invalidator> | undefined) => import("svelte/store").Unsubscriber; - set: (value: CachedData) => void; - update: (fn: (value: CachedData) => CachedData) => void; -}; -export declare const profileOpinionsGiven: { - subscribe: (this: void, run: import("svelte/store").Subscriber>, invalidate?: import("svelte/store").Invalidator> | undefined) => import("svelte/store").Unsubscriber; - set: (value: CachedData) => void; - update: (fn: (value: CachedData) => CachedData) => void; -}; -export declare const isLoading: import("svelte/store").Writable; -export declare const error: import("svelte/store").Writable; -/** - * When enabled, adding a source will download the file from the URL and verify - * its hash matches before submitting the transaction. Disabled by default to - * avoid large downloads and CORS issues in the browser. - */ -export declare const hashValidationEnabled: { - subscribe: (this: void, run: import("svelte/store").Subscriber, invalidate?: import("svelte/store").Invalidator | undefined) => import("svelte/store").Unsubscriber; - set: (value: boolean) => void; - update: (fn: (value: boolean) => boolean) => void; -}; diff --git a/dist/ergo/store.js b/dist/ergo/store.js deleted file mode 100644 index 6735ca8..0000000 --- a/dist/ergo/store.js +++ /dev/null @@ -1,96 +0,0 @@ -import { writable } from 'svelte/store'; -import { network_id } from './envs'; -export const address = writable(null); -export const network = writable(null); -export const connected = writable(false); -export const balance = writable(null); -// App logic stores -export const compute_deep_level = writable(5); -export const searchStore = writable(null); -export const data_store = writable(null); -export const types = writable(new Map()); -// Main store for holding fetched reputation proofs, keyed by token ID. -export const proofs = writable(new Map()); -export const reputation_proof = writable(null); -// --- SOURCE STORES --- -const default_explorer_uri = (network_id == "mainnet") ? "https://api.ergoplatform.com" : "https://api-testnet.ergoplatform.com"; -const default_web_tx = (network_id == "mainnet") ? "https://sigmaspace.io/en/transaction/" : "https://testnet.ergoplatform.com/transactions/"; -const default_web_addr = (network_id == "mainnet") ? "https://sigmaspace.io/en/address/" : "https://testnet.ergoplatform.com/addresses/"; -const default_web_tkn = (network_id == "mainnet") ? "https://sigmaspace.io/en/token/" : "https://testnet.ergoplatform.com/tokens/"; -function createPersistedStringStore(key, startValue) { - const isBrowser = typeof window !== 'undefined'; - let initial = startValue; - if (isBrowser) { - const stored = localStorage.getItem(key); - if (stored) - initial = stored; - } - const { subscribe, set, update } = writable(initial); - return { - subscribe, - set: (value) => { - if (isBrowser) - localStorage.setItem(key, value); - set(value); - }, - update - }; -} -export const explorer_uri = createPersistedStringStore('explorer_uri', default_explorer_uri); -export const web_explorer_uri_tx = createPersistedStringStore('web_explorer_uri_tx', default_web_tx); -export const web_explorer_uri_addr = createPersistedStringStore('web_explorer_uri_addr', default_web_addr); -export const web_explorer_uri_tkn = createPersistedStringStore('web_explorer_uri_tkn', default_web_tkn); -// --- CACHE CONFIGURATION --- -export const CACHE_DURATION = 5 * 60 * 1000; // 5 minutes in milliseconds -/** - * Helper to create a writable store that persists to localStorage. - */ -export function createPersistentStore(key, initialValue) { - const isBrowser = typeof window !== 'undefined'; - let initial = initialValue; - if (isBrowser) { - try { - const saved = localStorage.getItem(key); - if (saved) { - initial = JSON.parse(saved); - } - } - catch (e) { - console.warn(`Error loading ${key} from localStorage:`, e); - } - } - const { subscribe, set, update } = writable(initial); - return { - subscribe, - set: (value) => { - if (isBrowser) - localStorage.setItem(key, JSON.stringify(value)); - set(value); - }, - update: (fn) => { - update(current => { - const newValue = fn(current); - if (isBrowser) - localStorage.setItem(key, JSON.stringify(newValue)); - return newValue; - }); - } - }; -} -export const fileSources = createPersistentStore('source_file_sources', {}); -export const currentSearchHash = writable(""); -export const invalidFileSources = createPersistentStore('source_invalidations', {}); -export const unavailableSources = createPersistentStore('source_unavailabilities', {}); -export const profileOpinions = createPersistentStore('source_profile_opinions', {}); -export const profileInvalidations = createPersistentStore('source_profile_invalidations', {}); -export const profileUnavailabilities = createPersistentStore('source_profile_unavailabilities', {}); -export const profileOpinionsGiven = createPersistentStore('source_profile_opinions_given', {}); -export const isLoading = writable(false); -export const error = writable(null); -// --- SETTINGS --- -/** - * When enabled, adding a source will download the file from the URL and verify - * its hash matches before submitting the transaction. Disabled by default to - * avoid large downloads and CORS issues in the browser. - */ -export const hashValidationEnabled = createPersistentStore('hash_validation_enabled', false); diff --git a/dist/ergo/utils.d.ts b/dist/ergo/utils.d.ts deleted file mode 100644 index 2cab613..0000000 --- a/dist/ergo/utils.d.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { type Box, type Amount } from '@fleet-sdk/core'; -export interface InputBox { - boxId: string; - value: Amount; - assets: { - tokenId: string; - amount: Amount; - }[]; - ergoTree: string; - creationHeight: number; - additionalRegisters: { - [key: string]: string; - }; - index: number; - transactionId: string; -} -export declare function hexToUtf8(hexString: string): string | null; -export declare function hexOrUtf8ToBytes(value: string | null | undefined): Uint8Array; -export declare function generate_pk_proposition(wallet_pk: string): string; -export declare function SString(value: string): string; -export declare function uint8ArrayToHex(array: Uint8Array): string; -export declare function parseLongColl(renderedValue: any): bigint[] | null; -export declare function hexToBytes(hexString: string | undefined | null): Uint8Array | null; -export declare function parseIntFromRendered(renderedValue: any): number | null; -export declare function parseCollByteToHex(renderedValue: any): string | null; -export declare function parseIntFromHex(renderedValue: any): number | null; -export declare function utf8StringToCollByteHex(inputString: string): string; -export declare function bigintToLongByteArray(value: bigint): Uint8Array; -export declare function parseBox(e: Box): InputBox; -/** - * A utility function to convert a serialized value to its "rendered" format (for debugging/display). - * This is a simplification and may not cover all Ergo types. - * @param serializedValue The full serialized hex string. - * @returns A simplified hex string. - */ -export declare function serializedToRendered(serializedValue: string): string; -/** - * Converts a JavaScript string directly to its "rendered" hex format. - * This is a convenience function that combines stringToSerialized and serializedToRendered. - * @param value The string to convert. - * @returns The simplified, rendered hex string. - */ -export declare function stringToRendered(value: string): string; -export declare function pkHexToBase58Address(pkHex?: string): string; diff --git a/dist/ergo/utils.js b/dist/ergo/utils.js deleted file mode 100644 index d7bc16e..0000000 --- a/dist/ergo/utils.js +++ /dev/null @@ -1,193 +0,0 @@ -import { stringToBytes } from "@scure/base"; -import { ErgoAddress, SByte, SColl, SGroupElement } from '@fleet-sdk/core'; -export function hexToUtf8(hexString) { - try { - if (hexString.length % 2 !== 0) { - return null; - } - const byteArray = new Uint8Array(hexString.match(/.{1,2}/g).map(byte => parseInt(byte, 16))); - const decoder = new TextDecoder('utf-8'); - const utf8String = decoder.decode(byteArray); - return utf8String; - } - catch { - return null; - } -} -export function hexOrUtf8ToBytes(value) { - if (!value) { - return new Uint8Array(); - } - const hexBytes = hexToBytes(value); - if (hexBytes) { - return hexBytes; - } - // fallback: utf-8 - return new TextEncoder().encode(value); -} -export function generate_pk_proposition(wallet_pk) { - const pk = ErgoAddress.fromBase58(wallet_pk).getPublicKeys()[0]; - const encodedProp = SGroupElement(pk); - return encodedProp.toHex(); -} -export function SString(value) { - return SColl(SByte, hexToBytes(value) ?? "").toHex(); -} -export function uint8ArrayToHex(array) { - return [...new Uint8Array(array)] - .map(x => x.toString(16).padStart(2, '0')) - .join(''); -} -export function parseLongColl(renderedValue) { - if (!Array.isArray(renderedValue)) { - return null; - } - try { - return renderedValue.map(item => { - if (typeof item === 'string' || typeof item === 'number' || typeof item === 'bigint') { - return BigInt(item); - } - throw new Error(`No se puede convertir el item '${item}' a BigInt.`); - }); - } - catch (e) { - console.error("parseLongColl: Error convirtiendo items a BigInt:", renderedValue, e); - return null; - } -} -export function hexToBytes(hexString) { - if (!hexString || typeof hexString !== 'string' || !/^[0-9a-fA-F]*$/.test(hexString)) { - return null; - } - if (hexString.length % 2 !== 0) { - return null; - } - try { - const byteArray = new Uint8Array(hexString.length / 2); - for (let i = 0; i < byteArray.length; i++) { - const byte = parseInt(hexString.substring(i * 2, i * 2 + 2), 16); - if (isNaN(byte)) { - throw new Error("Se encontró un carácter hexadecimal inválido durante el parseInt."); - } - byteArray[i] = byte; - } - return byteArray; - } - catch (e) { - console.error("hexToBytes: Error convirtiendo hex a bytes:", hexString, e); - return null; - } -} -export function parseIntFromRendered(renderedValue) { - if (renderedValue === null || renderedValue === undefined) - return null; - if (typeof renderedValue === 'number') { - return Number.isFinite(renderedValue) ? renderedValue : null; - } - if (typeof renderedValue === 'string') { - const num = parseInt(renderedValue, 10); - return Number.isFinite(num) ? num : null; - } - return null; -} -export function parseCollByteToHex(renderedValue) { - if (renderedValue === null || renderedValue === undefined) - return null; - if (Array.isArray(renderedValue) && renderedValue.every(item => typeof item === 'number' && item >= 0 && item <= 255)) { - try { - return uint8ArrayToHex(new Uint8Array(renderedValue)); - } - catch (e) { - console.error("parseCollByteToHex: Error convirtiendo array de bytes a hex:", renderedValue, e); - return null; - } - } - if (typeof renderedValue === 'string') { - const cleanedHex = renderedValue.startsWith('0x') ? renderedValue.substring(2) : renderedValue; - if (/^[0-9a-fA-F]*$/.test(cleanedHex) && cleanedHex.length % 2 === 0) { - return cleanedHex; - } - } - return null; -} -export function parseIntFromHex(renderedValue) { - if (typeof renderedValue !== 'string' && typeof renderedValue !== 'number') - return null; - try { - if (typeof renderedValue === 'number') - return renderedValue; - const num = parseInt(renderedValue, 10); - return isNaN(num) ? null : num; - } - catch (e) { - return null; - } -} -export function utf8StringToCollByteHex(inputString) { - const bytes = stringToBytes('utf8', inputString); - return SColl(SByte, bytes).toHex(); -} -export function bigintToLongByteArray(value) { - const MIN_LONG = -(2n ** 63n); - const MAX_LONG = (2n ** 63n) - 1n; - if (value < MIN_LONG || value > MAX_LONG) { - throw new Error(`Valor ${value} está fuera del rango para un Long de 64 bits con signo.`); - } - const buffer = new ArrayBuffer(8); - const view = new DataView(buffer); - view.setBigInt64(0, value, false); - return new Uint8Array(buffer); -} -export function parseBox(e) { - return { - boxId: e.boxId, - value: e.value, - assets: e.assets, - ergoTree: e.ergoTree, - creationHeight: e.creationHeight, - additionalRegisters: Object.entries(e.additionalRegisters).reduce((acc, [key, value]) => { - if (value) - acc[key] = value; - return acc; - }, {}), - index: e.index, - transactionId: e.transactionId - }; -} -/** - * A utility function to convert a serialized value to its "rendered" format (for debugging/display). - * This is a simplification and may not cover all Ergo types. - * @param serializedValue The full serialized hex string. - * @returns A simplified hex string. - */ -export function serializedToRendered(serializedValue) { - if (serializedValue.startsWith('0e')) { - return serializedValue.substring(4); - } - else if (serializedValue.startsWith('04')) { - return serializedValue.substring(2); - } - return serializedValue; -} -/** - * Converts a JavaScript string directly to its "rendered" hex format. - * This is a convenience function that combines stringToSerialized and serializedToRendered. - * @param value The string to convert. - * @returns The simplified, rendered hex string. - */ -export function stringToRendered(value) { - return serializedToRendered(SString(value)); -} -export function pkHexToBase58Address(pkHex) { - if (!pkHex) - return "N/A"; - try { - const pkBytes = hexToBytes(pkHex); - if (!pkBytes) - return "Invalid PK"; - return ErgoAddress.fromPublicKey(pkBytes).toString(); - } - catch { - return "Invalid PK"; - } -} diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 246df74..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -export { fetchFileSourcesByHash, fetchInvalidFileSources, fetchUnavailableSources, fetchProfileOpinions, fetchFileSourcesByProfile, fetchInvalidFileSourcesByProfile, fetchUnavailableSourcesByProfile, fetchProfileOpinionsByAuthor, searchByHash, loadProfileData } from './ergo/sourceFetch'; -export { createProfileBox, addFileSource, updateFileSource, confirmSource, markInvalidSource, markUnavailableSource, trustProfile } from './ergo/sourceStore'; -export type { SourceEntry, FileSource, InvalidFileSource, UnavailableSource, ProfileOpinion, TimelineEvent, FileSourceWithScore, DownloadSourceGroup, ProfileSourceGroup, SearchResult, ProfileData } from './ergo/sourceObject'; -export { groupByDownloadSource, groupByProfile, calculateProfileTrust, aggregateSourceScore, getPrimaryUrl, getAllUrls, serializeSourceEntry, deserializeSourceEntry } from './ergo/sourceObject'; -export type { ReputationProof, RPBox, TypeNFT, ApiBox } from './ergo/object'; -export { PROFILE_TYPE_NFT_ID, PROFILE_TOTAL_SUPPLY, FILE_SOURCE_TYPE_NFT_ID, INVALID_FILE_SOURCE_TYPE_NFT_ID, UNAVAILABLE_SOURCE_TYPE_NFT_ID, PROFILE_OPINION_TYPE_NFT_ID, } from './ergo/envs'; -export { hashValidationEnabled } from './ergo/store'; -export { HASH_OPTIONS, SEARCH_HASH_ALGORITHMS } from './ergo/hashUtils'; -export { default as ProfileCard } from './components/ProfileCard.svelte'; -export { default as FileSourceCreation } from './components/FileSourceCreation.svelte'; -export { default as FileSourceCard } from './components/FileSourceCard.svelte'; -export { default as FileCard } from './components/FileCard.svelte'; -export { default as SearchByHash } from './components/SearchByHash.svelte'; -export { default as ProfileSources } from './components/ProfileSources.svelte'; -export { default as DownloadSourceCard } from './components/DownloadSourceCard.svelte'; -export { default as ProfileSourceGroupView } from './components/ProfileSourceGroup.svelte'; -export { default as Timeline } from './components/Timeline.svelte'; -export { default as SettingsModal } from './components/SettingsModal.svelte'; -export { default as ProfileModal } from './components/ProfileModal.svelte'; -export { default as AddSource } from './components/AddSource.svelte'; diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index 6fe630d..0000000 --- a/dist/index.js +++ /dev/null @@ -1,26 +0,0 @@ -// Source Application Library - Main Entry Point -// This library provides functions and components for decentralized file discovery and verification -// ===== SOURCE FETCH FUNCTIONS ===== -export { fetchFileSourcesByHash, fetchInvalidFileSources, fetchUnavailableSources, fetchProfileOpinions, fetchFileSourcesByProfile, fetchInvalidFileSourcesByProfile, fetchUnavailableSourcesByProfile, fetchProfileOpinionsByAuthor, searchByHash, loadProfileData } from './ergo/sourceFetch'; -// ===== SOURCE STORE FUNCTIONS ===== -export { createProfileBox, addFileSource, updateFileSource, confirmSource, markInvalidSource, markUnavailableSource, trustProfile } from './ergo/sourceStore'; -export { groupByDownloadSource, groupByProfile, calculateProfileTrust, aggregateSourceScore, getPrimaryUrl, getAllUrls, serializeSourceEntry, deserializeSourceEntry } from './ergo/sourceObject'; -// ===== ENVIRONMENT CONSTANTS ===== -export { PROFILE_TYPE_NFT_ID, PROFILE_TOTAL_SUPPLY, FILE_SOURCE_TYPE_NFT_ID, INVALID_FILE_SOURCE_TYPE_NFT_ID, UNAVAILABLE_SOURCE_TYPE_NFT_ID, PROFILE_OPINION_TYPE_NFT_ID, } from './ergo/envs'; -// ===== SETTINGS STORES ===== -export { hashValidationEnabled } from './ergo/store'; -// ===== HASH UTILITIES ===== -export { HASH_OPTIONS, SEARCH_HASH_ALGORITHMS } from './ergo/hashUtils'; -// ===== SVELTE COMPONENTS ===== -export { default as ProfileCard } from './components/ProfileCard.svelte'; -export { default as FileSourceCreation } from './components/FileSourceCreation.svelte'; -export { default as FileSourceCard } from './components/FileSourceCard.svelte'; -export { default as FileCard } from './components/FileCard.svelte'; -export { default as SearchByHash } from './components/SearchByHash.svelte'; -export { default as ProfileSources } from './components/ProfileSources.svelte'; -export { default as DownloadSourceCard } from './components/DownloadSourceCard.svelte'; -export { default as ProfileSourceGroupView } from './components/ProfileSourceGroup.svelte'; -export { default as Timeline } from './components/Timeline.svelte'; -export { default as SettingsModal } from './components/SettingsModal.svelte'; -export { default as ProfileModal } from './components/ProfileModal.svelte'; -export { default as AddSource } from './components/AddSource.svelte'; diff --git a/dist/utils.d.ts b/dist/utils.d.ts deleted file mode 100644 index 90657a8..0000000 --- a/dist/utils.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { type ClassValue } from "clsx"; -import type { TransitionConfig } from "svelte/transition"; -export declare function cn(...inputs: ClassValue[]): string; -type FlyAndScaleParams = { - y?: number; - x?: number; - start?: number; - duration?: number; -}; -export declare const flyAndScale: (node: Element, params?: FlyAndScaleParams) => TransitionConfig; -export {}; diff --git a/dist/utils.js b/dist/utils.js deleted file mode 100644 index 9effec0..0000000 --- a/dist/utils.js +++ /dev/null @@ -1,38 +0,0 @@ -import { clsx } from "clsx"; -import { twMerge } from "tailwind-merge"; -import { cubicOut } from "svelte/easing"; -export function cn(...inputs) { - return twMerge(clsx(inputs)); -} -export const flyAndScale = (node, params = { y: -8, x: 0, start: 0.95, duration: 150 }) => { - const style = getComputedStyle(node); - const transform = style.transform === "none" ? "" : style.transform; - const scaleConversion = (valueA, scaleA, scaleB) => { - const [minA, maxA] = scaleA; - const [minB, maxB] = scaleB; - const percentage = (valueA - minA) / (maxA - minA); - const valueB = percentage * (maxB - minB) + minB; - return valueB; - }; - const styleToString = (style) => { - return Object.keys(style).reduce((str, key) => { - if (style[key] === undefined) - return str; - return str + `${key}:${style[key]};`; - }, ""); - }; - return { - duration: params.duration ?? 200, - delay: 0, - css: (t) => { - const y = scaleConversion(t, [0, 1], [params.y ?? 5, 0]); - const x = scaleConversion(t, [0, 1], [params.x ?? 0, 0]); - const scale = scaleConversion(t, [0, 1], [params.start ?? 0.95, 1]); - return styleToString({ - transform: `${transform} translate3d(${x}px, ${y}px, 0) scale(${scale})`, - opacity: t - }); - }, - easing: cubicOut - }; -}; diff --git a/src/lib/components/AddSource.svelte b/src/lib/components/AddSource.svelte index 2c921a1..68b7984 100644 --- a/src/lib/components/AddSource.svelte +++ b/src/lib/components/AddSource.svelte @@ -7,7 +7,7 @@ import { Label } from "$lib/components/ui/label/index.js"; import { Textarea } from "$lib/components/ui/textarea"; import { AlertTriangle } from "lucide-svelte"; - import { HASH_OPTIONS, validateHash } from "$lib/ergo/hashUtils"; + import { HASH_OPTIONS, normalizeHashAlgorithmId, validateHash } from "$lib/ergo/hashUtils"; export let hasProfile = false; export let profile: ReputationProof | null = null; @@ -22,7 +22,9 @@ let hashSelectValue = ""; let customHashFunctionId = ""; - $: effectiveAlgorithm = hashSelectValue === "__custom__" ? customHashFunctionId : hashSelectValue; + $: effectiveAlgorithm = hashSelectValue === "__custom__" + ? customHashFunctionId + : normalizeHashAlgorithmId(hashSelectValue); // Hash validation (Change #1) let fileHashValidationError: string | null = null; @@ -43,7 +45,7 @@ try { // Build a simple source entry with just the URL const entry: SourceEntry = { - hashFunctionId: "", + hashFunctionId: normalizeHashAlgorithmId(effectiveAlgorithm), contentFormat: "", contentHash: "", rawFormat: "", diff --git a/src/lib/components/FileSourceCreation.svelte b/src/lib/components/FileSourceCreation.svelte index ee9fc0b..06146ae 100644 --- a/src/lib/components/FileSourceCreation.svelte +++ b/src/lib/components/FileSourceCreation.svelte @@ -13,6 +13,7 @@ import { type Writable } from "svelte/store"; import { + HASH_ALGORITHM_IDS, HASH_OPTIONS, getAlgorithmLabel, normalizeHashAlgorithmId, @@ -25,7 +26,7 @@ export let source_explorer_url: string; export let onSourceAdded: ((txId: string) => void) | null = null; export let hash: Writable | undefined = undefined; - export let fixedHashFunctionId: string = "blake2b256"; + export let fixedHashFunctionId: string = HASH_ALGORITHM_IDS.blake2b256; /** When false, skip automatic hash verification when adding a source. */ export let hashValidationEnabled: boolean = false; @@ -73,7 +74,7 @@ let rawHashValidationError: string | null = null; $: effectiveHashFunctionId = isHashFixed - ? (fixedHashFunctionId.trim() || "blake2b256") + ? normalizeHashAlgorithmId(fixedHashFunctionId.trim() || HASH_ALGORITHM_IDS.blake2b256) : (hashSelectValue === "__custom__" ? customHashFunctionId : hashSelectValue); // Validate file hash when it changes @@ -292,7 +293,9 @@ const finalRawHash = contentEqualsRaw ? entryContentHash.trim() : ""; // rawHash not a separate field const entry: SourceEntry = { - hashFunctionId: entryHashFunctionId.trim(), + hashFunctionId: normalizeHashAlgorithmId( + entryHashFunctionId.trim() || effectiveHashFunctionId.trim(), + ), contentFormat: entryContentFormat.trim(), contentHash: entryContentHash.trim(), rawFormat: finalRawFormat, diff --git a/src/lib/components/SearchByHash.svelte b/src/lib/components/SearchByHash.svelte index bdc6402..f42235b 100644 --- a/src/lib/components/SearchByHash.svelte +++ b/src/lib/components/SearchByHash.svelte @@ -19,7 +19,7 @@ import DownloadSourceCard from "./DownloadSourceCard.svelte"; import ProfileSourceGroup from "./ProfileSourceGroup.svelte"; import Timeline from "./Timeline.svelte"; - import { SEARCH_HASH_ALGORITHMS } from "$lib/ergo/hashUtils"; + import { normalizeHashAlgorithmId, SEARCH_HASH_ALGORITHMS } from "$lib/ergo/hashUtils"; export let hasProfile = false; export let reputationProof: ReputationProof | null = null; @@ -46,7 +46,7 @@ const algoParam = $page.url.searchParams.get("algorithm"); if (searchParam && searchParam !== searchHash) { searchHash = searchParam; - if (algoParam) searchAlgorithm = algoParam; + if (algoParam) searchAlgorithm = normalizeHashAlgorithmId(algoParam); onSearch(searchHash, searchAlgorithm || undefined); } } @@ -77,7 +77,9 @@ // Filter sources by selected algorithm if set $: filteredSources = searchAlgorithm - ? sources.filter(s => s.hashFunctionId === searchAlgorithm) + ? sources.filter( + (s) => normalizeHashAlgorithmId(s.hashFunctionId) === normalizeHashAlgorithmId(searchAlgorithm), + ) : sources; $: timelineEvents = (() => { diff --git a/src/lib/ergo/hashUtils.ts b/src/lib/ergo/hashUtils.ts index 693564b..ea51308 100644 --- a/src/lib/ergo/hashUtils.ts +++ b/src/lib/ergo/hashUtils.ts @@ -8,14 +8,44 @@ import { sha256 } from '@noble/hashes/sha256'; import { sha3_256, keccak_256 } from '@noble/hashes/sha3'; import { blake2b } from '@noble/hashes/blake2b'; -/** Known hash algorithm IDs used in the application */ -export const HASH_ALGORITHMS = [ - { label: "SHA3-256", value: "sha3_256" }, - { label: "Blake2b", value: "blake2b" }, - { label: "SHA-256", value: "sha256" }, - { label: "Keccak-256", value: "keccak256" }, +/** Canonical algorithm IDs are defined as HASH(EMPTY_INPUT). */ +export const HASH_ALGORITHM_IDS = { + sha3_256: 'a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a', + blake2b256: '0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8', + sha256: 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', + keccak256: 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470', +} as const; + +const HASH_ALGORITHM_DEFINITIONS = [ + { + key: 'sha3_256', + label: 'SHA3-256', + value: HASH_ALGORITHM_IDS.sha3_256, + aliases: ['sha3_256'], + }, + { + key: 'blake2b256', + label: 'Blake2b-256', + value: HASH_ALGORITHM_IDS.blake2b256, + aliases: ['blake2b', 'blake2b256'], + }, + { + key: 'sha256', + label: 'SHA-256', + value: HASH_ALGORITHM_IDS.sha256, + aliases: ['sha256'], + }, + { + key: 'keccak256', + label: 'Keccak-256', + value: HASH_ALGORITHM_IDS.keccak256, + aliases: ['keccak256'], + }, ] as const; +/** Known hash algorithm IDs used in the application */ +export const HASH_ALGORITHMS = HASH_ALGORITHM_DEFINITIONS.map(({ label, value }) => ({ label, value })); + /** All algorithm values including custom */ export const HASH_OPTIONS = [ ...HASH_ALGORITHMS, @@ -29,17 +59,24 @@ function uint8ArrayToHex(array: Uint8Array): string { return [...array].map(x => x.toString(16).padStart(2, '0')).join(''); } +function getHashAlgorithmDefinition(algorithmId: string) { + const trimmed = algorithmId.trim(); + const normalized = trimmed.toLowerCase(); + + return HASH_ALGORITHM_DEFINITIONS.find( + ({ value, aliases }) => + value === trimmed || + value === normalized || + (aliases as readonly string[]).includes(normalized), + ); +} + /** - * Normalize supported aliases to the internal algorithm identifiers used by the UI. + * Normalize supported aliases to canonical on-chain identifiers HASH(EMPTY_INPUT). */ export function normalizeHashAlgorithmId(algorithmId: string): string { - const normalized = algorithmId.trim().toLowerCase(); - switch (normalized) { - case 'blake2b256': - return 'blake2b'; - default: - return normalized; - } + const trimmed = algorithmId.trim(); + return getHashAlgorithmDefinition(trimmed)?.value || trimmed; } /** @@ -47,14 +84,15 @@ export function normalizeHashAlgorithmId(algorithmId: string): string { * @returns hex string of the hash, or null if algorithm is unknown/custom */ export function computeHash(data: Uint8Array, algorithmId: string): string | null { - switch (normalizeHashAlgorithmId(algorithmId)) { + const definition = getHashAlgorithmDefinition(algorithmId); + switch (definition?.key) { case 'sha256': return uint8ArrayToHex(sha256(data)); case 'sha3_256': return uint8ArrayToHex(sha3_256(data)); case 'keccak256': return uint8ArrayToHex(keccak_256(data)); - case 'blake2b': + case 'blake2b256': // Default to 256-bit (32 bytes) output return uint8ArrayToHex(blake2b(data, { dkLen: 32 })); default: @@ -78,7 +116,7 @@ export function validateHash(hash: string, algorithmId: string): string | null { return 'Hash must contain only hexadecimal characters (0-9, a-f)'; } - switch (normalizeHashAlgorithmId(algorithmId)) { + switch (getHashAlgorithmDefinition(algorithmId)?.key) { case 'sha3_256': case 'sha256': case 'keccak256': @@ -86,9 +124,9 @@ export function validateHash(hash: string, algorithmId: string): string | null { return `${getAlgorithmLabel(algorithmId)} hash must be exactly 64 hex characters (256-bit). Got ${trimmed.length}.`; } break; - case 'blake2b': + case 'blake2b256': if (trimmed.length !== 64 && trimmed.length !== 128) { - return `Blake2b hash must be 64 hex characters (256-bit) or 128 hex characters (512-bit). Got ${trimmed.length}.`; + return `Blake2b-256 hash must be 64 hex characters (256-bit) or 128 hex characters (512-bit). Got ${trimmed.length}.`; } break; case '__custom__': @@ -106,11 +144,7 @@ export function validateHash(hash: string, algorithmId: string): string | null { * Get the human-readable label for an algorithm ID. */ export function getAlgorithmLabel(algorithmId: string): string { - if (normalizeHashAlgorithmId(algorithmId) === 'blake2b') { - return 'Blake2b-256'; - } - - const found = HASH_OPTIONS.find(o => o.value === algorithmId); + const found = getHashAlgorithmDefinition(algorithmId); return found ? found.label : algorithmId; } @@ -133,7 +167,7 @@ export async function downloadAndHash( onProgress?: (current: number, total: number) => void ): Promise { const normalizedAlgorithmId = normalizeHashAlgorithmId(algorithmId); - if (normalizedAlgorithmId === '__custom__' || !HASH_ALGORITHMS.some(a => a.value === normalizedAlgorithmId)) { + if (normalizedAlgorithmId === '__custom__' || !getHashAlgorithmDefinition(normalizedAlgorithmId)) { throw new Error('Cannot verify: custom hash algorithm'); } diff --git a/src/lib/index.ts b/src/lib/index.ts index 7fef254..c53fb4f 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -77,8 +77,10 @@ export { // ===== HASH UTILITIES ===== export { + HASH_ALGORITHM_IDS, HASH_OPTIONS, - SEARCH_HASH_ALGORITHMS + SEARCH_HASH_ALGORITHMS, + normalizeHashAlgorithmId } from './ergo/hashUtils'; // ===== SVELTE COMPONENTS ===== @@ -93,4 +95,4 @@ export { default as ProfileSourceGroupView } from './components/ProfileSourceGro export { default as Timeline } from './components/Timeline.svelte'; export { default as SettingsModal } from './components/SettingsModal.svelte'; export { default as ProfileModal } from './components/ProfileModal.svelte'; -export { default as AddSource } from './components/AddSource.svelte'; \ No newline at end of file +export { default as AddSource } from './components/AddSource.svelte'; From f949efe138207fb229a73527b11687fb08ed39b0 Mon Sep 17 00:00:00 2001 From: 0xf965 <40121100+0xf965@users.noreply.github.com> Date: Wed, 8 Apr 2026 10:34:21 +0200 Subject: [PATCH 11/23] dist --- dist/components/AddSource.svelte | 157 +++++ dist/components/AddSource.svelte.d.ts | 21 + dist/components/DownloadSourceCard.svelte | 210 +++++++ .../components/DownloadSourceCard.svelte.d.ts | 27 + dist/components/FileCard.svelte | 291 +++++++++ dist/components/FileCard.svelte.d.ts | 30 + dist/components/FileSourceCard.svelte | 530 ++++++++++++++++ dist/components/FileSourceCard.svelte.d.ts | 28 + dist/components/FileSourceCreation.svelte | 586 ++++++++++++++++++ .../components/FileSourceCreation.svelte.d.ts | 28 + dist/components/ProfileCard.svelte | 157 +++++ dist/components/ProfileCard.svelte.d.ts | 23 + dist/components/ProfileModal.svelte | 298 +++++++++ dist/components/ProfileModal.svelte.d.ts | 24 + dist/components/ProfileSourceGroup.svelte | 97 +++ .../components/ProfileSourceGroup.svelte.d.ts | 24 + dist/components/ProfileSources.svelte | 296 +++++++++ dist/components/ProfileSources.svelte.d.ts | 37 ++ dist/components/SearchByHash.svelte | 268 ++++++++ dist/components/SearchByHash.svelte.d.ts | 31 + dist/components/SettingsModal.svelte | 194 ++++++ dist/components/SettingsModal.svelte.d.ts | 30 + dist/components/Timeline.svelte | 225 +++++++ dist/components/Timeline.svelte.d.ts | 22 + .../ui/alert/alert-description.svelte | 8 + .../ui/alert/alert-description.svelte.d.ts | 19 + dist/components/ui/alert/alert-title.svelte | 13 + .../ui/alert/alert-title.svelte.d.ts | 22 + dist/components/ui/alert/alert.svelte | 10 + dist/components/ui/alert/alert.svelte.d.ts | 22 + dist/components/ui/alert/index.d.ts | 43 ++ dist/components/ui/alert/index.js | 19 + dist/components/ui/badge/badge.svelte | 16 + dist/components/ui/badge/badge.svelte.d.ts | 23 + dist/components/ui/badge/index.d.ts | 53 ++ dist/components/ui/badge/index.js | 16 + dist/components/ui/button/button.svelte | 20 + dist/components/ui/button/button.svelte.d.ts | 16 + dist/components/ui/button/index.d.ts | 117 ++++ dist/components/ui/button/index.js | 28 + .../ui/calendar/calendar-cell.svelte | 17 + .../ui/calendar/calendar-cell.svelte.d.ts | 19 + .../ui/calendar/calendar-day.svelte | 37 ++ .../ui/calendar/calendar-day.svelte.d.ts | 38 ++ .../ui/calendar/calendar-grid-body.svelte | 9 + .../calendar/calendar-grid-body.svelte.d.ts | 19 + .../ui/calendar/calendar-grid-head.svelte | 9 + .../calendar/calendar-grid-head.svelte.d.ts | 19 + .../ui/calendar/calendar-grid-row.svelte | 9 + .../ui/calendar/calendar-grid-row.svelte.d.ts | 19 + .../ui/calendar/calendar-grid.svelte | 9 + .../ui/calendar/calendar-grid.svelte.d.ts | 19 + .../ui/calendar/calendar-head-cell.svelte | 12 + .../calendar/calendar-head-cell.svelte.d.ts | 19 + .../ui/calendar/calendar-header.svelte | 12 + .../ui/calendar/calendar-header.svelte.d.ts | 19 + .../ui/calendar/calendar-heading.svelte | 15 + .../ui/calendar/calendar-heading.svelte.d.ts | 21 + .../ui/calendar/calendar-months.svelte | 11 + .../ui/calendar/calendar-months.svelte.d.ts | 19 + .../ui/calendar/calendar-next-button.svelte | 22 + .../calendar/calendar-next-button.svelte.d.ts | 30 + .../ui/calendar/calendar-prev-button.svelte | 22 + .../calendar/calendar-prev-button.svelte.d.ts | 30 + dist/components/ui/calendar/calendar.svelte | 52 ++ .../ui/calendar/calendar.svelte.d.ts | 13 + dist/components/ui/calendar/index.d.ts | 14 + dist/components/ui/calendar/index.js | 16 + dist/components/ui/card/card-content.svelte | 8 + .../ui/card/card-content.svelte.d.ts | 19 + .../ui/card/card-description.svelte | 8 + .../ui/card/card-description.svelte.d.ts | 19 + dist/components/ui/card/card-footer.svelte | 8 + .../ui/card/card-footer.svelte.d.ts | 19 + dist/components/ui/card/card-header.svelte | 8 + .../ui/card/card-header.svelte.d.ts | 19 + dist/components/ui/card/card-title.svelte | 13 + .../components/ui/card/card-title.svelte.d.ts | 22 + dist/components/ui/card/card.svelte | 11 + dist/components/ui/card/card.svelte.d.ts | 19 + dist/components/ui/card/index.d.ts | 8 + dist/components/ui/card/index.js | 9 + .../ui/carousel/carousel-content.svelte | 29 + .../ui/carousel/carousel-content.svelte.d.ts | 19 + .../ui/carousel/carousel-item.svelte | 20 + .../ui/carousel/carousel-item.svelte.d.ts | 19 + .../ui/carousel/carousel-next.svelte | 31 + .../ui/carousel/carousel-next.svelte.d.ts | 17 + .../ui/carousel/carousel-previous.svelte | 31 + .../ui/carousel/carousel-previous.svelte.d.ts | 17 + dist/components/ui/carousel/carousel.svelte | 90 +++ .../ui/carousel/carousel.svelte.d.ts | 22 + dist/components/ui/carousel/context.d.ts | 32 + dist/components/ui/carousel/context.js | 12 + dist/components/ui/carousel/index.d.ts | 5 + dist/components/ui/carousel/index.js | 5 + dist/components/ui/checkbox/checkbox.svelte | 30 + .../ui/checkbox/checkbox.svelte.d.ts | 13 + dist/components/ui/checkbox/index.d.ts | 2 + dist/components/ui/checkbox/index.js | 4 + .../ui/dialog/dialog-content.svelte | 32 + .../ui/dialog/dialog-content.svelte.d.ts | 19 + .../ui/dialog/dialog-description.svelte | 12 + .../ui/dialog/dialog-description.svelte.d.ts | 19 + .../components/ui/dialog/dialog-footer.svelte | 11 + .../ui/dialog/dialog-footer.svelte.d.ts | 19 + .../components/ui/dialog/dialog-header.svelte | 8 + .../ui/dialog/dialog-header.svelte.d.ts | 19 + .../ui/dialog/dialog-overlay.svelte | 17 + .../ui/dialog/dialog-overlay.svelte.d.ts | 17 + .../components/ui/dialog/dialog-portal.svelte | 6 + .../ui/dialog/dialog-portal.svelte.d.ts | 19 + dist/components/ui/dialog/dialog-title.svelte | 12 + .../ui/dialog/dialog-title.svelte.d.ts | 19 + dist/components/ui/dialog/index.d.ts | 12 + dist/components/ui/dialog/index.js | 14 + .../dropdown-menu-checkbox-item.svelte | 30 + .../dropdown-menu-checkbox-item.svelte.d.ts | 15 + .../dropdown-menu-content.svelte | 22 + .../dropdown-menu-content.svelte.d.ts | 15 + .../dropdown-menu/dropdown-menu-item.svelte | 24 + .../dropdown-menu-item.svelte.d.ts | 17 + .../dropdown-menu/dropdown-menu-label.svelte | 13 + .../dropdown-menu-label.svelte.d.ts | 23 + .../dropdown-menu-radio-group.svelte | 7 + .../dropdown-menu-radio-group.svelte.d.ts | 19 + .../dropdown-menu-radio-item.svelte | 30 + .../dropdown-menu-radio-item.svelte.d.ts | 15 + .../dropdown-menu-separator.svelte | 10 + .../dropdown-menu-separator.svelte.d.ts | 17 + .../dropdown-menu-shortcut.svelte | 8 + .../dropdown-menu-shortcut.svelte.d.ts | 19 + .../dropdown-menu-sub-content.svelte | 25 + .../dropdown-menu-sub-content.svelte.d.ts | 15 + .../dropdown-menu-sub-trigger.svelte | 25 + .../dropdown-menu-sub-trigger.svelte.d.ts | 21 + dist/components/ui/dropdown-menu/index.d.ts | 16 + dist/components/ui/dropdown-menu/index.js | 18 + dist/components/ui/form/form-button.svelte | 6 + .../ui/form/form-button.svelte.d.ts | 15 + .../ui/form/form-description.svelte | 13 + .../ui/form/form-description.svelte.d.ts | 25 + .../ui/form/form-element-field.svelte | 15 + .../ui/form/form-element-field.svelte.d.ts | 24 + .../ui/form/form-field-errors.svelte | 20 + .../ui/form/form-field-errors.svelte.d.ts | 36 ++ dist/components/ui/form/form-field.svelte | 15 + .../components/ui/form/form-field.svelte.d.ts | 24 + dist/components/ui/form/form-fieldset.svelte | 21 + .../ui/form/form-fieldset.svelte.d.ts | 23 + dist/components/ui/form/form-label.svelte | 11 + .../components/ui/form/form-label.svelte.d.ts | 21 + dist/components/ui/form/form-legend.svelte | 13 + .../ui/form/form-legend.svelte.d.ts | 24 + dist/components/ui/form/index.d.ts | 11 + dist/components/ui/form/index.js | 13 + dist/components/ui/input/index.d.ts | 23 + dist/components/ui/input/index.js | 4 + dist/components/ui/input/input.svelte | 32 + dist/components/ui/input/input.svelte.d.ts | 14 + dist/components/ui/label/index.d.ts | 2 + dist/components/ui/label/index.js | 4 + dist/components/ui/label/label.svelte | 16 + dist/components/ui/label/label.svelte.d.ts | 15 + dist/components/ui/menubar/index.d.ts | 17 + dist/components/ui/menubar/index.js | 19 + .../ui/menubar/menubar-checkbox-item.svelte | 30 + .../menubar/menubar-checkbox-item.svelte.d.ts | 15 + .../ui/menubar/menubar-content.svelte | 28 + .../ui/menubar/menubar-content.svelte.d.ts | 15 + .../components/ui/menubar/menubar-item.svelte | 24 + .../ui/menubar/menubar-item.svelte.d.ts | 17 + .../ui/menubar/menubar-label.svelte | 13 + .../ui/menubar/menubar-label.svelte.d.ts | 23 + .../ui/menubar/menubar-radio-item.svelte | 30 + .../ui/menubar/menubar-radio-item.svelte.d.ts | 15 + .../ui/menubar/menubar-separator.svelte | 7 + .../ui/menubar/menubar-separator.svelte.d.ts | 17 + .../ui/menubar/menubar-shortcut.svelte | 11 + .../ui/menubar/menubar-shortcut.svelte.d.ts | 19 + .../ui/menubar/menubar-sub-content.svelte | 22 + .../menubar/menubar-sub-content.svelte.d.ts | 15 + .../ui/menubar/menubar-sub-trigger.svelte | 25 + .../menubar/menubar-sub-trigger.svelte.d.ts | 21 + .../ui/menubar/menubar-trigger.svelte | 18 + .../ui/menubar/menubar-trigger.svelte.d.ts | 15 + dist/components/ui/menubar/menubar.svelte | 12 + .../components/ui/menubar/menubar.svelte.d.ts | 19 + dist/components/ui/progress/index.d.ts | 2 + dist/components/ui/progress/index.js | 4 + dist/components/ui/progress/progress.svelte | 22 + .../ui/progress/progress.svelte.d.ts | 17 + dist/components/ui/resizable/index.d.ts | 4 + dist/components/ui/resizable/index.js | 6 + .../ui/resizable/resizable-handle.svelte | 22 + .../ui/resizable/resizable-handle.svelte.d.ts | 23 + .../ui/resizable/resizable-pane-group.svelte | 18 + .../resizable-pane-group.svelte.d.ts | 19 + dist/components/ui/scroll-area/index.d.ts | 3 + dist/components/ui/scroll-area/index.js | 5 + .../scroll-area/scroll-area-scrollbar.svelte | 21 + .../scroll-area-scrollbar.svelte.d.ts | 25 + .../ui/scroll-area/scroll-area.svelte | 24 + .../ui/scroll-area/scroll-area.svelte.d.ts | 29 + dist/components/ui/select/index.d.ts | 11 + dist/components/ui/select/index.js | 13 + .../ui/select/select-content.svelte | 33 + .../ui/select/select-content.svelte.d.ts | 15 + dist/components/ui/select/select-item.svelte | 35 ++ .../ui/select/select-item.svelte.d.ts | 15 + dist/components/ui/select/select-label.svelte | 12 + .../ui/select/select-label.svelte.d.ts | 19 + .../ui/select/select-separator.svelte | 7 + .../ui/select/select-separator.svelte.d.ts | 17 + .../ui/select/select-trigger.svelte | 22 + .../ui/select/select-trigger.svelte.d.ts | 31 + dist/components/ui/textarea/index.d.ts | 19 + dist/components/ui/textarea/index.js | 4 + dist/components/ui/textarea/textarea.svelte | 28 + .../ui/textarea/textarea.svelte.d.ts | 14 + dist/contracts/digital_public_good.es | 80 +++ dist/contracts/reputation_proof.es | 200 ++++++ dist/ergo/envs.d.ts | 13 + dist/ergo/envs.js | 21 + dist/ergo/hashUtils.d.ts | 61 ++ dist/ergo/hashUtils.js | 197 ++++++ dist/ergo/object.d.ts | 2 + dist/ergo/object.js | 1 + dist/ergo/sourceFetch.d.ts | 44 ++ dist/ergo/sourceFetch.js | 292 +++++++++ dist/ergo/sourceObject.d.ts | 171 +++++ dist/ergo/sourceObject.js | 204 ++++++ dist/ergo/sourceStore.d.ts | 48 ++ dist/ergo/sourceStore.js | 148 +++++ dist/ergo/store.d.ts | 89 +++ dist/ergo/store.js | 96 +++ dist/ergo/utils.d.ts | 44 ++ dist/ergo/utils.js | 193 ++++++ dist/index.d.ts | 20 + dist/index.js | 26 + dist/utils.d.ts | 11 + dist/utils.js | 38 ++ 242 files changed, 9301 insertions(+) create mode 100644 dist/components/AddSource.svelte create mode 100644 dist/components/AddSource.svelte.d.ts create mode 100644 dist/components/DownloadSourceCard.svelte create mode 100644 dist/components/DownloadSourceCard.svelte.d.ts create mode 100644 dist/components/FileCard.svelte create mode 100644 dist/components/FileCard.svelte.d.ts create mode 100644 dist/components/FileSourceCard.svelte create mode 100644 dist/components/FileSourceCard.svelte.d.ts create mode 100644 dist/components/FileSourceCreation.svelte create mode 100644 dist/components/FileSourceCreation.svelte.d.ts create mode 100644 dist/components/ProfileCard.svelte create mode 100644 dist/components/ProfileCard.svelte.d.ts create mode 100644 dist/components/ProfileModal.svelte create mode 100644 dist/components/ProfileModal.svelte.d.ts create mode 100644 dist/components/ProfileSourceGroup.svelte create mode 100644 dist/components/ProfileSourceGroup.svelte.d.ts create mode 100644 dist/components/ProfileSources.svelte create mode 100644 dist/components/ProfileSources.svelte.d.ts create mode 100644 dist/components/SearchByHash.svelte create mode 100644 dist/components/SearchByHash.svelte.d.ts create mode 100644 dist/components/SettingsModal.svelte create mode 100644 dist/components/SettingsModal.svelte.d.ts create mode 100644 dist/components/Timeline.svelte create mode 100644 dist/components/Timeline.svelte.d.ts create mode 100644 dist/components/ui/alert/alert-description.svelte create mode 100644 dist/components/ui/alert/alert-description.svelte.d.ts create mode 100644 dist/components/ui/alert/alert-title.svelte create mode 100644 dist/components/ui/alert/alert-title.svelte.d.ts create mode 100644 dist/components/ui/alert/alert.svelte create mode 100644 dist/components/ui/alert/alert.svelte.d.ts create mode 100644 dist/components/ui/alert/index.d.ts create mode 100644 dist/components/ui/alert/index.js create mode 100644 dist/components/ui/badge/badge.svelte create mode 100644 dist/components/ui/badge/badge.svelte.d.ts create mode 100644 dist/components/ui/badge/index.d.ts create mode 100644 dist/components/ui/badge/index.js create mode 100644 dist/components/ui/button/button.svelte create mode 100644 dist/components/ui/button/button.svelte.d.ts create mode 100644 dist/components/ui/button/index.d.ts create mode 100644 dist/components/ui/button/index.js create mode 100644 dist/components/ui/calendar/calendar-cell.svelte create mode 100644 dist/components/ui/calendar/calendar-cell.svelte.d.ts create mode 100644 dist/components/ui/calendar/calendar-day.svelte create mode 100644 dist/components/ui/calendar/calendar-day.svelte.d.ts create mode 100644 dist/components/ui/calendar/calendar-grid-body.svelte create mode 100644 dist/components/ui/calendar/calendar-grid-body.svelte.d.ts create mode 100644 dist/components/ui/calendar/calendar-grid-head.svelte create mode 100644 dist/components/ui/calendar/calendar-grid-head.svelte.d.ts create mode 100644 dist/components/ui/calendar/calendar-grid-row.svelte create mode 100644 dist/components/ui/calendar/calendar-grid-row.svelte.d.ts create mode 100644 dist/components/ui/calendar/calendar-grid.svelte create mode 100644 dist/components/ui/calendar/calendar-grid.svelte.d.ts create mode 100644 dist/components/ui/calendar/calendar-head-cell.svelte create mode 100644 dist/components/ui/calendar/calendar-head-cell.svelte.d.ts create mode 100644 dist/components/ui/calendar/calendar-header.svelte create mode 100644 dist/components/ui/calendar/calendar-header.svelte.d.ts create mode 100644 dist/components/ui/calendar/calendar-heading.svelte create mode 100644 dist/components/ui/calendar/calendar-heading.svelte.d.ts create mode 100644 dist/components/ui/calendar/calendar-months.svelte create mode 100644 dist/components/ui/calendar/calendar-months.svelte.d.ts create mode 100644 dist/components/ui/calendar/calendar-next-button.svelte create mode 100644 dist/components/ui/calendar/calendar-next-button.svelte.d.ts create mode 100644 dist/components/ui/calendar/calendar-prev-button.svelte create mode 100644 dist/components/ui/calendar/calendar-prev-button.svelte.d.ts create mode 100644 dist/components/ui/calendar/calendar.svelte create mode 100644 dist/components/ui/calendar/calendar.svelte.d.ts create mode 100644 dist/components/ui/calendar/index.d.ts create mode 100644 dist/components/ui/calendar/index.js create mode 100644 dist/components/ui/card/card-content.svelte create mode 100644 dist/components/ui/card/card-content.svelte.d.ts create mode 100644 dist/components/ui/card/card-description.svelte create mode 100644 dist/components/ui/card/card-description.svelte.d.ts create mode 100644 dist/components/ui/card/card-footer.svelte create mode 100644 dist/components/ui/card/card-footer.svelte.d.ts create mode 100644 dist/components/ui/card/card-header.svelte create mode 100644 dist/components/ui/card/card-header.svelte.d.ts create mode 100644 dist/components/ui/card/card-title.svelte create mode 100644 dist/components/ui/card/card-title.svelte.d.ts create mode 100644 dist/components/ui/card/card.svelte create mode 100644 dist/components/ui/card/card.svelte.d.ts create mode 100644 dist/components/ui/card/index.d.ts create mode 100644 dist/components/ui/card/index.js create mode 100644 dist/components/ui/carousel/carousel-content.svelte create mode 100644 dist/components/ui/carousel/carousel-content.svelte.d.ts create mode 100644 dist/components/ui/carousel/carousel-item.svelte create mode 100644 dist/components/ui/carousel/carousel-item.svelte.d.ts create mode 100644 dist/components/ui/carousel/carousel-next.svelte create mode 100644 dist/components/ui/carousel/carousel-next.svelte.d.ts create mode 100644 dist/components/ui/carousel/carousel-previous.svelte create mode 100644 dist/components/ui/carousel/carousel-previous.svelte.d.ts create mode 100644 dist/components/ui/carousel/carousel.svelte create mode 100644 dist/components/ui/carousel/carousel.svelte.d.ts create mode 100644 dist/components/ui/carousel/context.d.ts create mode 100644 dist/components/ui/carousel/context.js create mode 100644 dist/components/ui/carousel/index.d.ts create mode 100644 dist/components/ui/carousel/index.js create mode 100644 dist/components/ui/checkbox/checkbox.svelte create mode 100644 dist/components/ui/checkbox/checkbox.svelte.d.ts create mode 100644 dist/components/ui/checkbox/index.d.ts create mode 100644 dist/components/ui/checkbox/index.js create mode 100644 dist/components/ui/dialog/dialog-content.svelte create mode 100644 dist/components/ui/dialog/dialog-content.svelte.d.ts create mode 100644 dist/components/ui/dialog/dialog-description.svelte create mode 100644 dist/components/ui/dialog/dialog-description.svelte.d.ts create mode 100644 dist/components/ui/dialog/dialog-footer.svelte create mode 100644 dist/components/ui/dialog/dialog-footer.svelte.d.ts create mode 100644 dist/components/ui/dialog/dialog-header.svelte create mode 100644 dist/components/ui/dialog/dialog-header.svelte.d.ts create mode 100644 dist/components/ui/dialog/dialog-overlay.svelte create mode 100644 dist/components/ui/dialog/dialog-overlay.svelte.d.ts create mode 100644 dist/components/ui/dialog/dialog-portal.svelte create mode 100644 dist/components/ui/dialog/dialog-portal.svelte.d.ts create mode 100644 dist/components/ui/dialog/dialog-title.svelte create mode 100644 dist/components/ui/dialog/dialog-title.svelte.d.ts create mode 100644 dist/components/ui/dialog/index.d.ts create mode 100644 dist/components/ui/dialog/index.js create mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte create mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts create mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-content.svelte create mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-content.svelte.d.ts create mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-item.svelte create mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-item.svelte.d.ts create mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-label.svelte create mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-label.svelte.d.ts create mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte create mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte.d.ts create mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte create mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte.d.ts create mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte create mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte.d.ts create mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte create mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte.d.ts create mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte create mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte.d.ts create mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte create mode 100644 dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte.d.ts create mode 100644 dist/components/ui/dropdown-menu/index.d.ts create mode 100644 dist/components/ui/dropdown-menu/index.js create mode 100644 dist/components/ui/form/form-button.svelte create mode 100644 dist/components/ui/form/form-button.svelte.d.ts create mode 100644 dist/components/ui/form/form-description.svelte create mode 100644 dist/components/ui/form/form-description.svelte.d.ts create mode 100644 dist/components/ui/form/form-element-field.svelte create mode 100644 dist/components/ui/form/form-element-field.svelte.d.ts create mode 100644 dist/components/ui/form/form-field-errors.svelte create mode 100644 dist/components/ui/form/form-field-errors.svelte.d.ts create mode 100644 dist/components/ui/form/form-field.svelte create mode 100644 dist/components/ui/form/form-field.svelte.d.ts create mode 100644 dist/components/ui/form/form-fieldset.svelte create mode 100644 dist/components/ui/form/form-fieldset.svelte.d.ts create mode 100644 dist/components/ui/form/form-label.svelte create mode 100644 dist/components/ui/form/form-label.svelte.d.ts create mode 100644 dist/components/ui/form/form-legend.svelte create mode 100644 dist/components/ui/form/form-legend.svelte.d.ts create mode 100644 dist/components/ui/form/index.d.ts create mode 100644 dist/components/ui/form/index.js create mode 100644 dist/components/ui/input/index.d.ts create mode 100644 dist/components/ui/input/index.js create mode 100644 dist/components/ui/input/input.svelte create mode 100644 dist/components/ui/input/input.svelte.d.ts create mode 100644 dist/components/ui/label/index.d.ts create mode 100644 dist/components/ui/label/index.js create mode 100644 dist/components/ui/label/label.svelte create mode 100644 dist/components/ui/label/label.svelte.d.ts create mode 100644 dist/components/ui/menubar/index.d.ts create mode 100644 dist/components/ui/menubar/index.js create mode 100644 dist/components/ui/menubar/menubar-checkbox-item.svelte create mode 100644 dist/components/ui/menubar/menubar-checkbox-item.svelte.d.ts create mode 100644 dist/components/ui/menubar/menubar-content.svelte create mode 100644 dist/components/ui/menubar/menubar-content.svelte.d.ts create mode 100644 dist/components/ui/menubar/menubar-item.svelte create mode 100644 dist/components/ui/menubar/menubar-item.svelte.d.ts create mode 100644 dist/components/ui/menubar/menubar-label.svelte create mode 100644 dist/components/ui/menubar/menubar-label.svelte.d.ts create mode 100644 dist/components/ui/menubar/menubar-radio-item.svelte create mode 100644 dist/components/ui/menubar/menubar-radio-item.svelte.d.ts create mode 100644 dist/components/ui/menubar/menubar-separator.svelte create mode 100644 dist/components/ui/menubar/menubar-separator.svelte.d.ts create mode 100644 dist/components/ui/menubar/menubar-shortcut.svelte create mode 100644 dist/components/ui/menubar/menubar-shortcut.svelte.d.ts create mode 100644 dist/components/ui/menubar/menubar-sub-content.svelte create mode 100644 dist/components/ui/menubar/menubar-sub-content.svelte.d.ts create mode 100644 dist/components/ui/menubar/menubar-sub-trigger.svelte create mode 100644 dist/components/ui/menubar/menubar-sub-trigger.svelte.d.ts create mode 100644 dist/components/ui/menubar/menubar-trigger.svelte create mode 100644 dist/components/ui/menubar/menubar-trigger.svelte.d.ts create mode 100644 dist/components/ui/menubar/menubar.svelte create mode 100644 dist/components/ui/menubar/menubar.svelte.d.ts create mode 100644 dist/components/ui/progress/index.d.ts create mode 100644 dist/components/ui/progress/index.js create mode 100644 dist/components/ui/progress/progress.svelte create mode 100644 dist/components/ui/progress/progress.svelte.d.ts create mode 100644 dist/components/ui/resizable/index.d.ts create mode 100644 dist/components/ui/resizable/index.js create mode 100644 dist/components/ui/resizable/resizable-handle.svelte create mode 100644 dist/components/ui/resizable/resizable-handle.svelte.d.ts create mode 100644 dist/components/ui/resizable/resizable-pane-group.svelte create mode 100644 dist/components/ui/resizable/resizable-pane-group.svelte.d.ts create mode 100644 dist/components/ui/scroll-area/index.d.ts create mode 100644 dist/components/ui/scroll-area/index.js create mode 100644 dist/components/ui/scroll-area/scroll-area-scrollbar.svelte create mode 100644 dist/components/ui/scroll-area/scroll-area-scrollbar.svelte.d.ts create mode 100644 dist/components/ui/scroll-area/scroll-area.svelte create mode 100644 dist/components/ui/scroll-area/scroll-area.svelte.d.ts create mode 100644 dist/components/ui/select/index.d.ts create mode 100644 dist/components/ui/select/index.js create mode 100644 dist/components/ui/select/select-content.svelte create mode 100644 dist/components/ui/select/select-content.svelte.d.ts create mode 100644 dist/components/ui/select/select-item.svelte create mode 100644 dist/components/ui/select/select-item.svelte.d.ts create mode 100644 dist/components/ui/select/select-label.svelte create mode 100644 dist/components/ui/select/select-label.svelte.d.ts create mode 100644 dist/components/ui/select/select-separator.svelte create mode 100644 dist/components/ui/select/select-separator.svelte.d.ts create mode 100644 dist/components/ui/select/select-trigger.svelte create mode 100644 dist/components/ui/select/select-trigger.svelte.d.ts create mode 100644 dist/components/ui/textarea/index.d.ts create mode 100644 dist/components/ui/textarea/index.js create mode 100644 dist/components/ui/textarea/textarea.svelte create mode 100644 dist/components/ui/textarea/textarea.svelte.d.ts create mode 100644 dist/contracts/digital_public_good.es create mode 100644 dist/contracts/reputation_proof.es create mode 100644 dist/ergo/envs.d.ts create mode 100644 dist/ergo/envs.js create mode 100644 dist/ergo/hashUtils.d.ts create mode 100644 dist/ergo/hashUtils.js create mode 100644 dist/ergo/object.d.ts create mode 100644 dist/ergo/object.js create mode 100644 dist/ergo/sourceFetch.d.ts create mode 100644 dist/ergo/sourceFetch.js create mode 100644 dist/ergo/sourceObject.d.ts create mode 100644 dist/ergo/sourceObject.js create mode 100644 dist/ergo/sourceStore.d.ts create mode 100644 dist/ergo/sourceStore.js create mode 100644 dist/ergo/store.d.ts create mode 100644 dist/ergo/store.js create mode 100644 dist/ergo/utils.d.ts create mode 100644 dist/ergo/utils.js create mode 100644 dist/index.d.ts create mode 100644 dist/index.js create mode 100644 dist/utils.d.ts create mode 100644 dist/utils.js diff --git a/dist/components/AddSource.svelte b/dist/components/AddSource.svelte new file mode 100644 index 0000000..f3a3442 --- /dev/null +++ b/dist/components/AddSource.svelte @@ -0,0 +1,157 @@ + + +
+

Add New File Source

+ +
+ +
+ Security Warning: Always verify URLs before downloading. + Malicious actors may post harmful links. The URL you provide will be + publicly visible and immutable on the blockchain. +
+
+ + {#if addError} +
+

{addError}

+
+ {/if} + +
+
+ + + {#if fileHashValidationError} +

{fileHashValidationError}

+ {:else} +

+ This is the unique identifier for the file. Users will search by + this hash. +

+ {/if} +
+ +
+ + + {#if hashSelectValue === "__custom__"} + + {/if} +
+ +
+ + diff --git a/dist/components/ui/textarea/textarea.svelte.d.ts b/dist/components/ui/textarea/textarea.svelte.d.ts new file mode 100644 index 0000000..8fd0fb4 --- /dev/null +++ b/dist/components/ui/textarea/textarea.svelte.d.ts @@ -0,0 +1,14 @@ +import { SvelteComponent } from "svelte"; +import type { HTMLTextareaAttributes } from "svelte/elements"; +import type { TextareaEvents } from "./index.js"; +declare const __propDef: { + props: HTMLTextareaAttributes; + slots: {}; + events: TextareaEvents; +}; +export type TextareaProps = typeof __propDef.props; +type TextareaEvents_ = typeof __propDef.events; +export { TextareaEvents_ as TextareaEvents }; +export type TextareaSlots = typeof __propDef.slots; +export default class Textarea extends SvelteComponent { +} diff --git a/dist/contracts/digital_public_good.es b/dist/contracts/digital_public_good.es new file mode 100644 index 0000000..3cd45b4 --- /dev/null +++ b/dist/contracts/digital_public_good.es @@ -0,0 +1,80 @@ +/** +* =================================================================================== +* Contract for a "Digital Public Good" (used for Type NFTs) +* =================================================================================== +* +* PURPOSE: +* To protect a box containing an NFT and its metadata in registers, ensuring +* the information serves as a permanent and immutable standard for the ecosystem. +* +* SPENDING RULES: +* 1. Anyone can spend this box (no signature required). +* 2. Spending is only valid if a single output box is created that is an +* exact replica of the input, except for its ERG value, which must +* be greater than or equal. This allows for top-ups to pay storage rent. +* +* ----------------------------------------------------------------------------------- +* R4: Coll[Byte] -> typeName +* - Purpose: Human-readable name of the type (e.g., "Web URL"). +* +* R5: Coll[Byte] -> description +* - Purpose: Brief description of the type's use and purpose. +* +* R6: Coll[Byte] -> schemaURI +* - Purpose: URI to a schema (JSON Schema, IPFS) that defines the data +* structure for proofs that use this type. +* +* R7: Boolean -> isReputationProof +* - Purpose: Boolean value that is `true` if this type is used for +* a reputation proof, and `false` otherwise. +* +* R8: (Empty) -> reserved_1 +* - Purpose: Reserved for future extensions. +* +* R9: (Empty) -> reserved_2 +* - Purpose: Reserved for future extensions. +* ----------------------------------------------------------------------------------- +*/ +{ + // Filters the outputs to find the one containing the same NFT as this box (SELF). + val successorOutputs = OUTPUTS.filter { (box: Box) => + box.tokens.size > 0 && box.tokens(0)._1 == SELF.tokens(0)._1 + } + + // Validates that exactly one successor box has been found. + if (successorOutputs.size == 1) { + val successor = successorOutputs(0) + + // Defines the immutability conditions. + // Each register from R4 to R9 must be checked individually. + // R7 now checks for a Boolean instead of a Coll[Byte]. + val registersAreImmutable = ( + successor.R4[Coll[Byte]] == SELF.R4[Coll[Byte]] && + successor.R5[Coll[Byte]] == SELF.R5[Coll[Byte]] && + successor.R6[Coll[Byte]] == SELF.R6[Coll[Byte]] && + successor.R7[Boolean] == SELF.R7[Boolean] && + successor.R8[Coll[Byte]] == SELF.R8[Coll[Byte]] && + successor.R9[Coll[Byte]] == SELF.R9[Coll[Byte]] + ) + + val dataIsImmutable = ( + // The protection script cannot change. + successor.propositionBytes == SELF.propositionBytes && + // The NFT token must be preserved identically. + successor.tokens(0) == SELF.tokens(0) && + // Registers R4-R9 must be identical. + registersAreImmutable + ) + + // The ERG value of the output must be greater than or equal to the input's. + val canOnlyAddErgs = successor.value >= SELF.value + + // The transaction is valid if the immutability and value conditions are met. + sigmaProp(dataIsImmutable && canOnlyAddErgs) + + } else { + // Fails if exactly one successor is not found, to prevent + // the destruction or duplication of the NFT. + sigmaProp(false) + } +} \ No newline at end of file diff --git a/dist/contracts/reputation_proof.es b/dist/contracts/reputation_proof.es new file mode 100644 index 0000000..e07af8a --- /dev/null +++ b/dist/contracts/reputation_proof.es @@ -0,0 +1,200 @@ +/** +* =================================================================================== +* Contract for a "Reputation Token" +* =================================================================================== +* +* PURPOSE: +* To govern a box that is part of a collection of "reputation" boxes. +* This contract ensures that the entire collection remains coherent, that data +* is unique, and that only the owner can authorize changes. It acts as a +* piece of a distributed state that is validated atomically. +* +* SPENDING RULES: +* There are two ways to spend this box: +* +* 1. ADMIN PATH (SIGNATURE REQUIRED): +* a. AUTHORIZATION: The transaction must be signed by the owner (R7). +* b. BINDING TO A STANDARD: The "Type NFT" box must be provided +* in dataInputs[0]. The R4 register must match the token ID of that NFT. +* c. OUTPUT RULES: Rules for uniqueness, metadata preservation, +* and locking logic (frozen/mutable) apply. +* +* 2. ERG TOP-UP PATH (PUBLIC AND SIGNATURE-FREE): +* a. ANYONE can spend this box to prevent "demurrage" (storage rent). +* b. CONDITION: The transaction is only valid if it creates a single output box that +* is an EXACT REPLICA of the input (same tokens, registers, and script), +* but with an equal or greater ERG value. No other changes are allowed. +* +* RECOMMENDED REGISTER AND TOKEN STRUCTURE: +* ----------------------------------------------------------------------------------- +* Token(0): (Coll[Byte], Long) -> (repTokenId, amount) +* - Purpose: The reputation token that this contract protects. +* +* R4: Coll[Byte] -> typeNftTokenId +* - Purpose: ID of the "Type NFT" token to which this box adheres. +* +* R5: Coll[Byte] -> uniqueObjectData +* - Purpose: Data that, together with R4, uniquely identifies this object +* within the collection. +* +* R6: Boolean -> isLocked +* - Purpose: Lock status +* +* R7: Coll[Byte] -> propositionBytes of the owner (must be spent one box with this script to confirm ownership) +* +* R8: Boolean -> customFlag +* - Purpose: A boolean flag for custom application logic. +* +* R9: Coll[Byte] -> reserved_1 +* - Purpose: Reserved for future extensions. +* ----------------------------------------------------------------------------------- +*/ +{ + + val DIGITAL_PUBLIC_GOOD = fromBase16("`+DIGITAL_PUBLIC_GOOD_SCRIPT_HASH+`") + + // --- Path 1: Admin Transaction (signed by the owner) --- + val ownerSignedPath = { + val isOwner = INPUTS.exists { (b: Box) => b.propositionBytes == SELF.R7[Coll[Byte]].get } + if (isOwner) { + + // Extract data from this box's (SELF) register structure. + val isLocked = SELF.R6[Boolean].get + val repTokenId = SELF.tokens(0)._1 + + // PROOF OF COMPLETENESS + + val repBoxesOnInputs = INPUTS.filter { (b: Box) => + blake2b256(b.propositionBytes) == blake2b256(SELF.propositionBytes) && + b.tokens.size > 0 && b.tokens(0)._1 == repTokenId && + b.R7[Coll[Byte]].get == SELF.R7[Coll[Byte]].get && + b.R4[Coll[Byte]].isDefined && + b.R5[Coll[Byte]].isDefined && + b.R8[Boolean].isDefined + } + + val repBoxesOnOutputs = OUTPUTS.filter { (b: Box) => + blake2b256(b.propositionBytes) == blake2b256(SELF.propositionBytes) && + b.tokens.size > 0 && b.tokens(0)._1 == repTokenId && + b.R7[Coll[Byte]].get == SELF.R7[Coll[Byte]].get && + b.R4[Coll[Byte]].isDefined && + b.R5[Coll[Byte]].isDefined && + b.R8[Boolean].isDefined + } + + val correctManagedSupply = { + val inputsAmount = repBoxesOnInputs.fold(0L, { (sum: Long, b: Box) => sum + b.tokens(0)._2 }) + val outputsAmount = repBoxesOnOutputs.fold(0L, { (sum: Long, b: Box) => sum + b.tokens(0)._2 }) + + val valuePreserved = { + + val tokensArePreserved = { + val secondaryInputTokens = repBoxesOnInputs.flatMap({ (b: Box) => + if (b.tokens.size > 1) { b.tokens.slice(1, b.tokens.size) } else { Coll[(Coll[Byte], Long)]() } + }) + val secondaryOutputTokens = repBoxesOnOutputs.flatMap({ (b: Box) => + if (b.tokens.size > 1) { b.tokens.slice(1, b.tokens.size) } else { Coll[(Coll[Byte], Long)]() } + }) + + val uniqueTokenIds = secondaryInputTokens.fold(Coll[Coll[Byte]](), { (acc: Coll[Coll[Byte]], t: (Coll[Byte], Long)) => + if (acc.exists({ (x: Coll[Byte]) => x == t._1 })) acc else acc.append(Coll(t._1)) + }) + + uniqueTokenIds.forall({ (tokenId: Coll[Byte]) => + val totalIn = secondaryInputTokens + .filter({ (t: (Coll[Byte], Long)) => t._1 == tokenId }) + .fold(0L, { (sum: Long, t: (Coll[Byte], Long)) => sum + t._2 }) + val totalOut = secondaryOutputTokens + .filter({ (t: (Coll[Byte], Long)) => t._1 == tokenId }) + .fold(0L, { (sum: Long, t: (Coll[Byte], Long)) => sum + t._2 }) + totalOut >= totalIn + }) + } + + val nativeErgIsPreserved = { + val totalNativeIn = repBoxesOnInputs.fold(0L, { (sum: Long, b: Box) => sum + b.value }) + val totalNativeOut = repBoxesOnOutputs.fold(0L, { (sum: Long, b: Box) => sum + b.value }) + totalNativeOut >= totalNativeIn + } + + tokensArePreserved && nativeErgIsPreserved + } + + inputsAmount == outputsAmount && // Reputation proof tokens are preserved. + valuePreserved + } + + val typeExists: Boolean = { + // Get the token ID to check from the box's register R4 + val typeTokenIdToCheck: Coll[Byte] = SELF.R4[Coll[Byte]].get + + // Extract the token IDs from the collection of type NFT boxes + val availableTypeTokenIds: Coll[Coll[Byte]] = CONTEXT.dataInputs.filter { (b: Box) => + blake2b256(b.propositionBytes) == DIGITAL_PUBLIC_GOOD && + b.creationInfo._1 < CONTEXT.HEIGHT + }.map { (b: Box) => + b.tokens(0)._1 + } + + availableTypeTokenIds.exists { (id: Coll[Byte]) => + id == typeTokenIdToCheck + } + } + + // LOCKING LOGIC + val correctLock = { + if (isLocked) { + repBoxesOnOutputs.exists { (x: Box) => { + x.tokens(0)._2 >= SELF.tokens(0)._2 && // Preserve token amount or increase it. + x.R4[Coll[Byte]].get == SELF.R4[Coll[Byte]].get && // Preserve type NFT ID. + x.R5[Coll[Byte]].get == SELF.R5[Coll[Byte]].get && // Preserve unique object data. + x.R6[Boolean].get == true && // Once locked, always locked. + x.R9[Coll[Byte]].get == SELF.R9[Coll[Byte]].get // Preserve reserved data. + }} + } + else { true } + } + + correctManagedSupply && typeExists && correctLock + } + else { false } + } + + // --- Path 2: ERG Top-Up (public, no signature) --- + val publicTopUpPath = { + // Filter the outputs to find the one that is a successor to this box. + val successorOutputs = OUTPUTS.filter { (box: Box) => + box.propositionBytes == SELF.propositionBytes && + box.tokens.size > 0 && + box.tokens(0)._1 == SELF.tokens(0)._1 + } + + // If exactly one successor is found... + if (successorOutputs.size == 1) { + val successor = successorOutputs(0) + + // Define the conditions for total immutability. + val registersAreImmutable = ( + successor.R4[Coll[Byte]] == SELF.R4[Coll[Byte]] && + successor.R5[Coll[Byte]] == SELF.R5[Coll[Byte]] && + successor.R6[Boolean] == SELF.R6[Boolean] && + successor.R7[Coll[Byte]] == SELF.R7[Coll[Byte]] && + successor.R8[Boolean] == SELF.R8[Boolean] && + successor.R9[Coll[Byte]] == SELF.R9[Coll[Byte]] + ) + + val tokensAreImmutable = successor.tokens == SELF.tokens + + // The ERG value of the output must be greater than or equal to the input's. + val canOnlyAddErgs = successor.value >= SELF.value + + // The transaction is valid if everything is immutable and only ERGs are added. + registersAreImmutable && tokensAreImmutable && canOnlyAddErgs + } else { + false + } + } + + // The transaction is valid if it meets the owner path OR the public top-up path. + sigmaProp(ownerSignedPath || publicTopUpPath) +} \ No newline at end of file diff --git a/dist/ergo/envs.d.ts b/dist/ergo/envs.d.ts new file mode 100644 index 0000000..1ce836a --- /dev/null +++ b/dist/ergo/envs.d.ts @@ -0,0 +1,13 @@ +export declare const network_id: "mainnet" | "testnet"; +export declare const explorer_uri: string; +export declare const web_explorer_uri_tx: string; +export declare const web_explorer_uri_addr: string; +export declare const web_explorer_uri_tkn: string; +export declare const PROFILE_TYPE_NFT_ID = "1820fd428a0b92d61ce3f86cd98240fdeeee8a392900f0b19a2e017d66f79926"; +export declare const PROFILE_TOTAL_SUPPLY = 99999999; +export declare const FILE_SOURCE_TYPE_NFT_ID = "8299d98e15ebee7fa39ad716de7c8bb191790a1bf4b7c3f91af35a0e36187706"; +export declare const INVALID_FILE_SOURCE_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000002"; +export declare const UNAVAILABLE_SOURCE_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000003"; +export declare const PROFILE_OPINION_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000004"; +export declare const ERGO_TREE_HASH = "e84b95d84a30df33aa258fe2b9d24c3e75e27a67c6453983c19703029112d147"; +export declare const SOURCE_OPINION_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000005"; diff --git a/dist/ergo/envs.js b/dist/ergo/envs.js new file mode 100644 index 0000000..fa97eaf --- /dev/null +++ b/dist/ergo/envs.js @@ -0,0 +1,21 @@ +export const network_id = "mainnet"; +const default_explorer_uri = (network_id == "mainnet") ? "https://api.ergoplatform.com" : "https://api-testnet.ergoplatform.com"; +const default_web_tx = (network_id == "mainnet") ? "https://sigmaspace.io/en/transaction/" : "https://testnet.ergoplatform.com/transactions/"; +const default_web_addr = (network_id == "mainnet") ? "https://sigmaspace.io/en/address/" : "https://testnet.ergoplatform.com/addresses/"; +const default_web_tkn = (network_id == "mainnet") ? "https://sigmaspace.io/en/token/" : "https://testnet.ergoplatform.com/tokens/"; +export const explorer_uri = default_explorer_uri; +export const web_explorer_uri_tx = default_web_tx; +export const web_explorer_uri_addr = default_web_addr; +export const web_explorer_uri_tkn = default_web_tkn; +// Profile Type NFT (unchanged) +export const PROFILE_TYPE_NFT_ID = "1820fd428a0b92d61ce3f86cd98240fdeeee8a392900f0b19a2e017d66f79926"; +export const PROFILE_TOTAL_SUPPLY = 99999999; +// Source Application Type NFT IDs (PLACEHOLDER - replace with actual NFT IDs) +export const FILE_SOURCE_TYPE_NFT_ID = "8299d98e15ebee7fa39ad716de7c8bb191790a1bf4b7c3f91af35a0e36187706"; +export const INVALID_FILE_SOURCE_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000002"; +export const UNAVAILABLE_SOURCE_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000003"; +export const PROFILE_OPINION_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000004"; +// Reputation proof contract hash (from reputation-system library) +export const ERGO_TREE_HASH = "e84b95d84a30df33aa258fe2b9d24c3e75e27a67c6453983c19703029112d147"; +// Deprecated +export const SOURCE_OPINION_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000005"; diff --git a/dist/ergo/hashUtils.d.ts b/dist/ergo/hashUtils.d.ts new file mode 100644 index 0000000..801cf76 --- /dev/null +++ b/dist/ergo/hashUtils.d.ts @@ -0,0 +1,61 @@ +/** + * Hash utility functions for source verification. + * Supports SHA3-256, SHA-256, Keccak-256, and Blake2b. + * Uses @noble/hashes (already a transitive dependency via @fleet-sdk/crypto). + */ +/** Canonical algorithm IDs are defined as HASH(EMPTY_INPUT). */ +export declare const HASH_ALGORITHM_IDS: { + readonly sha3_256: "a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a"; + readonly blake2b256: "0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8"; + readonly sha256: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"; + readonly keccak256: "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"; +}; +/** Known hash algorithm IDs used in the application */ +export declare const HASH_ALGORITHMS: { + label: "SHA3-256" | "Blake2b-256" | "SHA-256" | "Keccak-256"; + value: "a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a" | "0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8" | "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" | "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"; +}[]; +/** All algorithm values including custom */ +export declare const HASH_OPTIONS: readonly [...{ + label: "SHA3-256" | "Blake2b-256" | "SHA-256" | "Keccak-256"; + value: "a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a" | "0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8" | "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" | "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"; +}[], { + readonly label: "Custom"; + readonly value: "__custom__"; +}]; +/** Algorithm values for search (no custom — frontend can't compute unknown algorithms) */ +export declare const SEARCH_HASH_ALGORITHMS: { + label: "SHA3-256" | "Blake2b-256" | "SHA-256" | "Keccak-256"; + value: "a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a" | "0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8" | "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" | "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"; +}[]; +/** + * Normalize supported aliases to canonical on-chain identifiers HASH(EMPTY_INPUT). + */ +export declare function normalizeHashAlgorithmId(algorithmId: string): string; +/** + * Compute a hash of the given data using the specified algorithm. + * @returns hex string of the hash, or null if algorithm is unknown/custom + */ +export declare function computeHash(data: Uint8Array, algorithmId: string): string | null; +/** + * Validate a hex hash string for a given algorithm. + * Returns null if valid, or an error message if invalid. + */ +export declare function validateHash(hash: string, algorithmId: string): string | null; +/** + * Get the human-readable label for an algorithm ID. + */ +export declare function getAlgorithmLabel(algorithmId: string): string; +/** + * Download content from a URL and compute its hash. + * Supports chunked files (manifest-based): if isChunked is true, + * the URL is treated as a manifest where each line is a chunk URL. + * + * @param url - The URL to fetch (or manifest URL if chunked) + * @param algorithmId - Hash algorithm to use + * @param isChunked - Whether this is a chunked manifest + * @param onProgress - Optional progress callback (current, total) for chunked downloads + * @returns hex hash string + * @throws if algorithm is custom/unknown, fetch fails, etc. + */ +export declare function downloadAndHash(url: string, algorithmId: string, isChunked?: boolean, onProgress?: (current: number, total: number) => void): Promise; diff --git a/dist/ergo/hashUtils.js b/dist/ergo/hashUtils.js new file mode 100644 index 0000000..ff1a4d5 --- /dev/null +++ b/dist/ergo/hashUtils.js @@ -0,0 +1,197 @@ +/** + * Hash utility functions for source verification. + * Supports SHA3-256, SHA-256, Keccak-256, and Blake2b. + * Uses @noble/hashes (already a transitive dependency via @fleet-sdk/crypto). + */ +import { sha256 } from '@noble/hashes/sha256'; +import { sha3_256, keccak_256 } from '@noble/hashes/sha3'; +import { blake2b } from '@noble/hashes/blake2b'; +/** Canonical algorithm IDs are defined as HASH(EMPTY_INPUT). */ +export const HASH_ALGORITHM_IDS = { + sha3_256: 'a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a', + blake2b256: '0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8', + sha256: 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', + keccak256: 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470', +}; +const HASH_ALGORITHM_DEFINITIONS = [ + { + key: 'sha3_256', + label: 'SHA3-256', + value: HASH_ALGORITHM_IDS.sha3_256, + aliases: ['sha3_256'], + }, + { + key: 'blake2b256', + label: 'Blake2b-256', + value: HASH_ALGORITHM_IDS.blake2b256, + aliases: ['blake2b', 'blake2b256'], + }, + { + key: 'sha256', + label: 'SHA-256', + value: HASH_ALGORITHM_IDS.sha256, + aliases: ['sha256'], + }, + { + key: 'keccak256', + label: 'Keccak-256', + value: HASH_ALGORITHM_IDS.keccak256, + aliases: ['keccak256'], + }, +]; +/** Known hash algorithm IDs used in the application */ +export const HASH_ALGORITHMS = HASH_ALGORITHM_DEFINITIONS.map(({ label, value }) => ({ label, value })); +/** All algorithm values including custom */ +export const HASH_OPTIONS = [ + ...HASH_ALGORITHMS, + { label: "Custom", value: "__custom__" }, +]; +/** Algorithm values for search (no custom — frontend can't compute unknown algorithms) */ +export const SEARCH_HASH_ALGORITHMS = HASH_ALGORITHMS; +function uint8ArrayToHex(array) { + return [...array].map(x => x.toString(16).padStart(2, '0')).join(''); +} +function getHashAlgorithmDefinition(algorithmId) { + const trimmed = algorithmId.trim(); + const normalized = trimmed.toLowerCase(); + return HASH_ALGORITHM_DEFINITIONS.find(({ value, aliases }) => value === trimmed || + value === normalized || + aliases.includes(normalized)); +} +/** + * Normalize supported aliases to canonical on-chain identifiers HASH(EMPTY_INPUT). + */ +export function normalizeHashAlgorithmId(algorithmId) { + const trimmed = algorithmId.trim(); + return getHashAlgorithmDefinition(trimmed)?.value || trimmed; +} +/** + * Compute a hash of the given data using the specified algorithm. + * @returns hex string of the hash, or null if algorithm is unknown/custom + */ +export function computeHash(data, algorithmId) { + const definition = getHashAlgorithmDefinition(algorithmId); + switch (definition?.key) { + case 'sha256': + return uint8ArrayToHex(sha256(data)); + case 'sha3_256': + return uint8ArrayToHex(sha3_256(data)); + case 'keccak256': + return uint8ArrayToHex(keccak_256(data)); + case 'blake2b256': + // Default to 256-bit (32 bytes) output + return uint8ArrayToHex(blake2b(data, { dkLen: 32 })); + default: + return null; + } +} +/** + * Validate a hex hash string for a given algorithm. + * Returns null if valid, or an error message if invalid. + */ +export function validateHash(hash, algorithmId) { + if (!hash || hash.trim() === '') { + return 'Hash cannot be empty'; + } + const trimmed = hash.trim(); + // Check hex characters + if (!/^[0-9a-fA-F]+$/.test(trimmed)) { + return 'Hash must contain only hexadecimal characters (0-9, a-f)'; + } + switch (getHashAlgorithmDefinition(algorithmId)?.key) { + case 'sha3_256': + case 'sha256': + case 'keccak256': + if (trimmed.length !== 64) { + return `${getAlgorithmLabel(algorithmId)} hash must be exactly 64 hex characters (256-bit). Got ${trimmed.length}.`; + } + break; + case 'blake2b256': + if (trimmed.length !== 64 && trimmed.length !== 128) { + return `Blake2b-256 hash must be 64 hex characters (256-bit) or 128 hex characters (512-bit). Got ${trimmed.length}.`; + } + break; + case '__custom__': + // Custom algorithm — only validate hex and non-empty + break; + default: + // Unknown algorithm id — only validate hex + break; + } + return null; +} +/** + * Get the human-readable label for an algorithm ID. + */ +export function getAlgorithmLabel(algorithmId) { + const found = getHashAlgorithmDefinition(algorithmId); + return found ? found.label : algorithmId; +} +/** + * Download content from a URL and compute its hash. + * Supports chunked files (manifest-based): if isChunked is true, + * the URL is treated as a manifest where each line is a chunk URL. + * + * @param url - The URL to fetch (or manifest URL if chunked) + * @param algorithmId - Hash algorithm to use + * @param isChunked - Whether this is a chunked manifest + * @param onProgress - Optional progress callback (current, total) for chunked downloads + * @returns hex hash string + * @throws if algorithm is custom/unknown, fetch fails, etc. + */ +export async function downloadAndHash(url, algorithmId, isChunked = false, onProgress) { + const normalizedAlgorithmId = normalizeHashAlgorithmId(algorithmId); + if (normalizedAlgorithmId === '__custom__' || !getHashAlgorithmDefinition(normalizedAlgorithmId)) { + throw new Error('Cannot verify: custom hash algorithm'); + } + let data; + if (isChunked) { + // Fetch manifest + const manifestResponse = await fetch(url); + if (!manifestResponse.ok) { + throw new Error(`Failed to fetch manifest: ${manifestResponse.statusText}`); + } + const manifestText = await manifestResponse.text(); + const chunkUrls = manifestText.trim().split('\n').filter(line => line.trim() !== ''); + if (chunkUrls.length === 0) { + throw new Error('Manifest is empty — no chunk URLs found'); + } + // Download all chunks in order + const chunks = []; + let totalSize = 0; + for (let i = 0; i < chunkUrls.length; i++) { + if (onProgress) + onProgress(i, chunkUrls.length); + const chunkResponse = await fetch(chunkUrls[i].trim()); + if (!chunkResponse.ok) { + throw new Error(`Failed to fetch chunk ${i + 1}/${chunkUrls.length}: ${chunkResponse.statusText}`); + } + const chunkBuffer = await chunkResponse.arrayBuffer(); + const chunkBytes = new Uint8Array(chunkBuffer); + chunks.push(chunkBytes); + totalSize += chunkBytes.length; + } + if (onProgress) + onProgress(chunkUrls.length, chunkUrls.length); + // Concatenate all chunks + data = new Uint8Array(totalSize); + let offset = 0; + for (const chunk of chunks) { + data.set(chunk, offset); + offset += chunk.length; + } + } + else { + const response = await fetch(url); + if (!response.ok) { + throw new Error(`Failed to fetch file: ${response.statusText}`); + } + const buffer = await response.arrayBuffer(); + data = new Uint8Array(buffer); + } + const result = computeHash(data, normalizedAlgorithmId); + if (result === null) { + throw new Error(`Cannot verify: unsupported hash algorithm "${algorithmId}"`); + } + return result; +} diff --git a/dist/ergo/object.d.ts b/dist/ergo/object.d.ts new file mode 100644 index 0000000..9b96c78 --- /dev/null +++ b/dist/ergo/object.d.ts @@ -0,0 +1,2 @@ +import { type ReputationProof, type TypeNFT, type RPBox, type ApiBox } from 'reputation-system'; +export { type ReputationProof, type TypeNFT, type RPBox, type ApiBox }; diff --git a/dist/ergo/object.js b/dist/ergo/object.js new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/ergo/object.js @@ -0,0 +1 @@ +export {}; diff --git a/dist/ergo/sourceFetch.d.ts b/dist/ergo/sourceFetch.d.ts new file mode 100644 index 0000000..588af80 --- /dev/null +++ b/dist/ergo/sourceFetch.d.ts @@ -0,0 +1,44 @@ +import { type FileSource, type ProfileOpinion, type SearchResult, type ProfileData, type InvalidFileSource, type UnavailableSource } from './sourceObject'; +/** + * Fetch all FILE_SOURCE boxes for a specific file hash. + * Returns all sources where this file can be found. + */ +export declare function fetchFileSourcesByHash(fileHash: string, explorerUri: string): Promise; +/** + * Fetch all INVALID_FILE_SOURCE boxes for a specific source box. + */ +export declare function fetchInvalidFileSources(sourceBoxId: string, explorerUri: string): Promise; +/** + * Fetch all UNAVAILABLE_SOURCE boxes for a specific URL. + */ +export declare function fetchUnavailableSources(sourceUrl: string, explorerUri: string): Promise; +/** + * Fetch all PROFILE_OPINION boxes targeting a specific profile. + * Returns all trust/distrust opinions for this profile. + */ +export declare function fetchProfileOpinions(profileTokenId: string, explorerUri: string): Promise; +/** + * Fetch all FILE_SOURCE boxes for a specific profile token ID. + * Returns file sources created by this profile. + */ +export declare function fetchFileSourcesByProfile(profileTokenId: string, limit: number | undefined, explorerUri: string): Promise; +/** + * Fetch all INVALID_FILE_SOURCE boxes created by a specific profile. + */ +export declare function fetchInvalidFileSourcesByProfile(profileTokenId: string, limit: number | undefined, explorerUri: string): Promise; +/** + * Fetch all UNAVAILABLE_SOURCE boxes created by a specific profile. + */ +export declare function fetchUnavailableSourcesByProfile(profileTokenId: string, limit: number | undefined, explorerUri: string): Promise; +/** + * Fetch all PROFILE_OPINION boxes created by a specific profile. + */ +export declare function fetchProfileOpinionsByAuthor(authorTokenId: string, explorerUri: string): Promise; +/** + * Load file sources by hash. + */ +export declare function searchByHash(fileHash: string, explorerUri: string): Promise; +/** + * Load all data related to a profile. + */ +export declare function loadProfileData(profileTokenId: string, explorerUri: string): Promise; diff --git a/dist/ergo/sourceFetch.js b/dist/ergo/sourceFetch.js new file mode 100644 index 0000000..4f385c1 --- /dev/null +++ b/dist/ergo/sourceFetch.js @@ -0,0 +1,292 @@ +import { deserializeSourceEntry } from './sourceObject'; +import { hexToUtf8 } from './utils'; +import { FILE_SOURCE_TYPE_NFT_ID, INVALID_FILE_SOURCE_TYPE_NFT_ID, UNAVAILABLE_SOURCE_TYPE_NFT_ID, PROFILE_OPINION_TYPE_NFT_ID } from './envs'; +import DOMPurify from "dompurify"; +import { getTimestampFromBlockId, searchBoxes } from 'reputation-system'; +/** + * Parse R9 content from a box into SourceEntry[]. + * Handles both new JSON format and legacy plain URL string. + */ +function parseR9Content(box) { + let rawContent = "[Unreadable Content]"; + try { + const rawValue = box.additionalRegisters.R9?.renderedValue; + if (rawValue) { + rawContent = hexToUtf8(rawValue) ?? "[Empty Content]"; + // Sanitize for display safety + rawContent = DOMPurify.sanitize(rawContent); + } + } + catch (e) { + console.warn(`Error decoding R9 for box ${box.boxId}`, e); + rawContent = ""; + } + return { source: deserializeSourceEntry(rawContent) }; +} +/** + * Fetch all FILE_SOURCE boxes for a specific file hash. + * Returns all sources where this file can be found. + */ +export async function fetchFileSourcesByHash(fileHash, explorerUri) { + console.log("Fetching file sources for hash:", fileHash); + const generator = searchBoxes(explorerUri, undefined, FILE_SOURCE_TYPE_NFT_ID, fileHash, undefined, undefined, undefined, undefined, undefined, undefined); + const boxes = await collectBoxes(generator); + const sources = []; + console.log(`Found ${boxes.length} boxes for file hash ${fileHash}`); + for (const box of boxes) { + if (!box.assets?.length) + continue; + if (box.additionalRegisters.R6?.renderedValue !== "false") + continue; + if (!box.additionalRegisters.R9?.renderedValue) + continue; + const { source: sourceEntry } = parseR9Content(box); + // Extract hashFunctionId from the source entry + const hashFunctionId = sourceEntry.hashFunctionId || ''; + const source = { + id: box.boxId, + fileHash: fileHash, + hashFunctionId: hashFunctionId, + source: sourceEntry, + ownerTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await getTimestampFromBlockId(explorerUri, box.blockId), + isLocked: false, + transactionId: box.transactionId + }; + sources.push(source); + } + sources.sort((a, b) => b.timestamp - a.timestamp); + console.log(`Returning ${sources.length} valid sources for file hash ${fileHash}`); + return sources; +} +/** + * Fetch all INVALID_FILE_SOURCE boxes for a specific source box. + */ +export async function fetchInvalidFileSources(sourceBoxId, explorerUri) { + console.log("Fetching invalidations for source:", sourceBoxId); + const generator = searchBoxes(explorerUri, undefined, INVALID_FILE_SOURCE_TYPE_NFT_ID, sourceBoxId, undefined, undefined, undefined, undefined, undefined, undefined); + const boxes = await collectBoxes(generator); + const invalidations = []; + for (const box of boxes) { + if (!box.assets?.length) + continue; + const invalidation = { + id: box.boxId, + targetBoxId: sourceBoxId, + authorTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await getTimestampFromBlockId(explorerUri, box.blockId), + transactionId: box.transactionId + }; + invalidations.push(invalidation); + } + return invalidations; +} +/** + * Fetch all UNAVAILABLE_SOURCE boxes for a specific URL. + */ +export async function fetchUnavailableSources(sourceUrl, explorerUri) { + console.log("Fetching unavailabilities for URL:", sourceUrl); + const generator = searchBoxes(explorerUri, undefined, UNAVAILABLE_SOURCE_TYPE_NFT_ID, sourceUrl, undefined, undefined, undefined, undefined, undefined, undefined); + const boxes = await collectBoxes(generator); + const unavailabilities = []; + for (const box of boxes) { + if (!box.assets?.length) + continue; + const unavailability = { + id: box.boxId, + sourceUrl: sourceUrl, + authorTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await getTimestampFromBlockId(explorerUri, box.blockId), + transactionId: box.transactionId + }; + unavailabilities.push(unavailability); + } + return unavailabilities; +} +/** + * Fetch all PROFILE_OPINION boxes targeting a specific profile. + * Returns all trust/distrust opinions for this profile. + */ +export async function fetchProfileOpinions(profileTokenId, explorerUri) { + console.log("Fetching profile opinions for:", profileTokenId); + const generator = searchBoxes(explorerUri, undefined, PROFILE_OPINION_TYPE_NFT_ID, profileTokenId, undefined, undefined, undefined, undefined, undefined, undefined); + const boxes = await collectBoxes(generator); + const opinions = []; + for (const box of boxes) { + if (!box.assets?.length) + continue; + if (box.additionalRegisters.R6?.renderedValue === "false") + continue; + const opinion = { + id: box.boxId, + targetProfileTokenId: profileTokenId, + isTrusted: box.additionalRegisters.R8?.renderedValue === 'true', + authorTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await getTimestampFromBlockId(explorerUri, box.blockId), + transactionId: box.transactionId + }; + opinions.push(opinion); + } + return opinions; +} +/** + * Fetch all FILE_SOURCE boxes for a specific profile token ID. + * Returns file sources created by this profile. + */ +export async function fetchFileSourcesByProfile(profileTokenId, limit = 50, explorerUri) { + console.log("Fetching file sources for profile:", profileTokenId); + const generator = searchBoxes(explorerUri, profileTokenId, FILE_SOURCE_TYPE_NFT_ID, undefined, undefined, undefined, undefined, undefined, limit, undefined); + const boxes = await collectBoxes(generator); + const sources = []; + for (const box of boxes) { + if (!box.assets?.length) + continue; + if (box.additionalRegisters.R6?.renderedValue !== "false") + continue; + if (!box.additionalRegisters.R9?.renderedValue) + continue; + let fileHash = "[Unknown]"; + try { + const rawR5 = box.additionalRegisters.R5?.renderedValue; + if (rawR5) { + fileHash = rawR5; + } + } + catch (e) { + console.warn(`Error decoding R5 for box ${box.boxId}`, e); + } + const { source: sourceEntry } = parseR9Content(box); + const hashFunctionId = sourceEntry.hashFunctionId || ''; + const source = { + id: box.boxId, + fileHash: fileHash, + hashFunctionId: hashFunctionId, + source: sourceEntry, + ownerTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await getTimestampFromBlockId(explorerUri, box.blockId), + isLocked: false, + transactionId: box.transactionId + }; + sources.push(source); + } + sources.sort((a, b) => b.timestamp - a.timestamp); + return sources; +} +/** + * Fetch all INVALID_FILE_SOURCE boxes created by a specific profile. + */ +export async function fetchInvalidFileSourcesByProfile(profileTokenId, limit = 50, explorerUri) { + console.log("Fetching invalidations by profile:", profileTokenId); + const generator = searchBoxes(explorerUri, profileTokenId, INVALID_FILE_SOURCE_TYPE_NFT_ID, undefined, undefined, undefined, undefined, undefined, limit, undefined); + const boxes = await collectBoxes(generator); + const invalidations = []; + for (const box of boxes) { + if (!box.assets?.length) + continue; + invalidations.push({ + id: box.boxId, + targetBoxId: hexToUtf8(box.additionalRegisters.R5?.renderedValue || "") || "", + authorTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await getTimestampFromBlockId(explorerUri, box.blockId), + transactionId: box.transactionId + }); + } + return invalidations; +} +/** + * Fetch all UNAVAILABLE_SOURCE boxes created by a specific profile. + */ +export async function fetchUnavailableSourcesByProfile(profileTokenId, limit = 50, explorerUri) { + console.log("Fetching unavailabilities by profile:", profileTokenId); + const generator = searchBoxes(explorerUri, profileTokenId, UNAVAILABLE_SOURCE_TYPE_NFT_ID, undefined, undefined, undefined, undefined, undefined, limit, undefined); + const boxes = await collectBoxes(generator); + const unavailabilities = []; + for (const box of boxes) { + if (!box.assets?.length) + continue; + unavailabilities.push({ + id: box.boxId, + sourceUrl: hexToUtf8(box.additionalRegisters.R5?.renderedValue || "") || "", + authorTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await getTimestampFromBlockId(explorerUri, box.blockId), + transactionId: box.transactionId + }); + } + return unavailabilities; +} +/** + * Fetch all PROFILE_OPINION boxes created by a specific profile. + */ +export async function fetchProfileOpinionsByAuthor(authorTokenId, explorerUri) { + console.log("Fetching profile opinions by author:", authorTokenId); + const generator = searchBoxes(explorerUri, authorTokenId, PROFILE_OPINION_TYPE_NFT_ID, undefined, undefined, undefined, undefined, undefined, undefined, undefined); + const boxes = await collectBoxes(generator); + const opinions = []; + for (const box of boxes) { + if (!box.assets?.length) + continue; + opinions.push({ + id: box.boxId, + targetProfileTokenId: hexToUtf8(box.additionalRegisters.R5?.renderedValue || "") || "", + isTrusted: box.additionalRegisters.R8?.renderedValue === 'true', + authorTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await getTimestampFromBlockId(explorerUri, box.blockId), + transactionId: box.transactionId + }); + } + return opinions; +} +/** + * Load file sources by hash. + */ +export async function searchByHash(fileHash, explorerUri) { + const sources = await fetchFileSourcesByHash(fileHash, explorerUri); + const invalidations = {}; + const unavailabilities = {}; + for (const source of sources) { + // Fetch invalidations for this box + const invs = await fetchInvalidFileSources(source.id, explorerUri); + if (invs.length > 0) + invalidations[source.id] = invs; + // Fetch unavailabilities for the source URL + const url = source.source?.urlLink; + if (url && !unavailabilities[url]) { + const unavs = await fetchUnavailableSources(url, explorerUri); + if (unavs.length > 0) + unavailabilities[url] = unavs; + } + } + return { sources, invalidations, unavailabilities }; +} +/** + * Load all data related to a profile. + */ +export async function loadProfileData(profileTokenId, explorerUri) { + const sources = await fetchFileSourcesByProfile(profileTokenId, 50, explorerUri); + const invalidations = await fetchInvalidFileSourcesByProfile(profileTokenId, 50, explorerUri); + const unavailabilities = await fetchUnavailableSourcesByProfile(profileTokenId, 50, explorerUri); + const opinions = await fetchProfileOpinions(profileTokenId, explorerUri); + const opinionsGiven = await fetchProfileOpinionsByAuthor(profileTokenId, explorerUri); + return { + sources, + invalidations, + unavailabilities, + opinions, + opinionsGiven + }; +} +async function collectBoxes(generator) { + const boxes = []; + for await (const batch of generator) { + boxes.push(...batch); + } + return boxes; +} diff --git a/dist/ergo/sourceObject.d.ts b/dist/ergo/sourceObject.d.ts new file mode 100644 index 0000000..e0a046b --- /dev/null +++ b/dist/ergo/sourceObject.d.ts @@ -0,0 +1,171 @@ +/** + * Data models for Source Application + * + * This module defines the core interfaces for the decentralized File Discovery + * and Verification system built on Ergo blockchain. + */ +export interface SourceEntry { + hashFunctionId: string; + contentFormat: string; + contentHash: string; + rawFormat: string; + urlLink: string; + isChunked?: boolean; +} +export interface FileSource { + id: string; + fileHash: string; + hashFunctionId: string; + source: SourceEntry; + ownerTokenId: string; + reputationAmount: number; + timestamp: number; + isLocked: boolean; + transactionId: string; +} +export interface InvalidFileSource { + id: string; + targetBoxId: string; + authorTokenId: string; + reputationAmount: number; + timestamp: number; + transactionId: string; +} +export interface UnavailableSource { + id: string; + sourceUrl: string; + authorTokenId: string; + reputationAmount: number; + timestamp: number; + transactionId: string; +} +export interface ProfileOpinion { + id: string; + targetProfileTokenId: string; + isTrusted: boolean; + authorTokenId: string; + reputationAmount: number; + timestamp: number; + transactionId: string; +} +export interface TimelineEvent { + timestamp: number; + type: 'FILE_SOURCE' | 'INVALID_FILE_SOURCE' | 'UNAVAILABLE_SOURCE' | 'PROFILE_OPINION'; + label: string; + color: string; + authorTokenId?: string; + data: any; +} +export interface SearchResult { + sources: FileSource[]; + invalidations: { + [sourceId: string]: InvalidFileSource[]; + }; + unavailabilities: { + [sourceUrl: string]: UnavailableSource[]; + }; +} +export interface ProfileData { + sources: FileSource[]; + invalidations: InvalidFileSource[]; + unavailabilities: UnavailableSource[]; + opinions: ProfileOpinion[]; + opinionsGiven: ProfileOpinion[]; +} +export interface CachedData { + [key: string]: { + data: T; + timestamp: number; + }; +} +/** + * File source with aggregated opinion data + */ +export interface FileSourceWithScore extends FileSource { + confirmations: FileSource[]; + invalidations: InvalidFileSource[]; + unavailabilities: UnavailableSource[]; + confirmationScore: number; + invalidationScore: number; + unavailabilityScore: number; + ownerTrustScore: number; +} +/** + * Data for a unique download source (URL) + */ +export interface DownloadSourceGroup { + sourceUrl: string; + sources: FileSource[]; + owners: string[]; + invalidations: InvalidFileSource[]; + unavailabilities: UnavailableSource[]; +} +/** + * Data for a specific profile's contributions to a hash + */ +export interface ProfileSourceGroup { + profileTokenId: string; + sources: FileSource[]; +} +/** + * Get the primary URL from a FileSource. + * Returns the first source entry's URL, or an empty string if no sources. + */ +export declare function getPrimaryUrl(source: FileSource): string; +/** + * Get all URLs from a FileSource. + * With single source entry, returns an array with one URL. + */ +export declare function getAllUrls(source: FileSource): string[]; +/** + * Group file sources by their download URLs. + * A FileSource can contain multiple URLs; it will appear in each group. + */ +export declare function groupByDownloadSource(sources: FileSource[], invalidationsMap: Record, unavailabilitiesMap: Record): DownloadSourceGroup[]; +/** + * Group file sources by the profile that submitted them. + */ +export declare function groupByProfile(sources: FileSource[]): ProfileSourceGroup[]; +/** + * Calculate the trust score for a profile based on PROFILE_OPINION boxes. + */ +export declare function calculateProfileTrust(profileTokenId: string, opinions: ProfileOpinion[]): number; +/** + * Aggregate opinions into score data for a file source. + */ +export declare function aggregateSourceScore(source: FileSource, allSources: FileSource[], invalidations: InvalidFileSource[], unavailabilities: UnavailableSource[], profileOpinions?: ProfileOpinion[]): FileSourceWithScore; +/** + * Serialize source entries to a JSON string for R9 content. + * The reputation-system library encodes this as Coll[Byte] (UTF-8 bytes). + * + * Format: Coll[Coll[Byte]] — a JSON array containing one tuple (array): + * [hash_function_id, content_format, content_hash, raw_format, url_link, is_chunked] + * + * Serialization format: Coll[Coll[Byte]] + * The output represents a Coll[Coll[Byte]] structure — an array containing + * one tuple (inner Coll[Byte]) with the source entry fields: + * [[hashFunctionId, contentFormat, contentHash, rawFormat, urlLink, isChunked]] + * + * The reputation-system library encodes this JSON string as Coll[Byte] for R9. + * Since encoding operates on the raw UTF-8 bytes of the JSON string (not on + * individual tuple elements), mixed types (string + boolean) within the tuple + * are fine — JSON.parse restores original types on deserialization. + */ +export declare function serializeSourceEntry(entry: SourceEntry): string; +/** + * Deserialize source entries from R9 content string. + * + * Supports three formats (tried in order): + * 1. Coll[Coll[Byte]] tuple format: [[hashFnId, contentFmt, contentHash, rawFmt, urlLink, isChunked]] + * 2. Legacy JSON object format: [{ hashFunctionId, contentFormat, ... }] + * 3. Legacy plain URL string + * + * Note: tuple[5] (isChunked) is a boolean while other elements are strings. + * This is fine because the JSON string is what gets encoded as Coll[Byte], + * and JSON.parse restores the original types. + */ +export declare function deserializeSourceEntry(content: string): SourceEntry; diff --git a/dist/ergo/sourceObject.js b/dist/ergo/sourceObject.js new file mode 100644 index 0000000..7e4882d --- /dev/null +++ b/dist/ergo/sourceObject.js @@ -0,0 +1,204 @@ +/** + * Data models for Source Application + * + * This module defines the core interfaces for the decentralized File Discovery + * and Verification system built on Ergo blockchain. + */ +// --- HELPER FUNCTIONS --- +/** + * Get the primary URL from a FileSource. + * Returns the first source entry's URL, or an empty string if no sources. + */ +export function getPrimaryUrl(source) { + return source.source?.urlLink || ''; +} +/** + * Get all URLs from a FileSource. + * With single source entry, returns an array with one URL. + */ +export function getAllUrls(source) { + return source.source?.urlLink ? [source.source.urlLink] : []; +} +/** + * Group file sources by their download URLs. + * A FileSource can contain multiple URLs; it will appear in each group. + */ +export function groupByDownloadSource(sources, invalidationsMap, unavailabilitiesMap) { + const groups = {}; + for (const source of sources) { + const url = source.source?.urlLink; + if (!url) + continue; + if (!groups[url]) { + groups[url] = { + sourceUrl: url, + sources: [], + owners: [], + invalidations: [], + unavailabilities: unavailabilitiesMap[url]?.data || [] + }; + } + // Avoid duplicating the same source in the same group + if (!groups[url].sources.some(s => s.id === source.id)) { + groups[url].sources.push(source); + } + if (!groups[url].owners.includes(source.ownerTokenId)) { + groups[url].owners.push(source.ownerTokenId); + } + // Add invalidations for this specific box + const boxInvalidations = invalidationsMap[source.id]?.data || []; + groups[url].invalidations.push(...boxInvalidations); + } + return Object.values(groups).sort((a, b) => b.sources.length - a.sources.length); +} +/** + * Group file sources by the profile that submitted them. + */ +export function groupByProfile(sources) { + const groups = {}; + for (const source of sources) { + if (!groups[source.ownerTokenId]) { + groups[source.ownerTokenId] = { + profileTokenId: source.ownerTokenId, + sources: [] + }; + } + groups[source.ownerTokenId].sources.push(source); + } + return Object.values(groups).sort((a, b) => b.sources.length - a.sources.length); +} +/** + * Calculate the trust score for a profile based on PROFILE_OPINION boxes. + */ +export function calculateProfileTrust(profileTokenId, opinions) { + const trust = opinions + .filter(op => op.isTrusted) + .reduce((sum, op) => sum + op.reputationAmount, 0); + const distrust = opinions + .filter(op => !op.isTrusted) + .reduce((sum, op) => sum + op.reputationAmount, 0); + return trust - distrust; +} +/** + * Aggregate opinions into score data for a file source. + */ +export function aggregateSourceScore(source, allSources, invalidations, unavailabilities, profileOpinions = []) { + // Confirmations are other sources with same hash and same URL + const sourceUrl = source.source?.urlLink || ''; + const confirmations = allSources.filter(s => s.id !== source.id && + s.fileHash === source.fileHash && + s.source?.urlLink === sourceUrl); + // Invalidations for this specific box + const filteredInvalidations = invalidations.filter(inv => inv.targetBoxId === source.id); + // Unavailabilities for the URL in this source + const filteredUnavailabilities = unavailabilities.filter(un => un.sourceUrl === sourceUrl); + const confirmationScore = confirmations.reduce((sum, s) => sum + s.reputationAmount, 0); + const invalidationScore = filteredInvalidations.reduce((sum, inv) => sum + inv.reputationAmount, 0); + const unavailabilityScore = filteredUnavailabilities.reduce((sum, un) => sum + un.reputationAmount, 0); + const ownerTrustScore = calculateProfileTrust(source.ownerTokenId, profileOpinions); + return { + ...source, + confirmations, + invalidations: filteredInvalidations, + unavailabilities: filteredUnavailabilities, + confirmationScore, + invalidationScore, + unavailabilityScore, + ownerTrustScore + }; +} +// --- SERIALIZATION HELPERS --- +/** + * Serialize source entries to a JSON string for R9 content. + * The reputation-system library encodes this as Coll[Byte] (UTF-8 bytes). + * + * Format: Coll[Coll[Byte]] — a JSON array containing one tuple (array): + * [hash_function_id, content_format, content_hash, raw_format, url_link, is_chunked] + * + * Serialization format: Coll[Coll[Byte]] + * The output represents a Coll[Coll[Byte]] structure — an array containing + * one tuple (inner Coll[Byte]) with the source entry fields: + * [[hashFunctionId, contentFormat, contentHash, rawFormat, urlLink, isChunked]] + * + * The reputation-system library encodes this JSON string as Coll[Byte] for R9. + * Since encoding operates on the raw UTF-8 bytes of the JSON string (not on + * individual tuple elements), mixed types (string + boolean) within the tuple + * are fine — JSON.parse restores original types on deserialization. + */ +export function serializeSourceEntry(entry) { + // Coll[Coll[Byte]]: outer array = Coll, inner tuple = Coll[Byte] elements + const tuple = [ + entry.hashFunctionId, + entry.contentFormat, + entry.contentHash, + entry.rawFormat, + entry.urlLink, + entry.isChunked ?? false + ]; + return JSON.stringify([tuple]); // Coll[Coll[Byte]] serialized as JSON string +} +/** + * Deserialize source entries from R9 content string. + * + * Supports three formats (tried in order): + * 1. Coll[Coll[Byte]] tuple format: [[hashFnId, contentFmt, contentHash, rawFmt, urlLink, isChunked]] + * 2. Legacy JSON object format: [{ hashFunctionId, contentFormat, ... }] + * 3. Legacy plain URL string + * + * Note: tuple[5] (isChunked) is a boolean while other elements are strings. + * This is fine because the JSON string is what gets encoded as Coll[Byte], + * and JSON.parse restores the original types. + */ +export function deserializeSourceEntry(content) { + const empty = { + hashFunctionId: '', + contentFormat: '', + contentHash: '', + rawFormat: '', + urlLink: '' + }; + if (!content || content.trim() === '') + return empty; + try { + const parsed = JSON.parse(content); + if (Array.isArray(parsed) && parsed.length > 0) { + const tuple = parsed[0]; + // Format 1: Coll[Coll[Byte]] tuple array + // [[hashFnId, contentFmt, contentHash, rawFmt, urlLink, isChunked?]] + if (Array.isArray(tuple) && tuple.length >= 5) { + return { + hashFunctionId: tuple[0] || '', + contentFormat: tuple[1] || '', + contentHash: tuple[2] || '', + rawFormat: tuple[3] || '', + urlLink: tuple[4] || '', + isChunked: tuple[5] === true + }; + } + // Format 2: Legacy JSON object format + // [{ hashFunctionId, contentFormat, contentHash, rawFormat, urlLink, isChunked }] + if (typeof tuple === 'object' && tuple !== null && !Array.isArray(tuple)) { + return { + hashFunctionId: tuple.hashFunctionId || '', + contentFormat: tuple.contentFormat || tuple.contentFormatNftId || '', + contentHash: tuple.contentHash || '', + rawFormat: tuple.rawFormat || tuple.rawFormatNftId || '', + urlLink: tuple.urlLink || '', + isChunked: tuple.isChunked === true + }; + } + } + } + catch { + // Not JSON — treat as legacy plain URL string + } + // Format 3: Legacy plain URL string + return { + hashFunctionId: '', + contentFormat: '', + contentHash: '', + rawFormat: '', + urlLink: content, + isChunked: false + }; +} diff --git a/dist/ergo/sourceStore.d.ts b/dist/ergo/sourceStore.d.ts new file mode 100644 index 0000000..9d72ee2 --- /dev/null +++ b/dist/ergo/sourceStore.d.ts @@ -0,0 +1,48 @@ +import { type ReputationProof } from 'reputation-system'; +import { type FileSource, type SourceEntry } from './sourceObject'; +/** + * Creates a user profile box (same as forum). + */ +export declare function createProfileBox(explorerUri: string): Promise; +/** + * Add a new FILE_SOURCE box. + * Creates a box with R5=fileHash (raw file hash), R9=serialized source entries. + * + * @param fileHash - The raw file hash digest (R5 anchor) + * @param hashFunctionId - ID of the hash function used (HASH(EMPTY_INPUT)) + * @param sourceEntry - Single SourceEntry object for R9 + * @param proof - User's reputation proof + * @param explorerUri - Explorer API endpoint + */ +export declare function addFileSource(fileHash: string, hashFunctionId: string, sourceEntry: SourceEntry, proof: ReputationProof | null, explorerUri: string): Promise; +/** + * Update a FILE_SOURCE box (spend old, create new with same hash but new source entries). + * The old box must be owned by the current user. + * + * @param oldBoxId - Box ID of the existing FILE_SOURCE to update + * @param fileHash - The raw file hash (must match existing) + * @param newSourceEntry - New SourceEntry object for R9 + * @param proof - User's reputation proof + * @param explorerUri - Explorer API endpoint + */ +export declare function updateFileSource(oldBoxId: string, fileHash: string, newSourceEntry: SourceEntry, proof: ReputationProof | null, explorerUri: string): Promise; +/** + * Confirm a FILE_SOURCE box. + * Creates a new FILE_SOURCE box with same hash and source entries. + */ +export declare function confirmSource(fileHash: string, hashFunctionId: string, sourceEntry: SourceEntry, proof: ReputationProof | null, currentSources: FileSource[], explorerUri: string): Promise; +/** + * Mark a FILE_SOURCE box as invalid. + * Creates an INVALID_FILE_SOURCE box with R5=sourceBoxId. + */ +export declare function markInvalidSource(sourceBoxId: string, proof: ReputationProof | null, explorerUri: string): Promise; +/** + * Mark a source URL as unavailable. + * Creates an UNAVAILABLE_SOURCE box with R5=sourceUrl. + */ +export declare function markUnavailableSource(sourceUrl: string, proof: ReputationProof | null, explorerUri: string): Promise; +/** + * Trust or distrust a profile. + * Creates a PROFILE_OPINION box with R5=profileTokenId, R8=isTrusted. + */ +export declare function trustProfile(profileTokenId: string, isTrusted: boolean, proof: ReputationProof | null, explorerUri: string): Promise; diff --git a/dist/ergo/sourceStore.js b/dist/ergo/sourceStore.js new file mode 100644 index 0000000..f0b7ff0 --- /dev/null +++ b/dist/ergo/sourceStore.js @@ -0,0 +1,148 @@ +import { create_profile, create_opinion, update_opinion } from 'reputation-system'; +import { serializeSourceEntry } from './sourceObject'; +import { FILE_SOURCE_TYPE_NFT_ID, INVALID_FILE_SOURCE_TYPE_NFT_ID, UNAVAILABLE_SOURCE_TYPE_NFT_ID, PROFILE_OPINION_TYPE_NFT_ID, PROFILE_TOTAL_SUPPLY, PROFILE_TYPE_NFT_ID, } from './envs'; +/** + * Gets the main profile box from a ReputationProof. + * Returns the first box with PROFILE_TYPE_NFT_ID as its type. + */ +function getMainProfileBox(proof) { + if (!proof) + return null; + return proof.current_boxes.find((b) => b.object_pointer === proof.token_id) || null; +} +// --- PROFILE MANAGEMENT --- +/** + * Creates a user profile box (same as forum). + */ +export async function createProfileBox(explorerUri) { + const profileTxId = await create_profile(explorerUri, PROFILE_TOTAL_SUPPLY, PROFILE_TYPE_NFT_ID, { name: "Anon" }); + if (!profileTxId) { + throw new Error("Fatal error: The profile creation transaction failed to send."); + } + console.warn("User profile not found. A new one has been created. Please wait ~2 minutes for the transaction to confirm and try again."); + return profileTxId; +} +/** + * Add a new FILE_SOURCE box. + * Creates a box with R5=fileHash (raw file hash), R9=serialized source entries. + * + * @param fileHash - The raw file hash digest (R5 anchor) + * @param hashFunctionId - ID of the hash function used (HASH(EMPTY_INPUT)) + * @param sourceEntry - Single SourceEntry object for R9 + * @param proof - User's reputation proof + * @param explorerUri - Explorer API endpoint + */ +export async function addFileSource(fileHash, hashFunctionId, sourceEntry, proof, explorerUri) { + console.log("API: addFileSource", { fileHash, hashFunctionId, sourceEntry }); + console.log("Proof:", proof); + if (!proof) { + throw new Error("Reputation proof is required to add a file source."); + } + const mainBox = getMainProfileBox(proof); + console.log("Opinion box (profile):", mainBox); + if (!mainBox) { + throw new Error("Profile box required but not available yet. Please wait for profile creation to confirm."); + } + // Serialize single source entry as JSON for R9 content + const serializedContent = serializeSourceEntry(sourceEntry); + const tx = await create_opinion(explorerUri, // explorerUri: Explorer API endpoint + 1, // token_amount: 1 token for the new file source box + FILE_SOURCE_TYPE_NFT_ID, // type_nft_id: Type NFT for FILE_SOURCE + fileHash, // object_pointer: R5 - The raw file hash + true, // polarization: R8 - Positive opinion + serializedContent, // content: R9 - Serialized source entry + false, // is_locked: R6 - Unlocked + mainBox // main_box: The profile box to split from + ); + if (!tx) + throw new Error("File source transaction failed."); + console.log("File source transaction sent, ID:", tx); + return tx; +} +/** + * Update a FILE_SOURCE box (spend old, create new with same hash but new source entries). + * The old box must be owned by the current user. + * + * @param oldBoxId - Box ID of the existing FILE_SOURCE to update + * @param fileHash - The raw file hash (must match existing) + * @param newSourceEntry - New SourceEntry object for R9 + * @param proof - User's reputation proof + * @param explorerUri - Explorer API endpoint + */ +export async function updateFileSource(oldBoxId, fileHash, newSourceEntry, proof, explorerUri) { + console.log("API: updateFileSource", { oldBoxId, fileHash, newSourceEntry }); + // Find the existing file source box to update + const existingBox = proof?.current_boxes.find((b) => b.box.boxId === oldBoxId) || null; + if (!existingBox) { + throw new Error("File source box to update not found."); + } + // Serialize new source entry as JSON for R9 content + const serializedContent = serializeSourceEntry(newSourceEntry); + const tx = await update_opinion(explorerUri, existingBox, true, serializedContent); + if (!tx) + throw new Error("File source update transaction failed."); + console.log("File source update transaction sent, ID:", tx); + return tx; +} +/** + * Confirm a FILE_SOURCE box. + * Creates a new FILE_SOURCE box with same hash and source entries. + */ +export async function confirmSource(fileHash, hashFunctionId, sourceEntry, proof, currentSources, explorerUri) { + console.log("API: confirmSource", { fileHash, sourceEntry }); + // Safety check: has the user already confirmed this? + const userTokenId = proof?.token_id; + const primaryUrl = sourceEntry.urlLink || ''; + if (userTokenId && currentSources.some(s => s.source?.urlLink === primaryUrl && s.ownerTokenId === userTokenId)) { + throw new Error("You have already confirmed this source."); + } + return await addFileSource(fileHash, hashFunctionId, sourceEntry, proof, explorerUri); +} +/** + * Mark a FILE_SOURCE box as invalid. + * Creates an INVALID_FILE_SOURCE box with R5=sourceBoxId. + */ +export async function markInvalidSource(sourceBoxId, proof, explorerUri) { + console.log("API: markInvalidSource", { sourceBoxId }); + const mainBox = getMainProfileBox(proof); + if (!mainBox) { + throw new Error("Profile box required but not available yet."); + } + const tx = await create_opinion(explorerUri, 1, INVALID_FILE_SOURCE_TYPE_NFT_ID, sourceBoxId, false, null, false, mainBox); + if (!tx) + throw new Error("Invalid source transaction failed."); + console.log("Invalid source transaction sent, ID:", tx); + return tx; +} +/** + * Mark a source URL as unavailable. + * Creates an UNAVAILABLE_SOURCE box with R5=sourceUrl. + */ +export async function markUnavailableSource(sourceUrl, proof, explorerUri) { + console.log("API: markUnavailableSource", sourceUrl); + const mainBox = getMainProfileBox(proof); + if (!mainBox) { + throw new Error("Profile box required but not available yet."); + } + const tx = await create_opinion(explorerUri, 1, UNAVAILABLE_SOURCE_TYPE_NFT_ID, sourceUrl, false, null, false, mainBox); + if (!tx) + throw new Error("Unavailable source transaction failed."); + console.log("Unavailable source transaction sent, ID:", tx); + return tx; +} +/** + * Trust or distrust a profile. + * Creates a PROFILE_OPINION box with R5=profileTokenId, R8=isTrusted. + */ +export async function trustProfile(profileTokenId, isTrusted, proof, explorerUri) { + console.log("API: trustProfile", { profileTokenId, isTrusted }); + const opinionBox = getMainProfileBox(proof); + if (!opinionBox) { + throw new Error("Profile box required but not available yet."); + } + const tx = await create_opinion(explorerUri, 1, PROFILE_OPINION_TYPE_NFT_ID, profileTokenId, isTrusted, null, false, opinionBox); + if (!tx) + throw new Error("Profile opinion transaction failed."); + console.log("Profile opinion transaction sent, ID:", tx); + return tx; +} diff --git a/dist/ergo/store.d.ts b/dist/ergo/store.d.ts new file mode 100644 index 0000000..13a6bf1 --- /dev/null +++ b/dist/ergo/store.d.ts @@ -0,0 +1,89 @@ +import { type ReputationProof, type TypeNFT } from 'reputation-system'; +import { type FileSource, type InvalidFileSource, type UnavailableSource, type ProfileOpinion, type CachedData } from './sourceObject'; +export declare const address: import("svelte/store").Writable; +export declare const network: import("svelte/store").Writable; +export declare const connected: import("svelte/store").Writable; +export declare const balance: import("svelte/store").Writable; +export declare const compute_deep_level: import("svelte/store").Writable; +export declare const searchStore: import("svelte/store").Writable; +export declare const data_store: import("svelte/store").Writable; +export declare const types: import("svelte/store").Writable>; +export declare const proofs: import("svelte/store").Writable>; +export declare const reputation_proof: import("svelte/store").Writable; +export declare const explorer_uri: { + subscribe: (this: void, run: import("svelte/store").Subscriber, invalidate?: import("svelte/store").Invalidator | undefined) => import("svelte/store").Unsubscriber; + set: (value: string) => void; + update: (this: void, updater: import("svelte/store").Updater) => void; +}; +export declare const web_explorer_uri_tx: { + subscribe: (this: void, run: import("svelte/store").Subscriber, invalidate?: import("svelte/store").Invalidator | undefined) => import("svelte/store").Unsubscriber; + set: (value: string) => void; + update: (this: void, updater: import("svelte/store").Updater) => void; +}; +export declare const web_explorer_uri_addr: { + subscribe: (this: void, run: import("svelte/store").Subscriber, invalidate?: import("svelte/store").Invalidator | undefined) => import("svelte/store").Unsubscriber; + set: (value: string) => void; + update: (this: void, updater: import("svelte/store").Updater) => void; +}; +export declare const web_explorer_uri_tkn: { + subscribe: (this: void, run: import("svelte/store").Subscriber, invalidate?: import("svelte/store").Invalidator | undefined) => import("svelte/store").Unsubscriber; + set: (value: string) => void; + update: (this: void, updater: import("svelte/store").Updater) => void; +}; +export declare const CACHE_DURATION: number; +/** + * Helper to create a writable store that persists to localStorage. + */ +export declare function createPersistentStore(key: string, initialValue: T): { + subscribe: (this: void, run: import("svelte/store").Subscriber, invalidate?: import("svelte/store").Invalidator | undefined) => import("svelte/store").Unsubscriber; + set: (value: T) => void; + update: (fn: (value: T) => T) => void; +}; +export declare const fileSources: { + subscribe: (this: void, run: import("svelte/store").Subscriber>, invalidate?: import("svelte/store").Invalidator> | undefined) => import("svelte/store").Unsubscriber; + set: (value: CachedData) => void; + update: (fn: (value: CachedData) => CachedData) => void; +}; +export declare const currentSearchHash: import("svelte/store").Writable; +export declare const invalidFileSources: { + subscribe: (this: void, run: import("svelte/store").Subscriber>, invalidate?: import("svelte/store").Invalidator> | undefined) => import("svelte/store").Unsubscriber; + set: (value: CachedData) => void; + update: (fn: (value: CachedData) => CachedData) => void; +}; +export declare const unavailableSources: { + subscribe: (this: void, run: import("svelte/store").Subscriber>, invalidate?: import("svelte/store").Invalidator> | undefined) => import("svelte/store").Unsubscriber; + set: (value: CachedData) => void; + update: (fn: (value: CachedData) => CachedData) => void; +}; +export declare const profileOpinions: { + subscribe: (this: void, run: import("svelte/store").Subscriber>, invalidate?: import("svelte/store").Invalidator> | undefined) => import("svelte/store").Unsubscriber; + set: (value: CachedData) => void; + update: (fn: (value: CachedData) => CachedData) => void; +}; +export declare const profileInvalidations: { + subscribe: (this: void, run: import("svelte/store").Subscriber>, invalidate?: import("svelte/store").Invalidator> | undefined) => import("svelte/store").Unsubscriber; + set: (value: CachedData) => void; + update: (fn: (value: CachedData) => CachedData) => void; +}; +export declare const profileUnavailabilities: { + subscribe: (this: void, run: import("svelte/store").Subscriber>, invalidate?: import("svelte/store").Invalidator> | undefined) => import("svelte/store").Unsubscriber; + set: (value: CachedData) => void; + update: (fn: (value: CachedData) => CachedData) => void; +}; +export declare const profileOpinionsGiven: { + subscribe: (this: void, run: import("svelte/store").Subscriber>, invalidate?: import("svelte/store").Invalidator> | undefined) => import("svelte/store").Unsubscriber; + set: (value: CachedData) => void; + update: (fn: (value: CachedData) => CachedData) => void; +}; +export declare const isLoading: import("svelte/store").Writable; +export declare const error: import("svelte/store").Writable; +/** + * When enabled, adding a source will download the file from the URL and verify + * its hash matches before submitting the transaction. Disabled by default to + * avoid large downloads and CORS issues in the browser. + */ +export declare const hashValidationEnabled: { + subscribe: (this: void, run: import("svelte/store").Subscriber, invalidate?: import("svelte/store").Invalidator | undefined) => import("svelte/store").Unsubscriber; + set: (value: boolean) => void; + update: (fn: (value: boolean) => boolean) => void; +}; diff --git a/dist/ergo/store.js b/dist/ergo/store.js new file mode 100644 index 0000000..6735ca8 --- /dev/null +++ b/dist/ergo/store.js @@ -0,0 +1,96 @@ +import { writable } from 'svelte/store'; +import { network_id } from './envs'; +export const address = writable(null); +export const network = writable(null); +export const connected = writable(false); +export const balance = writable(null); +// App logic stores +export const compute_deep_level = writable(5); +export const searchStore = writable(null); +export const data_store = writable(null); +export const types = writable(new Map()); +// Main store for holding fetched reputation proofs, keyed by token ID. +export const proofs = writable(new Map()); +export const reputation_proof = writable(null); +// --- SOURCE STORES --- +const default_explorer_uri = (network_id == "mainnet") ? "https://api.ergoplatform.com" : "https://api-testnet.ergoplatform.com"; +const default_web_tx = (network_id == "mainnet") ? "https://sigmaspace.io/en/transaction/" : "https://testnet.ergoplatform.com/transactions/"; +const default_web_addr = (network_id == "mainnet") ? "https://sigmaspace.io/en/address/" : "https://testnet.ergoplatform.com/addresses/"; +const default_web_tkn = (network_id == "mainnet") ? "https://sigmaspace.io/en/token/" : "https://testnet.ergoplatform.com/tokens/"; +function createPersistedStringStore(key, startValue) { + const isBrowser = typeof window !== 'undefined'; + let initial = startValue; + if (isBrowser) { + const stored = localStorage.getItem(key); + if (stored) + initial = stored; + } + const { subscribe, set, update } = writable(initial); + return { + subscribe, + set: (value) => { + if (isBrowser) + localStorage.setItem(key, value); + set(value); + }, + update + }; +} +export const explorer_uri = createPersistedStringStore('explorer_uri', default_explorer_uri); +export const web_explorer_uri_tx = createPersistedStringStore('web_explorer_uri_tx', default_web_tx); +export const web_explorer_uri_addr = createPersistedStringStore('web_explorer_uri_addr', default_web_addr); +export const web_explorer_uri_tkn = createPersistedStringStore('web_explorer_uri_tkn', default_web_tkn); +// --- CACHE CONFIGURATION --- +export const CACHE_DURATION = 5 * 60 * 1000; // 5 minutes in milliseconds +/** + * Helper to create a writable store that persists to localStorage. + */ +export function createPersistentStore(key, initialValue) { + const isBrowser = typeof window !== 'undefined'; + let initial = initialValue; + if (isBrowser) { + try { + const saved = localStorage.getItem(key); + if (saved) { + initial = JSON.parse(saved); + } + } + catch (e) { + console.warn(`Error loading ${key} from localStorage:`, e); + } + } + const { subscribe, set, update } = writable(initial); + return { + subscribe, + set: (value) => { + if (isBrowser) + localStorage.setItem(key, JSON.stringify(value)); + set(value); + }, + update: (fn) => { + update(current => { + const newValue = fn(current); + if (isBrowser) + localStorage.setItem(key, JSON.stringify(newValue)); + return newValue; + }); + } + }; +} +export const fileSources = createPersistentStore('source_file_sources', {}); +export const currentSearchHash = writable(""); +export const invalidFileSources = createPersistentStore('source_invalidations', {}); +export const unavailableSources = createPersistentStore('source_unavailabilities', {}); +export const profileOpinions = createPersistentStore('source_profile_opinions', {}); +export const profileInvalidations = createPersistentStore('source_profile_invalidations', {}); +export const profileUnavailabilities = createPersistentStore('source_profile_unavailabilities', {}); +export const profileOpinionsGiven = createPersistentStore('source_profile_opinions_given', {}); +export const isLoading = writable(false); +export const error = writable(null); +// --- SETTINGS --- +/** + * When enabled, adding a source will download the file from the URL and verify + * its hash matches before submitting the transaction. Disabled by default to + * avoid large downloads and CORS issues in the browser. + */ +export const hashValidationEnabled = createPersistentStore('hash_validation_enabled', false); diff --git a/dist/ergo/utils.d.ts b/dist/ergo/utils.d.ts new file mode 100644 index 0000000..2cab613 --- /dev/null +++ b/dist/ergo/utils.d.ts @@ -0,0 +1,44 @@ +import { type Box, type Amount } from '@fleet-sdk/core'; +export interface InputBox { + boxId: string; + value: Amount; + assets: { + tokenId: string; + amount: Amount; + }[]; + ergoTree: string; + creationHeight: number; + additionalRegisters: { + [key: string]: string; + }; + index: number; + transactionId: string; +} +export declare function hexToUtf8(hexString: string): string | null; +export declare function hexOrUtf8ToBytes(value: string | null | undefined): Uint8Array; +export declare function generate_pk_proposition(wallet_pk: string): string; +export declare function SString(value: string): string; +export declare function uint8ArrayToHex(array: Uint8Array): string; +export declare function parseLongColl(renderedValue: any): bigint[] | null; +export declare function hexToBytes(hexString: string | undefined | null): Uint8Array | null; +export declare function parseIntFromRendered(renderedValue: any): number | null; +export declare function parseCollByteToHex(renderedValue: any): string | null; +export declare function parseIntFromHex(renderedValue: any): number | null; +export declare function utf8StringToCollByteHex(inputString: string): string; +export declare function bigintToLongByteArray(value: bigint): Uint8Array; +export declare function parseBox(e: Box): InputBox; +/** + * A utility function to convert a serialized value to its "rendered" format (for debugging/display). + * This is a simplification and may not cover all Ergo types. + * @param serializedValue The full serialized hex string. + * @returns A simplified hex string. + */ +export declare function serializedToRendered(serializedValue: string): string; +/** + * Converts a JavaScript string directly to its "rendered" hex format. + * This is a convenience function that combines stringToSerialized and serializedToRendered. + * @param value The string to convert. + * @returns The simplified, rendered hex string. + */ +export declare function stringToRendered(value: string): string; +export declare function pkHexToBase58Address(pkHex?: string): string; diff --git a/dist/ergo/utils.js b/dist/ergo/utils.js new file mode 100644 index 0000000..d7bc16e --- /dev/null +++ b/dist/ergo/utils.js @@ -0,0 +1,193 @@ +import { stringToBytes } from "@scure/base"; +import { ErgoAddress, SByte, SColl, SGroupElement } from '@fleet-sdk/core'; +export function hexToUtf8(hexString) { + try { + if (hexString.length % 2 !== 0) { + return null; + } + const byteArray = new Uint8Array(hexString.match(/.{1,2}/g).map(byte => parseInt(byte, 16))); + const decoder = new TextDecoder('utf-8'); + const utf8String = decoder.decode(byteArray); + return utf8String; + } + catch { + return null; + } +} +export function hexOrUtf8ToBytes(value) { + if (!value) { + return new Uint8Array(); + } + const hexBytes = hexToBytes(value); + if (hexBytes) { + return hexBytes; + } + // fallback: utf-8 + return new TextEncoder().encode(value); +} +export function generate_pk_proposition(wallet_pk) { + const pk = ErgoAddress.fromBase58(wallet_pk).getPublicKeys()[0]; + const encodedProp = SGroupElement(pk); + return encodedProp.toHex(); +} +export function SString(value) { + return SColl(SByte, hexToBytes(value) ?? "").toHex(); +} +export function uint8ArrayToHex(array) { + return [...new Uint8Array(array)] + .map(x => x.toString(16).padStart(2, '0')) + .join(''); +} +export function parseLongColl(renderedValue) { + if (!Array.isArray(renderedValue)) { + return null; + } + try { + return renderedValue.map(item => { + if (typeof item === 'string' || typeof item === 'number' || typeof item === 'bigint') { + return BigInt(item); + } + throw new Error(`No se puede convertir el item '${item}' a BigInt.`); + }); + } + catch (e) { + console.error("parseLongColl: Error convirtiendo items a BigInt:", renderedValue, e); + return null; + } +} +export function hexToBytes(hexString) { + if (!hexString || typeof hexString !== 'string' || !/^[0-9a-fA-F]*$/.test(hexString)) { + return null; + } + if (hexString.length % 2 !== 0) { + return null; + } + try { + const byteArray = new Uint8Array(hexString.length / 2); + for (let i = 0; i < byteArray.length; i++) { + const byte = parseInt(hexString.substring(i * 2, i * 2 + 2), 16); + if (isNaN(byte)) { + throw new Error("Se encontró un carácter hexadecimal inválido durante el parseInt."); + } + byteArray[i] = byte; + } + return byteArray; + } + catch (e) { + console.error("hexToBytes: Error convirtiendo hex a bytes:", hexString, e); + return null; + } +} +export function parseIntFromRendered(renderedValue) { + if (renderedValue === null || renderedValue === undefined) + return null; + if (typeof renderedValue === 'number') { + return Number.isFinite(renderedValue) ? renderedValue : null; + } + if (typeof renderedValue === 'string') { + const num = parseInt(renderedValue, 10); + return Number.isFinite(num) ? num : null; + } + return null; +} +export function parseCollByteToHex(renderedValue) { + if (renderedValue === null || renderedValue === undefined) + return null; + if (Array.isArray(renderedValue) && renderedValue.every(item => typeof item === 'number' && item >= 0 && item <= 255)) { + try { + return uint8ArrayToHex(new Uint8Array(renderedValue)); + } + catch (e) { + console.error("parseCollByteToHex: Error convirtiendo array de bytes a hex:", renderedValue, e); + return null; + } + } + if (typeof renderedValue === 'string') { + const cleanedHex = renderedValue.startsWith('0x') ? renderedValue.substring(2) : renderedValue; + if (/^[0-9a-fA-F]*$/.test(cleanedHex) && cleanedHex.length % 2 === 0) { + return cleanedHex; + } + } + return null; +} +export function parseIntFromHex(renderedValue) { + if (typeof renderedValue !== 'string' && typeof renderedValue !== 'number') + return null; + try { + if (typeof renderedValue === 'number') + return renderedValue; + const num = parseInt(renderedValue, 10); + return isNaN(num) ? null : num; + } + catch (e) { + return null; + } +} +export function utf8StringToCollByteHex(inputString) { + const bytes = stringToBytes('utf8', inputString); + return SColl(SByte, bytes).toHex(); +} +export function bigintToLongByteArray(value) { + const MIN_LONG = -(2n ** 63n); + const MAX_LONG = (2n ** 63n) - 1n; + if (value < MIN_LONG || value > MAX_LONG) { + throw new Error(`Valor ${value} está fuera del rango para un Long de 64 bits con signo.`); + } + const buffer = new ArrayBuffer(8); + const view = new DataView(buffer); + view.setBigInt64(0, value, false); + return new Uint8Array(buffer); +} +export function parseBox(e) { + return { + boxId: e.boxId, + value: e.value, + assets: e.assets, + ergoTree: e.ergoTree, + creationHeight: e.creationHeight, + additionalRegisters: Object.entries(e.additionalRegisters).reduce((acc, [key, value]) => { + if (value) + acc[key] = value; + return acc; + }, {}), + index: e.index, + transactionId: e.transactionId + }; +} +/** + * A utility function to convert a serialized value to its "rendered" format (for debugging/display). + * This is a simplification and may not cover all Ergo types. + * @param serializedValue The full serialized hex string. + * @returns A simplified hex string. + */ +export function serializedToRendered(serializedValue) { + if (serializedValue.startsWith('0e')) { + return serializedValue.substring(4); + } + else if (serializedValue.startsWith('04')) { + return serializedValue.substring(2); + } + return serializedValue; +} +/** + * Converts a JavaScript string directly to its "rendered" hex format. + * This is a convenience function that combines stringToSerialized and serializedToRendered. + * @param value The string to convert. + * @returns The simplified, rendered hex string. + */ +export function stringToRendered(value) { + return serializedToRendered(SString(value)); +} +export function pkHexToBase58Address(pkHex) { + if (!pkHex) + return "N/A"; + try { + const pkBytes = hexToBytes(pkHex); + if (!pkBytes) + return "Invalid PK"; + return ErgoAddress.fromPublicKey(pkBytes).toString(); + } + catch { + return "Invalid PK"; + } +} diff --git a/dist/index.d.ts b/dist/index.d.ts new file mode 100644 index 0000000..82b1d86 --- /dev/null +++ b/dist/index.d.ts @@ -0,0 +1,20 @@ +export { fetchFileSourcesByHash, fetchInvalidFileSources, fetchUnavailableSources, fetchProfileOpinions, fetchFileSourcesByProfile, fetchInvalidFileSourcesByProfile, fetchUnavailableSourcesByProfile, fetchProfileOpinionsByAuthor, searchByHash, loadProfileData } from './ergo/sourceFetch'; +export { createProfileBox, addFileSource, updateFileSource, confirmSource, markInvalidSource, markUnavailableSource, trustProfile } from './ergo/sourceStore'; +export type { SourceEntry, FileSource, InvalidFileSource, UnavailableSource, ProfileOpinion, TimelineEvent, FileSourceWithScore, DownloadSourceGroup, ProfileSourceGroup, SearchResult, ProfileData } from './ergo/sourceObject'; +export { groupByDownloadSource, groupByProfile, calculateProfileTrust, aggregateSourceScore, getPrimaryUrl, getAllUrls, serializeSourceEntry, deserializeSourceEntry } from './ergo/sourceObject'; +export type { ReputationProof, RPBox, TypeNFT, ApiBox } from './ergo/object'; +export { PROFILE_TYPE_NFT_ID, PROFILE_TOTAL_SUPPLY, FILE_SOURCE_TYPE_NFT_ID, INVALID_FILE_SOURCE_TYPE_NFT_ID, UNAVAILABLE_SOURCE_TYPE_NFT_ID, PROFILE_OPINION_TYPE_NFT_ID, } from './ergo/envs'; +export { hashValidationEnabled } from './ergo/store'; +export { HASH_ALGORITHM_IDS, HASH_OPTIONS, SEARCH_HASH_ALGORITHMS, normalizeHashAlgorithmId } from './ergo/hashUtils'; +export { default as ProfileCard } from './components/ProfileCard.svelte'; +export { default as FileSourceCreation } from './components/FileSourceCreation.svelte'; +export { default as FileSourceCard } from './components/FileSourceCard.svelte'; +export { default as FileCard } from './components/FileCard.svelte'; +export { default as SearchByHash } from './components/SearchByHash.svelte'; +export { default as ProfileSources } from './components/ProfileSources.svelte'; +export { default as DownloadSourceCard } from './components/DownloadSourceCard.svelte'; +export { default as ProfileSourceGroupView } from './components/ProfileSourceGroup.svelte'; +export { default as Timeline } from './components/Timeline.svelte'; +export { default as SettingsModal } from './components/SettingsModal.svelte'; +export { default as ProfileModal } from './components/ProfileModal.svelte'; +export { default as AddSource } from './components/AddSource.svelte'; diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 0000000..8580bf7 --- /dev/null +++ b/dist/index.js @@ -0,0 +1,26 @@ +// Source Application Library - Main Entry Point +// This library provides functions and components for decentralized file discovery and verification +// ===== SOURCE FETCH FUNCTIONS ===== +export { fetchFileSourcesByHash, fetchInvalidFileSources, fetchUnavailableSources, fetchProfileOpinions, fetchFileSourcesByProfile, fetchInvalidFileSourcesByProfile, fetchUnavailableSourcesByProfile, fetchProfileOpinionsByAuthor, searchByHash, loadProfileData } from './ergo/sourceFetch'; +// ===== SOURCE STORE FUNCTIONS ===== +export { createProfileBox, addFileSource, updateFileSource, confirmSource, markInvalidSource, markUnavailableSource, trustProfile } from './ergo/sourceStore'; +export { groupByDownloadSource, groupByProfile, calculateProfileTrust, aggregateSourceScore, getPrimaryUrl, getAllUrls, serializeSourceEntry, deserializeSourceEntry } from './ergo/sourceObject'; +// ===== ENVIRONMENT CONSTANTS ===== +export { PROFILE_TYPE_NFT_ID, PROFILE_TOTAL_SUPPLY, FILE_SOURCE_TYPE_NFT_ID, INVALID_FILE_SOURCE_TYPE_NFT_ID, UNAVAILABLE_SOURCE_TYPE_NFT_ID, PROFILE_OPINION_TYPE_NFT_ID, } from './ergo/envs'; +// ===== SETTINGS STORES ===== +export { hashValidationEnabled } from './ergo/store'; +// ===== HASH UTILITIES ===== +export { HASH_ALGORITHM_IDS, HASH_OPTIONS, SEARCH_HASH_ALGORITHMS, normalizeHashAlgorithmId } from './ergo/hashUtils'; +// ===== SVELTE COMPONENTS ===== +export { default as ProfileCard } from './components/ProfileCard.svelte'; +export { default as FileSourceCreation } from './components/FileSourceCreation.svelte'; +export { default as FileSourceCard } from './components/FileSourceCard.svelte'; +export { default as FileCard } from './components/FileCard.svelte'; +export { default as SearchByHash } from './components/SearchByHash.svelte'; +export { default as ProfileSources } from './components/ProfileSources.svelte'; +export { default as DownloadSourceCard } from './components/DownloadSourceCard.svelte'; +export { default as ProfileSourceGroupView } from './components/ProfileSourceGroup.svelte'; +export { default as Timeline } from './components/Timeline.svelte'; +export { default as SettingsModal } from './components/SettingsModal.svelte'; +export { default as ProfileModal } from './components/ProfileModal.svelte'; +export { default as AddSource } from './components/AddSource.svelte'; diff --git a/dist/utils.d.ts b/dist/utils.d.ts new file mode 100644 index 0000000..90657a8 --- /dev/null +++ b/dist/utils.d.ts @@ -0,0 +1,11 @@ +import { type ClassValue } from "clsx"; +import type { TransitionConfig } from "svelte/transition"; +export declare function cn(...inputs: ClassValue[]): string; +type FlyAndScaleParams = { + y?: number; + x?: number; + start?: number; + duration?: number; +}; +export declare const flyAndScale: (node: Element, params?: FlyAndScaleParams) => TransitionConfig; +export {}; diff --git a/dist/utils.js b/dist/utils.js new file mode 100644 index 0000000..9effec0 --- /dev/null +++ b/dist/utils.js @@ -0,0 +1,38 @@ +import { clsx } from "clsx"; +import { twMerge } from "tailwind-merge"; +import { cubicOut } from "svelte/easing"; +export function cn(...inputs) { + return twMerge(clsx(inputs)); +} +export const flyAndScale = (node, params = { y: -8, x: 0, start: 0.95, duration: 150 }) => { + const style = getComputedStyle(node); + const transform = style.transform === "none" ? "" : style.transform; + const scaleConversion = (valueA, scaleA, scaleB) => { + const [minA, maxA] = scaleA; + const [minB, maxB] = scaleB; + const percentage = (valueA - minA) / (maxA - minA); + const valueB = percentage * (maxB - minB) + minB; + return valueB; + }; + const styleToString = (style) => { + return Object.keys(style).reduce((str, key) => { + if (style[key] === undefined) + return str; + return str + `${key}:${style[key]};`; + }, ""); + }; + return { + duration: params.duration ?? 200, + delay: 0, + css: (t) => { + const y = scaleConversion(t, [0, 1], [params.y ?? 5, 0]); + const x = scaleConversion(t, [0, 1], [params.x ?? 0, 0]); + const scale = scaleConversion(t, [0, 1], [params.start ?? 0.95, 1]); + return styleToString({ + transform: `${transform} translate3d(${x}px, ${y}px, 0) scale(${scale})`, + opacity: t + }); + }, + easing: cubicOut + }; +}; From 9ca1e128f7adcff5d93a56873b1085d00fd025d5 Mon Sep 17 00:00:00 2001 From: 0xf965 <0xf965@users.noreply.github.com> Date: Wed, 22 Apr 2026 19:17:59 +0200 Subject: [PATCH 12/23] wallet lib --- package-lock.json | 26 ++++- package.json | 3 +- src/lib/components/ProfileCard.svelte | 161 +------------------------- src/routes/App.svelte | 88 ++++++-------- 4 files changed, 63 insertions(+), 215 deletions(-) diff --git a/package-lock.json b/package-lock.json index bc0f7ea..3dc91ef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,8 @@ "marked": "^16.4.1", "mode-watcher": "^0.5.0", "reputation-system": "reputation-systems/reputation-system", - "update": "^0.7.4" + "update": "^0.7.4", + "wallet-svelte-component": "github:ergo-basics/wallet-svelte-component" }, "devDependencies": { "@fleet-sdk/mock-chain": "^0.12.0", @@ -4293,7 +4294,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "dev": true, "engines": { "node": ">=6" } @@ -10714,7 +10714,6 @@ "version": "2.6.1", "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.1.tgz", "integrity": "sha512-Oo6tHdpZsGpkKG88HJ8RR1rg/RdnEkQEfMoEk2x1XRI3F1AxeU+ijRXpiVUF4UbLfcxxRGw6TbUINKYdWVsQTQ==", - "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/dcastil" @@ -13092,6 +13091,27 @@ } } }, + "node_modules/wallet-svelte-component": { + "version": "0.0.1", + "resolved": "git+ssh://git@github.com/ergo-basics/wallet-svelte-component.git#b69e108c4fc6990bb7475cc5b4477891a7d35b65", + "dependencies": { + "@fleet-sdk/core": "^0.12.0", + "clsx": "^2.0.0", + "lucide-svelte": "^0.294.0", + "tailwind-merge": "^2.0.0" + }, + "peerDependencies": { + "svelte": "^4.0.0" + } + }, + "node_modules/wallet-svelte-component/node_modules/lucide-svelte": { + "version": "0.294.0", + "resolved": "https://registry.npmjs.org/lucide-svelte/-/lucide-svelte-0.294.0.tgz", + "integrity": "sha512-jqQDL9bfZm3DzEhulRdPWWw88qQpS/w/fDAdgTsYXjij5I81HYFFxbDHpnSHes2oH9Eri5M3QQDgqV9xtqkyig==", + "peerDependencies": { + "svelte": ">=3 <5" + } + }, "node_modules/warning-symbol": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/warning-symbol/-/warning-symbol-0.1.0.tgz", diff --git a/package.json b/package.json index 99224a8..807293d 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,8 @@ "jdenticon": "^3.3.0", "marked": "^16.4.1", "mode-watcher": "^0.5.0", + "reputation-system": "reputation-systems/reputation-system", "update": "^0.7.4", - "reputation-system": "reputation-systems/reputation-system" + "wallet-svelte-component": "github:ergo-basics/wallet-svelte-component" } } diff --git a/src/lib/components/ProfileCard.svelte b/src/lib/components/ProfileCard.svelte index e9e7f12..627c63d 100644 --- a/src/lib/components/ProfileCard.svelte +++ b/src/lib/components/ProfileCard.svelte @@ -1,162 +1,5 @@ -
- {#if profile} -
- -
-
- -
-

Your Profile

-
- - -
- -
-
-
-
- - Profile Token ID -
- - {profile.token_id} - -
- -
-
- - -
-
-
-
- - Owner Address -
-

- {profile.owner_address || address || "N/A"} -

-
- -
-
- - -
-
- Total Reputation: - {profile.total_amount?.toLocaleString() || - "0"} -
-
- Number of Boxes: - {profile.number_of_boxes || 0} -
-
-
-
- {:else} - -
-
- -
-

No Profile Found

-

- You need a reputation profile to participate in the Source - Application. Create one now to get started. -

- -
- {/if} -
+ diff --git a/src/routes/App.svelte b/src/routes/App.svelte index 2ec8aa7..10ab28d 100644 --- a/src/routes/App.svelte +++ b/src/routes/App.svelte @@ -30,7 +30,6 @@ import { User, Settings, Search, Plus, UserPlus } from "lucide-svelte"; import { get, writable } from "svelte/store"; import SettingsModal from "$lib/components/SettingsModal.svelte"; - import ProfileModal from "$lib/components/ProfileModal.svelte"; import { fetchAllUserProfiles, fetchTypeNfts, convertToRPBox } from "reputation-system"; import type { TypeNFT, ApiBox } from "reputation-system"; import { createProfileBox } from "$lib/ergo/sourceStore"; @@ -39,13 +38,16 @@ import SearchByHash from "$lib/components/SearchByHash.svelte"; import { Button } from "$lib/components/ui/button/index.js"; import FileSourceCreation from "$lib/components/FileSourceCreation.svelte"; - - export let connect_executed = false; + import { + WalletAddressChangeHandler, + WalletButton, + walletAddress, + walletBalance, + walletConnected, + } from "wallet-svelte-component"; let current_height = 0; - let profile_creation_tx = ""; let balanceUpdateInterval: any; - let showProfileModal = false; let showSettingsModal = false; let activeTab: "profile" | "search" | "add" = "profile"; @@ -140,22 +142,6 @@ return balanceMap; } - async function connectWallet() { - if (typeof ergoConnector !== "undefined" && !connect_executed) { - connect_executed = true; - console.log("Connect wallet"); - const nautilus = ergoConnector.nautilus; - if (nautilus && (await nautilus.connect())) { - address.set(await ergo.get_change_address()); - network.set("ergo-mainnet"); - await get_balance(); - connected.set(true); - } else { - alert("Wallet not connected or unavailable"); - } - } - } - /** * Decode a hex string to its UTF-8 text representation. */ @@ -249,7 +235,7 @@ // R6 must be false (unlocked) const r6 = box.additionalRegisters.R6.renderedValue; - if (r6 !== 'false' && r6 !== false) return false; + if (r6 !== "false") return false; const tokenId = box.assets[0].tokenId; const r5Rendered = box.additionalRegisters.R5.renderedValue as string; @@ -374,11 +360,6 @@ onMount(() => { if (!browser) return; - const init = async () => { - await connectWallet(); - }; - init(); - balanceUpdateInterval = setInterval(updateWalletInfo, 30000); scrollingTextElement?.addEventListener( "animationiteration", @@ -394,18 +375,28 @@ }; }); - connected.subscribe(async (isConnected) => { - if (isConnected) { - await updateWalletInfo(); - await loadUserProfile(); - } - }); + let lastLoadedWalletAddress: string | null = null; + + $: connected.set($walletConnected); + $: address.set($walletAddress || null); + $: network.set($walletConnected ? "ergo-mainnet" : null); + $: balance.set($walletConnected ? Number($walletBalance.nanoErgs) : null); + + $: if (browser && $walletConnected && $walletAddress && $walletAddress !== lastLoadedWalletAddress) { + lastLoadedWalletAddress = $walletAddress; + void updateWalletInfo(); + void loadUserProfile(); + } + + $: if (browser && !$walletConnected && lastLoadedWalletAddress !== null) { + lastLoadedWalletAddress = null; + reputation_proof.set(null); + } async function updateWalletInfo() { - if (typeof ergo === "undefined" || !$connected) return; + if (!$walletConnected) return; try { - const walletBalance = await get_balance(); - balance.set(walletBalance.get("ERG") || 0); + balance.set(Number($walletBalance.nanoErgs)); current_height = await get_current_height(); } catch (error) { console.error("Error updating wallet information:", error); @@ -592,13 +583,9 @@ - +
+ +
@@ -613,18 +600,11 @@ onSave={handleSettingsSave} /> - +
- {#if !connected} + {#if !$connected}
@@ -729,6 +709,10 @@ @apply p-2 rounded-full hover:bg-accent; } + .wallet-button-container { + @apply flex items-center; + } + .tab-button { @apply px-3 py-1.5 text-sm font-medium text-muted-foreground rounded-md hover:text-foreground hover:bg-accent/50 transition-all flex items-center gap-2; } From b23c78d5b20c24fd0ad511fa7449a0b81e32cd9a Mon Sep 17 00:00:00 2001 From: 0xf965 <0xf965@users.noreply.github.com> Date: Wed, 22 Apr 2026 19:18:15 +0200 Subject: [PATCH 13/23] wallet lib --- dist/components/ProfileCard.svelte | 157 +----------------------- dist/components/ProfileCard.svelte.d.ts | 9 +- 2 files changed, 3 insertions(+), 163 deletions(-) diff --git a/dist/components/ProfileCard.svelte b/dist/components/ProfileCard.svelte index efe5576..1d9c16d 100644 --- a/dist/components/ProfileCard.svelte +++ b/dist/components/ProfileCard.svelte @@ -1,157 +1,4 @@ - -
- {#if profile} -
- -
-
- -
-

Your Profile

-
- - -
- -
-
-
-
- - Profile Token ID -
- - {profile.token_id} - -
- -
-
- - -
-
-
-
- - Owner Address -
-

- {profile.owner_address || address || "N/A"} -

-
- -
-
- - -
-
- Total Reputation: - {profile.total_amount?.toLocaleString() || - "0"} -
-
- Number of Boxes: - {profile.number_of_boxes || 0} -
-
-
-
- {:else} - -
-
- -
-

No Profile Found

-

- You need a reputation profile to participate in the Source - Application. Create one now to get started. -

- -
- {/if} -
+ diff --git a/dist/components/ProfileCard.svelte.d.ts b/dist/components/ProfileCard.svelte.d.ts index eaaa391..732e4aa 100644 --- a/dist/components/ProfileCard.svelte.d.ts +++ b/dist/components/ProfileCard.svelte.d.ts @@ -1,13 +1,6 @@ import { SvelteComponent } from "svelte"; -import { type ReputationProof } from "../ergo/object"; declare const __propDef: { - props: { - profile?: ReputationProof | null; - address?: string | null; - explorerUri: string; - source_explorer_url: string; - onProfileCreated?: ((txId: string) => void) | null; - }; + props: Record; events: { [evt: string]: CustomEvent; }; From 04b9fd588b68c787015f4767f74a341d6ed7fdc8 Mon Sep 17 00:00:00 2001 From: 0xf965 <0xf965@users.noreply.github.com> Date: Wed, 22 Apr 2026 23:05:36 +0200 Subject: [PATCH 14/23] fixed profile loading with url --- src/lib/components/FileSourceCreation.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/components/FileSourceCreation.svelte b/src/lib/components/FileSourceCreation.svelte index 06146ae..149d626 100644 --- a/src/lib/components/FileSourceCreation.svelte +++ b/src/lib/components/FileSourceCreation.svelte @@ -35,7 +35,7 @@ let className: string = ""; export { className as class }; - const hasProfile = profile !== null; + $: hasProfile = profile !== null && (profile.current_boxes?.length ?? 0) > 0; const baseClasses = "bg-card p-6 rounded-lg border"; let newFileHash = ""; From ff0ff44ce5152083c27ad0cb65b3704d42d400db Mon Sep 17 00:00:00 2001 From: 0xf965 <0xf965@users.noreply.github.com> Date: Wed, 22 Apr 2026 23:25:03 +0200 Subject: [PATCH 15/23] updated fixed hash id --- LIBRARY.md | 5 ++++- dist/components/FileSourceCreation.svelte | 14 ++++++++++---- dist/components/FileSourceCreation.svelte.d.ts | 1 + src/lib/components/FileSourceCreation.svelte | 15 ++++++++++----- 4 files changed, 25 insertions(+), 10 deletions(-) diff --git a/LIBRARY.md b/LIBRARY.md index 8d12996..e334417 100644 --- a/LIBRARY.md +++ b/LIBRARY.md @@ -59,6 +59,7 @@ Form for adding new file sources to the network. It supports two modes: a "free" - `profile: ReputationProof | null` - Current user's profile (required to enable adding). - `explorerUri: string` - Ergo Explorer API endpoint. - `source_explorer_url: string` - Base URL for the source explorer (used for deep links). +- `fixed_hash_id?: string` - Optional. Fixed file hash. When provided, the component enters fixed mode and the user cannot edit the anchor hash. - `hash?: Writable` - Optional. A Svelte writable store for the file hash. - `fixedHashFunctionId?: string` - Optional. Hash algorithm ID for the fixed anchor hash. Use the canonical `HASH("")` value. In fixed mode the default is Blake2b-256: `0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8`. - `title?: string` - Optional. Custom title for the component (default: "Add New File Source"). @@ -66,8 +67,9 @@ Form for adding new file sources to the network. It supports two modes: a "free" **Behavior:** - **Always Visible**: The current hash is always displayed at the top of the component. -- **Fixed Hash Mode** (when `hash` store has a value): +- **Fixed Hash Mode** (when `fixed_hash_id` is provided, or when the `hash` store has a value): - Manual hash input and file upload fields are hidden. + - `fixed_hash_id` takes precedence over the `hash` store if both are provided. - The anchor hash function comes from `fixedHashFunctionId` instead of the form UI. - The "Compute hash from URL" button is hidden. - When clicking "Add Source", the component automatically downloads the file from the URL, calculates its hash, and verifies it matches the fixed hash before proceeding. @@ -99,6 +101,7 @@ Form for adding new file sources to the network. It supports two modes: a "free" {profile} {explorerUri} {source_explorer_url} + fixed_hash_id="abc123..." hash={fileHashStore} fixedHashFunctionId="0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8" title="Add Download Link" diff --git a/dist/components/FileSourceCreation.svelte b/dist/components/FileSourceCreation.svelte index 1a9c383..2716e45 100644 --- a/dist/components/FileSourceCreation.svelte +++ b/dist/components/FileSourceCreation.svelte @@ -22,12 +22,14 @@ export let explorerUri; export let source_explorer_url; export let onSourceAdded = null; export let hash = void 0; +export let fixed_hash_id = ""; export let fixedHashFunctionId = HASH_ALGORITHM_IDS.blake2b256; export let hashValidationEnabled = false; export let title = "Add New File Source"; let className = ""; export { className as class }; -const hasProfile = profile !== null; +$: + hasProfile = profile !== null && (profile.current_boxes?.length ?? 0) > 0; const baseClasses = "bg-card p-6 rounded-lg border"; let newFileHash = ""; let effectiveHashFunctionId = ""; @@ -79,12 +81,12 @@ $: { } } $: - currentHashValue = (hash ? $hash : "") || ""; + currentHashValue = fixed_hash_id.trim() || ((hash ? $hash : "") || ""); $: isHashFixed = currentHashValue !== ""; $: - if (hash && $hash) { - newFileHash = $hash; + if (currentHashValue) { + newFileHash = currentHashValue; } $: hasValidEntry = entryUrlLink.trim() !== ""; @@ -134,6 +136,10 @@ onMount(() => { } }); function updateHash(val) { + if (fixed_hash_id.trim()) { + newFileHash = currentHashValue; + return; + } newFileHash = val; if (hash) { hash.set(val); diff --git a/dist/components/FileSourceCreation.svelte.d.ts b/dist/components/FileSourceCreation.svelte.d.ts index f060d3f..8961e7a 100644 --- a/dist/components/FileSourceCreation.svelte.d.ts +++ b/dist/components/FileSourceCreation.svelte.d.ts @@ -8,6 +8,7 @@ declare const __propDef: { source_explorer_url: string; onSourceAdded?: ((txId: string) => void) | null; hash?: Writable | undefined; + fixed_hash_id?: string; fixedHashFunctionId?: string; /** When false, skip automatic hash verification when adding a source. */ hashValidationEnabled?: boolean; title?: string; diff --git a/src/lib/components/FileSourceCreation.svelte b/src/lib/components/FileSourceCreation.svelte index 149d626..527d990 100644 --- a/src/lib/components/FileSourceCreation.svelte +++ b/src/lib/components/FileSourceCreation.svelte @@ -26,6 +26,7 @@ export let source_explorer_url: string; export let onSourceAdded: ((txId: string) => void) | null = null; export let hash: Writable | undefined = undefined; + export let fixed_hash_id: string = ""; export let fixedHashFunctionId: string = HASH_ALGORITHM_IDS.blake2b256; /** When false, skip automatic hash verification when adding a source. */ @@ -110,13 +111,13 @@ } } - // Reactive value for the current hash from the store - $: currentHashValue = (hash ? $hash : "") || ""; + // Reactive value for the current hash from the optional fixed prop or the store + $: currentHashValue = fixed_hash_id.trim() || ((hash ? $hash : "") || ""); $: isHashFixed = currentHashValue !== ""; - // Sync newFileHash with store - $: if (hash && $hash) { - newFileHash = $hash; + // Sync newFileHash with the active fixed hash source + $: if (currentHashValue) { + newFileHash = currentHashValue; } // Check if the source entry has a URL @@ -177,6 +178,10 @@ }); function updateHash(val: string) { + if (fixed_hash_id.trim()) { + newFileHash = currentHashValue; + return; + } newFileHash = val; if (hash) { hash.set(val); From bda233bc68182ede989cd292a8f140558d2bd96a Mon Sep 17 00:00:00 2001 From: 0xf965 <0xf965@users.noreply.github.com> Date: Fri, 24 Apr 2026 10:18:19 +0200 Subject: [PATCH 16/23] fixed --- dist/components/FileSourceCreation.svelte | 5 +++-- dist/components/FileSourceCreation.svelte.d.ts | 2 +- src/lib/components/FileSourceCreation.svelte | 6 ++++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/dist/components/FileSourceCreation.svelte b/dist/components/FileSourceCreation.svelte index 2716e45..8745a7b 100644 --- a/dist/components/FileSourceCreation.svelte +++ b/dist/components/FileSourceCreation.svelte @@ -23,11 +23,12 @@ export let source_explorer_url; export let onSourceAdded = null; export let hash = void 0; export let fixed_hash_id = ""; -export let fixedHashFunctionId = HASH_ALGORITHM_IDS.blake2b256; +export let fixedHashFunctionId = null; export let hashValidationEnabled = false; export let title = "Add New File Source"; let className = ""; export { className as class }; +let isHashFixed = fixedHashFunctionId !== ""; $: hasProfile = profile !== null && (profile.current_boxes?.length ?? 0) > 0; const baseClasses = "bg-card p-6 rounded-lg border"; @@ -83,7 +84,7 @@ $: { $: currentHashValue = fixed_hash_id.trim() || ((hash ? $hash : "") || ""); $: - isHashFixed = currentHashValue !== ""; + isHashFixed = currentHashValue !== "" || fixedHashFunctionId !== null; $: if (currentHashValue) { newFileHash = currentHashValue; diff --git a/dist/components/FileSourceCreation.svelte.d.ts b/dist/components/FileSourceCreation.svelte.d.ts index 8961e7a..02e5730 100644 --- a/dist/components/FileSourceCreation.svelte.d.ts +++ b/dist/components/FileSourceCreation.svelte.d.ts @@ -9,7 +9,7 @@ declare const __propDef: { onSourceAdded?: ((txId: string) => void) | null; hash?: Writable | undefined; fixed_hash_id?: string; - fixedHashFunctionId?: string; + fixedHashFunctionId?: string | null; /** When false, skip automatic hash verification when adding a source. */ hashValidationEnabled?: boolean; title?: string; class?: string; diff --git a/src/lib/components/FileSourceCreation.svelte b/src/lib/components/FileSourceCreation.svelte index 527d990..9ae70fb 100644 --- a/src/lib/components/FileSourceCreation.svelte +++ b/src/lib/components/FileSourceCreation.svelte @@ -27,7 +27,7 @@ export let onSourceAdded: ((txId: string) => void) | null = null; export let hash: Writable | undefined = undefined; export let fixed_hash_id: string = ""; - export let fixedHashFunctionId: string = HASH_ALGORITHM_IDS.blake2b256; + export let fixedHashFunctionId: string|null = null; /** When false, skip automatic hash verification when adding a source. */ export let hashValidationEnabled: boolean = false; @@ -36,6 +36,8 @@ let className: string = ""; export { className as class }; + let isHashFixed = fixedHashFunctionId !== ""; + $: hasProfile = profile !== null && (profile.current_boxes?.length ?? 0) > 0; const baseClasses = "bg-card p-6 rounded-lg border"; @@ -113,7 +115,7 @@ // Reactive value for the current hash from the optional fixed prop or the store $: currentHashValue = fixed_hash_id.trim() || ((hash ? $hash : "") || ""); - $: isHashFixed = currentHashValue !== ""; + $: isHashFixed = currentHashValue !== "" || fixedHashFunctionId !== null; // Sync newFileHash with the active fixed hash source $: if (currentHashValue) { From cfd3aaccaeca53adf7b3c659d864dc018535f7d6 Mon Sep 17 00:00:00 2001 From: 0xf965 <0xf965@users.noreply.github.com> Date: Fri, 24 Apr 2026 12:48:59 +0200 Subject: [PATCH 17/23] fixed all user profiles usage --- src/routes/App.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/App.svelte b/src/routes/App.svelte index 10ab28d..3d3b18c 100644 --- a/src/routes/App.svelte +++ b/src/routes/App.svelte @@ -336,7 +336,7 @@ // Pass empty array to accept any profile type (JUDGE, PROFILE, etc.) const proofs = await fetchAllUserProfiles( get(explorer_uri), - true, + null, [], types, ); From 3207c1bf3249f5df4355dccb18211a0c7d89fa60 Mon Sep 17 00:00:00 2001 From: 0xf965 <0xf965@users.noreply.github.com> Date: Fri, 24 Apr 2026 15:52:33 +0200 Subject: [PATCH 18/23] fixed file source creation --- dist/components/FileSourceCreation.svelte | 6 +++--- src/lib/components/FileSourceCreation.svelte | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/dist/components/FileSourceCreation.svelte b/dist/components/FileSourceCreation.svelte index 8745a7b..872eeaa 100644 --- a/dist/components/FileSourceCreation.svelte +++ b/dist/components/FileSourceCreation.svelte @@ -28,7 +28,7 @@ export let hashValidationEnabled = false; export let title = "Add New File Source"; let className = ""; export { className as class }; -let isHashFixed = fixedHashFunctionId !== ""; +let isHashFixed = !!fixedHashFunctionId?.trim(); $: hasProfile = profile !== null && (profile.current_boxes?.length ?? 0) > 0; const baseClasses = "bg-card p-6 rounded-lg border"; @@ -54,7 +54,7 @@ let fileHashValidationError = null; let contentHashValidationError = null; let rawHashValidationError = null; $: - effectiveHashFunctionId = isHashFixed ? normalizeHashAlgorithmId(fixedHashFunctionId.trim() || HASH_ALGORITHM_IDS.blake2b256) : hashSelectValue === "__custom__" ? customHashFunctionId : hashSelectValue; + effectiveHashFunctionId = isHashFixed ? normalizeHashAlgorithmId(fixedHashFunctionId?.trim() || HASH_ALGORITHM_IDS.blake2b256) : hashSelectValue === "__custom__" ? customHashFunctionId : hashSelectValue; $: { if (newFileHash.trim() && effectiveHashFunctionId) { fileHashValidationError = validateHash(newFileHash.trim(), effectiveHashFunctionId); @@ -84,7 +84,7 @@ $: { $: currentHashValue = fixed_hash_id.trim() || ((hash ? $hash : "") || ""); $: - isHashFixed = currentHashValue !== "" || fixedHashFunctionId !== null; + isHashFixed = currentHashValue !== "" || !!fixedHashFunctionId?.trim(); $: if (currentHashValue) { newFileHash = currentHashValue; diff --git a/src/lib/components/FileSourceCreation.svelte b/src/lib/components/FileSourceCreation.svelte index 9ae70fb..e0894f6 100644 --- a/src/lib/components/FileSourceCreation.svelte +++ b/src/lib/components/FileSourceCreation.svelte @@ -27,7 +27,7 @@ export let onSourceAdded: ((txId: string) => void) | null = null; export let hash: Writable | undefined = undefined; export let fixed_hash_id: string = ""; - export let fixedHashFunctionId: string|null = null; + export let fixedHashFunctionId: string | null = null; /** When false, skip automatic hash verification when adding a source. */ export let hashValidationEnabled: boolean = false; @@ -36,7 +36,7 @@ let className: string = ""; export { className as class }; - let isHashFixed = fixedHashFunctionId !== ""; + let isHashFixed = !!fixedHashFunctionId?.trim(); $: hasProfile = profile !== null && (profile.current_boxes?.length ?? 0) > 0; const baseClasses = "bg-card p-6 rounded-lg border"; @@ -77,7 +77,7 @@ let rawHashValidationError: string | null = null; $: effectiveHashFunctionId = isHashFixed - ? normalizeHashAlgorithmId(fixedHashFunctionId.trim() || HASH_ALGORITHM_IDS.blake2b256) + ? normalizeHashAlgorithmId(fixedHashFunctionId?.trim() || HASH_ALGORITHM_IDS.blake2b256) : (hashSelectValue === "__custom__" ? customHashFunctionId : hashSelectValue); // Validate file hash when it changes @@ -115,7 +115,7 @@ // Reactive value for the current hash from the optional fixed prop or the store $: currentHashValue = fixed_hash_id.trim() || ((hash ? $hash : "") || ""); - $: isHashFixed = currentHashValue !== "" || fixedHashFunctionId !== null; + $: isHashFixed = currentHashValue !== "" || !!fixedHashFunctionId?.trim(); // Sync newFileHash with the active fixed hash source $: if (currentHashValue) { From 2e03fda8e835b8a3ffe7bfbc7aaf32fcfafd5a64 Mon Sep 17 00:00:00 2001 From: 0xf965 <0xf965@users.noreply.github.com> Date: Tue, 23 Jun 2026 09:05:15 +0200 Subject: [PATCH 19/23] simplified file card --- dist/components/FileCard.svelte | 95 +- package-lock.json | 2573 ++++++++++++++++++++-------- src/lib/components/FileCard.svelte | 102 +- 3 files changed, 1835 insertions(+), 935 deletions(-) diff --git a/dist/components/FileCard.svelte b/dist/components/FileCard.svelte index 925fcfb..907e62a 100644 --- a/dist/components/FileCard.svelte +++ b/dist/components/FileCard.svelte @@ -8,16 +8,13 @@ import { LayoutGrid, Users, Search, - ThumbsUp, - AlertTriangle + ThumbsUp } from "lucide-svelte"; import DownloadSourceCard from "./DownloadSourceCard.svelte"; import ProfileSourceGroup from "./ProfileSourceGroup.svelte"; import Timeline from "./Timeline.svelte"; import {} from "../ergo/object"; import {} from "../ergo/sourceObject"; -import { Button } from "./ui/button/index.js"; -import { Input } from "./ui/input/index.js"; import { Label } from "./ui/label/index.js"; export let fileHash; export let profile = null; @@ -31,15 +28,6 @@ export let webExplorerUriTkn; let className = ""; export { className as class }; let viewMode = "source"; -let newSourceUrl = ""; -let isAddingSource = false; -let addError = null; -function getInvalidations(boxId) { - return invalidFileSources[boxId]?.data || []; -} -function getUnavailabilities(url) { - return unavailableSources[url]?.data || []; -} $: groupedBySource = groupByDownloadSource( sources, @@ -101,36 +89,6 @@ $: } return events; })(); -async function handleAddSource() { - if (!newSourceUrl.trim() || !profile) - return; - isAddingSource = true; - addError = null; - try { - const entry = { - hashFunctionId: "", - contentFormat: "", - contentHash: "", - rawFormat: "", - urlLink: newSourceUrl.trim() - }; - const tx = await addFileSource( - fileHash.trim(), - "", - // hashFunctionId - entry, - profile, - explorerUri - ); - console.log("Source added, tx:", tx); - newSourceUrl = ""; - } catch (err) { - console.error("Error adding source:", err); - addError = err?.message || "Failed to add source"; - } finally { - isAddingSource = false; - } -}
@@ -158,57 +116,6 @@ async function handleAddSource() { No sources found for this hash

- -
-

Add First Source

- -
- -

- Verify URLs before adding. They will be immutable on the - blockchain. -

-
- - {#if addError} -
-

{addError}

-
- {/if} - -
-
- - -
- - - - {#if !profile} -

- You must have a profile to add sources. -

- {/if} -
-
{:else}
=10" }, @@ -66,6 +67,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -79,6 +81,7 @@ "resolved": "https://registry.npmjs.org/@ark/schema/-/schema-0.56.0.tgz", "integrity": "sha512-ECg3hox/6Z/nLajxXqNhgPtNdHWC9zNsDyskwO28WinoFEnWow4IsERNz9AnXRhTZJnYIlAJ4uGn3nlLk65vZA==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "@ark/util": "0.56.0" @@ -89,13 +92,15 @@ "resolved": "https://registry.npmjs.org/@ark/util/-/util-0.56.0.tgz", "integrity": "sha512-BghfRC8b9pNs3vBoDJhcta0/c1J1rsoS1+HgVUreMFPdhz/CRAKReAu57YEllNaSy98rWAdY1gE+gFup7OXpgA==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/@babel/runtime": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", - "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=6.9.0" @@ -105,6 +110,7 @@ "version": "1.1.8", "resolved": "https://registry.npmjs.org/@dagrejs/dagre/-/dagre-1.1.8.tgz", "integrity": "sha512-5SEDlndt4W/LaVzPYJW+bSmSEZc9EzTf8rJ20WCKvjS5EAZAN0b+x0Yww7VMT4R3Wootkg+X9bUfUxazYw6Blw==", + "license": "MIT", "dependencies": { "@dagrejs/graphlib": "2.2.4" } @@ -113,18 +119,20 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/@dagrejs/graphlib/-/graphlib-2.2.4.tgz", "integrity": "sha512-mepCf/e9+SKYy1d02/UkvSy6+6MoyXhVxP8lLDfA7BPE1X1d4dR0sZznmbM8/XVJ1GPM+Svnx7Xj6ZweByWUkw==", + "license": "MIT", "engines": { "node": ">17.0.0" } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", - "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "aix" @@ -140,6 +148,7 @@ "cpu": [ "arm" ], + "license": "MIT", "optional": true, "os": [ "android" @@ -155,6 +164,7 @@ "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "android" @@ -170,6 +180,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "android" @@ -185,6 +196,7 @@ "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -200,6 +212,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -215,6 +228,7 @@ "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -230,6 +244,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -245,6 +260,7 @@ "cpu": [ "arm" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -260,6 +276,7 @@ "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -275,6 +292,7 @@ "cpu": [ "ia32" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -290,6 +308,7 @@ "cpu": [ "loong64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -305,6 +324,7 @@ "cpu": [ "mips64el" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -320,6 +340,7 @@ "cpu": [ "ppc64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -335,6 +356,7 @@ "cpu": [ "riscv64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -350,6 +372,7 @@ "cpu": [ "s390x" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -365,6 +388,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -374,13 +398,14 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", - "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -396,6 +421,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -405,13 +431,14 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", - "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -427,6 +454,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -436,13 +464,14 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", - "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openharmony" @@ -458,6 +487,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "sunos" @@ -473,6 +503,7 @@ "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -488,6 +519,7 @@ "cpu": [ "ia32" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -503,6 +535,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -516,12 +549,14 @@ "resolved": "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.3.0.tgz", "integrity": "sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/@fastify/busboy": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "license": "MIT", "engines": { "node": ">=14" } @@ -530,6 +565,7 @@ "version": "0.10.0", "resolved": "https://registry.npmjs.org/@fleet-sdk/common/-/common-0.10.0.tgz", "integrity": "sha512-N92zENyHYhKtKxhJ6jJbWgV3PCkCGM0LYLmn6OOXNqDVbwT9UFgHOTt7eXFd9tqIhwMMPCnlffNe4c+P+CnsJA==", + "license": "MIT", "engines": { "node": ">=18" } @@ -538,6 +574,7 @@ "version": "0.12.0", "resolved": "https://registry.npmjs.org/@fleet-sdk/compiler/-/compiler-0.12.0.tgz", "integrity": "sha512-WH05qMRmWe8qTI1oX2NZ3qJobp2ZYPh3DqAAtKRPxmeHmfWmvFWM6QHwWeGR7M86QCQczWNdqeOY7qJKs12G4g==", + "license": "MIT", "dependencies": { "@fleet-sdk/common": "^0.10.0", "@fleet-sdk/core": "^0.12.0", @@ -553,6 +590,7 @@ "version": "0.12.0", "resolved": "https://registry.npmjs.org/@fleet-sdk/core/-/core-0.12.0.tgz", "integrity": "sha512-AYdfivEzfokem2eovnhp5rfv+cFrVR87l/ff71uxt1Xn1Arv0QivNtXn9H00i0t3LkiTxI7ttgU56FAbjWbUKw==", + "license": "MIT", "dependencies": { "@fleet-sdk/common": "^0.10.0", "@fleet-sdk/crypto": "^0.11.0", @@ -566,6 +604,7 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@fleet-sdk/crypto/-/crypto-0.11.0.tgz", "integrity": "sha512-oGyrnL0AyzPSsPdA32y4TEFQ6vJlNDMt9nwiArd2TYbtRCDMNTslHQmC/An4clf4R0e/c4yuZJSdfzHC3F0ssQ==", + "license": "MIT", "dependencies": { "@fleet-sdk/common": "^0.10.0", "@noble/hashes": "^1.8.0", @@ -580,6 +619,7 @@ "resolved": "https://registry.npmjs.org/@fleet-sdk/mock-chain/-/mock-chain-0.12.0.tgz", "integrity": "sha512-AlUhtshCOyZnqhs1TJIzrWoEQj8/a8MVkjZxH23SPBiKLL7/qCyCfXYCGPdkgkjlhhQm819EeAAgMoG6wGgpXw==", "dev": true, + "license": "MIT", "dependencies": { "@fleet-sdk/common": "^0.10.0", "@fleet-sdk/core": "^0.12.0", @@ -598,6 +638,7 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@fleet-sdk/serializer/-/serializer-0.11.0.tgz", "integrity": "sha512-EYun0nzxJn+23aOeaMM5COj62ibVrzgNOx2I6AM6P23mRs72I0Dv2prdBnU/lst4hqbNHi8a1E6UNvpjH2vhGQ==", + "license": "MIT", "dependencies": { "@fleet-sdk/common": "^0.10.0", "@fleet-sdk/crypto": "^0.11.0" @@ -611,6 +652,7 @@ "resolved": "https://registry.npmjs.org/@fleet-sdk/wallet/-/wallet-0.12.0.tgz", "integrity": "sha512-ErAOa1mLG5XzmQRarQ3SR879Mm/Bk1Cp0KkQP0lSZovBbSOWlem0isHMlIfhpJEHkvdGdW+YkrbQ4DtEG5z+ew==", "dev": true, + "license": "MIT", "dependencies": { "@fleet-sdk/common": "^0.10.0", "@fleet-sdk/core": "^0.12.0", @@ -629,6 +671,7 @@ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", "dev": true, + "license": "MIT", "dependencies": { "@floating-ui/utils": "^0.2.11" } @@ -638,6 +681,7 @@ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", "dev": true, + "license": "MIT", "dependencies": { "@floating-ui/core": "^1.7.5", "@floating-ui/utils": "^0.2.11" @@ -647,13 +691,15 @@ "version": "0.2.11", "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", "dev": true, + "license": "BSD-3-Clause", "optional": true }, "node_modules/@hapi/topo": { @@ -661,16 +707,18 @@ "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", "dev": true, + "license": "BSD-3-Clause", "optional": true, "dependencies": { "@hapi/hoek": "^9.0.0" } }, "node_modules/@internationalized/date": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.12.0.tgz", - "integrity": "sha512-/PyIMzK29jtXaGU23qTvNZxvBXRtKbNnGDFD+PY6CZw/Y8Ex8pFUzkuCJCG9aOqmShjqhS9mPqP6Dk5onQY8rQ==", + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.12.2.tgz", + "integrity": "sha512-FY1Y+H64NDs+HAF6omlnWxm3mEpfgaCSWtL5l551ZZfImA+kGjPFgrnJrGjH6lfmLL0g8Z/mBu1R3kufeCp6Jw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@swc/helpers": "^0.5.0" } @@ -679,6 +727,7 @@ "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" @@ -688,6 +737,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -695,12 +745,14 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -711,6 +763,7 @@ "resolved": "https://registry.npmjs.org/@melt-ui/svelte/-/svelte-0.76.2.tgz", "integrity": "sha512-7SbOa11tXUS95T3fReL+dwDs5FyJtCEqrqG3inRziDws346SYLsxOQ6HmX+4BkIsQh1R8U3XNa+EMmdMt38lMA==", "dev": true, + "license": "MIT", "dependencies": { "@floating-ui/core": "^1.3.1", "@floating-ui/dom": "^1.4.5", @@ -728,6 +781,7 @@ "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", "dev": true, + "license": "MIT", "dependencies": { "@noble/hashes": "1.8.0" }, @@ -742,6 +796,7 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", "engines": { "node": "^14.21.3 || >=16" }, @@ -754,6 +809,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" @@ -767,6 +823,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" } @@ -776,6 +833,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" @@ -787,335 +845,362 @@ "node_modules/@polka/url": { "version": "1.0.0-next.29", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", - "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==" + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "license": "MIT" }, "node_modules/@poppinss/macroable": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@poppinss/macroable/-/macroable-1.1.1.tgz", - "integrity": "sha512-WwdqJtEVtfKMkgPTVQBkiaqQcFbXFp4JSxmG7vYNa+gFbn9w3QtUAZpGN43czG7KsbAm2GJX/fCgBxozpTly1Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@poppinss/macroable/-/macroable-1.1.2.tgz", + "integrity": "sha512-FAVBRzzWhYP5mA3lCwLH1A0fKBqq5anyjGet90Z81aRK5c/+LTGUE1zJhZrErjaenBSOOI9BVUs3WVmotneFQA==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", - "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.2.tgz", + "integrity": "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", - "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.2.tgz", + "integrity": "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", - "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.2.tgz", + "integrity": "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", - "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.2.tgz", + "integrity": "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", - "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.2.tgz", + "integrity": "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", - "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.2.tgz", + "integrity": "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", - "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.2.tgz", + "integrity": "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", - "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.2.tgz", + "integrity": "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", - "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.2.tgz", + "integrity": "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", - "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.2.tgz", + "integrity": "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", - "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.2.tgz", + "integrity": "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==", "cpu": [ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", - "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.2.tgz", + "integrity": "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==", "cpu": [ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", - "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.2.tgz", + "integrity": "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", - "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.2.tgz", + "integrity": "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", - "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.2.tgz", + "integrity": "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", - "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.2.tgz", + "integrity": "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", - "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.2.tgz", + "integrity": "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==", "cpu": [ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", - "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.2.tgz", + "integrity": "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", - "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.2.tgz", + "integrity": "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", - "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.2.tgz", + "integrity": "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", - "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.2.tgz", + "integrity": "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openharmony" ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", - "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.2.tgz", + "integrity": "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", - "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.2.tgz", + "integrity": "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", - "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.2.tgz", + "integrity": "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", - "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.2.tgz", + "integrity": "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -1125,6 +1210,7 @@ "version": "1.2.6", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } @@ -1134,6 +1220,7 @@ "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.7.0.tgz", "integrity": "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==", "dev": true, + "license": "MIT", "dependencies": { "@noble/curves": "~1.9.0", "@noble/hashes": "~1.8.0", @@ -1148,6 +1235,7 @@ "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.6.0.tgz", "integrity": "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==", "dev": true, + "license": "MIT", "dependencies": { "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5" @@ -1161,6 +1249,7 @@ "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", "dev": true, + "license": "BSD-3-Clause", "optional": true, "dependencies": { "@hapi/hoek": "^9.0.0" @@ -1171,6 +1260,7 @@ "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", "dev": true, + "license": "BSD-3-Clause", "optional": true }, "node_modules/@sideway/pinpoint": { @@ -1178,6 +1268,7 @@ "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", "dev": true, + "license": "BSD-3-Clause", "optional": true }, "node_modules/@standard-schema/spec": { @@ -1185,12 +1276,14 @@ "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/@svelte-put/shortcut": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@svelte-put/shortcut/-/shortcut-3.1.1.tgz", "integrity": "sha512-2L5EYTZXiaKvbEelVkg5znxqvfZGZai3m97+cAiUBhLZwXnGtviTDpHxOoZBsqz41szlfRMcamW/8o0+fbW3ZQ==", + "license": "MIT", "peerDependencies": { "svelte": "^3.55.0 || ^4.0.0 || ^5.0.0" } @@ -1200,6 +1293,7 @@ "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-2.1.1.tgz", "integrity": "sha512-nzi6x/7/3Axh5VKQ8Eed3pYxastxoa06Y/bFhWb7h3Nu+nGRVxKAy3+hBJgmPCwWScy8n0TsstZjSVKfyrIHkg==", "dev": true, + "license": "MIT", "dependencies": { "import-meta-resolve": "^4.0.0" }, @@ -1211,6 +1305,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-2.0.3.tgz", "integrity": "sha512-VUqTfXsxYGugCpMqQv1U0LIdbR3S5nBkMMDmpjGVJyM6Q2jHVMFtdWJCkeHMySc6mZxJ+0eZK3T7IgmUCDrcUQ==", + "license": "MIT", "peerDependencies": { "@sveltejs/kit": "^1.5.0" } @@ -1220,6 +1315,7 @@ "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.30.4.tgz", "integrity": "sha512-JSQIQT6XvdchCRQEm7BABxPC56WP5RYVONAi+09S8tmzeP43fBsRlr95bFmsTQM2RHBldfgQk+jgdnsKI75daA==", "hasInstallScript": true, + "license": "MIT", "dependencies": { "@sveltejs/vite-plugin-svelte": "^2.5.0", "@types/cookie": "^0.5.1", @@ -1247,16 +1343,17 @@ } }, "node_modules/@sveltejs/package": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/@sveltejs/package/-/package-2.5.7.tgz", - "integrity": "sha512-qqD9xa9H7TDiGFrF6rz7AirOR8k15qDK/9i4MIE8te4vWsv5GEogPks61rrZcLy+yWph+aI6pIj2MdoK3YI8AQ==", + "version": "2.5.8", + "resolved": "https://registry.npmjs.org/@sveltejs/package/-/package-2.5.8.tgz", + "integrity": "sha512-zeBbsXYvHiBu56v4gJaGQoEHzg96w0E1j3dOMX8vo56s6vI5eQ57ZEZhudjwjnegnVitRRu5MrmhO0eNvaonIw==", "dev": true, + "license": "MIT", "dependencies": { "chokidar": "^5.0.0", "kleur": "^4.1.5", "sade": "^1.8.1", "semver": "^7.5.4", - "svelte2tsx": "~0.7.33" + "svelte2tsx": "~0.7.55" }, "bin": { "svelte-package": "svelte-package.js" @@ -1272,6 +1369,7 @@ "version": "2.5.3", "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.5.3.tgz", "integrity": "sha512-erhNtXxE5/6xGZz/M9eXsmI7Pxa6MS7jyTy06zN3Ck++ldrppOnOlJwHHTsMC7DHDQdgUp4NAc4cDNQ9eGdB/w==", + "license": "MIT", "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^1.0.4", "debug": "^4.3.4", @@ -1293,6 +1391,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.4.tgz", "integrity": "sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==", + "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -1306,10 +1405,11 @@ } }, "node_modules/@swc/helpers": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.19.tgz", - "integrity": "sha512-QamiFeIK3txNjgUTNppE6MiG3p7TdninpZu0E0PbqVh1a9FNLT2FRhisaa4NcaX52XVhA5l7Pk58Ft7Sqi/2sA==", + "version": "0.5.23", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.23.tgz", + "integrity": "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.8.0" } @@ -1319,6 +1419,7 @@ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", "dev": true, + "license": "MIT", "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" @@ -1327,17 +1428,20 @@ "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/d3-color": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", - "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==" + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" }, "node_modules/@types/d3-drag": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", + "license": "MIT", "dependencies": { "@types/d3-selection": "*" } @@ -1346,6 +1450,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", "dependencies": { "@types/d3-color": "*" } @@ -1353,12 +1458,14 @@ "node_modules/@types/d3-selection": { "version": "3.0.11", "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", - "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==" + "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==", + "license": "MIT" }, "node_modules/@types/d3-transition": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", + "license": "MIT", "dependencies": { "@types/d3-selection": "*" } @@ -1367,6 +1474,7 @@ "version": "3.0.8", "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", + "license": "MIT", "dependencies": { "@types/d3-interpolate": "*", "@types/d3-selection": "*" @@ -1376,36 +1484,42 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", - "dev": true + "dev": true, + "license": "MIT" }, "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/node": { - "version": "25.4.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.4.0.tgz", - "integrity": "sha512-9wLpoeWuBlcbBpOY3XmzSTG3oscB6xjBEEtn+pYXTfhyXhIxC5FsBer2KTopBlvKEiW9l13po9fq+SJY/5lkhw==", + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.0.0.tgz", + "integrity": "sha512-vf2YFi1iY9lHGwNJMs01biZFbKJkrZR1T6/MlzjhJLPdntOHLhTrDSnSVcdtvjihi4VQNlrFRIxLsDBlQpAipA==", + "license": "MIT", "dependencies": { - "undici-types": "~7.18.0" + "undici-types": "~8.3.0" } }, "node_modules/@types/pug": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.10.tgz", "integrity": "sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/stats.js": { "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/stats.js/-/stats.js-0.17.4.tgz", - "integrity": "sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==" + "integrity": "sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==", + "license": "MIT" }, "node_modules/@types/three": { "version": "0.161.2", "resolved": "https://registry.npmjs.org/@types/three/-/three-0.161.2.tgz", "integrity": "sha512-DazpZ+cIfBzbW/p0zm6G8CS03HBMd748A3R1ZOXHpqaXZLv2I5zNgQUrRG//UfJ6zYFp2cUoCQaOLaz8ubH07w==", + "license": "MIT", "dependencies": { "@types/stats.js": "*", "@types/webxr": "*", @@ -1417,6 +1531,7 @@ "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", "optional": true }, "node_modules/@types/validator": { @@ -1424,18 +1539,21 @@ "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.10.tgz", "integrity": "sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/@types/webxr": { "version": "0.5.24", "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.24.tgz", - "integrity": "sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg==" + "integrity": "sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg==", + "license": "MIT" }, "node_modules/@typeschema/class-validator": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@typeschema/class-validator/-/class-validator-0.3.0.tgz", "integrity": "sha512-OJSFeZDIQ8EK1HTljKLT5CItM2wsbgczLN8tMEfz3I1Lmhc5TBfkZ0eikFzUC16tI3d1Nag7um6TfCgp2I2Bww==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "@typeschema/core": "0.14.0" @@ -1454,6 +1572,7 @@ "resolved": "https://registry.npmjs.org/@typeschema/core/-/core-0.14.0.tgz", "integrity": "sha512-Ia6PtZHcL3KqsAWXjMi5xIyZ7XMH4aSnOQes8mfMLx+wGFGtGRNlwe6Y7cYvX+WfNK67OL0/HSe9t8QDygV0/w==", "dev": true, + "license": "MIT", "optional": true, "peerDependencies": { "@types/json-schema": "^7.0.15" @@ -1465,13 +1584,14 @@ } }, "node_modules/@valibot/to-json-schema": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@valibot/to-json-schema/-/to-json-schema-1.5.0.tgz", - "integrity": "sha512-GE7DmSr1C2UCWPiV0upRH6mv0cCPsqYGs819fb6srCS1tWhyXrkGGe+zxUiwzn/L1BOfADH4sNjY/YHCuP8phQ==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@valibot/to-json-schema/-/to-json-schema-1.7.1.tgz", + "integrity": "sha512-3qkmU6KXWh8GIThEAW3kuRHPQBMjWkKy+Ppz3WkUucx53DTpOa6siMn4xDGSOhlVyMrDaJTCTMLYPZVAIk1P0A==", "dev": true, + "license": "MIT", "optional": true, "peerDependencies": { - "valibot": "^1.2.0" + "valibot": "^1.4.0" } }, "node_modules/@vinejs/compiler": { @@ -1479,6 +1599,7 @@ "resolved": "https://registry.npmjs.org/@vinejs/compiler/-/compiler-3.0.0.tgz", "integrity": "sha512-v9Lsv59nR56+bmy2p0+czjZxsLHwaibJ+SV5iK9JJfehlJMa501jUJQqqz4X/OqKXrxtE3uTQmSqjUqzF3B2mw==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=18.0.0" @@ -1489,6 +1610,7 @@ "resolved": "https://registry.npmjs.org/@vinejs/vine/-/vine-3.0.1.tgz", "integrity": "sha512-ZtvYkYpZOYdvbws3uaOAvTFuvFXoQGAtmzeiXu+XSMGxi5GVsODpoI9Xu9TplEMuD/5fmAtBbKb9cQHkWkLXDQ==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "@poppinss/macroable": "^1.0.4", @@ -1505,14 +1627,15 @@ } }, "node_modules/@vitest/expect": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", - "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.6.tgz", + "integrity": "sha512-1+7q9BtaKzEmO+fmNT3kYvoNn5Y71XWAx2Q5HRim4tTVRQVRv4uJFAQ5FbK0OPUeNP/WmVCpxYxoJdvuHVjzBQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/chai": "^5.2.2", - "@vitest/spy": "3.2.4", - "@vitest/utils": "3.2.4", + "@vitest/spy": "3.2.6", + "@vitest/utils": "3.2.6", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" }, @@ -1521,10 +1644,11 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", - "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.6.tgz", + "integrity": "sha512-lb7XXXzmm2h2ASzFnRvQpDo6onT1NmMJA3tkGTWiBFtRJ9lxGY3d3mm/Apt36gej2bkkOVLL/yTOtufDaFa/jA==", "dev": true, + "license": "MIT", "dependencies": { "tinyrainbow": "^2.0.0" }, @@ -1533,12 +1657,13 @@ } }, "node_modules/@vitest/runner": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", - "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.6.tgz", + "integrity": "sha512-HYcoSj1w5tcgUnzoF0HcyaAQjpA1gj9ftUJ7iSJSuipc02jW9gKkigwZbjFldAfYHA1fa8UZVRftdMY5msWM9Q==", "dev": true, + "license": "MIT", "dependencies": { - "@vitest/utils": "3.2.4", + "@vitest/utils": "3.2.6", "pathe": "^2.0.3", "strip-literal": "^3.0.0" }, @@ -1547,12 +1672,13 @@ } }, "node_modules/@vitest/snapshot": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", - "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.6.tgz", + "integrity": "sha512-H+ZjNTWGpObenh0YnlBctAPnJSI20P81PL8BPzWpx54YXLLTm8hEsWawtcYLMrwvpK48hGxLLbCS+1KRXhsKhw==", "dev": true, + "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.2.4", + "@vitest/pretty-format": "3.2.6", "magic-string": "^0.30.17", "pathe": "^2.0.3" }, @@ -1561,10 +1687,11 @@ } }, "node_modules/@vitest/spy": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", - "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.6.tgz", + "integrity": "sha512-oq6BbH68WzcWmwtBrU9nqLeaXTR4XwJF7FSLkKEZo4i6eoXcrxjcwSuTvWBIRUTC6VC72nXYunzqgZA+IKdtxg==", "dev": true, + "license": "MIT", "dependencies": { "tinyspy": "^4.0.3" }, @@ -1573,12 +1700,13 @@ } }, "node_modules/@vitest/utils": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", - "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.6.tgz", + "integrity": "sha512-lI23nIs4bnT3T8NIoh+vFaz5s2/DdP0Jgt2jxwgWljvwn82cLJtyi/If+fjFyoLMGIOz0U/fKvWE0d4jsNQEfg==", "dev": true, + "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.2.4", + "@vitest/pretty-format": "3.2.6", "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" }, @@ -1590,6 +1718,7 @@ "version": "0.1.39", "resolved": "https://registry.npmjs.org/@xyflow/svelte/-/svelte-0.1.39.tgz", "integrity": "sha512-QZ5mzNysvJeJW7DxmqI4Urhhef9tclqtPr7WAS5zQF5Gk6k9INwzey4CYNtEZo8XMj9H8lzgoJRmgMPnJEc1kw==", + "license": "MIT", "dependencies": { "@svelte-put/shortcut": "3.1.1", "@xyflow/system": "0.0.59", @@ -1603,6 +1732,7 @@ "version": "0.0.59", "resolved": "https://registry.npmjs.org/@xyflow/system/-/system-0.0.59.tgz", "integrity": "sha512-+xgqYhoBv5F10TQx0SiKZR/DcWtuxFYR+e/LluHb7DMtX4SsMDutZWEJ4da4fDco25jZxw5G9fOlmk7MWvYd5Q==", + "license": "MIT", "dependencies": { "@types/d3-drag": "^3.0.7", "@types/d3-selection": "^3.0.10", @@ -1614,9 +1744,10 @@ } }, "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -1628,6 +1759,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==", + "license": "MIT", "dependencies": { "kind-of": "^3.0.2", "longest": "^1.0.1", @@ -1641,6 +1773,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-bgblack/-/ansi-bgblack-0.1.1.tgz", "integrity": "sha512-tp8M/NCmSr6/skdteeo9UgJ2G1rG88X3ZVNZWXUxFw4Wh0PAGaAAWQS61sfBt/1QNcwMTY3EBKOMPujwioJLaw==", + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -1652,6 +1785,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-bgblue/-/ansi-bgblue-0.1.1.tgz", "integrity": "sha512-R8JmX2Xv3+ichUQE99oL+LvjsyK+CDWo/BtVb4QUz3hOfmf2bdEmiDot3fQcpn2WAHW3toSRdjSLm6bgtWRDlA==", + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -1663,6 +1797,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-bgcyan/-/ansi-bgcyan-0.1.1.tgz", "integrity": "sha512-6SByK9q2H978bmqzuzA5NPT1lRDXl3ODLz/DjC4URO5f/HqK7dnRKfoO/xQLx/makOz7zWIbRf6+Uf7bmaPSkQ==", + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -1674,6 +1809,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-bggreen/-/ansi-bggreen-0.1.1.tgz", "integrity": "sha512-8TRtOKmIPOuxjpklrkhUbqD2NnVb4WZQuIjXrT+TGKFKzl7NrL7wuNvEap3leMt2kQaCngIN1ZzazSbJNzF+Aw==", + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -1685,6 +1821,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-bgmagenta/-/ansi-bgmagenta-0.1.1.tgz", "integrity": "sha512-UZYhobiGAlV4NiwOlKAKbkCyxOl1PPZNvdIdl/Ce5by45vwiyNdBetwHk/AjIpo1Ji9z+eE29PUBAjjfVmz5SA==", + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -1696,6 +1833,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-bgred/-/ansi-bgred-0.1.1.tgz", "integrity": "sha512-BpPHMnYmRBhcjY5knRWKjQmPDPvYU7wrgBSW34xj7JCH9+a/SEIV7+oSYVOgMFopRIadOz9Qm4zIy+mEBvUOPA==", + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -1707,6 +1845,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-bgwhite/-/ansi-bgwhite-0.1.1.tgz", "integrity": "sha512-KIF19t+HOYOorUnHTOhZpeZ3bJsjzStBG2hSGM0WZ8YQQe4c7lj9CtwnucscJDPrNwfdz6GBF+pFkVfvHBq6uw==", + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -1718,6 +1857,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-bgyellow/-/ansi-bgyellow-0.1.1.tgz", "integrity": "sha512-WyRoOFSIvOeM7e7YdlSjfAV82Z6K1+VUVbygIQ7C/VGzWYuO/d30F0PG7oXeo4uSvSywR0ozixDQvtXJEorq4Q==", + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -1729,6 +1869,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-black/-/ansi-black-0.1.1.tgz", "integrity": "sha512-hl7re02lWus7lFOUG6zexhoF5gssAfG5whyr/fOWK9hxNjUFLTjhbU/b4UHWOh2dbJu9/STSUv+80uWYzYkbTQ==", + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -1740,6 +1881,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-blue/-/ansi-blue-0.1.1.tgz", "integrity": "sha512-8Um59dYNDdQyoczlf49RgWLzYgC2H/28W3JAIyOAU/+WkMcfZmaznm+0i1ikrE0jME6Ypk9CJ9CY2+vxbPs7Fg==", + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -1751,6 +1893,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-bold/-/ansi-bold-0.1.1.tgz", "integrity": "sha512-wWKwcViX1E28U6FohtWOP4sHFyArELHJ2p7+3BzbibqJiuISeskq6t7JnrLisUngMF5zMhgmXVw8Equjzz9OlA==", + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -1762,6 +1905,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-0.2.0.tgz", "integrity": "sha512-ScRNUT0TovnYw6+Xo3iKh6G+VXDw2Ds7ZRnMIuKBgHY02DgvT2T2K22/tc/916Fi0W/5Z1RzDaHQwnp75hqdbA==", + "license": "MIT", "dependencies": { "ansi-bgblack": "^0.1.1", "ansi-bgblue": "^0.1.1", @@ -1799,6 +1943,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", "integrity": "sha512-eCjan3AVo/SxZ0/MyIYRtkpxIu/H3xZN7URr1vXVrISxeyz8fUFz0FJziamK4sS8I+t35y4rHg1b2PklyBe/7A==", + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -1810,6 +1955,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-dim/-/ansi-dim-0.1.1.tgz", "integrity": "sha512-zAfb1fokXsq4BoZBkL0eK+6MfFctbzX3R4UMcoWrL1n2WHewFKentTvOZv2P11u6P4NtW/V47hVjaN7fJiefOg==", + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -1821,6 +1967,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", "integrity": "sha512-wiXutNjDUlNEDWHcYH3jtZUhd3c4/VojassD8zHdHCY13xbZy2XbW+NKQwA0tWGBVzDA9qEzYwfoSsWmviidhw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1829,6 +1976,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -1840,6 +1988,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-green/-/ansi-green-0.1.1.tgz", "integrity": "sha512-WJ70OI4jCaMy52vGa/ypFSKFb/TrYNPaQ2xco5nUwE0C5H8piume/uAZNNdXXiMQ6DbRmiE7l8oNBHu05ZKkrw==", + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -1851,6 +2000,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-grey/-/ansi-grey-0.1.1.tgz", "integrity": "sha512-+J1nM4lC+whSvf3T4jsp1KR+C63lypb+VkkwtLQMc1Dlt+nOvdZpFT0wwFTYoSlSwCcLUAaOpHF6kPkYpSa24A==", + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -1862,6 +2012,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-hidden/-/ansi-hidden-0.1.1.tgz", "integrity": "sha512-8gB1bo9ym9qZ/Obvrse1flRsfp2RE+40B23DhQcKxY+GSeaOJblLnzBOxzvmLTWbi5jNON3as7wd9rC0fNK73Q==", + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -1873,6 +2024,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-inverse/-/ansi-inverse-0.1.1.tgz", "integrity": "sha512-Kq8Z0dBRhQhDMN/Rso1Nu9niwiTsRkJncfJZXiyj7ApbfJrGrrubHXqXI37feJZkYcIx6SlTBdNCeK0OQ6X6ag==", + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -1884,6 +2036,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-italic/-/ansi-italic-0.1.1.tgz", "integrity": "sha512-jreCxifSAqbaBvcibeQxcwhQDbEj7gF69XnpA6x83qbECEBaRBD1epqskrmov1z4B+zzQuEdwbWxgzvhKa+PkA==", + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -1895,6 +2048,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-magenta/-/ansi-magenta-0.1.1.tgz", "integrity": "sha512-A1Giu+HRwyWuiXKyXPw2AhG1yWZjNHWO+5mpt+P+VWYkmGRpLPry0O5gmlJQEvpjNpl4RjFV7DJQ4iozWOmkbQ==", + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -1906,6 +2060,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", "integrity": "sha512-ewaIr5y+9CUTGFwZfpECUbFlGcC0GCw1oqR9RI6h1gQCd9Aj2GxSckCnPsVJnmfMZbwFYE+leZGASgkWl06Jow==", + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -1917,6 +2072,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1925,6 +2081,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-reset/-/ansi-reset-0.1.1.tgz", "integrity": "sha512-n+D0qD3B+h/lP0dSwXX1SZMoXufdUVotLMwUuvXa50LtBAh3f+WV8b5nFMfLL/hgoPBUt+rG/pqqzF8krlZKcw==", + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -1936,6 +2093,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-strikethrough/-/ansi-strikethrough-0.1.1.tgz", "integrity": "sha512-gWkLPDvHH2pC9YEKqp8dIl0mg3sRglMPvioqGDIOXiwxjxUwIJ1gF86E2o4R5yLNh8IAkwHbaMtASkJfkQ2hIA==", + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -1947,6 +2105,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1955,6 +2114,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-underline/-/ansi-underline-0.1.1.tgz", "integrity": "sha512-D+Bzwio/0/a0Fu5vJzrIT6bFk43TW46vXfSvzysOTEHcXOAUJTVMHWDbELIzGU4AVxVw2rCTb7YyWS4my2cSKQ==", + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -1966,6 +2126,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-white/-/ansi-white-0.1.1.tgz", "integrity": "sha512-DJHaF2SRzBb9wZBgqIJNjjTa7JUJTO98sHeTS1sDopyKKRopL1KpaJ20R6W2f/ZGras8bYyIZDtNwYOVXNgNFg==", + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -1977,6 +2138,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1985,6 +2147,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-yellow/-/ansi-yellow-0.1.1.tgz", "integrity": "sha512-6E3D4BQLXHLl3c/NwirWVZ+BCkMq2qsYxdeAGGOijKrx09FaqU+HktFL6QwAwNvgJiMLnv6AQ2C1gFZx0h1CBg==", + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -1996,13 +2159,15 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/anymatch": { "version": "3.1.3", "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" @@ -2015,12 +2180,14 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } @@ -2029,36 +2196,40 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", "engines": { "node": ">= 0.4" } }, "node_modules/arkregex": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/arkregex/-/arkregex-0.0.5.tgz", - "integrity": "sha512-ncYjBdLlh5/QnVsAA8De16Tc9EqmYM7y/WU9j+236KcyYNUXogpz3sC4ATIZYzzLxwI+0sEOaQLEmLmRleaEXw==", + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/arkregex/-/arkregex-0.0.6.tgz", + "integrity": "sha512-9mvuMKQuibfWhBrsNYhsKhNb6k9oEHoAJ/FvDiqe8h+E9Siwe0/cro1WVOGgpajXQ9ZHd24yCOf2k35Q/QqUQw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "@ark/util": "0.56.0" } }, "node_modules/arktype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arktype/-/arktype-2.2.0.tgz", - "integrity": "sha512-t54MZ7ti5BhOEvzEkgKnWvqj+UbDfWig+DHr5I34xatymPusKLS0lQpNJd8M6DzmIto2QGszHfNKoFIT8tMCZQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/arktype/-/arktype-2.2.1.tgz", + "integrity": "sha512-CWPJxNoSxrS+NYGB3ufwc/blFonESEW5vBQyYPVS0rf4STu8VWoAWfKJSl5vVVm56h4yxpwbODeYwy6XFKvojA==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "@ark/schema": "0.56.0", "@ark/util": "0.56.0", - "arkregex": "0.0.5" + "arkregex": "0.0.6" } }, "node_modules/arr-diff": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", "integrity": "sha512-dtXTVMkh6VkEEA7OhXnN1Ecb8aAGFdZ1LFxtOCoqj4qkyOJMt7+qs6Ahdy6p/NQCPYsRSXXivhSB/J5E9jmYKA==", + "license": "MIT", "dependencies": { "arr-flatten": "^1.0.1" }, @@ -2070,6 +2241,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2078,6 +2250,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", "integrity": "sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==", + "license": "MIT", "dependencies": { "make-iterator": "^1.0.0" }, @@ -2089,6 +2262,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/arr-pluck/-/arr-pluck-0.1.0.tgz", "integrity": "sha512-r+XGzphTuhTu//mwL9wIjXawJCiKkZqUDgJsUxzq+YGiYb4Gg9+GuIVorvSo7halsbEiDj5D34cquiHj7jTvgg==", + "license": "MIT", "dependencies": { "arr-map": "^2.0.0" }, @@ -2100,6 +2274,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2108,6 +2283,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-0.1.4.tgz", "integrity": "sha512-BNcM+RXxndPxiZ2rd76k6nyQLRZr2/B/sdi8pQ+Joafr5AH279L40dfokSUTp8O+AaqYjXWhblBWa2st2nc4fQ==", + "license": "MIT", "dependencies": { "default-compare": "^1.0.0", "get-value": "^2.0.6", @@ -2121,6 +2297,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2129,6 +2306,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", "integrity": "sha512-G2n5bG5fSUCpnsXz4+8FUkYsGPkNfLn9YvS66U5qbTIXI2Ynnlo4Bi42bWv+omKUCqz+ejzfClwne0alJWJPhg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2137,6 +2315,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/arrayify-compact/-/arrayify-compact-0.2.0.tgz", "integrity": "sha512-uCIqMaBeu+onuiFS1kB2raQYLETAAeWwAGwrZs7soA1nu4TuHfejWJMoFL06SvWHZAxmOCN7UDzcBjUZ6Y6s6Q==", + "license": "MIT", "dependencies": { "arr-flatten": "^1.0.1" }, @@ -2148,6 +2327,7 @@ "version": "0.25.0", "resolved": "https://registry.npmjs.org/assemble-core/-/assemble-core-0.25.0.tgz", "integrity": "sha512-5vS/XZK0ke3gIHoKTyl88brqOR9zw3niz5jJHrEgrDLlZGEri4a1Wr4badallKCx4M4/TWG12GT/O5wABZjaVA==", + "license": "MIT", "dependencies": { "assemble-fs": "^0.6.0", "assemble-render-file": "^0.7.1", @@ -2165,6 +2345,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/assemble-fs/-/assemble-fs-0.6.0.tgz", "integrity": "sha512-vp9szLsFTz0NFa7aiCBZ4JJZPsRRjLB7ftj3anSm/apE+DJ8d1s7kaVFHpxc2LCrEVIGMc1ALLyfRYJDwtzfaw==", + "license": "MIT", "dependencies": { "assemble-handle": "^0.1.2", "extend-shallow": "^2.0.1", @@ -2182,6 +2363,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/assemble-handle/-/assemble-handle-0.1.4.tgz", "integrity": "sha512-7O1lbkR2fMqsGwrtGzHraLQHN0OKukPeLF/qgD7yTzFKSKg/HH2xeEN8mKutwymXRzVsUF3AvboJoOjMGiT+5g==", + "license": "MIT", "dependencies": { "through2": "^2.0.3" }, @@ -2193,6 +2375,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/assemble-loader/-/assemble-loader-0.6.1.tgz", "integrity": "sha512-jef7ecixuK8DgP2LMJ5TO1Zs6YnltxQN8KDLDYLav+VbfK7+BGVLHv2NNrIm0/Mls2CklNmMqeWcccdSUNRUnQ==", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "file-contents": "^0.2.4", @@ -2213,6 +2396,7 @@ "version": "0.7.2", "resolved": "https://registry.npmjs.org/assemble-render-file/-/assemble-render-file-0.7.2.tgz", "integrity": "sha512-Fmt/7KDIwHr/zIStwzl1QEzeph++eP0I7G3tQch1s0ftBllEwZZ5Py7IpO1WPkP+ef8xMRjXNrNKx8/cpTgb4w==", + "license": "MIT", "dependencies": { "debug": "^2.2.0", "is-valid-app": "^0.1.2", @@ -2228,6 +2412,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -2236,6 +2421,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.1.2.tgz", "integrity": "sha512-UKIjincKieawS6pPJjpH76qUmblicLSi0pqGCvFdscOM3pWgnrRBtB/iWIRYXKNCW8qjxb+6k12wFd82Kq94CA==", + "license": "MIT", "dependencies": { "debug": "^2.2.0", "is-registered": "^0.1.5", @@ -2249,12 +2435,14 @@ "node_modules/assemble-render-file/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/assemble-streams": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/assemble-streams/-/assemble-streams-0.6.0.tgz", "integrity": "sha512-JEZRYrkAQHKCT41jTVXQ63AxeYGD9aDuxRDZhZH5fsVfvLZGOHXsGPSJBEfDuC6Nz6APJGt9lwWfZH9lqmG65Q==", + "license": "MIT", "dependencies": { "assemble-handle": "^0.1.2", "is-registered": "^0.1.4", @@ -2273,6 +2461,7 @@ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" } @@ -2281,6 +2470,7 @@ "version": "0.4.8", "resolved": "https://registry.npmjs.org/assign-deep/-/assign-deep-0.4.8.tgz", "integrity": "sha512-uxqXJCnNZDEjPnsaLKVzmh/ST5+Pqoz0wi06HDfHKx1ASNpSbbvz2qW2Gl8ZyHwr5jnm11X2S5eMQaP1lMZmCg==", + "license": "MIT", "dependencies": { "assign-symbols": "^0.1.1", "is-primitive": "^2.0.0", @@ -2294,6 +2484,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2302,6 +2493,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-0.1.1.tgz", "integrity": "sha512-gwzH8QS/GV4pQsf6XOrlpBC6aDE8uJeZvymbEJ0W9TuDYqYOZc4RodvKDH98HCc+KFPYil1kD2XT0X0JWeOzQg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2309,12 +2501,14 @@ "node_modules/async": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "license": "MIT" }, "node_modules/async-array-reduce": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/async-array-reduce/-/async-array-reduce-0.2.1.tgz", "integrity": "sha512-/ywTADOcaEnwiAnOEi0UB/rAcIq5bTFfCV9euv3jLYFUMmy6KvKccTQUnLlp8Ensmfj43wHSmbGiPqjsZ6RhNA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2323,6 +2517,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.2", @@ -2342,12 +2537,14 @@ "type": "individual", "url": "https://paulmillr.com/funding/" } - ] + ], + "license": "MIT" }, "node_modules/async-each-series": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-1.1.0.tgz", "integrity": "sha512-/VIpPVIJJlJObJiXkHBJ1RhjDtydBRG/3/dWpsXoVGOShNw5tameXnC7Yys+wpb0p/myItxGmSGgNi/dNlsIiA==", + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -2356,6 +2553,7 @@ "version": "0.3.17", "resolved": "https://registry.npmjs.org/async-helpers/-/async-helpers-0.3.17.tgz", "integrity": "sha512-LfgCyvmK6ZiC7pyqOgli2zfkWL4HYbEb+HXvGgdmqVBgsOOtQz5rSF8Ii/H/1cNNtrfj1KsdZE/lUMeIY3Qcwg==", + "license": "MIT", "dependencies": { "co": "^4.6.0", "kind-of": "^6.0.0" @@ -2368,6 +2566,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2376,6 +2575,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-0.2.1.tgz", "integrity": "sha512-3b4i8Bf/9Zw3V/EsLtMx+qj2r0mDYotjMhzXJQxjvESOe5LgevY5KaH5BHROVZWHE7TlSY2FkeTgIgDvdkRFYQ==", + "license": "MIT", "dependencies": { "async-done": "^0.4.0" } @@ -2384,6 +2584,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/async-done/-/async-done-0.4.0.tgz", "integrity": "sha512-NcrnJY08hBDUa3qhZIfRALshlau6U/Q9X1WHA53t/8OfJpQz5qXPKGFVHwIY38md62TiM9JA+5tpRed5LFWrKw==", + "license": "MIT", "dependencies": { "end-of-stream": "^0.1.4", "next-tick": "^0.2.2", @@ -2395,6 +2596,7 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", "integrity": "sha512-go5TQkd0YRXYhX+Lc3UrXkoKU5j+m72jEP5lHWr2Nh82L8wfZtH8toKgcg4T10o23ELIMGXQdwCbl+qAXIPDrw==", + "license": "MIT", "dependencies": { "once": "~1.3.0" } @@ -2403,14 +2605,15 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", + "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/autoprefixer": { - "version": "10.4.27", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz", - "integrity": "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz", + "integrity": "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==", "dev": true, "funding": [ { @@ -2426,9 +2629,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "browserslist": "^4.28.1", - "caniuse-lite": "^1.0.30001774", + "browserslist": "^4.28.2", + "caniuse-lite": "^1.0.30001787", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" @@ -2447,6 +2651,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", "engines": { "node": ">= 0.4" } @@ -2455,6 +2660,7 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/bach/-/bach-0.5.0.tgz", "integrity": "sha512-wr1KICs4sa/Ye4D38CEWkxmRi0E/1NnlcTXE4WT46993f+m+W8rVeRlQVh7O9jUHd3/cyNttv4qIDEUullFPcw==", + "license": "MIT", "dependencies": { "async-done": "^1.1.1", "async-settle": "^0.2.1", @@ -2473,12 +2679,14 @@ "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/base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "license": "MIT", "dependencies": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -2496,6 +2704,7 @@ "version": "0.4.5", "resolved": "https://registry.npmjs.org/base-argv/-/base-argv-0.4.5.tgz", "integrity": "sha512-U78T4In2FMtSYBaf3utKCAOrOBJJXgvGLUmck71ZLQuJZBO6+DDUFoJGfuys0bX/wSQOZgB/HLLFiapvvUUFlw==", + "license": "MIT", "dependencies": { "arr-diff": "^2.0.0", "arr-union": "^3.1.0", @@ -2513,6 +2722,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -2521,6 +2731,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2528,12 +2739,14 @@ "node_modules/base-argv/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/base-cli": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/base-cli/-/base-cli-0.5.0.tgz", "integrity": "sha512-GQnPyusKASZoCKR3JFf4iVygLvZjk6RwEQokZF35M9VHnhkoPycf22jYlWkwLEtCejtcLECgGC7fq0G/ab5k8g==", + "license": "MIT", "dependencies": { "base-argv": "^0.4.2", "base-config": "^0.5.2" @@ -2546,6 +2759,7 @@ "version": "0.1.19", "resolved": "https://registry.npmjs.org/base-cli-process/-/base-cli-process-0.1.19.tgz", "integrity": "sha512-hH9MGqad9bZBmowsZ8uKL91rS4L+q4GEOc5SaL045jQWaR93sla0UI4Q9C6GzOD2AgVJulY2QtCMmwcBhdVYtQ==", + "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "arrayify-compact": "^0.2.0", @@ -2576,6 +2790,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -2583,12 +2798,14 @@ "node_modules/base-cli-process/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/base-cli-schema": { "version": "0.1.19", "resolved": "https://registry.npmjs.org/base-cli-schema/-/base-cli-schema-0.1.19.tgz", "integrity": "sha512-8k3JPZjVjdwpYtaaF3F8JT9RztX1oFDWKsAVDpUUR/uXL6b85DyTpRX4TUw3rjwZMZIf1BmiTys2zOSqC7+oAA==", + "license": "MIT", "dependencies": { "arr-flatten": "^1.0.1", "array-unique": "^0.2.1", @@ -2616,6 +2833,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -2623,12 +2841,14 @@ "node_modules/base-cli-schema/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/base-compose": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/base-compose/-/base-compose-0.2.1.tgz", "integrity": "sha512-z/wx9ij4i4Bj6WbXJeJlVO2O99eErMXSWjyYUt/NAfxrGpNfMz4SWS9P0OYx9RVQ2CyMEcT1J3z5+9EqQQr8Ug==", + "license": "MIT", "dependencies": { "copy-task": "^0.1.0", "lazy-cache": "^2.0.1", @@ -2642,6 +2862,7 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/base-config/-/base-config-0.5.2.tgz", "integrity": "sha512-Oq0PKM//Sh82mHQt64eUi5GZQOM8I+aNkM/P8Al4A5qwaGBkxKB+ElNqJHUVlF3WA9VjBLYUmO9asGzLEigxBw==", + "license": "MIT", "dependencies": { "isobject": "^2.0.0", "lazy-cache": "^1.0.3", @@ -2656,6 +2877,7 @@ "version": "0.1.9", "resolved": "https://registry.npmjs.org/base-config-process/-/base-config-process-0.1.9.tgz", "integrity": "sha512-tShRbXNMml5V/qgcZ3ntWsaS6ovw1t7e4yvtYY9XzhJtNpuC8WudMwtSbG7lXAuEZ04jY1istJzKR3NzAoxo3A==", + "license": "MIT", "dependencies": { "base-config": "^0.5.2", "base-config-schema": "^0.1.18", @@ -2676,6 +2898,7 @@ "version": "1.8.5", "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==", + "license": "MIT", "dependencies": { "expand-range": "^1.8.1", "preserve": "^0.2.0", @@ -2689,6 +2912,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -2697,6 +2921,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2705,6 +2930,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "license": "MIT", "dependencies": { "is-extglob": "^1.0.0" }, @@ -2716,6 +2942,7 @@ "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==", + "license": "MIT", "dependencies": { "arr-diff": "^2.0.0", "array-unique": "^0.2.1", @@ -2738,12 +2965,14 @@ "node_modules/base-config-process/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/base-config-process/node_modules/normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "license": "MIT", "dependencies": { "remove-trailing-separator": "^1.0.1" }, @@ -2755,6 +2984,7 @@ "version": "0.1.24", "resolved": "https://registry.npmjs.org/base-config-schema/-/base-config-schema-0.1.24.tgz", "integrity": "sha512-3CYvd28nsiNVp1rkAfVqfYo7VzDPdIxwv0Ab6iGY0K7JdGRsT6U7Jqq6BBMGNd9XLazLhVBPNGUzaDg5oUtV5w==", + "license": "MIT", "dependencies": { "arr-flatten": "^1.0.3", "array-unique": "^0.3.2", @@ -2783,6 +3013,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2791,6 +3022,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "license": "MIT", "engines": { "node": ">=0.8" } @@ -2798,12 +3030,14 @@ "node_modules/base-config-schema/node_modules/clone-stats": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==" + "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", + "license": "MIT" }, "node_modules/base-config-schema/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -2812,6 +3046,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "license": "MIT", "dependencies": { "is-descriptor": "^1.0.0" }, @@ -2823,6 +3058,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/file-contents/-/file-contents-1.0.1.tgz", "integrity": "sha512-yR9NGsF6Ua0vUjag441JRYB+WflAoBCF3+ReeKocYzpfAjN1U4TvQEjIKXOqwIxFl9Bflg8xf/Fi2qrNBoFUOQ==", + "license": "MIT", "dependencies": { "define-property": "^0.2.5", "extend-shallow": "^2.0.1", @@ -2841,6 +3077,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "license": "MIT", "dependencies": { "is-descriptor": "^0.1.0" }, @@ -2849,9 +3086,10 @@ } }, "node_modules/base-config-schema/node_modules/file-contents/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.8.tgz", + "integrity": "sha512-SceYGWXvdqlWa/OnQ5FQuV+NxvNmMRhMw/w9AHkH71hTzveND4BTYgvp16g+oITK47qbOl/3D0bl0iygehWAWQ==", + "license": "MIT", "dependencies": { "is-accessor-descriptor": "^1.0.1", "is-data-descriptor": "^1.0.1" @@ -2864,6 +3102,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "license": "ISC", "dependencies": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" @@ -2873,6 +3112,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", "integrity": "sha512-D+8A457fBShSEI3tFCj65PAbT++5sKiFtdCdOam0gnfBgw9D277OERk+HM9qYJXmdVLZ/znez10SqHN0BBQ50g==", + "license": "MIT", "dependencies": { "is-glob": "^3.0.0" }, @@ -2881,11 +3121,12 @@ } }, "node_modules/base-config-schema/node_modules/is-descriptor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", - "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.4.tgz", + "integrity": "sha512-bv5z95W0dDtLfKwDfkTNxaRxmISBD3eQBKJeVxv2AQ7MjuUnDNG7cIQqvFtMOUYhsILWHhMayWdoGqNqYYYjww==", + "license": "MIT", "dependencies": { - "is-accessor-descriptor": "^1.0.1", + "is-accessor-descriptor": "^1.0.2", "is-data-descriptor": "^1.0.1" }, "engines": { @@ -2896,6 +3137,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "license": "MIT", "dependencies": { "is-extglob": "^2.1.0" }, @@ -2907,6 +3149,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/load-templates/-/load-templates-1.0.2.tgz", "integrity": "sha512-UUfhwRTBH9V4Uf0gGX7FqU5RUdi9IvJWrY1AaPRCRkV/LE/cbudUtY0+YXZs1fNp1J4PFlwOMyrtfzSOCtBbJA==", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "file-contents": "^1.0.0", @@ -2924,12 +3167,14 @@ "node_modules/base-config-schema/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/base-config-schema/node_modules/replace-ext": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -2938,6 +3183,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-0.1.2.tgz", "integrity": "sha512-3DgNqQFTfOwWgxn3cXsa6h/WRgFa7dVb6/7YqwfJlBpLSSQbiU1VhaBNRKmtLI59CHjc9awLp9yGJREu7AnaMQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2946,6 +3192,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "license": "MIT", "dependencies": { "clone": "^2.1.1", "clone-buffer": "^1.0.0", @@ -2962,6 +3209,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2970,6 +3218,7 @@ "version": "0.3.4", "resolved": "https://registry.npmjs.org/base-cwd/-/base-cwd-0.3.4.tgz", "integrity": "sha512-/kxZE1Hg9p4tvy4DHrWyS/DelZeovOWvBZ9CZKTgeieIxMuZ47FaLIkEkcjOVFcu3nIY4TXdlxhMZFi8D2Rs9g==", + "license": "MIT", "dependencies": { "empty-dir": "^0.2.0", "find-pkg": "^0.1.2", @@ -2983,6 +3232,7 @@ "version": "0.6.2", "resolved": "https://registry.npmjs.org/base-data/-/base-data-0.6.2.tgz", "integrity": "sha512-wH2ViG6CUO2AaeHSEt6fJTyQAk5gl0oY456DoSC5h8mnHrWUbvdctMCuF53CXgBmi0oalZQppKNH0iamG5+uqw==", + "license": "MIT", "dependencies": { "arr-flatten": "^1.1.0", "cache-base": "^1.0.0", @@ -3009,6 +3259,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -3017,6 +3268,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", "integrity": "sha512-D+8A457fBShSEI3tFCj65PAbT++5sKiFtdCdOam0gnfBgw9D277OERk+HM9qYJXmdVLZ/znez10SqHN0BBQ50g==", + "license": "MIT", "dependencies": { "is-glob": "^3.0.0" }, @@ -3028,6 +3280,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "license": "MIT", "dependencies": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -3041,6 +3294,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "license": "MIT", "dependencies": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -3053,6 +3307,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -3064,6 +3319,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "license": "MIT", "dependencies": { "is-extglob": "^2.1.0" }, @@ -3075,6 +3331,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -3086,6 +3343,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -3097,6 +3355,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.3.0.tgz", "integrity": "sha512-6+PklNvJraE3XpoqWurkrPIqFIeJin5kwX+sJjcwhPcFY7TM0wjbJlPIBCvHtGawIfb4WtS1t22s7TdgQ0S+Xg==", + "license": "MIT", "dependencies": { "debug": "^2.6.3", "is-registered": "^0.1.5", @@ -3111,6 +3370,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-valid-instance/-/is-valid-instance-0.3.0.tgz", "integrity": "sha512-XEd0ddnORLW/Qf1+VMh7PnYb6XhWs0zK0C/Kh8muwj26IjdlCTlo7QQIjt8+efkE8RqtyzlqYNZE5SfN8ys9hQ==", + "license": "MIT", "dependencies": { "isobject": "^3.0.0", "pascalcase": "^0.1.1" @@ -3123,6 +3383,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3131,6 +3392,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3138,12 +3400,14 @@ "node_modules/base-data/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/base-engines": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/base-engines/-/base-engines-0.2.1.tgz", "integrity": "sha512-s/A07Vbh6irEMNG+HpccmaGw8SUMXPBetJuYPpq7Rf1WCjtCU1L+FKyeKyRahONGNYBSIHEV0d3cqXYw35EjBw==", + "license": "MIT", "dependencies": { "debug": "^2.2.0", "define-property": "^0.2.5", @@ -3159,6 +3423,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -3167,6 +3432,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.1.2.tgz", "integrity": "sha512-UKIjincKieawS6pPJjpH76qUmblicLSi0pqGCvFdscOM3pWgnrRBtB/iWIRYXKNCW8qjxb+6k12wFd82Kq94CA==", + "license": "MIT", "dependencies": { "debug": "^2.2.0", "is-registered": "^0.1.5", @@ -3180,12 +3446,14 @@ "node_modules/base-engines/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/base-env": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/base-env/-/base-env-0.3.1.tgz", "integrity": "sha512-/HxC8QV1m/bWqvjcu4WZl4Um1HRpTAjuY31uiFUEukXsXge4WIvNvGKG/gCs2PrpBFPCybowA406V/ivdPknpQ==", + "license": "MIT", "dependencies": { "base-namespace": "^0.2.0", "contains-path": "^0.1.0", @@ -3208,6 +3476,7 @@ "version": "0.10.0", "resolved": "https://registry.npmjs.org/cwd/-/cwd-0.10.0.tgz", "integrity": "sha512-YGZxdTTL9lmLkCUTpg4j0zQ7IhRB5ZmqNBbGCl3Tg6MP/d5/6sY7L5mmTjzbc6JKgVZYiqTQTNhPFsbXNGlRaA==", + "license": "MIT", "dependencies": { "find-pkg": "^0.1.2", "fs-exists-sync": "^0.1.0" @@ -3220,6 +3489,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -3228,6 +3498,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "license": "MIT", "dependencies": { "homedir-polyfill": "^1.0.1" }, @@ -3239,6 +3510,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.1.2.tgz", "integrity": "sha512-UKIjincKieawS6pPJjpH76qUmblicLSi0pqGCvFdscOM3pWgnrRBtB/iWIRYXKNCW8qjxb+6k12wFd82Kq94CA==", + "license": "MIT", "dependencies": { "debug": "^2.2.0", "is-registered": "^0.1.5", @@ -3252,12 +3524,14 @@ "node_modules/base-env/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/base-env/node_modules/resolve-file": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/resolve-file/-/resolve-file-0.3.0.tgz", "integrity": "sha512-9RXicAgDvLD272hZ3HwJv9MJUGxCBRRwwSBRdOGWgcO03MtC9UTGC6XG1VbS4T5MvDrb+tVZx2RhZ90uk3uczg==", + "license": "MIT", "dependencies": { "cwd": "^0.10.0", "expand-tilde": "^2.0.2", @@ -3275,6 +3549,7 @@ "version": "0.4.6", "resolved": "https://registry.npmjs.org/base-generators/-/base-generators-0.4.6.tgz", "integrity": "sha512-0k8QAoqYhOwIHQANQxwNOhtlQiuoMqv+rFu2szVIvLUNhZ8B7BOXWFRE5UXMAexRxz7H8rZIwLmeqxlYpOXJGw==", + "license": "MIT", "dependencies": { "async-each-series": "^1.1.0", "base-compose": "^0.2.1", @@ -3303,6 +3578,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -3311,6 +3587,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/is-valid-instance/-/is-valid-instance-0.2.0.tgz", "integrity": "sha512-dNT7bamkigo07gvbnoBRABSNX1ayAhkcw6/3fYhVDhiPXiqnCouD4JMmrozyOx37UUlC+Se1j/jCfLo1fNs0Ng==", + "license": "MIT", "dependencies": { "isobject": "^2.1.0", "pascalcase": "^0.1.1" @@ -3322,12 +3599,14 @@ "node_modules/base-generators/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/base-helpers": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/base-helpers/-/base-helpers-0.1.1.tgz", "integrity": "sha512-aUdOoz47aMdM2OAkN71P3m8wjFB+pZDVfvLebDoNAsD0zhKUc68QR30q9iK6vW6S302yNNVW8bZxUF6FwFLnQw==", + "license": "MIT", "dependencies": { "debug": "^2.2.0", "define-property": "^0.2.5", @@ -3343,6 +3622,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -3351,6 +3631,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.1.2.tgz", "integrity": "sha512-UKIjincKieawS6pPJjpH76qUmblicLSi0pqGCvFdscOM3pWgnrRBtB/iWIRYXKNCW8qjxb+6k12wFd82Kq94CA==", + "license": "MIT", "dependencies": { "debug": "^2.2.0", "is-registered": "^0.1.5", @@ -3364,12 +3645,14 @@ "node_modules/base-helpers/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/base-namespace": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/base-namespace/-/base-namespace-0.2.0.tgz", "integrity": "sha512-jZYAnj1wkwyi6HkqATtO86D8L9jbDdqVthISLG27LcXCFkc5EV+BwS/cfaPBkWoMGb3NsVMau+PLfFle58Xi2g==", + "license": "MIT", "dependencies": { "is-valid-app": "^0.1.0" }, @@ -3381,6 +3664,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -3389,6 +3673,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.1.2.tgz", "integrity": "sha512-UKIjincKieawS6pPJjpH76qUmblicLSi0pqGCvFdscOM3pWgnrRBtB/iWIRYXKNCW8qjxb+6k12wFd82Kq94CA==", + "license": "MIT", "dependencies": { "debug": "^2.2.0", "is-registered": "^0.1.5", @@ -3402,12 +3687,14 @@ "node_modules/base-namespace/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/base-option": { "version": "0.8.4", "resolved": "https://registry.npmjs.org/base-option/-/base-option-0.8.4.tgz", "integrity": "sha512-CS9V8trhwEccFFjmveBHWx4Wr4rwaohzMhwZx1DSUHdGHV9Nme3jbxJQ0U8JsrLFJvGtiav35NiHLeNd8n74XA==", + "license": "MIT", "dependencies": { "define-property": "^0.2.5", "get-value": "^2.0.6", @@ -3427,6 +3714,7 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.3.3.tgz", "integrity": "sha512-aJPTd11HzK47w8xJMpyY4tBmFC6EidC8EG2fENxCJvPwLYzXLnNaesgo796y1fhSISSYAuah4Het+wDoPXK2tg==", "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "isobject": "^2.0.0", @@ -3440,6 +3728,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.2.0.tgz", "integrity": "sha512-6oMu4CTicplxUMOXBoS1W9YNjIclUzmWpWf02v+JnYMEGVX24rTCsYMHay85WA7Wq+9wZa2iJ+HAAX0yGOcxCQ==", + "license": "MIT", "dependencies": { "arr-flatten": "^1.0.1", "is-arguments": "^1.0.2" @@ -3452,6 +3741,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/base-pkg/-/base-pkg-0.2.5.tgz", "integrity": "sha512-/POxajlgBhVsknwLXnqnbp//bAMh7SkDgHF+z/uoYnFqk46e05c3MxSEmn5vFCB8g4rHHKxAPLKrU/4Yb3vUdA==", + "license": "MIT", "dependencies": { "cache-base": "^1.0.0", "debug": "^2.6.8", @@ -3470,6 +3760,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -3478,6 +3769,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "license": "MIT", "dependencies": { "is-descriptor": "^1.0.0" }, @@ -3486,11 +3778,12 @@ } }, "node_modules/base-pkg/node_modules/is-descriptor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", - "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.4.tgz", + "integrity": "sha512-bv5z95W0dDtLfKwDfkTNxaRxmISBD3eQBKJeVxv2AQ7MjuUnDNG7cIQqvFtMOUYhsILWHhMayWdoGqNqYYYjww==", + "license": "MIT", "dependencies": { - "is-accessor-descriptor": "^1.0.1", + "is-accessor-descriptor": "^1.0.2", "is-data-descriptor": "^1.0.1" }, "engines": { @@ -3501,6 +3794,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.3.0.tgz", "integrity": "sha512-6+PklNvJraE3XpoqWurkrPIqFIeJin5kwX+sJjcwhPcFY7TM0wjbJlPIBCvHtGawIfb4WtS1t22s7TdgQ0S+Xg==", + "license": "MIT", "dependencies": { "debug": "^2.6.3", "is-registered": "^0.1.5", @@ -3515,6 +3809,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-valid-instance/-/is-valid-instance-0.3.0.tgz", "integrity": "sha512-XEd0ddnORLW/Qf1+VMh7PnYb6XhWs0zK0C/Kh8muwj26IjdlCTlo7QQIjt8+efkE8RqtyzlqYNZE5SfN8ys9hQ==", + "license": "MIT", "dependencies": { "isobject": "^3.0.0", "pascalcase": "^0.1.1" @@ -3527,6 +3822,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3534,12 +3830,14 @@ "node_modules/base-pkg/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/base-plugins": { "version": "0.4.13", "resolved": "https://registry.npmjs.org/base-plugins/-/base-plugins-0.4.13.tgz", "integrity": "sha512-w77IDOnkxERPZ7x27A8MmSFcwEfTfrcZ43zK5eOt42itA8FZT9OFhZm1XgOtTEORKrCmW8yVT6DWr/ut7wvgiQ==", + "license": "MIT", "dependencies": { "define-property": "^0.2.5", "is-registered": "^0.1.5", @@ -3553,6 +3851,7 @@ "version": "0.7.4", "resolved": "https://registry.npmjs.org/base-questions/-/base-questions-0.7.4.tgz", "integrity": "sha512-uHRp5ZM2MFXUhDOPK09lroJdDe3lrXTHtg2x7pC1x4RdimVZcsX+hvQuxNqyAUN62EHfFuaK+FIFjMiA4AoiQg==", + "license": "MIT", "dependencies": { "base-store": "^0.4.4", "clone-deep": "^0.2.4", @@ -3572,6 +3871,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -3579,12 +3879,14 @@ "node_modules/base-questions/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/base-routes": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/base-routes/-/base-routes-0.2.2.tgz", "integrity": "sha512-z7jtXacfUbjAKUGj5jmJP8GrhZG+UqcwnfkKjLJtUa1w1bWrq5JmsZ1SFRfomXWbLAlEcE87dHvelvTkelQBIg==", + "license": "MIT", "dependencies": { "debug": "^2.2.0", "en-route": "^0.7.5", @@ -3600,6 +3902,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -3607,12 +3910,14 @@ "node_modules/base-routes/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/base-runtimes": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/base-runtimes/-/base-runtimes-0.2.0.tgz", "integrity": "sha512-J98SbWB4Rpcva8w8kWtTts+Qc/X/imcmFoy9nt2fKemPTmVgvrt8DyDK5KFUDyQHt+hahYa69pJTGFfUma7V8A==", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "is-valid-app": "^0.2.0", @@ -3629,6 +3934,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-0.1.0.tgz", "integrity": "sha512-nUNbMZLDr1YQaPdMC2lREJXKttoaHwICajt9x40Js/POX7gNv7OK/VbC9ciJaIFshg9Xol+1GclqfY14UW+0ZA==", + "license": "MIT", "dependencies": { "ansi-bgblack": "^0.1.1", "ansi-bgblue": "^0.1.1", @@ -3666,6 +3972,7 @@ "version": "0.2.7", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3674,6 +3981,7 @@ "version": "1.8.5", "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==", + "license": "MIT", "dependencies": { "expand-range": "^1.8.1", "preserve": "^0.2.0", @@ -3687,6 +3995,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3695,6 +4004,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "license": "MIT", "dependencies": { "is-extglob": "^1.0.0" }, @@ -3706,6 +4016,7 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/log-utils/-/log-utils-0.1.5.tgz", "integrity": "sha512-5jLIj9RWWYxQbBhHDvNZTZE3J/oSTbw/fuPmsXJg8/vbY/4XiJ4YAiEPrwo3dLbcB/n9k1qTznOVr6IigiaF7A==", + "license": "MIT", "dependencies": { "ansi-colors": "^0.1.0", "error-symbol": "^0.1.0", @@ -3723,6 +4034,7 @@ "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==", + "license": "MIT", "dependencies": { "arr-diff": "^2.0.0", "array-unique": "^0.2.1", @@ -3746,6 +4058,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "license": "MIT", "dependencies": { "remove-trailing-separator": "^1.0.1" }, @@ -3757,6 +4070,7 @@ "version": "0.4.4", "resolved": "https://registry.npmjs.org/base-store/-/base-store-0.4.4.tgz", "integrity": "sha512-fb5L2iNR9pCl85jeg88TCJYlcKg8xhmdH1Cjp1MI2RZNnMBjdIaQOuGy9Q4VjSD/GNGBWgQ2H8pQK61Xsx29OA==", + "license": "MIT", "dependencies": { "data-store": "^0.16.0", "debug": "^2.2.0", @@ -3774,6 +4088,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -3781,12 +4096,14 @@ "node_modules/base-store/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/base-task": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/base-task/-/base-task-0.6.2.tgz", "integrity": "sha512-dxCXKPLFRrl02kJ+Lu6Y0Y2/XeaVf3GbGXMoZKuHN9OvFjz+QXRwpTJ0PciQPAvktUgK46Mc9Kwakrcj8fSTog==", + "license": "MIT", "dependencies": { "composer": "^0.13.0", "is-valid-app": "^0.1.0" @@ -3799,6 +4116,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -3807,6 +4125,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.1.2.tgz", "integrity": "sha512-UKIjincKieawS6pPJjpH76qUmblicLSi0pqGCvFdscOM3pWgnrRBtB/iWIRYXKNCW8qjxb+6k12wFd82Kq94CA==", + "license": "MIT", "dependencies": { "debug": "^2.2.0", "is-registered": "^0.1.5", @@ -3820,12 +4139,14 @@ "node_modules/base-task/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/base/node_modules/define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "license": "MIT", "dependencies": { "is-descriptor": "^1.0.0" }, @@ -3834,11 +4155,12 @@ } }, "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", - "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.4.tgz", + "integrity": "sha512-bv5z95W0dDtLfKwDfkTNxaRxmISBD3eQBKJeVxv2AQ7MjuUnDNG7cIQqvFtMOUYhsILWHhMayWdoGqNqYYYjww==", + "license": "MIT", "dependencies": { - "is-accessor-descriptor": "^1.0.1", + "is-accessor-descriptor": "^1.0.2", "is-data-descriptor": "^1.0.1" }, "engines": { @@ -3849,15 +4171,17 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "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.10.38", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.38.tgz", + "integrity": "sha512-31/02mVB4yuQU6adKk5SlY6m+mxDwUq5KZkyYgnLrrKl7TEm1+3PyDtDBz2kOv/wxZz41GHsvV1A/u6RmiyBvw==", "dev": true, + "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.cjs" }, @@ -3870,6 +4194,7 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -3882,6 +4207,7 @@ "resolved": "https://registry.npmjs.org/bits-ui/-/bits-ui-0.22.0.tgz", "integrity": "sha512-r7Fw1HNgA4YxZBRcozl7oP0bheQ8EHh+kfMBZJgyFISix8t4p/nqDcHLmBgIiJ3T5XjYnJRorYDjIWaCfhb5fw==", "dev": true, + "license": "MIT", "dependencies": { "@internationalized/date": "^3.5.1", "@melt-ui/svelte": "0.76.2", @@ -3895,9 +4221,10 @@ } }, "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.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3908,6 +4235,7 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -3916,9 +4244,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.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.4.tgz", + "integrity": "sha512-MTc8i/x9jBQd1iMw2CFGS+rwMa07eYjLR0CCTLDACl9xhxy+nIs3KeML/biicXtk9JrZ6dnnTatmc7ErPXIxqw==", "dev": true, "funding": [ { @@ -3934,12 +4262,13 @@ "url": "https://github.com/sponsors/ai" } ], + "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.10.38", + "caniuse-lite": "^1.0.30001799", + "electron-to-chromium": "^1.5.376", + "node-releases": "^2.0.48", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -3953,6 +4282,7 @@ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -3962,6 +4292,7 @@ "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3970,6 +4301,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "license": "MIT", "dependencies": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -3989,6 +4321,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "license": "MIT", "dependencies": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -4002,6 +4335,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "license": "MIT", "dependencies": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -4014,6 +4348,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -4025,6 +4360,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -4036,6 +4372,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4044,6 +4381,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" @@ -4056,6 +4394,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" @@ -4071,6 +4410,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "license": "MIT", "dependencies": { "no-case": "^2.2.0", "upper-case": "^1.1.1" @@ -4081,6 +4421,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=16" @@ -4094,14 +4435,15 @@ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001777", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001777.tgz", - "integrity": "sha512-tmN+fJxroPndC74efCdp12j+0rk0RHwV5Jwa1zWaFVyw2ZxAuPeG8ZgWC3Wz7uSjT3qMRQ5XHZ4COgQmsCMJAQ==", + "version": "1.0.30001799", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001799.tgz", + "integrity": "sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==", "dev": true, "funding": [ { @@ -4116,12 +4458,14 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/canvas-renderer": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/canvas-renderer/-/canvas-renderer-2.2.1.tgz", "integrity": "sha512-RrBgVL5qCEDIXpJ6NrzyRNoTnXxYarqm/cS/W6ERhUJts5UQtt/XPEosGN3rqUkZ4fjBArlnCbsISJ+KCFnIAg==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4131,6 +4475,7 @@ "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", "dev": true, + "license": "MIT", "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", @@ -4146,6 +4491,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "license": "MIT", "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -4162,6 +4508,7 @@ "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 16" } @@ -4171,6 +4518,7 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", "dev": true, + "license": "MIT", "dependencies": { "readdirp": "^5.0.0" }, @@ -4185,6 +4533,7 @@ "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -4199,6 +4548,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4208,6 +4558,7 @@ "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.4.tgz", "integrity": "sha512-AwNusCCam51q703dW82x95tOqQp6oC9HNUl724KxJJOfnKscI8dOloXFgyez7LbTTKWuRBA37FScqVbJEoq8Yw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "@types/validator": "^13.15.3", @@ -4218,12 +4569,14 @@ "node_modules/classcat": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.5.tgz", - "integrity": "sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==" + "integrity": "sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==", + "license": "MIT" }, "node_modules/cli-cursor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", "integrity": "sha512-25tABq090YNKkF6JH7lcwO0zFJTRke4Jcq9iX2nr/Sz0Cjjv4gckmwlW6Ty/aoyFd6z3ysR2hMGC2GFugmBo6A==", + "license": "MIT", "dependencies": { "restore-cursor": "^1.0.1" }, @@ -4234,12 +4587,14 @@ "node_modules/cli-width": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-1.1.1.tgz", - "integrity": "sha512-eMU2akIeEIkCxGXUNmDnJq1KzOIiPnJ+rKqRe6hcxE3vIOPvpMrBYOn/Bl7zNlYJj/zQxXquAnozHUCf9Whnsg==" + "integrity": "sha512-eMU2akIeEIkCxGXUNmDnJq1KzOIiPnJ+rKqRe6hcxE3vIOPvpMrBYOn/Bl7zNlYJj/zQxXquAnozHUCf9Whnsg==", + "license": "ISC" }, "node_modules/clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "license": "MIT", "engines": { "node": ">=0.8" } @@ -4248,6 +4603,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -4256,6 +4612,7 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", "integrity": "sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==", + "license": "MIT", "dependencies": { "for-own": "^0.1.3", "is-plain-object": "^2.0.1", @@ -4271,6 +4628,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4278,12 +4636,14 @@ "node_modules/clone-stats": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==" + "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==", + "license": "MIT" }, "node_modules/cloneable-readable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "process-nextick-args": "^2.0.0", @@ -4294,6 +4654,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", "engines": { "node": ">=6" } @@ -4302,6 +4663,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" @@ -4311,6 +4673,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4319,6 +4682,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", + "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15", "@types/estree": "^1.0.1", @@ -4331,6 +4695,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "license": "MIT", "dependencies": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -4344,6 +4709,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -4352,6 +4718,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/common-config/-/common-config-0.1.1.tgz", "integrity": "sha512-mDp+nqoFbYsHKZfjg8OSb0CYfdPkuoGTMCVKy4ceYHR0EACTLV/qG8Q4cih2c/0IleQ7SISiqWqLMLXXZnJ2FA==", + "license": "MIT", "dependencies": { "composer": "^0.13.0", "data-store": "^0.16.1", @@ -4378,6 +4745,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/set-value/-/set-value-3.0.3.tgz", "integrity": "sha512-Xsn/XSatoVOGBbp5hs3UylFDs5Bi9i+ArpVJKdHPniZHoEgRniXTqHWrWrGQ0PbEClVT6WtfnBwR8CAHC9sveg==", + "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4" }, @@ -4389,6 +4757,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/sindresorhus" } @@ -4397,6 +4766,7 @@ "version": "0.13.0", "resolved": "https://registry.npmjs.org/composer/-/composer-0.13.0.tgz", "integrity": "sha512-8bW8vzd0YdwjBTbbHmUV3fb1jGFlczUEwti3dbdogI+r/igv2yyLqZFh9IyQv4+gK3k1kdNGVrf6Af5BY8qB3Q==", + "license": "MIT", "dependencies": { "array-unique": "^0.2.1", "bach": "^0.5.0", @@ -4419,6 +4789,7 @@ "version": "1.8.5", "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==", + "license": "MIT", "dependencies": { "expand-range": "^1.8.1", "preserve": "^0.2.0", @@ -4432,6 +4803,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4440,6 +4812,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "license": "MIT", "dependencies": { "is-extglob": "^1.0.0" }, @@ -4451,6 +4824,7 @@ "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==", + "license": "MIT", "dependencies": { "arr-diff": "^2.0.0", "array-unique": "^0.2.1", @@ -4474,6 +4848,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "license": "MIT", "dependencies": { "remove-trailing-separator": "^1.0.1" }, @@ -4484,12 +4859,14 @@ "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/contains-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", "integrity": "sha512-OKZnPGeMQy2RPaUIBPFFd71iNf4791H12MCRuVQDnzGRwCYNYmTDy5pdafo2SLAcEMKzTOQnLWG4QdcjeJUMEg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4497,12 +4874,14 @@ "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" }, "node_modules/cookie": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -4511,6 +4890,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4519,6 +4899,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/copy-task/-/copy-task-0.1.0.tgz", "integrity": "sha512-Idcf7BdeyJY8kSQodguY8jevkP8CuB22S9Hr5blRqwEyO75yuZEJQbzJ755Q9vZREnCQ5sfOIRxjZWbUq2+K0g==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4526,12 +4907,14 @@ "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" }, "node_modules/css-tree": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "license": "MIT", "dependencies": { "mdn-data": "2.0.30", "source-map-js": "^1.0.1" @@ -4545,6 +4928,7 @@ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, + "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -4556,6 +4940,7 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/cwd/-/cwd-0.9.1.tgz", "integrity": "sha512-4+0D+ojEasdLndYX4Cqff057I/Jp6ysXpwKkdLQLnZxV8f6IYZmZtTP5uqD91a/kWqejoc0sSqK4u8wpTKCh8A==", + "license": "MIT", "dependencies": { "find-pkg": "^0.1.0" }, @@ -4567,6 +4952,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", "engines": { "node": ">=12" } @@ -4575,6 +4961,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "license": "ISC", "engines": { "node": ">=12" } @@ -4583,6 +4970,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-selection": "3" @@ -4595,6 +4983,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", "engines": { "node": ">=12" } @@ -4603,6 +4992,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", "dependencies": { "d3-color": "1 - 3" }, @@ -4614,6 +5004,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "license": "ISC", "engines": { "node": ">=12" } @@ -4622,6 +5013,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", "engines": { "node": ">=12" } @@ -4630,6 +5022,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "license": "ISC", "dependencies": { "d3-color": "1 - 3", "d3-dispatch": "1 - 3", @@ -4648,6 +5041,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", @@ -4663,6 +5057,7 @@ "version": "0.16.1", "resolved": "https://registry.npmjs.org/data-store/-/data-store-0.16.1.tgz", "integrity": "sha512-tGbl4oVi9UPysie6y6+fuCjUNhaR3KxnuIRV0OMUCwq/wvikmWHXQYALbW/IVQvmxBNbrxUwjG5BWsrjx5v55w==", + "license": "MIT", "dependencies": { "cache-base": "^0.8.4", "clone-deep": "^0.2.4", @@ -4686,6 +5081,7 @@ "version": "0.8.5", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-0.8.5.tgz", "integrity": "sha512-19t0n7xdoVr5Q08+6sF85YZ9VuvbpVFq5JLm0gcsRmCvTO1Y3duTJGMaOQYf14Ras4o6dEnvoqvjdrUK1tNtgg==", + "license": "MIT", "dependencies": { "collection-visit": "^0.2.1", "component-emitter": "^1.2.1", @@ -4706,6 +5102,7 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-0.2.3.tgz", "integrity": "sha512-V88PJOCqJfsZS45YBELDgmhQkECokQAAr9XR4hT6eFkFsAPsCsk3EoDHSuBPYzygjquGM/0KF4vdwTiQO6lbdw==", + "license": "MIT", "dependencies": { "lazy-cache": "^2.0.1", "map-visit": "^0.1.5", @@ -4719,6 +5116,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -4727,6 +5125,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4735,6 +5134,7 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-0.1.5.tgz", "integrity": "sha512-zdmJBFvvVR/H5wCfsCP7XxSLp+346yAZ30Wy2OsQLcH19OVGMWa3Ms9quO00lj9ybsySu3gKOINNgICb4Zqauw==", + "license": "MIT", "dependencies": { "lazy-cache": "^2.0.1", "object-visit": "^0.3.4" @@ -4746,12 +5146,14 @@ "node_modules/data-store/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/data-store/node_modules/object-visit": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-0.3.4.tgz", "integrity": "sha512-6QNyX7uTuwqxP7pmDBqgBDKdmZws1rXriUyXM5KG6+7J0aYRuuAGoc636IGdLzgOL77WUwL+EpoTJrEHwWsyOA==", + "license": "MIT", "dependencies": { "isobject": "^2.0.0" }, @@ -4763,6 +5165,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "license": "MIT", "dependencies": { "isarray": "1.0.0" }, @@ -4775,6 +5178,7 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", "integrity": "sha512-2Z0LRUUvYeF7gIFFep48ksPq0NR09e5oKoFXznaMGNcu+EZAfGnyL0K6xno2gCqX6dZYEZRjrcn04/gvZzcKhQ==", "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -4789,6 +5193,7 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/union-value/-/union-value-0.2.4.tgz", "integrity": "sha512-Tv3cqdyY8yjW9ZcJ9WP7JdHS34natzylD0oNRLlYbWOfUdC4EQ0sf3fubnqrK2IErtlmobFmuS1pWvv88VghpA==", + "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -4803,6 +5208,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-0.1.2.tgz", "integrity": "sha512-yhv5I4TsldLdE3UcVQn0hD2T5sNCPv4+qm/CTUpRKIpwthYRIipsAPdsrNpOI79hPQa0rTTeW22Fq6JWRcTgNg==", + "license": "MIT", "dependencies": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -4812,25 +5218,28 @@ } }, "node_modules/date-fns": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", - "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.4.0.tgz", + "integrity": "sha512-+1UMbeh68lH1SegH83CGWwpb6OHHbpSgr3+s5Eww5M4CAgswBpoWS0AjTOfEJ33HiYKz1hdj/KTFprzXHmq/6w==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/kossnocorp" } }, "node_modules/dayjs": { - "version": "1.11.19", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", - "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", + "version": "1.11.21", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.21.tgz", + "integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/debug": { "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" }, @@ -4847,12 +5256,14 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz", "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/deep-bind": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/deep-bind/-/deep-bind-0.3.0.tgz", "integrity": "sha512-SwekOBPDnCT3qhOM78ARzBdPSbNMyQ63F8eZDahBzzVAoqousMhYh3HYIh2pLmhtGcVvO8/SU6B6kMsj0SXb1Q==", + "license": "MIT", "dependencies": { "mixin-deep": "^1.1.3" }, @@ -4865,6 +5276,7 @@ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4873,6 +5285,7 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4881,6 +5294,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "license": "MIT", "dependencies": { "kind-of": "^5.0.2" }, @@ -4892,6 +5306,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4900,6 +5315,7 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/defaults-deep/-/defaults-deep-0.2.4.tgz", "integrity": "sha512-V6BtqzcMvn0EPOy7f+SfMhfmTawq+7UQdt9yZH0EBK89+IHo5f+Hse/qzTorAXOBrQpxpwb6cB/8OgtaMrT+Fg==", + "license": "MIT", "dependencies": { "for-own": "^0.1.3", "is-extendable": "^0.1.1", @@ -4913,6 +5329,7 @@ "version": "0.2.7", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4921,6 +5338,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "license": "MIT", "dependencies": { "is-descriptor": "^0.1.0" }, @@ -4932,6 +5350,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/delimiter-regex/-/delimiter-regex-2.0.0.tgz", "integrity": "sha512-EtGkq9TgEZlFACc/NvgwIidQ1wkEupWWbAIJTr9gi4TJUZOvHY8TdXd3i8/dan66BufB1/V6bI7rRW/zvGoVKw==", + "license": "MIT", "dependencies": { "extend-shallow": "^1.1.2", "isobject": "^2.1.0" @@ -4944,6 +5363,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", "integrity": "sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", + "license": "MIT", "dependencies": { "kind-of": "^1.1.0" }, @@ -4955,6 +5375,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", "integrity": "sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4964,6 +5385,7 @@ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4973,6 +5395,7 @@ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4980,19 +5403,22 @@ "node_modules/devalue": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.3.tgz", - "integrity": "sha512-UH8EL6H2ifcY8TbD2QsxwCC/pr5xSwPvv85LrLXVihmHVC3T3YqTCIwnR5ak0yO1KYqlxrPVOA/JVZJYPy2ATg==" + "integrity": "sha512-UH8EL6H2ifcY8TbD2QsxwCC/pr5xSwPvv85LrLXVihmHVC3T3YqTCIwnR5ak0yO1KYqlxrPVOA/JVZJYPy2ATg==", + "license": "MIT" }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/diff": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -5001,15 +5427,14 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/dompurify": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.2.tgz", - "integrity": "sha512-6obghkliLdmKa56xdbLOpUZ43pAR6xFy1uOrxBaIDjT+yaRuuybLjGS9eVBoSR/UPU5fq3OXClEHLJNGvbxKpQ==", - "engines": { - "node": ">=20" - }, + "version": "3.4.11", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.11.tgz", + "integrity": "sha512-zhlUV12GsaRzMsf9q5M254YhA4+VuF0fG+QFqu6aYpoGlKtz+w8//jBcGVYBgQkR5GHjUomejY84AV+/uPbWdw==", + "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { "@types/trusted-types": "^2.0.7" } @@ -5018,6 +5443,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", @@ -5030,12 +5456,14 @@ "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "license": "MIT" }, "node_modules/duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "license": "MIT", "dependencies": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", @@ -5044,10 +5472,11 @@ } }, "node_modules/effect": { - "version": "3.19.19", - "resolved": "https://registry.npmjs.org/effect/-/effect-3.19.19.tgz", - "integrity": "sha512-Yc8U/SVXo2dHnaP7zNBlAo83h/nzSJpi7vph6Hzyl4ulgMBIgPmz3UzOjb9sBgpFE00gC0iETR244sfXDNLHRg==", + "version": "3.21.4", + "resolved": "https://registry.npmjs.org/effect/-/effect-3.21.4.tgz", + "integrity": "sha512-B89v/xSgPbl1J2Ai2u18jxq3odpFauU1rC6/eSs4FeNHi72kwKdJp12VGigvRV2lK+kRnx+OOz41XV8guZd4gQ==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "@standard-schema/spec": "^1.0.0", @@ -5055,22 +5484,25 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.307", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.307.tgz", - "integrity": "sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg==", - "dev": true + "version": "1.5.377", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.377.tgz", + "integrity": "sha512-cH1jZgJHoezfTnKfKwnScpHywTFVnJUNITDPREFdhNjiuD502+QFpG0Qk7G8jhsV/f+CEAFlIrzP1fT+IMb92g==", + "dev": true, + "license": "ISC" }, "node_modules/embla-carousel": { "version": "8.6.0", "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz", "integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/embla-carousel-reactive-utils": { "version": "8.6.0", "resolved": "https://registry.npmjs.org/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.6.0.tgz", "integrity": "sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==", "dev": true, + "license": "MIT", "peerDependencies": { "embla-carousel": "8.6.0" } @@ -5080,6 +5512,7 @@ "resolved": "https://registry.npmjs.org/embla-carousel-svelte/-/embla-carousel-svelte-8.6.0.tgz", "integrity": "sha512-ZDsKk8Sdv+AUTygMYcwZjfRd1DTh+JSUzxkOo8b9iKAkYjg+39mzbY/lwHsE3jXSpKxdKWS69hPSNuzlOGtR2Q==", "dev": true, + "license": "MIT", "dependencies": { "embla-carousel": "8.6.0", "embla-carousel-reactive-utils": "8.6.0" @@ -5092,6 +5525,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/empty-dir/-/empty-dir-0.2.1.tgz", "integrity": "sha512-0f1naHGJh4K6iVG28nRN7SCdfzT18OlpGzHmXw3JGwREb8qmtibHdmRgqx08u4sQfDadezK7kpU3bcIZNSwoZw==", + "license": "MIT", "dependencies": { "fs-exists-sync": "^0.1.0" }, @@ -5103,6 +5537,7 @@ "version": "0.7.5", "resolved": "https://registry.npmjs.org/en-route/-/en-route-0.7.5.tgz", "integrity": "sha512-WjnZ2HzvoztSL/NhKYmlN86tSP7VkOTN0Ck4FBJUsvTfLQOlULZak/1wcUArcdenvT9mNS3NzQ+41lqKf/gaGQ==", + "license": "MIT", "dependencies": { "arr-flatten": "^1.0.1", "debug": "^2.2.0", @@ -5119,6 +5554,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -5127,6 +5563,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5134,12 +5571,14 @@ "node_modules/en-route/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/end-of-stream": { "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" } @@ -5148,6 +5587,7 @@ "version": "0.1.12", "resolved": "https://registry.npmjs.org/engine/-/engine-0.1.12.tgz", "integrity": "sha512-1+oxmZV5nKFhoR3QkwIbyHKSVbMuNgU8+oxcx4Af1kpxuSjDD0nL3pKKJtY1mGjAPqSAwNeDEHzD94NR5LP5rg==", + "license": "MIT", "dependencies": { "assign-deep": "^0.4.3", "collection-visit": "^0.2.0", @@ -5165,6 +5605,7 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/engine-base/-/engine-base-0.1.3.tgz", "integrity": "sha512-CdNgUJcWgD9OsZ4vDFDmQB1/sN+UM0hEaDcbTZ2Ya/eMTkgCbdRLGvNuRE1UbN+AQJNo8Sm6iT327ULB7ynqnQ==", + "license": "MIT", "dependencies": { "component-emitter": "^1.2.1", "delimiter-regex": "^2.0.0", @@ -5183,6 +5624,7 @@ "version": "0.19.4", "resolved": "https://registry.npmjs.org/engine-cache/-/engine-cache-0.19.4.tgz", "integrity": "sha512-PNhE008O6X+7VggZSVe0+fZcafIAjVHWuU+iLIbeKXGGKzjb05Y8ht0l1O9sIusrULRsNq/FcYVPoqoNz7k4wg==", + "license": "MIT", "dependencies": { "async-helpers": "^0.3.9", "extend-shallow": "^2.0.1", @@ -5199,6 +5641,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5215,6 +5658,7 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-0.2.3.tgz", "integrity": "sha512-V88PJOCqJfsZS45YBELDgmhQkECokQAAr9XR4hT6eFkFsAPsCsk3EoDHSuBPYzygjquGM/0KF4vdwTiQO6lbdw==", + "license": "MIT", "dependencies": { "lazy-cache": "^2.0.1", "map-visit": "^0.1.5", @@ -5228,6 +5672,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", "integrity": "sha512-7vp2Acd2+Kz4XkzxGxaB1FWOi8KjWIWsgdfD5MCb86DWvlLqhRPM+d6Pro3iNEL5VT9mstz5hKAlcd+QR6H3aA==", + "license": "MIT", "dependencies": { "set-getter": "^0.1.0" }, @@ -5239,6 +5684,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/get-value/-/get-value-1.3.1.tgz", "integrity": "sha512-TrDxHI5wqgpM5Guhoz7xmblwy7kzhDauSs4df3NP907yFmLtCkOau8YtGo087jZXKDwP22NG6fCo0UA4EFLjOw==", + "license": "MIT", "dependencies": { "arr-flatten": "^1.0.1", "is-extendable": "^0.1.1", @@ -5253,6 +5699,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", "integrity": "sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==", + "license": "MIT", "dependencies": { "is-buffer": "^1.0.2" }, @@ -5264,6 +5711,7 @@ "version": "0.2.7", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5272,6 +5720,7 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-0.1.5.tgz", "integrity": "sha512-zdmJBFvvVR/H5wCfsCP7XxSLp+346yAZ30Wy2OsQLcH19OVGMWa3Ms9quO00lj9ybsySu3gKOINNgICb4Zqauw==", + "license": "MIT", "dependencies": { "lazy-cache": "^2.0.1", "object-visit": "^0.3.4" @@ -5284,6 +5733,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", "integrity": "sha512-7vp2Acd2+Kz4XkzxGxaB1FWOi8KjWIWsgdfD5MCb86DWvlLqhRPM+d6Pro3iNEL5VT9mstz5hKAlcd+QR6H3aA==", + "license": "MIT", "dependencies": { "set-getter": "^0.1.0" }, @@ -5295,6 +5745,7 @@ "version": "0.3.4", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-0.3.4.tgz", "integrity": "sha512-6QNyX7uTuwqxP7pmDBqgBDKdmZws1rXriUyXM5KG6+7J0aYRuuAGoc636IGdLzgOL77WUwL+EpoTJrEHwWsyOA==", + "license": "MIT", "dependencies": { "isobject": "^2.0.0" }, @@ -5307,6 +5758,7 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.2.0.tgz", "integrity": "sha512-dJaeu7V8d1KwjePimg1oOpGp31cEw/uRcZlfL7wwemkr+A00ev/ZhikvSMiQ4hkf83d8JdY2AFoFmXsKzmHMSw==", "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", "dependencies": { "isobject": "^1.0.0", "noncharacters": "^1.1.0" @@ -5319,6 +5771,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/isobject/-/isobject-1.0.2.tgz", "integrity": "sha512-WQQgFoML/sLgmhu9zTekYHZUJaPoa/fpVMQ8oxIuOvppzs70DxxyHZdAIjwcuuNDOVtNYsahhqtBbUvKwhRcGw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5327,6 +5780,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/error-symbol/-/error-symbol-0.1.0.tgz", "integrity": "sha512-VyjaKxUmeDX/m2lxm/aknsJ1GWDWUO2Ze2Ad8S1Pb9dykAm9TjSKp5CjrNyltYqZ5W/PO6TInAmO2/BfwMyT1g==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5335,6 +5789,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" } @@ -5343,6 +5798,7 @@ "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" } @@ -5351,12 +5807,14 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "dev": true + "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" }, @@ -5368,13 +5826,15 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/esbuild": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -5411,6 +5871,7 @@ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -5419,6 +5880,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -5426,12 +5888,14 @@ "node_modules/esm-env": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", - "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==" + "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", + "license": "MIT" }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -5444,6 +5908,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", "dependencies": { "@types/estree": "^1.0.0" } @@ -5452,6 +5917,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", "integrity": "sha512-MsG3prOVw1WtLXAZbM3KiYtooKR1LvxHh3VHsVtIy0uiUu8usxgB/94DP2HxtD/661lLdB6yzQ09lGJSQr6nkg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5460,6 +5926,7 @@ "version": "0.4.3", "resolved": "https://registry.npmjs.org/expand-args/-/expand-args-0.4.3.tgz", "integrity": "sha512-bAAnw/WnKZUkA9PI3tk4oWRpyZkRiHtFSJ+W8dkTX/oXGhM3rz9Vo5+qW9sJ34z1da8jPap35/igXmE7lEjdsQ==", + "license": "MIT", "dependencies": { "expand-object": "^0.4.2", "kind-of": "^3.0.3", @@ -5478,6 +5945,7 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.3.3.tgz", "integrity": "sha512-aJPTd11HzK47w8xJMpyY4tBmFC6EidC8EG2fENxCJvPwLYzXLnNaesgo796y1fhSISSYAuah4Het+wDoPXK2tg==", "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "isobject": "^2.0.0", @@ -5491,6 +5959,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.2.0.tgz", "integrity": "sha512-6oMu4CTicplxUMOXBoS1W9YNjIclUzmWpWf02v+JnYMEGVX24rTCsYMHay85WA7Wq+9wZa2iJ+HAAX0yGOcxCQ==", + "license": "MIT", "dependencies": { "arr-flatten": "^1.0.1", "is-arguments": "^1.0.2" @@ -5503,6 +5972,7 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha512-hxx03P2dJxss6ceIeri9cmYOT4SRs3Zk3afZwWpOsRqLqprhTR8u++SlC+sFGsQr7WGFPdMF7Gjc1njDLDK6UA==", + "license": "MIT", "dependencies": { "is-posix-bracket": "^0.1.0" }, @@ -5514,6 +5984,7 @@ "version": "0.4.2", "resolved": "https://registry.npmjs.org/expand-object/-/expand-object-0.4.2.tgz", "integrity": "sha512-rC0h+knI3YE2rT9v2m6HIowp1aLAVo19u02/wRzE+Dl5eyPowLRcWVyLQ3UaIjSLvjfsTiE0xGb0qqrap5ABKw==", + "license": "MIT", "dependencies": { "get-stdin": "^5.0.1", "is-number": "^2.1.0", @@ -5531,6 +6002,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==", + "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -5543,6 +6015,7 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.3.3.tgz", "integrity": "sha512-aJPTd11HzK47w8xJMpyY4tBmFC6EidC8EG2fENxCJvPwLYzXLnNaesgo796y1fhSISSYAuah4Het+wDoPXK2tg==", "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "isobject": "^2.0.0", @@ -5556,6 +6029,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.2.0.tgz", "integrity": "sha512-6oMu4CTicplxUMOXBoS1W9YNjIclUzmWpWf02v+JnYMEGVX24rTCsYMHay85WA7Wq+9wZa2iJ+HAAX0yGOcxCQ==", + "license": "MIT", "dependencies": { "arr-flatten": "^1.0.1", "is-arguments": "^1.0.2" @@ -5568,6 +6042,7 @@ "version": "0.1.9", "resolved": "https://registry.npmjs.org/expand-pkg/-/expand-pkg-0.1.9.tgz", "integrity": "sha512-Qqtqzx/e8tODrDr0H8HtO7+nftN0wH9bsk3948KpKBZLrc86Cm3/8mRKJmDfNSDWWcuKsilMmFlKPhYx5gHYuA==", + "license": "MIT", "dependencies": { "component-emitter": "^1.2.1", "debug": "^2.4.1", @@ -5592,6 +6067,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -5599,12 +6075,14 @@ "node_modules/expand-pkg/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/expand-range": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha512-AFASGfIlnIbkKPQwX1yHaDjFvh/1gyKJODme52V6IORh69uEYgZp0o9C+qsIGNVEiuuhQU0CSSl++Rlegg1qvA==", + "license": "MIT", "dependencies": { "fill-range": "^2.1.0" }, @@ -5616,6 +6094,7 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "license": "MIT", "dependencies": { "is-number": "^2.1.0", "isobject": "^2.0.0", @@ -5631,6 +6110,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==", + "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -5642,6 +6122,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", "integrity": "sha512-rtmc+cjLZqnu9dSYosX9EWmSJhTwpACgJQTfj4hgg2JjOD/6SIQalZrt4a3aQeh++oNxkazcaxrhPUj6+g5G/Q==", + "license": "MIT", "dependencies": { "os-homedir": "^1.0.1" }, @@ -5654,6 +6135,7 @@ "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.0.0" } @@ -5662,6 +6144,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/export-files/-/export-files-2.1.1.tgz", "integrity": "sha512-r2x1Zt0OKgdXRy0bXis3sOI8TNYmo5Fe71qXwsvpYaMvIlH5G0fWEf3AYiE2bONjePdSOojca7Jw+p9CQ6/6NQ==", + "license": "MIT", "dependencies": { "lazy-cache": "^1.0.3" }, @@ -5673,6 +6156,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5680,12 +6164,14 @@ "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" }, "node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -5697,6 +6183,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha512-1FOj1LOwn42TMrruOHGt18HemVnbwAmAak7krWk+wa93KXxGbK+2jpezm+ytJYDaBX0/SPLZFHKM7m+tKobWGg==", + "license": "MIT", "dependencies": { "is-extglob": "^1.0.0" }, @@ -5708,6 +6195,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5716,6 +6204,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/falsey/-/falsey-0.3.2.tgz", "integrity": "sha512-lxEuefF5MBIVDmE6XeqCdM4BWk1+vYmGZtkbKZ/VFcg6uBBw6fXNEbWmxCjDdQlFc9hy450nkiWwM3VAW6G1qg==", + "license": "MIT", "dependencies": { "kind-of": "^5.0.2" }, @@ -5727,6 +6216,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5746,6 +6236,7 @@ "url": "https://opencollective.com/fast-check" } ], + "license": "MIT", "optional": true, "dependencies": { "pure-rand": "^6.1.0" @@ -5759,6 +6250,7 @@ "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", @@ -5775,6 +6267,7 @@ "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" }, @@ -5787,6 +6280,7 @@ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -5794,12 +6288,14 @@ "node_modules/fflate": { "version": "0.6.10", "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.6.10.tgz", - "integrity": "sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==" + "integrity": "sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==", + "license": "MIT" }, "node_modules/figures": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", "integrity": "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==", + "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5", "object-assign": "^4.1.0" @@ -5812,6 +6308,7 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/file-contents/-/file-contents-0.2.4.tgz", "integrity": "sha512-PEz7U6YlXr+dvWCtW63DUY1LUTHOVs1rv4s1/I/39dpvvidQqMSTY6JklazQS60MMoI/ztpo5kMlpdvGagvLbA==", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.0", "file-stat": "^0.1.0", @@ -5829,6 +6326,7 @@ "version": "0.2.7", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5837,6 +6335,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-is-binary/-/file-is-binary-1.0.0.tgz", "integrity": "sha512-71I2LciuolZDBUCu4JzFBKxSvVurMD84G97uCYgt9PZ7ElhEomGqYHTKKU2NcDOxR1g2bwn+hRbkTFSrD80Pfw==", + "license": "MIT", "dependencies": { "is-binary-buffer": "^1.0.0", "isobject": "^3.0.0" @@ -5849,6 +6348,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5857,6 +6357,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/file-name/-/file-name-0.1.0.tgz", "integrity": "sha512-Q8SskhjF4eUk/xoQkmubwLkoHwOTv6Jj/WGtOVLKkZ0vvM+LipkSXugkn1F/+mjWXU32AXLZB3qaz0arUzgtRw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5865,6 +6366,7 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/file-stat/-/file-stat-0.1.3.tgz", "integrity": "sha512-f72m4132aOd5DVtREdDX8I0Dd7Zf/3PiUYYvn4BFCxfsLqj6r8joBZzrRlfvsNvxhADw+jpEa0AnWPII9H0Fbg==", + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "lazy-cache": "^0.2.3", @@ -5878,6 +6380,7 @@ "version": "0.2.7", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5886,6 +6389,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", "integrity": "sha512-BTCqyBaWBTsauvnHiE8i562+EdJj+oUpkqWp2R1iCoR8f6oo8STRu3of7WJJ0TqWtxN50a5YFpzYK4Jj9esYfQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5895,6 +6399,7 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -5906,6 +6411,7 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/find-file-up/-/find-file-up-0.1.3.tgz", "integrity": "sha512-mBxmNbVyjg1LQIIpgO8hN+ybWBgDQK8qjht+EbrTCGmmPV/sc7RF1i9stPTD6bpvXZywBdrwRYxhSdJv867L6A==", + "license": "MIT", "dependencies": { "fs-exists-sync": "^0.1.0", "resolve-dir": "^0.1.0" @@ -5918,6 +6424,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/find-pkg/-/find-pkg-0.1.2.tgz", "integrity": "sha512-0rnQWcFwZr7eO0513HahrWafsc3CTFioEB7DRiEYCUM/70QXSY8f3mCST17HXLcPvEhzH/Ty/Bxd72ZZsr/yvw==", + "license": "MIT", "dependencies": { "find-file-up": "^0.1.2" }, @@ -5929,6 +6436,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", "integrity": "sha512-ArRi5axuv66gEsyl3UuK80CzW7t56hem73YGNYxNWTGNKFJUadSb9Gu9SHijYEUi8ulQMf1bJomYNwSCPHhtTQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5938,6 +6446,7 @@ "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.8.0.tgz", "integrity": "sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA==", "dev": true, + "license": "MIT", "dependencies": { "tabbable": "^6.4.0" } @@ -5946,6 +6455,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5954,6 +6464,7 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==", + "license": "MIT", "dependencies": { "for-in": "^1.0.1" }, @@ -5966,6 +6477,7 @@ "resolved": "https://registry.npmjs.org/formsnap/-/formsnap-1.0.1.tgz", "integrity": "sha512-TvU9CoLSiacW1c7wXhLiyVpyy/LBfG0CEFDbs3M3jrsxBSrkTpsuhbQ8JYKY3CNCmIhZlgxCH+Vqr7RBF9G53w==", "dev": true, + "license": "MIT", "dependencies": { "nanoid": "^5.0.5" }, @@ -5979,6 +6491,7 @@ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" }, @@ -5991,6 +6504,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", "integrity": "sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5998,13 +6512,15 @@ "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==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "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, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -6017,6 +6533,7 @@ "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" } @@ -6025,6 +6542,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", @@ -6048,6 +6566,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" @@ -6060,6 +6579,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", "integrity": "sha512-jZV7n6jGE3Gt7fgSTJoz91Ak5MuTLwMwkoYdjxuJ/AmjIsE1UC03y/IWkZCQGEvVNS9qoRNwy5BCqxImv0FVeA==", + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -6068,6 +6588,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6076,6 +6597,7 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/get-view/-/get-view-0.1.3.tgz", "integrity": "sha512-PZOmJnoY9wEDzAWW/0L6vRVfmPx/iKNiAxXdEI83dD8EPaqnI3GQraUTTSVgIVt5R1ja25/C3ARQAyVSkxN2Cg==", + "license": "MIT", "dependencies": { "isobject": "^3.0.0", "match-file": "^0.2.1" @@ -6088,6 +6610,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6096,6 +6619,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/git-config-path/-/git-config-path-1.0.1.tgz", "integrity": "sha512-KcJ2dlrrP5DbBnYIZ2nlikALfRhKzNSX0stvv3ImJ+fvC4hXKoV+U+74SV0upg+jlQZbrtQzc0bu6/Zh+7aQbg==", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "fs-exists-sync": "^0.1.0", @@ -6109,6 +6633,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/git-repo-name/-/git-repo-name-0.6.0.tgz", "integrity": "sha512-DF4XxB6H+Te79JA08/QF/IjIv+j+0gF990WlgAX3SXXU2irfqvBc/xxlAIh6eJWYaKz45MrrGVBFS0Qc4bBz5g==", + "license": "MIT", "dependencies": { "cwd": "^0.9.1", "file-name": "^0.1.0", @@ -6123,6 +6648,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6132,6 +6658,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "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", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6151,6 +6678,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA==", + "license": "MIT", "dependencies": { "glob-parent": "^2.0.0", "is-glob": "^2.0.0" @@ -6163,6 +6691,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==", + "license": "ISC", "dependencies": { "is-glob": "^2.0.0" } @@ -6171,6 +6700,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6179,6 +6709,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "license": "MIT", "dependencies": { "is-extglob": "^1.0.0" }, @@ -6191,6 +6722,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -6202,6 +6734,7 @@ "version": "5.3.5", "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", "integrity": "sha512-piN8XVAO2sNxwVLokL4PswgJvK/uQ6+awwXUVRTGF+rRfgCZpn4hOqxiRuTEbU/k3qgKl0DACYQ/0Sge54UMQg==", + "license": "MIT", "dependencies": { "extend": "^3.0.0", "glob": "^5.0.3", @@ -6220,6 +6753,7 @@ "version": "1.8.5", "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==", + "license": "MIT", "dependencies": { "expand-range": "^1.8.1", "preserve": "^0.2.0", @@ -6234,6 +6768,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", "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", "dependencies": { "inflight": "^1.0.4", "inherits": "2", @@ -6249,6 +6784,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "license": "ISC", "dependencies": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" @@ -6258,6 +6794,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "license": "MIT", "dependencies": { "is-extglob": "^2.1.0" }, @@ -6268,12 +6805,14 @@ "node_modules/glob-stream/node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" }, "node_modules/glob-stream/node_modules/micromatch": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==", + "license": "MIT", "dependencies": { "arr-diff": "^2.0.0", "array-unique": "^0.2.1", @@ -6297,6 +6836,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6305,6 +6845,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "license": "MIT", "dependencies": { "is-extglob": "^1.0.0" }, @@ -6316,6 +6857,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "license": "MIT", "dependencies": { "remove-trailing-separator": "^1.0.1" }, @@ -6327,6 +6869,7 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -6337,12 +6880,14 @@ "node_modules/glob-stream/node_modules/string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "license": "MIT" }, "node_modules/glob-stream/node_modules/through2": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", + "license": "MIT", "dependencies": { "readable-stream": ">=1.0.33-1 <1.1.0-0", "xtend": ">=4.0.0 <4.1.0-0" @@ -6352,6 +6897,7 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", "integrity": "sha512-JeXuCbvYzYXcwE6acL9V2bAOeSIGl4dD+iwLY9iUx2VBJJ80R18HCn+JCwHM9Oegdfya3lEkGCdaRkSyc10hDA==", + "license": "MIT", "dependencies": { "global-prefix": "^0.1.4", "is-windows": "^0.2.0" @@ -6364,6 +6910,7 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", "integrity": "sha512-gOPiyxcD9dJGCEArAhF4Hd0BAqvAe/JzERP7tYumE4yIkmIedPUVXcJFWbV3/p/ovIIvKjkrTk+f1UVkq7vvbw==", + "license": "MIT", "dependencies": { "homedir-polyfill": "^1.0.0", "ini": "^1.3.4", @@ -6377,17 +6924,20 @@ "node_modules/globalyzer": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==" + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "license": "MIT" }, "node_modules/globrex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==" + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "license": "MIT" }, "node_modules/gopd": { "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" }, @@ -6398,12 +6948,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/gray-matter": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-3.1.1.tgz", "integrity": "sha512-nZ1qjLmayEv0/wt3sHig7I0s3/sJO0dkAaKYQ5YAOApUtYEOonXSFdWvL1khvnZMTvov4UufkqlFsilPnejEXA==", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "js-yaml": "^3.10.0", @@ -6418,6 +6970,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6426,6 +6979,7 @@ "version": "0.3.4", "resolved": "https://registry.npmjs.org/group-array/-/group-array-0.3.4.tgz", "integrity": "sha512-YAmNsgsi1uQ7Ai3T4FFkMoskqbLEUPRajAmrn8FclwZQQnV98NLrNWjQ3n2+i1pANxdO3n6wsNEkKq5XrYy0Ow==", + "license": "MIT", "dependencies": { "arr-flatten": "^1.0.1", "for-own": "^0.1.4", @@ -6442,6 +6996,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/split-string/-/split-string-1.0.1.tgz", "integrity": "sha512-ZuVODgxrpJnBD5LezfE484E2ArRF8HGgJqaiGBWvCbGS1iqynO45FQxBx7Ze4t45X9a994ejFD5kLhI6WtL1xA==", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1" }, @@ -6453,6 +7008,7 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/gulp-choose-files/-/gulp-choose-files-0.1.3.tgz", "integrity": "sha512-SuAg0I2iCMEDcE3BJ46cfIo1Gn5N16403eie6G/iqrttDuKJUK1q3wh/2HBP/ZAJAqNXABI0uEavL2QxSMka1A==", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "question-cache": "^0.5.1", @@ -6466,6 +7022,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -6473,12 +7030,14 @@ "node_modules/gulp-choose-files/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/gulp-choose-files/node_modules/question-cache": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/question-cache/-/question-cache-0.5.1.tgz", "integrity": "sha512-v9F1LnlSQIUEAGFtrfVX/76lH4u4zyV34t94o6EkguPTKKfbvV6SLH8h3pn7LXGZLmAgD1PbmVOuKMY8ZWnuPg==", + "license": "MIT", "dependencies": { "arr-flatten": "^1.0.1", "arr-union": "^3.1.0", @@ -6509,6 +7068,7 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.3.3.tgz", "integrity": "sha512-aJPTd11HzK47w8xJMpyY4tBmFC6EidC8EG2fENxCJvPwLYzXLnNaesgo796y1fhSISSYAuah4Het+wDoPXK2tg==", "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "isobject": "^2.0.0", @@ -6522,6 +7082,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.2.0.tgz", "integrity": "sha512-6oMu4CTicplxUMOXBoS1W9YNjIclUzmWpWf02v+JnYMEGVX24rTCsYMHay85WA7Wq+9wZa2iJ+HAAX0yGOcxCQ==", + "license": "MIT", "dependencies": { "arr-flatten": "^1.0.1", "is-arguments": "^1.0.2" @@ -6534,6 +7095,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz", "integrity": "sha512-RrhWfFWkNCz3djfSFZh7uSwu491QRhwNaHyAgB2sGl4kmmznb5ZUuuHpiWLVEsXOdpDakYK/x5+9o4lgg41UMw==", + "license": "MIT", "dependencies": { "define-property": "^0.2.5", "isobject": "^3.0.0", @@ -6547,6 +7109,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6555,6 +7118,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", "integrity": "sha512-NjRy6+Qb5K1xbwOvPviD3uA4KSq2zsalPL+4vxPQPuL+kKzHjXJL10/kLaESic3LmBto8VIBHr3gIN3F9AjnhA==", + "license": "ISC", "dependencies": { "convert-source-map": "^1.1.1", "graceful-fs": "^4.1.2", @@ -6567,6 +7131,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "license": "MIT", "dependencies": { "ansi-regex": "^2.0.0" }, @@ -6578,6 +7143,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-0.1.1.tgz", "integrity": "sha512-WMHzb7oCwDcMDngWy0b+viLjED8zvSi5d4/YdBetADHX/rLH+noJaRTytuyN6thTxxM7lK+FloogQHHdOOR+7g==", + "license": "MIT", "dependencies": { "is-glob": "^2.0.1" }, @@ -6589,6 +7155,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6597,6 +7164,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "license": "MIT", "dependencies": { "is-extglob": "^1.0.0" }, @@ -6608,6 +7176,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-own-deep/-/has-own-deep-0.1.4.tgz", "integrity": "sha512-a9Dn8Q46DZySlvZqjCX5rkwS9AYIv3VQM3IoOhTXJVJ/cEmVDMLTrJClIihLS0a09PzhrEBbueji44ZQjLh19g==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6616,6 +7185,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" }, @@ -6627,6 +7197,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" }, @@ -6641,6 +7212,7 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "license": "MIT", "dependencies": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -6654,14 +7226,16 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -6673,6 +7247,7 @@ "version": "0.7.2", "resolved": "https://registry.npmjs.org/helper-cache/-/helper-cache-0.7.2.tgz", "integrity": "sha512-ictXA4Nsj9HZcY5Sf4PyWKOXRkQLCDLJLvekaKKrQ+IGLMe4Z+u2oM1QqRGjtWeQRfQCA3NJyIzZpfmw6GvwOQ==", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "lazy-cache": "^0.2.3", @@ -6686,6 +7261,7 @@ "version": "0.2.7", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6694,6 +7270,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "license": "MIT", "dependencies": { "parse-passwd": "^1.0.0" }, @@ -6706,6 +7283,7 @@ "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -6717,13 +7295,15 @@ "integrity": "sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==", "engines": [ "node >= 0.4.0" - ] + ], + "license": "MIT" }, "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.", + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -6733,6 +7313,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/info-symbol/-/info-symbol-0.1.0.tgz", "integrity": "sha512-qkc9wjLDQ+dYYZnY5uJXGNNHyZ0UOMDUnhvy0SEZGVVYmQ5s4i8cPAin2MbU6OxJgi8dfj/AnwqPx0CJE6+Lsw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6740,17 +7321,20 @@ "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", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" }, "node_modules/inquirer2": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/inquirer2/-/inquirer2-0.1.1.tgz", "integrity": "sha512-U7R6xvJmmcAx8Bq3Ok7+9L5kyBiUbCokZJMSibn+lDQasL9RtW9kYmnO5fezF0EcqE+pt4Hp3gc5XBGCqLkRDg==", + "license": "MIT", "dependencies": { "ansi-escapes": "^1.1.1", "ansi-regex": "^2.0.0", @@ -6777,6 +7361,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==", + "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -6788,6 +7373,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6796,6 +7382,7 @@ "version": "0.2.6", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", "integrity": "sha512-7Kr05z5LkcOpoMvxHN1PC11WbPabdNFmMYYo0eZvWu3BfVS0T03yoqYDczoCBx17xqk2x1XAZrcKiFVL88jxlQ==", + "license": "MIT", "dependencies": { "is-relative": "^0.2.1", "is-windows": "^0.2.0" @@ -6805,20 +7392,22 @@ } }, "node_modules/is-accessor-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", - "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.2.tgz", + "integrity": "sha512-AIbwAcazqP3R65dGvqk1V+a+vE5Fg1yu/ZKMOiBWSUIXXiwQkYmXQcVa2O0nh0tSDKDFKxG2mY7dB1Sr4hEP1g==", + "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.3" }, "engines": { - "node": ">= 0.10" + "node": ">= 0.4" } }, "node_modules/is-answer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-answer/-/is-answer-0.1.1.tgz", "integrity": "sha512-ifVYWfVjXzeNx32XK7twC8xMzVYfOqFGETEuwww/Oo8OZQe/tv+huAjP+05qP8omK+IfLmPWN0omZ7YvIvejMw==", + "license": "MIT", "dependencies": { "has-values": "^0.1.4", "is-primitive": "^2.0.0", @@ -6832,6 +7421,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" @@ -6847,6 +7437,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-binary-buffer/-/is-binary-buffer-1.0.0.tgz", "integrity": "sha512-fP08vt1YuBWSWdDCWkHUDo/Gb+YpnsiK41w2kP3iAkWhMKV4uuAAwPQm9GkA4r+OCDzpa+APIOaHZW6d83e5Ug==", + "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -6859,6 +7450,7 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -6869,14 +7461,16 @@ "node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "license": "MIT" }, "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", + "license": "MIT", "dependencies": { - "hasown": "^2.0.2" + "hasown": "^2.0.3" }, "engines": { "node": ">= 0.4" @@ -6889,6 +7483,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", + "license": "MIT", "dependencies": { "hasown": "^2.0.0" }, @@ -6900,6 +7495,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" @@ -6912,9 +7508,10 @@ } }, "node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.8.tgz", + "integrity": "sha512-SceYGWXvdqlWa/OnQ5FQuV+NxvNmMRhMw/w9AHkH71hTzveND4BTYgvp16g+oITK47qbOl/3D0bl0iygehWAWQ==", + "license": "MIT", "dependencies": { "is-accessor-descriptor": "^1.0.1", "is-data-descriptor": "^1.0.1" @@ -6927,6 +7524,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", "integrity": "sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6935,6 +7533,7 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha512-0EygVC5qPvIyb+gSz7zdD5/AAoS6Qrx1e//6N4yv4oNm30kqvdmG66oZFWVlQHUWe5OjP08FuTw2IdT0EOTcYA==", + "license": "MIT", "dependencies": { "is-primitive": "^2.0.0" }, @@ -6946,6 +7545,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6954,6 +7554,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" } @@ -6962,6 +7563,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "license": "MIT", "dependencies": { "number-is-nan": "^1.0.0" }, @@ -6972,13 +7574,15 @@ "node_modules/is-generator": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-generator/-/is-generator-1.0.3.tgz", - "integrity": "sha512-G56jBpbJeg7ds83HW1LuShNs8J73Fv3CPz/bmROHOHlnKkN8sWb9ujiagjmxxMUywftgq48HlBZELKKqFLk0oA==" + "integrity": "sha512-G56jBpbJeg7ds83HW1LuShNs8J73Fv3CPz/bmROHOHlnKkN8sWb9ujiagjmxxMUywftgq48HlBZELKKqFLk0oA==", + "license": "MIT" }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -6991,6 +7595,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -6999,6 +7604,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -7010,6 +7616,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7018,6 +7625,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", "integrity": "sha512-Yu68oeXJ7LeWNmZ3Zov/xg/oDBnBK2RNxwYY1ilNJX+tKKZqgPK+qOn/Gs9jEu66KDY9Netf5XLKNGzas/vPfQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7026,6 +7634,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", "integrity": "sha512-N3w1tFaRfk3UrPfqeRyD+GYDASU3W5VinKhlORy8EWVf/sIdDL9GAcew85XmktCfH+ngG7SRXEVDoO18WMdB/Q==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7034,6 +7643,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", + "license": "MIT", "dependencies": { "@types/estree": "^1.0.6" } @@ -7042,6 +7652,7 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/is-registered/-/is-registered-0.1.5.tgz", "integrity": "sha512-dOOjAYNmKGtjoW229wn/SDmrO65oQcUvng9WUYF/AIZAQZG/l+puNUPt+/x7YCn4W9A33H6LItHgSETDmS0urg==", + "license": "MIT", "dependencies": { "define-property": "^0.2.5", "isobject": "^2.1.0" @@ -7054,6 +7665,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", "integrity": "sha512-9AMzjRmLqcue629b4ezEVSK6kJsYJlUIhMcygmYORUgwUNJiavHcC3HkaGx0XYpyVKQSOqFbMEZmW42cY87sYw==", + "license": "MIT", "dependencies": { "is-unc-path": "^0.1.1" }, @@ -7065,6 +7677,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7073,6 +7686,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", "integrity": "sha512-HhLc5VDMH4pu3oMtIuunz/DFQUIoR561kMME3U3Afhj8b7vH085vkIkemrz1kLXCEIuoMAmO3yVmafWdSbGW8w==", + "license": "MIT", "dependencies": { "unc-path-regex": "^0.1.0" }, @@ -7083,12 +7697,14 @@ "node_modules/is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "license": "MIT" }, "node_modules/is-valid-app": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.2.1.tgz", "integrity": "sha512-2/qNSVFKyi5WiaIgv153Vt2ZM7T7HSlUu/m3HMnoyp6pk5NYhOUz0aU7Gx2DGYRnZ/8q+pMOwd93pCE8uWhvBg==", + "license": "MIT", "dependencies": { "debug": "^2.2.0", "is-registered": "^0.1.5", @@ -7103,6 +7719,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -7111,6 +7728,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/is-valid-instance/-/is-valid-instance-0.2.0.tgz", "integrity": "sha512-dNT7bamkigo07gvbnoBRABSNX1ayAhkcw6/3fYhVDhiPXiqnCouD4JMmrozyOx37UUlC+Se1j/jCfLo1fNs0Ng==", + "license": "MIT", "dependencies": { "isobject": "^2.1.0", "pascalcase": "^0.1.1" @@ -7122,12 +7740,14 @@ "node_modules/is-valid-app/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/is-valid-glob": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", "integrity": "sha512-CvG8EtJZ8FyzVOGPzrDorzyN65W1Ld8BVnqshRCah6pFIsprGx3dKgFtjLn/Vw9kGqR4OlR84U7yhT9ZVTyWIQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7136,6 +7756,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-valid-instance/-/is-valid-instance-0.1.0.tgz", "integrity": "sha512-js5DRu650+u3zcGfCe23npdFtPuBeLx3iR8q2vfCO4m1KqNz5R35fDQlLPm++gAzg5H+OJXDOG5LGyn8pzl/1Q==", + "license": "MIT", "dependencies": { "isobject": "^2.1.0", "pascalcase": "^0.1.1" @@ -7148,6 +7769,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz", "integrity": "sha512-RydPhl4S6JwAyj0JJjshWJEFG6hNye3pZFBRZaTUfZFwGHxzppNaNOVgQuS/E/SlhrApuMXrpnK1EEIXfdo3Dg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7156,6 +7778,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", "integrity": "sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7163,17 +7786,20 @@ "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "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/isobject": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "license": "MIT", "dependencies": { "isarray": "1.0.0" }, @@ -7185,6 +7811,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/jdenticon/-/jdenticon-3.3.0.tgz", "integrity": "sha512-DhuBRNRIybGPeAjMjdHbkIfiwZCCmf8ggu7C49jhp6aJ7DYsZfudnvnTY5/1vgUhrGA7JaDAx1WevnpjCPvaGg==", + "license": "MIT", "dependencies": { "canvas-renderer": "~2.2.0" }, @@ -7200,15 +7827,17 @@ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", "dev": true, + "license": "MIT", "bin": { "jiti": "bin/jiti.js" } }, "node_modules/joi": { - "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "version": "17.13.4", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.4.tgz", + "integrity": "sha512-1RuuER6kmt8K8I3nIWvPZKi5RQCb568ZPyY4Pwjlua+yo+63ZTmIwxLZH0heBmiKN4uxjvCiarDrjaeH84xicQ==", "dev": true, + "license": "BSD-3-Clause", "optional": true, "dependencies": { "@hapi/hoek": "^9.3.0", @@ -7222,12 +7851,14 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", - "dev": true + "dev": true, + "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==", + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -7241,6 +7872,7 @@ "resolved": "https://registry.npmjs.org/json-schema-to-ts/-/json-schema-to-ts-3.1.1.tgz", "integrity": "sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "@babel/runtime": "^7.18.3", @@ -7253,12 +7885,14 @@ "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "license": "MIT" }, "node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -7270,6 +7904,7 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "license": "MIT", "engines": { "node": ">=6" } @@ -7278,6 +7913,7 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/layouts/-/layouts-0.11.0.tgz", "integrity": "sha512-Zt65tua9otUMsfoQMAKmUSMGBwgkchSCc33ko/xBBSGnc/Q4+G8gJgouynZy7/iSnzpt3+myRRDQ9HQ5cctSog==", + "license": "MIT", "dependencies": { "delimiter-regex": "^1.3.1", "falsey": "^0.3.0", @@ -7292,6 +7928,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/delimiter-regex/-/delimiter-regex-1.3.1.tgz", "integrity": "sha512-NyEdbzFCa0imbFMxQH6X5AB/DxngubpAAiQEqaam+YYcT0gGiM1gFo410HwpiPOruHl8HfFM913tFLjA8kkvHg==", + "license": "MIT", "dependencies": { "extend-shallow": "^1.1.2" }, @@ -7303,6 +7940,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", "integrity": "sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", + "license": "MIT", "dependencies": { "kind-of": "^1.1.0" }, @@ -7314,6 +7952,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", "integrity": "sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7322,6 +7961,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7330,6 +7970,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", "integrity": "sha512-7vp2Acd2+Kz4XkzxGxaB1FWOi8KjWIWsgdfD5MCb86DWvlLqhRPM+d6Pro3iNEL5VT9mstz5hKAlcd+QR6H3aA==", + "license": "MIT", "dependencies": { "set-getter": "^0.1.0" }, @@ -7341,6 +7982,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "license": "MIT", "dependencies": { "readable-stream": "^2.0.5" }, @@ -7349,10 +7991,11 @@ } }, "node_modules/libphonenumber-js": { - "version": "1.12.39", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.39.tgz", - "integrity": "sha512-MW79m7HuOqBk8mwytiXYTMELJiBbV3Zl9Y39dCCn1yC8K+WGNSq1QGvzywbylp5vGShEztMScCWHX/XFOS0rXg==", + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.13.7.tgz", + "integrity": "sha512-rvr3HIMdOgzhz1RFGjftji+wjoAFlzhqCNqJOU/MKTZQ8d9NZxAR/tI+0weDicyoucqVR0U1GCniqHJ0f8aM2A==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/lilconfig": { @@ -7360,6 +8003,7 @@ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" }, @@ -7371,12 +8015,14 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/load-helpers": { "version": "0.2.11", "resolved": "https://registry.npmjs.org/load-helpers/-/load-helpers-0.2.11.tgz", "integrity": "sha512-+iUnxQSddtpXoeRrza02jbJOUgCbJGG6GGeE4WTf6nV0Z0uR+/+/h2RMfDAl5SI4Cd/fu5xFPqo0ibP3v9y1ew==", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "is-valid-glob": "^0.3.0", @@ -7392,6 +8038,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/load-pkg/-/load-pkg-3.0.1.tgz", "integrity": "sha512-wW6PBOWKbPceeIamjHjoacmI0F7Q+JdHoYl1nYE3lGOQCmq+xAnfIp24dqhUSfsO6Y7YSlrmyi3JxvSiRnoivg==", + "license": "MIT", "dependencies": { "find-pkg": "^0.1.0" }, @@ -7403,6 +8050,7 @@ "version": "0.11.4", "resolved": "https://registry.npmjs.org/load-templates/-/load-templates-0.11.4.tgz", "integrity": "sha512-roLgv19smhcE2x9mBvuuUzj3u3jRL+lWr+7u6v0KSk2wtdX0v8KOEHYZGBUdMjY1YPIh9864YQdO0SqpxiA+6Q==", + "license": "MIT", "dependencies": { "define-property": "^0.2.5", "extend-shallow": "^2.0.1", @@ -7421,6 +8069,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==", + "license": "ISC", "dependencies": { "is-glob": "^2.0.0" } @@ -7429,6 +8078,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7437,6 +8087,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "license": "MIT", "dependencies": { "is-extglob": "^1.0.0" }, @@ -7447,17 +8098,20 @@ "node_modules/locate-character": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", - "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==" + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "license": "MIT" }, "node_modules/lodash._arrayfilter": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._arrayfilter/-/lodash._arrayfilter-3.0.0.tgz", - "integrity": "sha512-xi4jscMHMkWtF8vXNpmvAXTmes6gKMpXsWM8kKuJ5tfk/VhJujrAG2sVc/LBsUERkReV9blMG2GD4SjPHyqaTw==" + "integrity": "sha512-xi4jscMHMkWtF8vXNpmvAXTmes6gKMpXsWM8kKuJ5tfk/VhJujrAG2sVc/LBsUERkReV9blMG2GD4SjPHyqaTw==", + "license": "MIT" }, "node_modules/lodash._basecallback": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/lodash._basecallback/-/lodash._basecallback-3.3.1.tgz", "integrity": "sha512-LQffghuO63ufDY33KKO1ezGKbcFZK3ngYV7JpxaUomoM5acf0YeXU3Pm8csVE0girVs50TXzfNibl69Co3ggJA==", + "license": "MIT", "dependencies": { "lodash._baseisequal": "^3.0.0", "lodash._bindcallback": "^3.0.0", @@ -7469,6 +8123,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash._baseeach/-/lodash._baseeach-3.0.4.tgz", "integrity": "sha512-IqUZ9MQo2UT1XPGuBntInqTOlc+oV+bCo0kMp+yuKGsfvRSNgUW0YjWVZUrG/gs+8z/Eyuc0jkJjOBESt9BXxg==", + "license": "MIT", "dependencies": { "lodash.keys": "^3.0.0" } @@ -7477,6 +8132,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._basefilter/-/lodash._basefilter-3.0.0.tgz", "integrity": "sha512-EjWjqBE5KHmvrzgZ9tSvt7ggGmDF0pjPzaiUONQ97M4+YDYW8VMH3VnyKS/JHFoqDAYEIIx+3/Tg4C0zlC6qPA==", + "license": "MIT", "dependencies": { "lodash._baseeach": "^3.0.0" } @@ -7485,6 +8141,7 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/lodash._baseisequal/-/lodash._baseisequal-3.0.7.tgz", "integrity": "sha512-U+3GsNEZj9ebI03ncLC2pLmYVjgtYZEwdkAPO7UGgtGvAz36JVFPAQUufpSaVL93Cz5arc6JGRKZRhaOhyVJYA==", + "license": "MIT", "dependencies": { "lodash.isarray": "^3.0.0", "lodash.istypedarray": "^3.0.0", @@ -7495,6 +8152,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/lodash._baseismatch/-/lodash._baseismatch-3.1.3.tgz", "integrity": "sha512-lq0Z+O/HfAJ16frtiZnvi2sLQrFfcYxK2q5R+n10+cWbXQ/Mz6R52mLOX/8R3npLGIO7Rq7zNP7ENTCJB/GN+g==", + "license": "MIT", "dependencies": { "lodash._baseisequal": "^3.0.0" } @@ -7503,6 +8161,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash._basematches/-/lodash._basematches-3.2.0.tgz", "integrity": "sha512-E6aibw9mFnfTO8z4zu1Fc2Pgv102/c11RtunY0MBdnIRWy27CtwnTVBQjfXohtUoDH1BI+vxZ9+b2JJY13dt3A==", + "license": "MIT", "dependencies": { "lodash._baseismatch": "^3.0.0", "lodash.pairs": "^3.0.0" @@ -7511,12 +8170,14 @@ "node_modules/lodash._bindcallback": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "integrity": "sha512-2wlI0JRAGX8WEf4Gm1p/mv/SZ+jLijpj0jyaE/AXeuQphzCgD8ZQW4oSpoN8JAopujOFGU3KMuq7qfHBWlGpjQ==" + "integrity": "sha512-2wlI0JRAGX8WEf4Gm1p/mv/SZ+jLijpj0jyaE/AXeuQphzCgD8ZQW4oSpoN8JAopujOFGU3KMuq7qfHBWlGpjQ==", + "license": "MIT" }, "node_modules/lodash._createwrapper": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash._createwrapper/-/lodash._createwrapper-3.2.0.tgz", "integrity": "sha512-O8fi7P57KZQjtTJN3tbUAJsm6Coo35JVi4OiEU/WV0rrqaWemk+rRB/1ohiIiv1cIK3dIkVhMehaFOFyNZDYkQ==", + "license": "MIT", "dependencies": { "lodash._root": "^3.0.0" } @@ -7524,27 +8185,32 @@ "node_modules/lodash._getnative": { "version": "3.9.1", "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==" + "integrity": "sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==", + "license": "MIT" }, "node_modules/lodash._replaceholders": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._replaceholders/-/lodash._replaceholders-3.0.0.tgz", - "integrity": "sha512-FbnZp+6+UaT8VzGNXUK8nIH7rC/P+c2te5R/rpjgwLY27OsEMqCyF6yOxqHMj9Qv3yelSVVuYzCjtrJzcKbAhg==" + "integrity": "sha512-FbnZp+6+UaT8VzGNXUK8nIH7rC/P+c2te5R/rpjgwLY27OsEMqCyF6yOxqHMj9Qv3yelSVVuYzCjtrJzcKbAhg==", + "license": "MIT" }, "node_modules/lodash._root": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==" + "integrity": "sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==", + "license": "MIT" }, "node_modules/lodash.assign": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==" + "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==", + "license": "MIT" }, "node_modules/lodash.bind": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-3.1.0.tgz", "integrity": "sha512-GaXlyWuJbyuJ54vRypYLVq1NS4v7QIBVicEX4lmW8PE5XaltCuFzWLG4WuXKYQ7SKfzxkiEsadQyuVOxym7paQ==", + "license": "MIT", "dependencies": { "lodash._createwrapper": "^3.0.0", "lodash._replaceholders": "^3.0.0", @@ -7554,48 +8220,57 @@ "node_modules/lodash.filter": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==" + "integrity": "sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==", + "license": "MIT" }, "node_modules/lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==" + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "license": "MIT" }, "node_modules/lodash.foreach": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==" + "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==", + "license": "MIT" }, "node_modules/lodash.initial": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.initial/-/lodash.initial-4.1.1.tgz", - "integrity": "sha512-/eZXy8y0IGQTuCKScq32mU+O/Qc160EfYPrAD7y4oXPAgWdQvyxxhTOIpl+tDfP86yT7jrMtUA8noSqYUdKWQg==" + "integrity": "sha512-/eZXy8y0IGQTuCKScq32mU+O/Qc160EfYPrAD7y4oXPAgWdQvyxxhTOIpl+tDfP86yT7jrMtUA8noSqYUdKWQg==", + "license": "MIT" }, "node_modules/lodash.isarguments": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==" + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", + "license": "MIT" }, "node_modules/lodash.isarray": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==" + "integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==", + "license": "MIT" }, "node_modules/lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead." + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT" }, "node_modules/lodash.istypedarray": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz", - "integrity": "sha512-lGWJ6N8AA3KSv+ZZxlTdn4f6A7kMfpJboeyvbFdE7IU9YAgweODqmOgdUHOA+c6lVWeVLysdaxciFXi+foVsWw==" + "integrity": "sha512-lGWJ6N8AA3KSv+ZZxlTdn4f6A7kMfpJboeyvbFdE7IU9YAgweODqmOgdUHOA+c6lVWeVLysdaxciFXi+foVsWw==", + "license": "MIT" }, "node_modules/lodash.keys": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", "integrity": "sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==", + "license": "MIT", "dependencies": { "lodash._getnative": "^3.0.0", "lodash.isarguments": "^3.0.0", @@ -7605,17 +8280,20 @@ "node_modules/lodash.last": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash.last/-/lodash.last-3.0.0.tgz", - "integrity": "sha512-14mq7rSkCxG4XMy9lF2FbIOqqgF0aH0NfPuQ3LPR3vIh0kHnUvIYP70dqa1Hf47zyXfQ8FzAg0MYOQeSuE1R7A==" + "integrity": "sha512-14mq7rSkCxG4XMy9lF2FbIOqqgF0aH0NfPuQ3LPR3vIh0kHnUvIYP70dqa1Hf47zyXfQ8FzAg0MYOQeSuE1R7A==", + "license": "MIT" }, "node_modules/lodash.map": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==" + "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", + "license": "MIT" }, "node_modules/lodash.pairs": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash.pairs/-/lodash.pairs-3.0.1.tgz", "integrity": "sha512-lgXvpU43ZNQrZ/pK2cR97YzKeAno3e3HhcyvLKsofljeHKrQcZhT1vW7fg4X61c92tM+mjD/DypoLZYuAKNIkQ==", + "license": "MIT", "dependencies": { "lodash.keys": "^3.0.0" } @@ -7623,12 +8301,14 @@ "node_modules/lodash.restparam": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw==" + "integrity": "sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw==", + "license": "MIT" }, "node_modules/lodash.where": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.where/-/lodash.where-3.1.0.tgz", "integrity": "sha512-9iH6No94IEtewjRRAykRVVW4Sw0DULKFp9H7x92MvbYUjg5EHj/+o58/Jx/kxAu7UWJLItwBH4FemHaQIGFIeg==", + "license": "MIT", "dependencies": { "lodash._arrayfilter": "^3.0.0", "lodash._basecallback": "^3.0.0", @@ -7641,6 +8321,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/log-ok/-/log-ok-0.1.1.tgz", "integrity": "sha512-cc8VrkS6C+9TFuYAwuHpshrcrGRAv7d0tUJ0GdM72ZBlKXtlgjUZF84O+OhQUdiVHoF7U/nVxwpjOdwUJ8d3Vg==", + "license": "MIT", "dependencies": { "ansi-green": "^0.1.1", "success-symbol": "^0.1.0" @@ -7653,6 +8334,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/log-utils/-/log-utils-0.2.1.tgz", "integrity": "sha512-udyegKoMz9eGfpKAX//Khy7sVAZ8b1F7oLDnepZv/1/y8xTvsyPgqQrM94eG8V0vcc2BieYI2kVW4+aa6m+8Qw==", + "license": "MIT", "dependencies": { "ansi-colors": "^0.2.0", "error-symbol": "^0.1.0", @@ -7670,6 +8352,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", "integrity": "sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7678,18 +8361,22 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lower-case": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==" + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" }, "node_modules/lucide-svelte": { "version": "0.469.0", "resolved": "https://registry.npmjs.org/lucide-svelte/-/lucide-svelte-0.469.0.tgz", "integrity": "sha512-PMIJ8jrFqVUsXJz4d1yfAQplaGhNOahwwkzbunha8DhpiD73xqX24n8dE1dPpUk3vcrdWVsHc1y/liHHotOnGQ==", + "deprecated": "Package deprecated. Please use @lucide/svelte instead.", "dev": true, + "license": "ISC", "peerDependencies": { "svelte": "^3 || ^4 || ^5.0.0-next.42" } @@ -7698,6 +8385,7 @@ "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } @@ -7706,6 +8394,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "license": "MIT", "dependencies": { "kind-of": "^6.0.2" }, @@ -7717,6 +8406,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7725,6 +8415,7 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/map-config/-/map-config-0.5.0.tgz", "integrity": "sha512-7pgduXtyOXZ/py4n6IM8G+7wanqbRDPK5Myp7P3jUUAFQwzGDeuMm0N8Dxrwaf3bySqJpne4NdglRUxdw7I7QQ==", + "license": "MIT", "dependencies": { "array-unique": "^0.2.1", "async": "^1.5.2" @@ -7737,6 +8428,7 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/map-schema/-/map-schema-0.2.4.tgz", "integrity": "sha512-1sgduImleUF+8NiS1wlqDJ8uhmJtFbLRjVW3PZP5IZJd1n+11eV91AnHI4jOYT2UCirriivNUgh6DG73V+G9QQ==", + "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "collection-visit": "^0.2.3", @@ -7767,6 +8459,7 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-0.2.3.tgz", "integrity": "sha512-V88PJOCqJfsZS45YBELDgmhQkECokQAAr9XR4hT6eFkFsAPsCsk3EoDHSuBPYzygjquGM/0KF4vdwTiQO6lbdw==", + "license": "MIT", "dependencies": { "lazy-cache": "^2.0.1", "map-visit": "^0.1.5", @@ -7780,6 +8473,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -7788,6 +8482,7 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-0.1.5.tgz", "integrity": "sha512-zdmJBFvvVR/H5wCfsCP7XxSLp+346yAZ30Wy2OsQLcH19OVGMWa3Ms9quO00lj9ybsySu3gKOINNgICb4Zqauw==", + "license": "MIT", "dependencies": { "lazy-cache": "^2.0.1", "object-visit": "^0.3.4" @@ -7799,12 +8494,14 @@ "node_modules/map-schema/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/map-schema/node_modules/object-visit": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-0.3.4.tgz", "integrity": "sha512-6QNyX7uTuwqxP7pmDBqgBDKdmZws1rXriUyXM5KG6+7J0aYRuuAGoc636IGdLzgOL77WUwL+EpoTJrEHwWsyOA==", + "license": "MIT", "dependencies": { "isobject": "^2.0.0" }, @@ -7817,6 +8514,7 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", "integrity": "sha512-2Z0LRUUvYeF7gIFFep48ksPq0NR09e5oKoFXznaMGNcu+EZAfGnyL0K6xno2gCqX6dZYEZRjrcn04/gvZzcKhQ==", "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -7831,6 +8529,7 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/union-value/-/union-value-0.2.4.tgz", "integrity": "sha512-Tv3cqdyY8yjW9ZcJ9WP7JdHS34natzylD0oNRLlYbWOfUdC4EQ0sf3fubnqrK2IErtlmobFmuS1pWvv88VghpA==", + "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -7845,6 +8544,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "license": "MIT", "dependencies": { "object-visit": "^1.0.0" }, @@ -7856,6 +8556,7 @@ "version": "16.4.2", "resolved": "https://registry.npmjs.org/marked/-/marked-16.4.2.tgz", "integrity": "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==", + "license": "MIT", "bin": { "marked": "bin/marked.js" }, @@ -7867,6 +8568,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/match-file/-/match-file-0.2.2.tgz", "integrity": "sha512-BDEZIcrBSnooL0zC72Yt3z1HhJiCq+2pMnHKVDeYN/cilCrz3KrpqKPm4ZOfWCoDolRl4QyKQpfRlQWF6PqnjQ==", + "license": "MIT", "dependencies": { "is-glob": "^3.1.0", "isobject": "^3.0.0", @@ -7880,6 +8582,7 @@ "version": "1.8.5", "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==", + "license": "MIT", "dependencies": { "expand-range": "^1.8.1", "preserve": "^0.2.0", @@ -7893,6 +8596,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "license": "MIT", "dependencies": { "is-extglob": "^2.1.0" }, @@ -7904,6 +8608,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7912,6 +8617,7 @@ "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==", + "license": "MIT", "dependencies": { "arr-diff": "^2.0.0", "array-unique": "^0.2.1", @@ -7935,6 +8641,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7943,6 +8650,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "license": "MIT", "dependencies": { "is-extglob": "^1.0.0" }, @@ -7954,6 +8662,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "license": "MIT", "dependencies": { "remove-trailing-separator": "^1.0.1" }, @@ -7965,6 +8674,7 @@ "version": "0.4.4", "resolved": "https://registry.npmjs.org/matched/-/matched-0.4.4.tgz", "integrity": "sha512-zpasnbB5vQkvb0nfcKV0zEoGgMtV7atlWR1Vk3E8tEKh6EicMseKtVV+5vc+zsZwvDlcNMKlKK/CVOEeAalYRQ==", + "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "async-array-reduce": "^0.2.0", @@ -7984,6 +8694,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" } @@ -7991,23 +8702,27 @@ "node_modules/math-random": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", - "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==" + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", + "license": "MIT" }, "node_modules/mdn-data": { "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "license": "CC0-1.0" }, "node_modules/memoize-weak": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/memoize-weak/-/memoize-weak-1.0.2.tgz", "integrity": "sha512-gj39xkrjEw7nCn4nJ1M5ms6+MyMlyiGmttzsqAUsAKn6bYKwuTHh/AO3cKPF8IBrTIYTxb0wWXFs3E//Y8VoWQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/merge-deep": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.3.tgz", "integrity": "sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==", + "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "clone-deep": "^0.2.4", @@ -8021,6 +8736,7 @@ "version": "0.1.8", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-0.1.8.tgz", "integrity": "sha512-ivGsLZth/AkvevAzPlRLSie8Q3GdyH/5xUYgn+ItAJYslT0NsKd2cxx0bAjmqoY5swX0NoWJjvkDkfpaVZx9lw==", + "license": "MIT", "dependencies": { "through2": "^0.6.1" } @@ -8028,12 +8744,14 @@ "node_modules/merge-stream/node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" }, "node_modules/merge-stream/node_modules/readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -8044,12 +8762,14 @@ "node_modules/merge-stream/node_modules/string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "license": "MIT" }, "node_modules/merge-stream/node_modules/through2": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", + "license": "MIT", "dependencies": { "readable-stream": ">=1.0.33-1 <1.1.0-0", "xtend": ">=4.0.0 <4.1.0-0" @@ -8059,6 +8779,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/merge-value/-/merge-value-1.0.0.tgz", "integrity": "sha512-fJMmvat4NeKz63Uv9iHWcPDjCWcCkoiRoajRTEO8hlhUC6rwaHg0QCF9hBOTjZmm4JuglPckPSTtcuJL5kp0TQ==", + "license": "MIT", "dependencies": { "get-value": "^2.0.6", "is-extendable": "^1.0.0", @@ -8073,6 +8794,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4" }, @@ -8085,6 +8807,7 @@ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -8092,13 +8815,15 @@ "node_modules/meshoptimizer": { "version": "0.18.1", "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-0.18.1.tgz", - "integrity": "sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==" + "integrity": "sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==", + "license": "MIT" }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -8112,6 +8837,7 @@ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -8120,6 +8846,7 @@ "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" }, @@ -8131,6 +8858,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" } @@ -8139,6 +8867,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "license": "MIT", "dependencies": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -8151,6 +8880,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4" }, @@ -8162,6 +8892,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", "integrity": "sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==", + "license": "MIT", "dependencies": { "for-in": "^0.1.3", "is-extendable": "^0.1.1" @@ -8174,6 +8905,7 @@ "version": "0.1.8", "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", "integrity": "sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8182,6 +8914,7 @@ "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", "dependencies": { "minimist": "^1.2.6" }, @@ -8193,6 +8926,7 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mode-watcher/-/mode-watcher-0.5.1.tgz", "integrity": "sha512-adEC6T7TMX/kzQlaO/MtiQOSFekZfQu4MC+lXyoceQG+U5sKpJWZ4yKXqw846ExIuWJgedkOIPqAYYRk/xHm+w==", + "license": "MIT", "peerDependencies": { "svelte": "^4.0.0 || ^5.0.0-next.1" } @@ -8201,6 +8935,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "license": "MIT", "engines": { "node": ">=4" } @@ -8209,6 +8944,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "license": "MIT", "engines": { "node": ">=10" } @@ -8216,18 +8952,21 @@ "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/mute-stream": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "integrity": "sha512-EbrziT4s8cWPmzr47eYVW3wimS4HsvlnV5ri1xw1aR6JQo/OrJX5rkl32K/QQHdxeabJETtfeaROGhd8W7uBgg==" + "integrity": "sha512-EbrziT4s8cWPmzr47eYVW3wimS4HsvlnV5ri1xw1aR6JQo/OrJX5rkl32K/QQHdxeabJETtfeaROGhd8W7uBgg==", + "license": "ISC" }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "dev": true, + "license": "MIT", "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", @@ -8235,9 +8974,9 @@ } }, "node_modules/nanoid": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.6.tgz", - "integrity": "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==", + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.15.tgz", + "integrity": "sha512-kBg3RpGtIe+RpTbyXwoI6pk5yD7KUiI3sygUqgeBMRst42KmhB4RZC7eiO9Wa1HIpaCCtpE2DJ6OI4Wi5ebwFw==", "dev": true, "funding": [ { @@ -8245,6 +8984,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.js" }, @@ -8256,6 +8996,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/nanoseconds/-/nanoseconds-0.1.0.tgz", "integrity": "sha512-6yOHqTvJNI9xGmVHWQ4ZTYhGpT0O4h9N+uk/UuRVPI8TskViB4s4QL3y+jY/Yxsdz7gvoBGPCHWRUibOyyYMwA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8263,26 +9004,33 @@ "node_modules/next-tick": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-0.2.2.tgz", - "integrity": "sha512-f7h4svPtl+QidoBv4taKXUjJ70G2asaZ8G28nS0OkqaalX8dwwrtWtyxEDPK62AC00ur/+/E0pUwBwY5EPn15Q==" + "integrity": "sha512-f7h4svPtl+QidoBv4taKXUjJ70G2asaZ8G28nS0OkqaalX8dwwrtWtyxEDPK62AC00ur/+/E0pUwBwY5EPn15Q==", + "license": "MIT" }, "node_modules/no-case": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", "dependencies": { "lower-case": "^1.1.1" } }, "node_modules/node-releases": { - "version": "2.0.36", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", - "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", - "dev": true + "version": "2.0.48", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.48.tgz", + "integrity": "sha512-1uz8041X6LoI6ZSdZacM9lVY28vuzDlSKitnpbSNK0RfKoIJkX29NBPVEFXhnuSuEOA9Ww0xnPJ+ILWbGAv8DA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/noncharacters": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/noncharacters/-/noncharacters-1.1.0.tgz", "integrity": "sha512-U69XzMNq7UQXR27xT17tkQsHPsLc+5W9yfXvYzVCwFxghVf+7VttxFnCKFMxM/cHD+/QIyU009263hxIIurj4g==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8292,6 +9040,7 @@ "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" } @@ -8300,6 +9049,7 @@ "version": "0.3.20", "resolved": "https://registry.npmjs.org/normalize-pkg/-/normalize-pkg-0.3.20.tgz", "integrity": "sha512-kM3ee93xDLnhu7R1j2BpJ+0zenlOB5ZE6H+vt2iCNXdGgcxedzweZn6UeW5p2iJEdkNYaXDoJm8uoSLiXF4eBw==", + "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "array-unique": "^0.3.2", @@ -8331,6 +9081,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8339,6 +9090,7 @@ "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", "bin": { "semver": "bin/semver" } @@ -8348,6 +9100,7 @@ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.1.tgz", "integrity": "sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=14.16" @@ -8360,6 +9113,7 @@ "version": "0.0.6", "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-0.0.6.tgz", "integrity": "sha512-qNIeNeH6v6KbriliCoOEmKhelv+66P2yCKEQta3MYcwN98S3NrVMgYEh9hWxJRPqPna3d7r0KElZQKQkAm0/jA==", + "license": "MIT", "dependencies": { "once": "^1.3.0" }, @@ -8371,6 +9125,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8379,6 +9134,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" } @@ -8387,6 +9143,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "license": "MIT", "dependencies": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -8401,6 +9158,7 @@ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -8409,6 +9167,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "license": "MIT", "dependencies": { "isobject": "^3.0.0" }, @@ -8420,6 +9179,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8428,6 +9188,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha512-UiAM5mhmIuKLsOvrL+B0U2d1hXHF3bFYWIuH1LMpuV2EJEHG1Ntz06PgLEHjm6VFd87NpH8rastvPoyv6UW2fA==", + "license": "MIT", "dependencies": { "for-own": "^0.1.4", "is-extendable": "^0.1.1" @@ -8440,6 +9201,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -8451,6 +9213,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8459,6 +9222,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/omit-empty/-/omit-empty-0.4.1.tgz", "integrity": "sha512-NwnVOAaLwUEYmvvwLKKqvG6BkSG0pu0yKhKc6uYbWerkIXe6Wi2HQ1qoL+Wksj3DCauRuNKIjZUsLyjLj1/lrw==", + "license": "MIT", "dependencies": { "has-values": "^0.1.4", "kind-of": "^3.0.3", @@ -8472,6 +9236,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" } @@ -8480,6 +9245,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", "integrity": "sha512-GZ+g4jayMqzCRMgB2sol7GiCLjKfS1PINkjmx8spcKce1LiVqcbQreXwqs2YAFXC6R03VIG28ZS31t8M866v6A==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8488,6 +9254,7 @@ "version": "3.5.0", "resolved": "https://registry.npmjs.org/option-cache/-/option-cache-3.5.0.tgz", "integrity": "sha512-Hr14410H8ajAHeUirXZtuE9drwy8e85l0CssHB/k7Y6nRkleKsGAzB/gwltUzsnIqr9Y+7ZQ+H16GYWAJH3PVg==", + "license": "MIT", "dependencies": { "arr-flatten": "^1.0.3", "collection-visit": "^1.0.0", @@ -8508,6 +9275,7 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", "integrity": "sha512-2Z0LRUUvYeF7gIFFep48ksPq0NR09e5oKoFXznaMGNcu+EZAfGnyL0K6xno2gCqX6dZYEZRjrcn04/gvZzcKhQ==", "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -8522,6 +9290,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", "integrity": "sha512-xQvd8qvx9U1iYY9aVqPpoF5V9uaWJKV6ZGljkh/jkiNX0DiQsjbWvRumbh10QTMDE8DheaOEU8xi0szbrgjzcw==", + "license": "MIT", "dependencies": { "is-stream": "^1.0.1", "readable-stream": "^2.0.1" @@ -8531,6 +9300,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8539,6 +9309,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/pad-right/-/pad-right-0.2.2.tgz", "integrity": "sha512-4cy8M95ioIGolCoMmm2cMntGR1lPLEbOMzOKu8bzjuJP6JpzEMQcDHmh7hHLYGgob+nKe1YHFMaG4V59HQa89g==", + "license": "MIT", "dependencies": { "repeat-string": "^1.5.2" }, @@ -8550,6 +9321,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/paginationator/-/paginationator-0.1.4.tgz", "integrity": "sha512-o46P8Z9DK0blcmY7F95SnsBWZ6bow3HAcLKXlgIc/SZE8og21qrxL14nAi6Wy8E0Iw06wA0yS5icSayXw8BU8A==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8559,6 +9331,7 @@ "resolved": "https://registry.npmjs.org/paneforge/-/paneforge-0.0.6.tgz", "integrity": "sha512-jYeN/wdREihja5c6nK3S5jritDQ+EbCqC5NrDo97qCZzZ9GkmEcN5C0ZCjF4nmhBwkDKr6tLIgz4QUKWxLXjAw==", "dev": true, + "license": "MIT", "dependencies": { "nanoid": "^5.0.4" }, @@ -8570,6 +9343,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-author/-/parse-author-1.0.0.tgz", "integrity": "sha512-OrNKo0jTFjJNCT0UKOPtnUctvGJvKdfB5ild+r3xwg/TgU5k2CCZW4fU9uJdKJ3njVFw5InP/2gd+n2vEXKgLQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8578,6 +9352,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/parse-git-config/-/parse-git-config-1.1.1.tgz", "integrity": "sha512-S3LGXJZVSy/hswvbSkfdbKBRVsnqKrVu6j8fcvdtJ4TxosSELyQDsJPuGPXuZ+EyuYuJd3O4uAF8gcISR0OFrQ==", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "fs-exists-sync": "^0.1.0", @@ -8592,6 +9367,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-0.3.2.tgz", "integrity": "sha512-vawkgsrRR8wm/nqFTVQIl9G/VkRJK2VVo0ECPni20WRV+NOmHXGilnWwC/EjVqRqQ4oSIKwRKP1jW8CjlxlJ2Q==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8600,6 +9376,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==", + "license": "MIT", "dependencies": { "glob-base": "^0.3.0", "is-dotfile": "^1.0.0", @@ -8614,6 +9391,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8622,6 +9400,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "license": "MIT", "dependencies": { "is-extglob": "^1.0.0" }, @@ -8633,6 +9412,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8641,6 +9421,7 @@ "version": "1.6.4", "resolved": "https://registry.npmjs.org/parser-front-matter/-/parser-front-matter-1.6.4.tgz", "integrity": "sha512-eqtUnI5+COkf1CQOYo8FmykN5Zs+5Yr60f/7GcPgQDZEEjdE/VZ4WMaMo9g37foof8h64t/TH2Uvk2Sq0fDy/g==", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "file-is-binary": "^1.0.0", @@ -8658,6 +9439,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8666,6 +9448,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8673,12 +9456,14 @@ "node_modules/path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==" + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "license": "MIT" }, "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==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8686,12 +9471,14 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" }, "node_modules/path-to-regexp": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", + "license": "MIT", "dependencies": { "isarray": "0.0.1" } @@ -8699,19 +9486,22 @@ "node_modules/path-to-regexp/node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" }, "node_modules/pathe": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pathval": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 14.16" } @@ -8720,6 +9510,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", + "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^3.0.0", @@ -8729,13 +9520,15 @@ "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "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": "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", "engines": { "node": ">=8.6" }, @@ -8748,6 +9541,7 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8757,6 +9551,7 @@ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -8765,6 +9560,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/pkg-store/-/pkg-store-0.2.2.tgz", "integrity": "sha512-1JZVLbIRN6Dgsfk918EMZyL/T4NvJduSaT7n6ssHO3FV1FCrg6zjHJmuj3+Fb/Y5nBe3IBDoMYsY6Jf2IoRH0A==", + "license": "MIT", "dependencies": { "cache-base": "^0.8.2", "kind-of": "^3.0.2", @@ -8780,6 +9576,7 @@ "version": "0.8.5", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-0.8.5.tgz", "integrity": "sha512-19t0n7xdoVr5Q08+6sF85YZ9VuvbpVFq5JLm0gcsRmCvTO1Y3duTJGMaOQYf14Ras4o6dEnvoqvjdrUK1tNtgg==", + "license": "MIT", "dependencies": { "collection-visit": "^0.2.1", "component-emitter": "^1.2.1", @@ -8800,6 +9597,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", "integrity": "sha512-7vp2Acd2+Kz4XkzxGxaB1FWOi8KjWIWsgdfD5MCb86DWvlLqhRPM+d6Pro3iNEL5VT9mstz5hKAlcd+QR6H3aA==", + "license": "MIT", "dependencies": { "set-getter": "^0.1.0" }, @@ -8811,6 +9609,7 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-0.2.3.tgz", "integrity": "sha512-V88PJOCqJfsZS45YBELDgmhQkECokQAAr9XR4hT6eFkFsAPsCsk3EoDHSuBPYzygjquGM/0KF4vdwTiQO6lbdw==", + "license": "MIT", "dependencies": { "lazy-cache": "^2.0.1", "map-visit": "^0.1.5", @@ -8824,6 +9623,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", "integrity": "sha512-7vp2Acd2+Kz4XkzxGxaB1FWOi8KjWIWsgdfD5MCb86DWvlLqhRPM+d6Pro3iNEL5VT9mstz5hKAlcd+QR6H3aA==", + "license": "MIT", "dependencies": { "set-getter": "^0.1.0" }, @@ -8835,6 +9635,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8843,6 +9644,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8851,6 +9653,7 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-0.1.5.tgz", "integrity": "sha512-zdmJBFvvVR/H5wCfsCP7XxSLp+346yAZ30Wy2OsQLcH19OVGMWa3Ms9quO00lj9ybsySu3gKOINNgICb4Zqauw==", + "license": "MIT", "dependencies": { "lazy-cache": "^2.0.1", "object-visit": "^0.3.4" @@ -8863,6 +9666,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", "integrity": "sha512-7vp2Acd2+Kz4XkzxGxaB1FWOi8KjWIWsgdfD5MCb86DWvlLqhRPM+d6Pro3iNEL5VT9mstz5hKAlcd+QR6H3aA==", + "license": "MIT", "dependencies": { "set-getter": "^0.1.0" }, @@ -8874,6 +9678,7 @@ "version": "0.3.4", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-0.3.4.tgz", "integrity": "sha512-6QNyX7uTuwqxP7pmDBqgBDKdmZws1rXriUyXM5KG6+7J0aYRuuAGoc636IGdLzgOL77WUwL+EpoTJrEHwWsyOA==", + "license": "MIT", "dependencies": { "isobject": "^2.0.0" }, @@ -8885,6 +9690,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "license": "MIT", "dependencies": { "isarray": "1.0.0" }, @@ -8897,6 +9703,7 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", "integrity": "sha512-2Z0LRUUvYeF7gIFFep48ksPq0NR09e5oKoFXznaMGNcu+EZAfGnyL0K6xno2gCqX6dZYEZRjrcn04/gvZzcKhQ==", "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -8911,6 +9718,7 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/union-value/-/union-value-0.2.4.tgz", "integrity": "sha512-Tv3cqdyY8yjW9ZcJ9WP7JdHS34natzylD0oNRLlYbWOfUdC4EQ0sf3fubnqrK2IErtlmobFmuS1pWvv88VghpA==", + "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -8925,6 +9733,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-0.1.2.tgz", "integrity": "sha512-yhv5I4TsldLdE3UcVQn0hD2T5sNCPv4+qm/CTUpRKIpwthYRIipsAPdsrNpOI79hPQa0rTTeW22Fq6JWRcTgNg==", + "license": "MIT", "dependencies": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -8934,9 +9743,9 @@ } }, "node_modules/postcss": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", - "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", "funding": [ { "type": "opencollective", @@ -8951,8 +9760,9 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.11", + "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -8965,6 +9775,7 @@ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", @@ -8992,6 +9803,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "camelcase-css": "^2.0.1" }, @@ -9003,9 +9815,9 @@ } }, "node_modules/postcss-load-config": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-5.1.0.tgz", - "integrity": "sha512-G5AJ+IX0aD0dygOE0yFZQ/huFFMSNneyfp0e3/bT05a8OfPC5FUoZRPfGijUdGOJNMewJiwzcHJXFafFzeKFVA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", "dev": true, "funding": [ { @@ -9019,8 +9831,7 @@ ], "license": "MIT", "dependencies": { - "lilconfig": "^3.1.1", - "yaml": "^2.4.2" + "lilconfig": "^3.1.1" }, "engines": { "node": ">= 18" @@ -9028,7 +9839,8 @@ "peerDependencies": { "jiti": ">=1.21.0", "postcss": ">=8.0.9", - "tsx": "^4.8.1" + "tsx": "^4.8.1", + "yaml": "^2.4.2" }, "peerDependenciesMeta": { "jiti": { @@ -9039,6 +9851,9 @@ }, "tsx": { "optional": true + }, + "yaml": { + "optional": true } } }, @@ -9057,6 +9872,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.1.1" }, @@ -9068,10 +9884,11 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.4.tgz", + "integrity": "sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==", "dev": true, + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -9084,18 +9901,20 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/postcss/node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "version": "3.3.15", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz", + "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -9107,6 +9926,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", "integrity": "sha512-s/46sYeylUfHNjI+sA/78FAHlmIuKqI9wNnzEOGehAlUUYeObv5C2mOinXBjyUyWmJ2SfcS2/ydApH4hTF4WXQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9115,6 +9935,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-0.2.0.tgz", "integrity": "sha512-BwYVCPtnSq3nIGDK2rgwZTN2ClhBQmnG8pudrXIfGBwuMutIBj/W7wm/jz1WCHl/Kk2Q5i1Am1uD2Q74oPyBCw==", + "license": "MIT", "dependencies": { "is-number": "^2.0.2", "nanoseconds": "^0.1.0" @@ -9127,6 +9948,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==", + "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -9137,12 +9959,14 @@ "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" }, "node_modules/project-name": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/project-name/-/project-name-0.2.6.tgz", "integrity": "sha512-ZOxqunIi7fnAX+E0tE+FLHv2pSEa7IgEbnVG2s4wPxWL+p2cUk9KRDZV4lNkpfyrVR6rfOUBxIbctbJDo/qOTA==", + "license": "MIT", "dependencies": { "find-pkg": "^0.1.2", "git-repo-name": "^0.6.0", @@ -9160,6 +9984,7 @@ "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz", "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/pure-rand": { @@ -9177,12 +10002,14 @@ "url": "https://opencollective.com/fast-check" } ], + "license": "MIT", "optional": true }, "node_modules/question-cache": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/question-cache/-/question-cache-0.4.0.tgz", "integrity": "sha512-QgX1mI/ZNBbG8M5gYfZQG/qxZRggP2Fk+WOqE/FKylmNwi5aWy6o1JSaojYrHT5JUtRdyG+wwVJSlTfW7UBmog==", + "license": "MIT", "dependencies": { "arr-flatten": "^1.0.1", "arr-union": "^3.1.0", @@ -9212,6 +10039,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -9220,6 +10048,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9227,12 +10056,14 @@ "node_modules/question-cache/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/question-cache/node_modules/omit-empty": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/omit-empty/-/omit-empty-0.3.6.tgz", "integrity": "sha512-P5zl3TYREgcRAjjyj9kYHNhVtOOXMlCyYh/KNm53oUZNKpGOBbS0WLdRcThDPWbuFleXlbCd1KTBRZD86nj3RA==", + "license": "MIT", "dependencies": { "has-values": "^0.1.4", "is-date-object": "^1.0.1", @@ -9248,6 +10079,7 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.3.3.tgz", "integrity": "sha512-aJPTd11HzK47w8xJMpyY4tBmFC6EidC8EG2fENxCJvPwLYzXLnNaesgo796y1fhSISSYAuah4Het+wDoPXK2tg==", "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "isobject": "^2.0.0", @@ -9261,6 +10093,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.2.0.tgz", "integrity": "sha512-6oMu4CTicplxUMOXBoS1W9YNjIclUzmWpWf02v+JnYMEGVX24rTCsYMHay85WA7Wq+9wZa2iJ+HAAX0yGOcxCQ==", + "license": "MIT", "dependencies": { "arr-flatten": "^1.0.1", "is-arguments": "^1.0.2" @@ -9273,6 +10106,7 @@ "version": "0.11.1", "resolved": "https://registry.npmjs.org/question-store/-/question-store-0.11.1.tgz", "integrity": "sha512-rvyFpqLYQCO7FOnX+3qZ7b8K7omWkn9MWyj/7dknf7BaGZHo//fzBS2/0atmcvZfjT2mu1q64oiZIrsB7OqqGg==", + "license": "MIT", "dependencies": { "common-config": "^0.1.0", "data-store": "^0.16.1", @@ -9290,6 +10124,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -9297,12 +10132,14 @@ "node_modules/question-store/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/question-store/node_modules/question-cache": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/question-cache/-/question-cache-0.5.1.tgz", "integrity": "sha512-v9F1LnlSQIUEAGFtrfVX/76lH4u4zyV34t94o6EkguPTKKfbvV6SLH8h3pn7LXGZLmAgD1PbmVOuKMY8ZWnuPg==", + "license": "MIT", "dependencies": { "arr-flatten": "^1.0.1", "arr-union": "^3.1.0", @@ -9333,6 +10170,7 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.3.3.tgz", "integrity": "sha512-aJPTd11HzK47w8xJMpyY4tBmFC6EidC8EG2fENxCJvPwLYzXLnNaesgo796y1fhSISSYAuah4Het+wDoPXK2tg==", "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "isobject": "^2.0.0", @@ -9346,6 +10184,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.2.0.tgz", "integrity": "sha512-6oMu4CTicplxUMOXBoS1W9YNjIclUzmWpWf02v+JnYMEGVX24rTCsYMHay85WA7Wq+9wZa2iJ+HAAX0yGOcxCQ==", + "license": "MIT", "dependencies": { "arr-flatten": "^1.0.1", "is-arguments": "^1.0.2" @@ -9358,6 +10197,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz", "integrity": "sha512-RrhWfFWkNCz3djfSFZh7uSwu491QRhwNaHyAgB2sGl4kmmznb5ZUuuHpiWLVEsXOdpDakYK/x5+9o4lgg41UMw==", + "license": "MIT", "dependencies": { "define-property": "^0.2.5", "isobject": "^3.0.0", @@ -9371,6 +10211,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9393,12 +10234,14 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/randomatic": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "license": "MIT", "dependencies": { "is-number": "^4.0.0", "kind-of": "^6.0.0", @@ -9412,6 +10255,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9420,6 +10264,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9429,6 +10274,7 @@ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "dev": true, + "license": "MIT", "dependencies": { "pify": "^2.3.0" } @@ -9437,6 +10283,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/read-file/-/read-file-0.2.0.tgz", "integrity": "sha512-na/zgd5KplGlR+io+ygXQMIoDfX/Y0bNS5+P2TOXOTk5plquOVd0snudCd30hZJAsnVK2rxuxUP2z0CN+Aw1lQ==", + "license": "MIT", "engines": { "node": ">=0.8" } @@ -9445,6 +10292,7 @@ "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -9460,6 +10308,7 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 20.19.0" }, @@ -9472,6 +10321,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", "integrity": "sha512-8/td4MmwUB6PkZUbV25uKz7dfrmjYWxsW8DVfibWdlHRk/l/DfHKn4pU+dfcoGLFgWOdyGCzINRQD7jn+Bv+/g==", + "license": "MIT", "dependencies": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -9493,6 +10343,7 @@ "version": "0.4.4", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "license": "MIT", "dependencies": { "is-equal-shallow": "^0.1.3" }, @@ -9504,6 +10355,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/relative/-/relative-3.0.2.tgz", "integrity": "sha512-Q5W2qeYtY9GbiR8z1yHNZ1DGhyjb4AnLEjt8iE6XfcC1QIu+FAtj3HQaO0wH28H1mX6cqNLvAqWhP402dxJGyA==", + "license": "MIT", "dependencies": { "isobject": "^2.0.0" }, @@ -9515,6 +10367,7 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/remote-origin-url/-/remote-origin-url-0.5.3.tgz", "integrity": "sha512-crQ7Xk1m/F2IiwBx5oTqk/c0hjoumrEz+a36+ZoVupskQRE/q7pAwHKsTNeiZ31sbSTELvVlVv4h1W0Xo5szKg==", + "license": "MIT", "dependencies": { "parse-git-config": "^1.1.1" }, @@ -9525,12 +10378,14 @@ "node_modules/remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==" + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "license": "ISC" }, "node_modules/repeat-element": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9539,6 +10394,7 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "license": "MIT", "engines": { "node": ">=0.10" } @@ -9555,6 +10411,7 @@ "version": "0.3.7", "resolved": "https://registry.npmjs.org/repo-utils/-/repo-utils-0.3.7.tgz", "integrity": "sha512-NQmnug1GX04LoNb2bXGsCV3FzLDqmwf3qMmjToibrxI1CFV2uyE2XDdo9SYW8epfBK7wmw0ANhkmDtbGlrkyWQ==", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "get-value": "^2.0.6", @@ -9575,13 +10432,12 @@ }, "node_modules/reputation-system": { "version": "0.0.1", - "resolved": "git+ssh://git@github.com/reputation-systems/reputation-system.git#a036ed760a708089a6ea5aec4c14cd8d6d0d2aee", + "resolved": "git+ssh://git@github.com/reputation-systems/reputation-system.git#c1641233941f2464aa83f5b8ff6e4df85a32590b", "dependencies": { "@dagrejs/dagre": "^1.0.4", "@fleet-sdk/compiler": "^0.12.0", "@fleet-sdk/core": "^0.12.0", "@scure/base": "^1.1.3", - "@sveltejs/adapter-static": "^2.0.3", "@types/three": "^0.161.2", "@xyflow/svelte": "^0.1.3", "update": "^0.7.4", @@ -9592,10 +10448,12 @@ } }, "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "license": "MIT", "dependencies": { + "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" @@ -9614,6 +10472,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", "integrity": "sha512-QxMPqI6le2u0dCLyiGzgy92kjkkL6zO0XyvHzjdTNH3zM6e5Hz3BwG6+aEyNgiQ5Xz6PwTwgQEj3U50dByPKIA==", + "license": "MIT", "dependencies": { "expand-tilde": "^1.2.2", "global-modules": "^0.2.3" @@ -9626,6 +10485,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/resolve-file/-/resolve-file-0.2.2.tgz", "integrity": "sha512-3t2k4iUeMlX3PbjgZPcKzILg8HEtl0VW/lS8G+k4FCgj3kNn1uTOv6YJtm192rYMFpq9abzfJ2xd5W6ibOwVag==", + "license": "MIT", "dependencies": { "cwd": "^0.10.0", "expand-tilde": "^2.0.1", @@ -9644,6 +10504,7 @@ "version": "0.10.0", "resolved": "https://registry.npmjs.org/cwd/-/cwd-0.10.0.tgz", "integrity": "sha512-YGZxdTTL9lmLkCUTpg4j0zQ7IhRB5ZmqNBbGCl3Tg6MP/d5/6sY7L5mmTjzbc6JKgVZYiqTQTNhPFsbXNGlRaA==", + "license": "MIT", "dependencies": { "find-pkg": "^0.1.2", "fs-exists-sync": "^0.1.0" @@ -9656,6 +10517,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "license": "MIT", "dependencies": { "homedir-polyfill": "^1.0.1" }, @@ -9667,6 +10529,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-glob/-/resolve-glob-1.0.0.tgz", "integrity": "sha512-wSW9pVGJRs89k0wEXhM7C6+va9998NsDhgc0Y+6Nv8hrHsu0hUS7Ug10J1EiVtU6N2tKlSNvx9wLihL8Ao22Lg==", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "is-valid-glob": "^1.0.0", @@ -9682,6 +10545,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "license": "MIT", "dependencies": { "homedir-polyfill": "^1.0.1" }, @@ -9693,6 +10557,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "license": "MIT", "dependencies": { "global-prefix": "^1.0.1", "is-windows": "^1.0.1", @@ -9706,6 +10571,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "license": "MIT", "dependencies": { "expand-tilde": "^2.0.2", "homedir-polyfill": "^1.0.1", @@ -9721,6 +10587,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", "integrity": "sha512-D+8A457fBShSEI3tFCj65PAbT++5sKiFtdCdOam0gnfBgw9D277OERk+HM9qYJXmdVLZ/znez10SqHN0BBQ50g==", + "license": "MIT", "dependencies": { "is-glob": "^3.0.0" }, @@ -9732,6 +10599,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "license": "MIT", "dependencies": { "is-extglob": "^2.1.0" }, @@ -9743,6 +10611,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9751,6 +10620,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9759,6 +10629,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/matched/-/matched-1.0.2.tgz", "integrity": "sha512-7ivM1jFZVTOOS77QsR+TtYHH0ecdLclMkqbf5qiJdX2RorqfhsL65QHySPZgDE0ZjHoh+mQUNHTanNXIlzXd0Q==", + "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "async-array-reduce": "^0.2.1", @@ -9775,6 +10646,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "license": "MIT", "dependencies": { "expand-tilde": "^2.0.0", "global-modules": "^1.0.0" @@ -9787,6 +10659,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", "integrity": "sha512-reSjH4HuiFlxlaBaFCiS6O76ZGG2ygKoSlCsipKdaZuKSPx/+bt9mULkn4l0asVzbEfQQmXRg6Wp6gv6m0wElw==", + "license": "MIT", "dependencies": { "exit-hook": "^1.0.0", "onetime": "^1.0.0" @@ -9799,6 +10672,7 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/rethrow/-/rethrow-0.2.3.tgz", "integrity": "sha512-vtB0AIP/FlRbR4stc8szvHXe+N4158/K1hRMZbFHljIiQAHru54M9LylbxNjBGHl9biuwQNVUdvRzVxv1QWAiA==", + "license": "MIT", "dependencies": { "ansi-bgred": "^0.1.1", "ansi-red": "^0.1.1", @@ -9815,6 +10689,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", "integrity": "sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", + "license": "MIT", "dependencies": { "kind-of": "^1.1.0" }, @@ -9826,6 +10701,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", "integrity": "sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9834,6 +10710,7 @@ "version": "0.2.7", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9843,6 +10720,7 @@ "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" @@ -9852,6 +10730,7 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", "integrity": "sha512-yqINtL/G7vs2v+dFIZmFUDbnVyFUJFKd6gK22Kgo6R4jfJGFtisKyncWDDULgjfqf4ASQuIQyjJ7XZ+3aWpsAg==", + "license": "MIT", "dependencies": { "align-text": "^0.1.1" }, @@ -9864,6 +10743,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -9875,6 +10755,7 @@ "version": "3.30.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.30.0.tgz", "integrity": "sha512-kQvGasUgN+AlWGliFn2POSajRQEsULVYFGTvOZmK06d7vCD+YhZztt70kGk3qaeAXeWYL5eO7zx+rAubBc55eA==", + "license": "MIT", "bin": { "rollup": "dist/bin/rollup" }, @@ -9890,6 +10771,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", "integrity": "sha512-qOX+w+IxFgpUpJfkv2oGN0+ExPs68F4sZHfaRRx4dDexAQkG83atugKVEylyT5ARees3HBbfmuvnjbrd8j9Wjw==", + "license": "MIT", "dependencies": { "once": "^1.3.0" } @@ -9913,6 +10795,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -9926,6 +10809,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "license": "MIT", "dependencies": { "mri": "^1.1.0" }, @@ -9936,13 +10820,15 @@ "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==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" }, "node_modules/sander": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", "dev": true, + "license": "MIT", "dependencies": { "es6-promise": "^3.1.2", "graceful-fs": "^4.1.3", @@ -9954,13 +10840,15 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz", "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -9971,17 +10859,20 @@ "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC" }, "node_modules/set-cookie-parser": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", - "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==" + "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", + "license": "MIT" }, "node_modules/set-getter": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.1.tgz", "integrity": "sha512-9sVWOy+gthr+0G9DzqqLaYNA7+5OKkSmcqjL9cBpDEaZrr3ShQlyX2cZ/O/ozE41oxn/Tt0LGEM/w4Rub3A3gw==", + "license": "MIT", "dependencies": { "to-object-path": "^0.3.0" }, @@ -9993,6 +10884,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -10007,6 +10899,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", "integrity": "sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw==", + "license": "MIT", "dependencies": { "is-extendable": "^0.1.1", "kind-of": "^2.0.1", @@ -10021,6 +10914,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", "integrity": "sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==", + "license": "MIT", "dependencies": { "is-buffer": "^1.0.2" }, @@ -10032,6 +10926,7 @@ "version": "0.2.7", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -10040,12 +10935,14 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/sigmajs-crypto-facade": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/sigmajs-crypto-facade/-/sigmajs-crypto-facade-0.0.7.tgz", "integrity": "sha512-4XK8ZS9NKAbo8aGnU6o5GkBW6Upl8+OK8A1KreVDMAamfvZ0iq4LoVH8rHaeEPf9moVtaC4QZY5RYI+0OwiydA==", + "license": "MIT", "dependencies": { "@noble/hashes": "^1.1.4" }, @@ -10057,6 +10954,7 @@ "version": "0.4.6", "resolved": "https://registry.npmjs.org/sigmastate-js/-/sigmastate-js-0.4.6.tgz", "integrity": "sha512-Vo/TSFbkKrG28eiWn7EmoaBNgyabC6En6B7cKjb3z2ivBpFBMCGxUZgmKu83GgJboRvCikZ3/vvWFfbxpbloig==", + "license": "MIT", "dependencies": { "@fleet-sdk/common": "0.1.3", "@noble/hashes": "1.1.4", @@ -10067,6 +10965,7 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/@fleet-sdk/common/-/common-0.1.3.tgz", "integrity": "sha512-gYEkHhgGpgIcmCL3nCw8E9zHkT2WLmR+mPdxFlUE6fwcwISURbJrP6W9mF7D5Y0ShAP5Is2w3edh7AyIc7ctIQ==", + "license": "MIT", "engines": { "node": ">=14" } @@ -10080,12 +10979,14 @@ "type": "individual", "url": "https://paulmillr.com/funding/" } - ] + ], + "license": "MIT" }, "node_modules/sirv": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "license": "MIT", "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", @@ -10099,6 +11000,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", "engines": { "node": ">=10" } @@ -10108,6 +11010,7 @@ "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.1.tgz", "integrity": "sha512-o7npfeJE6wi6J9l0/5LKshFzZ2rMatRiCDwYeDQaOzqdzRJwALhX7mk/A/ecg6wjMu7wdZbmXfD2S/vpOg0bdQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.14", "buffer-crc32": "^1.0.0", @@ -10122,6 +11025,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/sort-object-arrays/-/sort-object-arrays-0.1.1.tgz", "integrity": "sha512-yqoVMBF2wzCdE4f2zeYKq2dQHe1WjGIdAV1dYSkXOFB+M3Bo+Bp0u+NdZCOETM3OC1VXerlruTD6Ckgus1NsnA==", + "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -10133,6 +11037,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -10141,6 +11046,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "license": "MIT", "dependencies": { "extend-shallow": "^3.0.0" }, @@ -10152,6 +11058,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -10160,6 +11067,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "license": "MIT", "dependencies": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -10172,6 +11080,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4" }, @@ -10182,12 +11091,14 @@ "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" }, "node_modules/src-stream": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/src-stream/-/src-stream-0.1.1.tgz", "integrity": "sha512-fczCn/BzNcH27V7unPzgCl+owTuC/Uv3UG9BQxGemRs6Fy1M2GFmYu1ZHQ2UjeYlGQqAmkModp949g235kYzcw==", + "license": "MIT", "dependencies": { "duplexify": "^3.4.2", "merge-stream": "^0.1.8", @@ -10201,12 +11112,14 @@ "version": "0.0.2", "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "license": "MIT", "dependencies": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -10219,12 +11132,14 @@ "version": "3.10.0", "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/stream-combiner": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", + "license": "MIT", "dependencies": { "duplexer": "~0.1.1", "through": "~2.3.4" @@ -10233,17 +11148,20 @@ "node_modules/stream-exhaust": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==" + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", + "license": "MIT" }, "node_modules/stream-shift": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", - "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==" + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "license": "MIT" }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -10252,6 +11170,7 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/stringify-author/-/stringify-author-0.1.3.tgz", "integrity": "sha512-OxmcAnr4DESGl/ics9lAv30DdOBC2bdqswEAzTiOZSQRqVpWfnmlr3cpfxTmExf7phS5WxBJ1flD1e3ResNTBA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -10260,6 +11179,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "license": "MIT", "dependencies": { "ansi-regex": "^2.0.0" }, @@ -10271,6 +11191,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "license": "MIT", "dependencies": { "is-utf8": "^0.2.0" }, @@ -10282,6 +11203,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/strip-bom-buffer/-/strip-bom-buffer-0.1.1.tgz", "integrity": "sha512-dbIOX/cOLFgLH/2ofd7n78uPD3uPkXyt3P1IgaVoGiPYEdOnb7D1mawyhOTXyYWva1kCuRxJY5FkMsVKYlZRRg==", + "license": "MIT", "dependencies": { "is-buffer": "^1.1.0", "is-utf8": "^0.2.0" @@ -10294,6 +11216,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", "integrity": "sha512-7jfJB9YpI2Z0aH3wu10ZqitvYJaE0s5IzFuWE+0pbb4Q/armTloEUShymkDO47YSLnjAW52mlXT//hs9wXNNJQ==", + "license": "MIT", "dependencies": { "first-chunk-stream": "^1.0.0", "strip-bom": "^2.0.0" @@ -10306,6 +11229,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -10314,6 +11238,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/strip-color/-/strip-color-0.1.0.tgz", "integrity": "sha512-p9LsUieSjWNNAxVCXLeilaDlmuUOrDS5/dF9znM1nZc7EGX5+zEFC0bEevsNIaldjlks+2jns5Siz6F9iK6jwA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -10323,6 +11248,7 @@ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, + "license": "MIT", "dependencies": { "min-indent": "^1.0.0" }, @@ -10335,6 +11261,7 @@ "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==", "dev": true, + "license": "MIT", "dependencies": { "js-tokens": "^9.0.1" }, @@ -10346,6 +11273,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/success-symbol/-/success-symbol-0.1.0.tgz", "integrity": "sha512-7S6uOTxPklNGxOSbDIg4KlVLBQw1UiGVyfCUYgYxrZUKRblUkmGj7r8xlfQoFudvqLv6Ap5gd76/IIFfI9JG2A==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -10355,6 +11283,7 @@ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", @@ -10377,6 +11306,7 @@ "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-2.0.2.tgz", "integrity": "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=14.0.0" @@ -10386,6 +11316,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -10394,6 +11325,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -10405,6 +11337,7 @@ "version": "4.2.20", "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.20.tgz", "integrity": "sha512-eeEgGc2DtiUil5ANdtd8vPwt9AgaMdnuUFnPft9F5oMvU/FHu5IHFic+p1dR/UOB7XU2mX2yHW+NcTch4DCh5Q==", + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.1", "@jridgewell/sourcemap-codec": "^1.4.15", @@ -10430,6 +11363,7 @@ "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.8.6.tgz", "integrity": "sha512-ij0u4Lw/sOTREP13BdWZjiXD/BlHE6/e2e34XzmVmsp5IN4kVa3PWP65NM32JAgwjZlwBg/+JtiNV1MM8khu0Q==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.17", "chokidar": "^3.4.1", @@ -10450,6 +11384,7 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -10474,6 +11409,7 @@ "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" }, @@ -10486,6 +11422,7 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -10497,6 +11434,7 @@ "version": "0.15.3", "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz", "integrity": "sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==", + "license": "ISC", "engines": { "node": "^12.20 || ^14.13.1 || >= 16" }, @@ -10510,6 +11448,7 @@ "integrity": "sha512-IvnbQ6D6Ao3Gg6ftiM5tdbR6aAETwjhHV+UKGf5bHGYR69RQvF1ho0JKPcbUON4vy4R7zom13jPjgdOWCQ5hDA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "@types/pug": "^2.0.6", "detect-indent": "^6.1.0", @@ -10567,23 +11506,24 @@ } }, "node_modules/svelte2tsx": { - "version": "0.7.52", - "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.7.52.tgz", - "integrity": "sha512-svdT1FTrCLpvlU62evO5YdJt/kQ7nxgQxII/9BpQUvKr+GJRVdAXNVw8UWOt0fhoe5uWKyU0WsUTMRVAtRbMQg==", + "version": "0.7.56", + "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.7.56.tgz", + "integrity": "sha512-NTvqqL+goYlW8gWNajk81L07+uu7jw5V2m1Az5MZbYm3GEydcHXh+uTrLHM9SuGuaqCtF90vlMXkOVBotfH94g==", "dev": true, + "license": "MIT", "dependencies": { "dedent-js": "^1.0.1", "scule": "^1.3.0" }, "peerDependencies": { "svelte": "^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0", - "typescript": "^4.9.4 || ^5.0.0" + "typescript": "^4.9.4 || ^5.0.0 || ^6.0.0" } }, "node_modules/sveltekit-superforms": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/sveltekit-superforms/-/sveltekit-superforms-2.30.0.tgz", - "integrity": "sha512-EzXD7sHbi7yBU/eNtzVm6P6axcrVM8BArkbiT96Vdx48s5m4KXte/tbbp3UULtEW8Nk9wt2hYkGeq7nDBwVceg==", + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/sveltekit-superforms/-/sveltekit-superforms-2.30.1.tgz", + "integrity": "sha512-wBzyqsE0idvEJWuNJ+HCiAtdxa7Z55GZ8jmtlVHJfonrk9bRYC49MoPaloYyFoYuU3QPy6Omna/Qzn1kaIkgew==", "dev": true, "funding": [ { @@ -10599,27 +11539,28 @@ "url": "https://www.paypal.com/donate/?hosted_button_id=NY7F5ALHHSVQS" } ], + "license": "MIT", "dependencies": { - "devalue": "^5.6.3", + "devalue": "^5.6.4", "memoize-weak": "^1.0.2", "ts-deepmerge": "^7.0.3" }, "optionalDependencies": { "@exodus/schemasafe": "^1.3.0", - "@standard-schema/spec": "^1.0.0", + "@standard-schema/spec": "^1.1.0", "@typeschema/class-validator": "^0.3.0", - "@valibot/to-json-schema": "^1.5.0", + "@valibot/to-json-schema": "^1.6.0", "@vinejs/vine": "^3.0.1", - "arktype": "^2.1.29", - "class-validator": "^0.14.3", - "effect": "^3.19.12", + "arktype": "^2.2.0", + "class-validator": "^0.14.4", + "effect": "^3.21.0", "joi": "^17.13.3", "json-schema-to-ts": "^3.1.1", "superstruct": "^2.0.2", - "typebox": "^1.0.62", - "valibot": "^1.2.0", + "typebox": "^1.1.6", + "valibot": "^1.3.1", "yup": "^1.7.1", - "zod": "^4.1.13", + "zod": "^4.3.6", "zod-v3-to-json-schema": "^4.0.0" }, "peerDependencies": { @@ -10629,7 +11570,7 @@ "@vinejs/vine": "^1.8.0 || ^2.0.0 || ^3.0.0", "arktype": ">=2.0.0-rc.23", "class-validator": "^0.14.1", - "effect": "^3.13.7", + "effect": "^3.21.0", "joi": "^17.13.1", "superstruct": "^2.0.2", "svelte": "3.x || 4.x || >=5.0.0-next.51", @@ -10678,31 +11619,35 @@ } }, "node_modules/sveltekit-superforms/node_modules/devalue": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.3.tgz", - "integrity": "sha512-nc7XjUU/2Lb+SvEFVGcWLiKkzfw8+qHI7zn8WYXKkLMgfGSHbgCEaR6bJpev8Cm6Rmrb19Gfd/tZvGqx9is3wg==", - "dev": true + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.8.1.tgz", + "integrity": "sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==", + "dev": true, + "license": "MIT" }, "node_modules/sveltekit-superforms/node_modules/zod": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", - "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", "dev": true, + "license": "MIT", "optional": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } }, "node_modules/tabbable": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz", - "integrity": "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==", - "dev": true + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.5.0.tgz", + "integrity": "sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA==", + "dev": true, + "license": "MIT" }, "node_modules/tableize-object": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/tableize-object/-/tableize-object-0.1.0.tgz", "integrity": "sha512-seDB76zNqvGXG0W8gxUteRuq1fk1dvSxcRVbeYQ1a1QqMkbtqrGwvqTubfN6VCizzlb7NxOPM/j3z9JeBrbxYg==", + "license": "MIT", "dependencies": { "isobject": "^2.0.0" }, @@ -10714,6 +11659,7 @@ "version": "2.6.1", "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.1.tgz", "integrity": "sha512-Oo6tHdpZsGpkKG88HJ8RR1rg/RdnEkQEfMoEk2x1XRI3F1AxeU+ijRXpiVUF4UbLfcxxRGw6TbUINKYdWVsQTQ==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/dcastil" @@ -10724,6 +11670,7 @@ "resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-0.3.1.tgz", "integrity": "sha512-krn67M3FpPwElg4FsZrOQd0U26o7UDH/QOkK8RNaiCCrr052f6YJPBUfNKnPo/s/xRzNPtv1Mldlxsg8Tb46BQ==", "dev": true, + "license": "MIT", "dependencies": { "tailwind-merge": "2.5.4" }, @@ -10740,6 +11687,7 @@ "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.4.tgz", "integrity": "sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/dcastil" @@ -10750,6 +11698,7 @@ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz", "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==", "dev": true, + "license": "MIT", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -10787,6 +11736,7 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -10811,6 +11761,7 @@ "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" }, @@ -10823,6 +11774,7 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -10834,6 +11786,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/template-error/-/template-error-0.1.2.tgz", "integrity": "sha512-soS5m+iT4k/okmMyydvMjPlmyz3CowvMcOxfgoAqccmkyF81W3D+zMi4lhqbSIhTgLhKE/Bh8wUlXzr6F+ERCw==", + "license": "MIT", "dependencies": { "engine": "^0.1.5", "kind-of": "^2.0.1", @@ -10848,6 +11801,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", "integrity": "sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==", + "license": "MIT", "dependencies": { "is-buffer": "^1.0.2" }, @@ -10859,6 +11813,7 @@ "version": "0.2.7", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -10867,6 +11822,7 @@ "version": "0.24.3", "resolved": "https://registry.npmjs.org/templates/-/templates-0.24.3.tgz", "integrity": "sha512-R5CUlz3atppbifPePB5Z2KGXCsB0Y87lQ/+ziizq/d3kyydDlNk40yX98RWLprNnKjTiwqeiuGjLJlPPJPYshg==", + "license": "MIT", "dependencies": { "array-sort": "^0.1.2", "async-each": "^1.0.0", @@ -10910,6 +11866,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -10917,13 +11874,15 @@ "node_modules/templates/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/templates/node_modules/set-value": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.3.3.tgz", "integrity": "sha512-aJPTd11HzK47w8xJMpyY4tBmFC6EidC8EG2fENxCJvPwLYzXLnNaesgo796y1fhSISSYAuah4Het+wDoPXK2tg==", "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "isobject": "^2.0.0", @@ -10937,6 +11896,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.2.0.tgz", "integrity": "sha512-6oMu4CTicplxUMOXBoS1W9YNjIclUzmWpWf02v+JnYMEGVX24rTCsYMHay85WA7Wq+9wZa2iJ+HAAX0yGOcxCQ==", + "license": "MIT", "dependencies": { "arr-flatten": "^1.0.1", "is-arguments": "^1.0.2" @@ -10948,13 +11908,15 @@ "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "license": "MIT" }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "dev": true, + "license": "MIT", "dependencies": { "any-promise": "^1.0.0" } @@ -10964,6 +11926,7 @@ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", "dev": true, + "license": "MIT", "dependencies": { "thenify": ">= 3.1.0 < 4" }, @@ -10974,12 +11937,14 @@ "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" }, "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "license": "MIT", "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -10989,6 +11954,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", "integrity": "sha512-miwWajb1B80NvIVKXFPN/o7+vJc4jYUvnZCwvhicRAoTxdD9wbcjri70j+BenCrN/JXEPKDjhpw4iY7yiNsCGg==", + "license": "MIT", "dependencies": { "through2": "~2.0.0", "xtend": "~4.0.0" @@ -10998,6 +11964,7 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/time-diff/-/time-diff-0.3.1.tgz", "integrity": "sha512-8/LJTO3zKbhj6sQFeN3aoAA04GGjUgwKEquQVnKXkziHjEHadpIVIQ1rAjQgSVMnBRubJ/q5gMjK9WqXTzSykA==", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "is-number": "^2.1.0", @@ -11012,6 +11979,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-0.1.0.tgz", "integrity": "sha512-nUNbMZLDr1YQaPdMC2lREJXKttoaHwICajt9x40Js/POX7gNv7OK/VbC9ciJaIFshg9Xol+1GclqfY14UW+0ZA==", + "license": "MIT", "dependencies": { "ansi-bgblack": "^0.1.1", "ansi-bgblue": "^0.1.1", @@ -11049,6 +12017,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==", + "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -11060,6 +12029,7 @@ "version": "0.2.7", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -11068,6 +12038,7 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/log-utils/-/log-utils-0.1.5.tgz", "integrity": "sha512-5jLIj9RWWYxQbBhHDvNZTZE3J/oSTbw/fuPmsXJg8/vbY/4XiJ4YAiEPrwo3dLbcB/n9k1qTznOVr6IigiaF7A==", + "license": "MIT", "dependencies": { "ansi-colors": "^0.1.0", "error-symbol": "^0.1.0", @@ -11085,6 +12056,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -11094,12 +12066,14 @@ "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz", "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/tiny-glob": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "license": "MIT", "dependencies": { "globalyzer": "0.1.0", "globrex": "^0.1.2" @@ -11109,22 +12083,25 @@ "version": "2.9.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tinyexec": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", "dev": true, + "license": "MIT", "dependencies": { "fdir": "^6.5.0", - "picomatch": "^4.0.3" + "picomatch": "^4.0.4" }, "engines": { "node": ">=12.0.0" @@ -11138,6 +12115,7 @@ "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" }, @@ -11151,10 +12129,11 @@ } }, "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "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" }, @@ -11167,6 +12146,7 @@ "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", "dev": true, + "license": "MIT", "engines": { "node": "^18.0.0 || >=20.0.0" } @@ -11176,6 +12156,7 @@ "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.0.0" } @@ -11185,6 +12166,7 @@ "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.0.0" } @@ -11193,6 +12175,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", "integrity": "sha512-Vvl5x6zNf9iVG1QTWeknmWrKzZxaeKfIDRibrZCR3b2V/2NlFJuD2HV7P7AVjaKLZNqLPHqyr0jGrW0fTcxCPQ==", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1" }, @@ -11204,6 +12187,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/to-choices/-/to-choices-0.2.0.tgz", "integrity": "sha512-oPVwP4jpJZM4R3Yvfcod8/OjddMoi33amdFzwZktcHAjddmIEAzQ9DQsdPKUr/Q4hLxNMWPys4Pn1qJdLiR4Kg==", + "license": "MIT", "dependencies": { "ansi-gray": "^0.1.1", "mixin-deep": "^1.1.3" @@ -11216,6 +12200,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/to-file/-/to-file-0.2.0.tgz", "integrity": "sha512-xLyYVRKJQTwy2tKMOLD0M0yL+YSZVgMAzkaY9hh7GhzgBBHSIWARDkgPx8krPPm0mW5CgoIFsQEdKRFOyIRdqg==", + "license": "MIT", "dependencies": { "define-property": "^0.2.5", "extend-shallow": "^2.0.1", @@ -11234,6 +12219,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==", + "license": "ISC", "dependencies": { "is-glob": "^2.0.0" } @@ -11242,6 +12228,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -11250,6 +12237,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "license": "MIT", "dependencies": { "is-extglob": "^1.0.0" }, @@ -11261,6 +12249,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -11273,6 +12262,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -11285,12 +12275,14 @@ "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/totalist": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "license": "MIT", "engines": { "node": ">=6" } @@ -11299,6 +12291,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/trim-leading-lines/-/trim-leading-lines-0.1.1.tgz", "integrity": "sha512-ViFS8blDWJN4Jg10fyZ+sIAfkSSAn5NiTVywc3kKtMWK3DZjaV7FV86oX3i9KY6/gqYkdka/UNeM2/NMGttiyA==", + "license": "MIT", "dependencies": { "is-whitespace": "^0.3.0" }, @@ -11311,6 +12304,7 @@ "resolved": "https://registry.npmjs.org/ts-algebra/-/ts-algebra-2.0.0.tgz", "integrity": "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/ts-deepmerge": { @@ -11318,6 +12312,7 @@ "resolved": "https://registry.npmjs.org/ts-deepmerge/-/ts-deepmerge-7.0.3.tgz", "integrity": "sha512-Du/ZW2RfwV/D4cmA5rXafYjBQVuvu4qGiEEla4EmEHVHgRdx68Gftx7i66jn2bzHPwSVZY36Ae6OuDn9el4ZKA==", "dev": true, + "license": "ISC", "engines": { "node": ">=14.13.1" } @@ -11326,19 +12321,22 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "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 + "dev": true, + "license": "0BSD" }, "node_modules/type-fest": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "optional": true, "engines": { "node": ">=12.20" @@ -11348,10 +12346,11 @@ } }, "node_modules/typebox": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/typebox/-/typebox-1.1.6.tgz", - "integrity": "sha512-O2iWCF+RboQfDqr6n83eOq0dKCjVchMWklKgdwKFeR01MGTskILHYEFi9n3lQvfuua4CtvG/EJEIg3P8H9eBcw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/typebox/-/typebox-1.3.0.tgz", + "integrity": "sha512-3HaX5iZ13wSzcLSflDH1UJwaXnRghtc8LhQtKnq8qnlcnZvmGOpBOM6rY9PdyPBKNOYBpDHfE9r6BmI41fvp4g==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/typescript": { @@ -11359,6 +12358,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -11371,6 +12371,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -11379,6 +12380,7 @@ "version": "5.29.0", "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "license": "MIT", "dependencies": { "@fastify/busboy": "^2.0.0" }, @@ -11387,14 +12389,16 @@ } }, "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==" + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz", + "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", + "license": "MIT" }, "node_modules/union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -11409,6 +12413,7 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.4.0.tgz", "integrity": "sha512-V6QarSfeSgDipGA9EZdoIzu03ZDlOFkk+FbEP5cwgrZXN3iIkYR91IjU2EnM6rB835kGQsqHX8qncObTXV+6KA==", + "license": "MIT", "dependencies": { "json-stable-stringify-without-jsonify": "^1.0.1", "through2-filter": "3.0.0" @@ -11418,6 +12423,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "license": "MIT", "dependencies": { "through2": "~2.0.0", "xtend": "~4.0.0" @@ -11427,6 +12433,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "license": "MIT", "dependencies": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -11439,6 +12446,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -11447,6 +12455,7 @@ "version": "0.7.4", "resolved": "https://registry.npmjs.org/update/-/update-0.7.4.tgz", "integrity": "sha512-B7HArWh4T6TSmMffmxlbD9gZM0QdboQ8N/p5aHcyhGCuuVRHSk37pvuQlAvi1XBrQMrEX5WJUQyQR8+jy/x4iQ==", + "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "assemble-core": "^0.25.0", @@ -11504,6 +12513,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" @@ -11518,12 +12528,14 @@ "node_modules/upper-case": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==" + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", + "license": "MIT" }, "node_modules/use": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/use/-/use-1.1.2.tgz", "integrity": "sha512-25Uw2xiVk0m2ySqmnu2GjOIROlImdXMRcpI6Cq7sZeG/zFZgFkSeo2+QwKNWJncfZOVS55eACoinvJ3EtprOBw==", + "license": "MIT", "dependencies": { "define-property": "^0.2.5", "isobject": "^2.0.0" @@ -11535,16 +12547,18 @@ "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": "11.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", - "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "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/esm/bin/uuid" } @@ -11553,15 +12567,17 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", "integrity": "sha512-sgECfZthyaCKW10N0fm27cg8HYTFK5qMWgypqkXMQ4Wbl/zZKx7xZICgcoxIIE+WFAP/MBL2EFwC/YvLxw3Zeg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/valibot": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.2.0.tgz", - "integrity": "sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.4.1.tgz", + "integrity": "sha512-klCmFTz2jeDluy9RwX+F884TCiogtdBJ/YaxSx1EOBYXa3NXNWj8kR1jjN8rzluwojJVWWaHJ4r1U5LfICnM3g==", "dev": true, + "license": "MIT", "optional": true, "peerDependencies": { "typescript": ">=5" @@ -11573,10 +12589,11 @@ } }, "node_modules/validator": { - "version": "13.15.26", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.26.tgz", - "integrity": "sha512-spH26xU080ydGggxRyR1Yhcbgx+j3y5jbNXk/8L+iRvdIEQ4uTRH2Sgf2dokud6Q4oAtsbNvJ1Ft+9xmm6IZcA==", + "version": "13.15.35", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.35.tgz", + "integrity": "sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">= 0.10" @@ -11586,6 +12603,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", "integrity": "sha512-Ci3wnR2uuSAWFMSglZuB8Z2apBdtOyz8CV7dC6/U1XbltXBC+IuutUkXQISz01P+US2ouBuesSbV6zILZ6BuzQ==", + "license": "MIT", "dependencies": { "clone": "^1.0.0", "clone-stats": "^0.0.1", @@ -11599,6 +12617,7 @@ "version": "2.4.4", "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", "integrity": "sha512-lxMlQW/Wxk/pwhooY3Ut0Q11OH5ZvZfV0Gg1c306fBNWznQ6ZeQaCdE7XX0O/PpGSqgAsHMBxwFgcGxiYW3hZg==", + "license": "MIT", "dependencies": { "duplexify": "^3.2.0", "glob-stream": "^5.3.2", @@ -11626,6 +12645,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", "integrity": "sha512-e6RM36aegd4f+r8BZCcYXlO2P3H6xbUM6ktL2Xmf45GAOit9bI4z6/3VU7JwllVO1L7u0UDSg/EhzQ5lmMLolA==", + "license": "MIT", "dependencies": { "readable-stream": "^2.0.1" } @@ -11634,6 +12654,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/vinyl-item/-/vinyl-item-0.1.0.tgz", "integrity": "sha512-9L2HEcbtuTdKCLWDucRPObPoAxnUUCdAXg0QDf3aDPM3oFpb6C+yct/R31PA9EhLGeilNl8TF/inc3OwFSSEMg==", + "license": "MIT", "dependencies": { "base": "^0.8.1", "base-option": "^0.8.2", @@ -11654,6 +12675,7 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/base/-/base-0.8.1.tgz", "integrity": "sha512-hCEtSWF9Xin1mVIrgCAwJhIJxURWOu3odjKsv+9TXofdJly0vO9Di87hnkChwi44v0+LPzHtNOjoCUYb36fBhg==", + "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "cache-base": "^0.8.2", @@ -11672,6 +12694,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -11680,6 +12703,7 @@ "version": "0.8.5", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-0.8.5.tgz", "integrity": "sha512-19t0n7xdoVr5Q08+6sF85YZ9VuvbpVFq5JLm0gcsRmCvTO1Y3duTJGMaOQYf14Ras4o6dEnvoqvjdrUK1tNtgg==", + "license": "MIT", "dependencies": { "collection-visit": "^0.2.1", "component-emitter": "^1.2.1", @@ -11700,6 +12724,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -11707,12 +12732,14 @@ "node_modules/vinyl-item/node_modules/clone-stats": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==" + "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", + "license": "MIT" }, "node_modules/vinyl-item/node_modules/collection-visit": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-0.2.3.tgz", "integrity": "sha512-V88PJOCqJfsZS45YBELDgmhQkECokQAAr9XR4hT6eFkFsAPsCsk3EoDHSuBPYzygjquGM/0KF4vdwTiQO6lbdw==", + "license": "MIT", "dependencies": { "lazy-cache": "^2.0.1", "map-visit": "^0.1.5", @@ -11726,6 +12753,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -11734,6 +12762,7 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-0.1.5.tgz", "integrity": "sha512-zdmJBFvvVR/H5wCfsCP7XxSLp+346yAZ30Wy2OsQLcH19OVGMWa3Ms9quO00lj9ybsySu3gKOINNgICb4Zqauw==", + "license": "MIT", "dependencies": { "lazy-cache": "^2.0.1", "object-visit": "^0.3.4" @@ -11745,12 +12774,14 @@ "node_modules/vinyl-item/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/vinyl-item/node_modules/object-visit": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-0.3.4.tgz", "integrity": "sha512-6QNyX7uTuwqxP7pmDBqgBDKdmZws1rXriUyXM5KG6+7J0aYRuuAGoc636IGdLzgOL77WUwL+EpoTJrEHwWsyOA==", + "license": "MIT", "dependencies": { "isobject": "^2.0.0" }, @@ -11763,6 +12794,7 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", "integrity": "sha512-2Z0LRUUvYeF7gIFFep48ksPq0NR09e5oKoFXznaMGNcu+EZAfGnyL0K6xno2gCqX6dZYEZRjrcn04/gvZzcKhQ==", "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -11777,6 +12809,7 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/union-value/-/union-value-0.2.4.tgz", "integrity": "sha512-Tv3cqdyY8yjW9ZcJ9WP7JdHS34natzylD0oNRLlYbWOfUdC4EQ0sf3fubnqrK2IErtlmobFmuS1pWvv88VghpA==", + "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -11791,6 +12824,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-0.1.2.tgz", "integrity": "sha512-yhv5I4TsldLdE3UcVQn0hD2T5sNCPv4+qm/CTUpRKIpwthYRIipsAPdsrNpOI79hPQa0rTTeW22Fq6JWRcTgNg==", + "license": "MIT", "dependencies": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -11803,6 +12837,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -11811,6 +12846,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/vinyl-view/-/vinyl-view-0.1.2.tgz", "integrity": "sha512-qIc2qnXgOXZrT1Q1ViR1VMTjuylAi3Y/LSYSYfwJ6ZG7Ar5miUfioSIBu30bsHTo5dSz4ReDNSUw3lelCtc5Jw==", + "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -11828,6 +12864,7 @@ "version": "4.5.14", "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.14.tgz", "integrity": "sha512-+v57oAaoYNnO3hIu5Z/tJRZjq5aHM2zDve9YZ8HngVHbhk66RStobhb1sqPMIPEleV6cNKYK4eGrAbE9Ulbl2g==", + "license": "MIT", "dependencies": { "esbuild": "^0.18.10", "postcss": "^8.4.27", @@ -11883,6 +12920,7 @@ "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", "dev": true, + "license": "MIT", "dependencies": { "cac": "^6.7.14", "debug": "^4.4.1", @@ -11901,13 +12939,14 @@ } }, "node_modules/vite-node/node_modules/@esbuild/android-arm": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", - "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -11917,13 +12956,14 @@ } }, "node_modules/vite-node/node_modules/@esbuild/android-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", - "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -11933,13 +12973,14 @@ } }, "node_modules/vite-node/node_modules/@esbuild/android-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", - "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -11949,13 +12990,14 @@ } }, "node_modules/vite-node/node_modules/@esbuild/darwin-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", - "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -11965,13 +13007,14 @@ } }, "node_modules/vite-node/node_modules/@esbuild/darwin-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", - "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -11981,13 +13024,14 @@ } }, "node_modules/vite-node/node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", - "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -11997,13 +13041,14 @@ } }, "node_modules/vite-node/node_modules/@esbuild/freebsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", - "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -12013,13 +13058,14 @@ } }, "node_modules/vite-node/node_modules/@esbuild/linux-arm": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", - "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -12029,13 +13075,14 @@ } }, "node_modules/vite-node/node_modules/@esbuild/linux-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", - "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -12045,13 +13092,14 @@ } }, "node_modules/vite-node/node_modules/@esbuild/linux-ia32": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", - "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -12061,13 +13109,14 @@ } }, "node_modules/vite-node/node_modules/@esbuild/linux-loong64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", - "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", "cpu": [ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -12077,13 +13126,14 @@ } }, "node_modules/vite-node/node_modules/@esbuild/linux-mips64el": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", - "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", "cpu": [ "mips64el" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -12093,13 +13143,14 @@ } }, "node_modules/vite-node/node_modules/@esbuild/linux-ppc64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", - "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -12109,13 +13160,14 @@ } }, "node_modules/vite-node/node_modules/@esbuild/linux-riscv64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", - "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -12125,13 +13177,14 @@ } }, "node_modules/vite-node/node_modules/@esbuild/linux-s390x": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", - "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", "cpu": [ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -12141,13 +13194,14 @@ } }, "node_modules/vite-node/node_modules/@esbuild/linux-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", - "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -12157,13 +13211,14 @@ } }, "node_modules/vite-node/node_modules/@esbuild/netbsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", - "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -12173,13 +13228,14 @@ } }, "node_modules/vite-node/node_modules/@esbuild/openbsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", - "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -12189,13 +13245,14 @@ } }, "node_modules/vite-node/node_modules/@esbuild/sunos-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", - "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "sunos" @@ -12205,13 +13262,14 @@ } }, "node_modules/vite-node/node_modules/@esbuild/win32-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", - "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -12221,13 +13279,14 @@ } }, "node_modules/vite-node/node_modules/@esbuild/win32-ia32": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", - "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -12237,13 +13296,14 @@ } }, "node_modules/vite-node/node_modules/@esbuild/win32-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", - "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -12253,11 +13313,12 @@ } }, "node_modules/vite-node/node_modules/esbuild": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", - "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -12265,32 +13326,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.3", - "@esbuild/android-arm": "0.27.3", - "@esbuild/android-arm64": "0.27.3", - "@esbuild/android-x64": "0.27.3", - "@esbuild/darwin-arm64": "0.27.3", - "@esbuild/darwin-x64": "0.27.3", - "@esbuild/freebsd-arm64": "0.27.3", - "@esbuild/freebsd-x64": "0.27.3", - "@esbuild/linux-arm": "0.27.3", - "@esbuild/linux-arm64": "0.27.3", - "@esbuild/linux-ia32": "0.27.3", - "@esbuild/linux-loong64": "0.27.3", - "@esbuild/linux-mips64el": "0.27.3", - "@esbuild/linux-ppc64": "0.27.3", - "@esbuild/linux-riscv64": "0.27.3", - "@esbuild/linux-s390x": "0.27.3", - "@esbuild/linux-x64": "0.27.3", - "@esbuild/netbsd-arm64": "0.27.3", - "@esbuild/netbsd-x64": "0.27.3", - "@esbuild/openbsd-arm64": "0.27.3", - "@esbuild/openbsd-x64": "0.27.3", - "@esbuild/openharmony-arm64": "0.27.3", - "@esbuild/sunos-x64": "0.27.3", - "@esbuild/win32-arm64": "0.27.3", - "@esbuild/win32-ia32": "0.27.3", - "@esbuild/win32-x64": "0.27.3" + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" } }, "node_modules/vite-node/node_modules/fdir": { @@ -12298,6 +13359,7 @@ "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" }, @@ -12311,10 +13373,11 @@ } }, "node_modules/vite-node/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "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" }, @@ -12323,12 +13386,13 @@ } }, "node_modules/vite-node/node_modules/rollup": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", - "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.2.tgz", + "integrity": "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==", "dev": true, + "license": "MIT", "dependencies": { - "@types/estree": "1.0.8" + "@types/estree": "1.0.9" }, "bin": { "rollup": "dist/bin/rollup" @@ -12338,39 +13402,40 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.59.0", - "@rollup/rollup-android-arm64": "4.59.0", - "@rollup/rollup-darwin-arm64": "4.59.0", - "@rollup/rollup-darwin-x64": "4.59.0", - "@rollup/rollup-freebsd-arm64": "4.59.0", - "@rollup/rollup-freebsd-x64": "4.59.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", - "@rollup/rollup-linux-arm-musleabihf": "4.59.0", - "@rollup/rollup-linux-arm64-gnu": "4.59.0", - "@rollup/rollup-linux-arm64-musl": "4.59.0", - "@rollup/rollup-linux-loong64-gnu": "4.59.0", - "@rollup/rollup-linux-loong64-musl": "4.59.0", - "@rollup/rollup-linux-ppc64-gnu": "4.59.0", - "@rollup/rollup-linux-ppc64-musl": "4.59.0", - "@rollup/rollup-linux-riscv64-gnu": "4.59.0", - "@rollup/rollup-linux-riscv64-musl": "4.59.0", - "@rollup/rollup-linux-s390x-gnu": "4.59.0", - "@rollup/rollup-linux-x64-gnu": "4.59.0", - "@rollup/rollup-linux-x64-musl": "4.59.0", - "@rollup/rollup-openbsd-x64": "4.59.0", - "@rollup/rollup-openharmony-arm64": "4.59.0", - "@rollup/rollup-win32-arm64-msvc": "4.59.0", - "@rollup/rollup-win32-ia32-msvc": "4.59.0", - "@rollup/rollup-win32-x64-gnu": "4.59.0", - "@rollup/rollup-win32-x64-msvc": "4.59.0", + "@rollup/rollup-android-arm-eabi": "4.62.2", + "@rollup/rollup-android-arm64": "4.62.2", + "@rollup/rollup-darwin-arm64": "4.62.2", + "@rollup/rollup-darwin-x64": "4.62.2", + "@rollup/rollup-freebsd-arm64": "4.62.2", + "@rollup/rollup-freebsd-x64": "4.62.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.2", + "@rollup/rollup-linux-arm-musleabihf": "4.62.2", + "@rollup/rollup-linux-arm64-gnu": "4.62.2", + "@rollup/rollup-linux-arm64-musl": "4.62.2", + "@rollup/rollup-linux-loong64-gnu": "4.62.2", + "@rollup/rollup-linux-loong64-musl": "4.62.2", + "@rollup/rollup-linux-ppc64-gnu": "4.62.2", + "@rollup/rollup-linux-ppc64-musl": "4.62.2", + "@rollup/rollup-linux-riscv64-gnu": "4.62.2", + "@rollup/rollup-linux-riscv64-musl": "4.62.2", + "@rollup/rollup-linux-s390x-gnu": "4.62.2", + "@rollup/rollup-linux-x64-gnu": "4.62.2", + "@rollup/rollup-linux-x64-musl": "4.62.2", + "@rollup/rollup-openbsd-x64": "4.62.2", + "@rollup/rollup-openharmony-arm64": "4.62.2", + "@rollup/rollup-win32-arm64-msvc": "4.62.2", + "@rollup/rollup-win32-ia32-msvc": "4.62.2", + "@rollup/rollup-win32-x64-gnu": "4.62.2", + "@rollup/rollup-win32-x64-msvc": "4.62.2", "fsevents": "~2.3.2" } }, "node_modules/vite-node/node_modules/vite": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", - "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.5.tgz", + "integrity": "sha512-KuOaNhcnGFN2zIPGA7wRmzF+lJA1sea7rHq17aiJ++9lzY1WWG6Jpwqwe1KNbRVPIqHmr8GLYx7jbrQcN/7/ww==", "dev": true, + "license": "MIT", "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -12444,6 +13509,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==", + "license": "MIT", "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" }, @@ -12454,19 +13520,20 @@ } }, "node_modules/vitest": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", - "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.6.tgz", + "integrity": "sha512-xejya+bT/j/+R/AGa1XOfRxLmNUlLtlwjRsFUILF+xHfzElmGcmFydy2gqqIrd62ptIEfwVMofd19uNWD9L7Nw==", "dev": true, + "license": "MIT", "dependencies": { "@types/chai": "^5.2.2", - "@vitest/expect": "3.2.4", - "@vitest/mocker": "3.2.4", - "@vitest/pretty-format": "^3.2.4", - "@vitest/runner": "3.2.4", - "@vitest/snapshot": "3.2.4", - "@vitest/spy": "3.2.4", - "@vitest/utils": "3.2.4", + "@vitest/expect": "3.2.6", + "@vitest/mocker": "3.2.6", + "@vitest/pretty-format": "^3.2.6", + "@vitest/runner": "3.2.6", + "@vitest/snapshot": "3.2.6", + "@vitest/spy": "3.2.6", + "@vitest/utils": "3.2.6", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", @@ -12496,8 +13563,8 @@ "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "@vitest/browser": "3.2.4", - "@vitest/ui": "3.2.4", + "@vitest/browser": "3.2.6", + "@vitest/ui": "3.2.6", "happy-dom": "*", "jsdom": "*" }, @@ -12526,13 +13593,14 @@ } }, "node_modules/vitest/node_modules/@esbuild/android-arm": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", - "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -12542,13 +13610,14 @@ } }, "node_modules/vitest/node_modules/@esbuild/android-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", - "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -12558,13 +13627,14 @@ } }, "node_modules/vitest/node_modules/@esbuild/android-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", - "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -12574,13 +13644,14 @@ } }, "node_modules/vitest/node_modules/@esbuild/darwin-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", - "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -12590,13 +13661,14 @@ } }, "node_modules/vitest/node_modules/@esbuild/darwin-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", - "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -12606,13 +13678,14 @@ } }, "node_modules/vitest/node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", - "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -12622,13 +13695,14 @@ } }, "node_modules/vitest/node_modules/@esbuild/freebsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", - "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -12638,13 +13712,14 @@ } }, "node_modules/vitest/node_modules/@esbuild/linux-arm": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", - "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -12654,13 +13729,14 @@ } }, "node_modules/vitest/node_modules/@esbuild/linux-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", - "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -12670,13 +13746,14 @@ } }, "node_modules/vitest/node_modules/@esbuild/linux-ia32": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", - "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -12686,13 +13763,14 @@ } }, "node_modules/vitest/node_modules/@esbuild/linux-loong64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", - "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", "cpu": [ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -12702,13 +13780,14 @@ } }, "node_modules/vitest/node_modules/@esbuild/linux-mips64el": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", - "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", "cpu": [ "mips64el" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -12718,13 +13797,14 @@ } }, "node_modules/vitest/node_modules/@esbuild/linux-ppc64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", - "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -12734,13 +13814,14 @@ } }, "node_modules/vitest/node_modules/@esbuild/linux-riscv64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", - "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -12750,13 +13831,14 @@ } }, "node_modules/vitest/node_modules/@esbuild/linux-s390x": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", - "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", "cpu": [ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -12766,13 +13848,14 @@ } }, "node_modules/vitest/node_modules/@esbuild/linux-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", - "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -12782,13 +13865,14 @@ } }, "node_modules/vitest/node_modules/@esbuild/netbsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", - "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -12798,13 +13882,14 @@ } }, "node_modules/vitest/node_modules/@esbuild/openbsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", - "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -12814,13 +13899,14 @@ } }, "node_modules/vitest/node_modules/@esbuild/sunos-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", - "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "sunos" @@ -12830,13 +13916,14 @@ } }, "node_modules/vitest/node_modules/@esbuild/win32-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", - "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -12846,13 +13933,14 @@ } }, "node_modules/vitest/node_modules/@esbuild/win32-ia32": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", - "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -12862,13 +13950,14 @@ } }, "node_modules/vitest/node_modules/@esbuild/win32-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", - "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -12878,12 +13967,13 @@ } }, "node_modules/vitest/node_modules/@vitest/mocker": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", - "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.6.tgz", + "integrity": "sha512-EZOrpDbkKotFAP7wPAQV1UIyoGOk4oX7ynWhBhLB7v+meMHbQhU16oPpIYGTTe4oFlhpryGpgpcZP/sin3hYuw==", "dev": true, + "license": "MIT", "dependencies": { - "@vitest/spy": "3.2.4", + "@vitest/spy": "3.2.6", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, @@ -12904,11 +13994,12 @@ } }, "node_modules/vitest/node_modules/esbuild": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", - "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -12916,32 +14007,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.3", - "@esbuild/android-arm": "0.27.3", - "@esbuild/android-arm64": "0.27.3", - "@esbuild/android-x64": "0.27.3", - "@esbuild/darwin-arm64": "0.27.3", - "@esbuild/darwin-x64": "0.27.3", - "@esbuild/freebsd-arm64": "0.27.3", - "@esbuild/freebsd-x64": "0.27.3", - "@esbuild/linux-arm": "0.27.3", - "@esbuild/linux-arm64": "0.27.3", - "@esbuild/linux-ia32": "0.27.3", - "@esbuild/linux-loong64": "0.27.3", - "@esbuild/linux-mips64el": "0.27.3", - "@esbuild/linux-ppc64": "0.27.3", - "@esbuild/linux-riscv64": "0.27.3", - "@esbuild/linux-s390x": "0.27.3", - "@esbuild/linux-x64": "0.27.3", - "@esbuild/netbsd-arm64": "0.27.3", - "@esbuild/netbsd-x64": "0.27.3", - "@esbuild/openbsd-arm64": "0.27.3", - "@esbuild/openbsd-x64": "0.27.3", - "@esbuild/openharmony-arm64": "0.27.3", - "@esbuild/sunos-x64": "0.27.3", - "@esbuild/win32-arm64": "0.27.3", - "@esbuild/win32-ia32": "0.27.3", - "@esbuild/win32-x64": "0.27.3" + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" } }, "node_modules/vitest/node_modules/fdir": { @@ -12949,6 +14040,7 @@ "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" }, @@ -12962,10 +14054,11 @@ } }, "node_modules/vitest/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "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" }, @@ -12974,12 +14067,13 @@ } }, "node_modules/vitest/node_modules/rollup": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", - "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.2.tgz", + "integrity": "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==", "dev": true, + "license": "MIT", "dependencies": { - "@types/estree": "1.0.8" + "@types/estree": "1.0.9" }, "bin": { "rollup": "dist/bin/rollup" @@ -12989,39 +14083,40 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.59.0", - "@rollup/rollup-android-arm64": "4.59.0", - "@rollup/rollup-darwin-arm64": "4.59.0", - "@rollup/rollup-darwin-x64": "4.59.0", - "@rollup/rollup-freebsd-arm64": "4.59.0", - "@rollup/rollup-freebsd-x64": "4.59.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", - "@rollup/rollup-linux-arm-musleabihf": "4.59.0", - "@rollup/rollup-linux-arm64-gnu": "4.59.0", - "@rollup/rollup-linux-arm64-musl": "4.59.0", - "@rollup/rollup-linux-loong64-gnu": "4.59.0", - "@rollup/rollup-linux-loong64-musl": "4.59.0", - "@rollup/rollup-linux-ppc64-gnu": "4.59.0", - "@rollup/rollup-linux-ppc64-musl": "4.59.0", - "@rollup/rollup-linux-riscv64-gnu": "4.59.0", - "@rollup/rollup-linux-riscv64-musl": "4.59.0", - "@rollup/rollup-linux-s390x-gnu": "4.59.0", - "@rollup/rollup-linux-x64-gnu": "4.59.0", - "@rollup/rollup-linux-x64-musl": "4.59.0", - "@rollup/rollup-openbsd-x64": "4.59.0", - "@rollup/rollup-openharmony-arm64": "4.59.0", - "@rollup/rollup-win32-arm64-msvc": "4.59.0", - "@rollup/rollup-win32-ia32-msvc": "4.59.0", - "@rollup/rollup-win32-x64-gnu": "4.59.0", - "@rollup/rollup-win32-x64-msvc": "4.59.0", + "@rollup/rollup-android-arm-eabi": "4.62.2", + "@rollup/rollup-android-arm64": "4.62.2", + "@rollup/rollup-darwin-arm64": "4.62.2", + "@rollup/rollup-darwin-x64": "4.62.2", + "@rollup/rollup-freebsd-arm64": "4.62.2", + "@rollup/rollup-freebsd-x64": "4.62.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.2", + "@rollup/rollup-linux-arm-musleabihf": "4.62.2", + "@rollup/rollup-linux-arm64-gnu": "4.62.2", + "@rollup/rollup-linux-arm64-musl": "4.62.2", + "@rollup/rollup-linux-loong64-gnu": "4.62.2", + "@rollup/rollup-linux-loong64-musl": "4.62.2", + "@rollup/rollup-linux-ppc64-gnu": "4.62.2", + "@rollup/rollup-linux-ppc64-musl": "4.62.2", + "@rollup/rollup-linux-riscv64-gnu": "4.62.2", + "@rollup/rollup-linux-riscv64-musl": "4.62.2", + "@rollup/rollup-linux-s390x-gnu": "4.62.2", + "@rollup/rollup-linux-x64-gnu": "4.62.2", + "@rollup/rollup-linux-x64-musl": "4.62.2", + "@rollup/rollup-openbsd-x64": "4.62.2", + "@rollup/rollup-openharmony-arm64": "4.62.2", + "@rollup/rollup-win32-arm64-msvc": "4.62.2", + "@rollup/rollup-win32-ia32-msvc": "4.62.2", + "@rollup/rollup-win32-x64-gnu": "4.62.2", + "@rollup/rollup-win32-x64-msvc": "4.62.2", "fsevents": "~2.3.2" } }, "node_modules/vitest/node_modules/vite": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", - "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.5.tgz", + "integrity": "sha512-KuOaNhcnGFN2zIPGA7wRmzF+lJA1sea7rHq17aiJ++9lzY1WWG6Jpwqwe1KNbRVPIqHmr8GLYx7jbrQcN/7/ww==", "dev": true, + "license": "MIT", "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -13108,6 +14203,8 @@ "version": "0.294.0", "resolved": "https://registry.npmjs.org/lucide-svelte/-/lucide-svelte-0.294.0.tgz", "integrity": "sha512-jqQDL9bfZm3DzEhulRdPWWw88qQpS/w/fDAdgTsYXjij5I81HYFFxbDHpnSHes2oH9Eri5M3QQDgqV9xtqkyig==", + "deprecated": "Package deprecated. Please use @lucide/svelte instead.", + "license": "ISC", "peerDependencies": { "svelte": ">=3 <5" } @@ -13116,6 +14213,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/warning-symbol/-/warning-symbol-0.1.0.tgz", "integrity": "sha512-1S0lwbHo3kNUKA4VomBAhqn4DPjQkIKSdbOin5K7EFUQNwyIKx+wZMGXKI53RUjla8V2B8ouQduUlgtx8LoSMw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -13124,6 +14222,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -13136,6 +14235,7 @@ "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, + "license": "MIT", "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" @@ -13150,12 +14250,14 @@ "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": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", "integrity": "sha512-CJ17OoULEKXpA5pef3qLj5AxTJ6mSt7g84he2WIskKwqFO4T97d5V7Tadl0DYDk7qyUOQD5WlUlOMChaYrhxeA==", + "license": "MIT", "dependencies": { "mkdirp": "^0.5.1" }, @@ -13167,6 +14269,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/write-json/-/write-json-0.2.2.tgz", "integrity": "sha512-3HOXDnA8CgyaObzkxKPTHBw0feFlYMn9Mi8ZIrnoNJTTMABn+XOhmTsVlX/P/WeZuXEV9ApvQvR1fpZOOQ5FOg==", + "license": "MIT", "dependencies": { "write": "^0.2.1" }, @@ -13178,30 +14281,16 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", "engines": { "node": ">=0.4" } }, - "node_modules/yaml": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", - "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", - "dev": true, - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - }, - "funding": { - "url": "https://github.com/sponsors/eemeli" - } - }, "node_modules/yargs-parser": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", "integrity": "sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA==", + "license": "ISC", "dependencies": { "camelcase": "^3.0.0", "lodash.assign": "^4.0.6" @@ -13211,6 +14300,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -13220,6 +14310,7 @@ "resolved": "https://registry.npmjs.org/yup/-/yup-1.7.1.tgz", "integrity": "sha512-GKHFX2nXul2/4Dtfxhozv701jLQHdf6J34YDh2cEkpqoo8le5Mg6/LrdseVLrFarmFygZTlfIhHx/QKfb/QWXw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "property-expr": "^2.0.5", @@ -13233,6 +14324,7 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -13242,6 +14334,7 @@ "resolved": "https://registry.npmjs.org/zod-v3-to-json-schema/-/zod-v3-to-json-schema-4.0.0.tgz", "integrity": "sha512-KixLrhX/uPmRFnDgsZrzrk4x5SSJA+PmaE5adbfID9+3KPJcdxqRobaHU397EfWBqfQircrjKqvEqZ/mW5QH6w==", "dev": true, + "license": "ISC", "optional": true, "peerDependencies": { "zod": "^3.25 || ^4.0.14" diff --git a/src/lib/components/FileCard.svelte b/src/lib/components/FileCard.svelte index 5990987..cfb0efd 100644 --- a/src/lib/components/FileCard.svelte +++ b/src/lib/components/FileCard.svelte @@ -14,16 +14,13 @@ LayoutGrid, Users, Search, - ThumbsUp, - AlertTriangle, + ThumbsUp } from "lucide-svelte"; import DownloadSourceCard from "./DownloadSourceCard.svelte"; import ProfileSourceGroup from "./ProfileSourceGroup.svelte"; import Timeline from "./Timeline.svelte"; import { type ReputationProof } from "$lib/ergo/object"; import { type CachedData } from "$lib/ergo/sourceObject"; - import { Button } from "$lib/components/ui/button/index.js"; - import { Input } from "$lib/components/ui/input/index.js"; import { Label } from "$lib/components/ui/label/index.js"; export let fileHash: string; @@ -41,20 +38,6 @@ let viewMode: "source" | "profile" | "timeline" = "source"; - // Add Source State - let newSourceUrl = ""; - let isAddingSource = false; - let addError: string | null = null; - - // Helper to extract data from CachedData - function getInvalidations(boxId: string): InvalidFileSource[] { - return invalidFileSources[boxId]?.data || []; - } - - function getUnavailabilities(url: string): UnavailableSource[] { - return unavailableSources[url]?.data || []; - } - $: groupedBySource = groupByDownloadSource( sources, invalidFileSources, @@ -118,38 +101,6 @@ return events; })(); - - async function handleAddSource() { - if (!newSourceUrl.trim() || !profile) return; - - isAddingSource = true; - addError = null; - try { - // Create a simple source entry with just the URL (quick add) - const entry: SourceEntry = { - hashFunctionId: "", - contentFormat: "", - contentHash: "", - rawFormat: "", - urlLink: newSourceUrl.trim() - }; - - const tx = await addFileSource( - fileHash.trim(), - "", // hashFunctionId - entry, - profile, - explorerUri, - ); - console.log("Source added, tx:", tx); - newSourceUrl = ""; - } catch (err: any) { - console.error("Error adding source:", err); - addError = err?.message || "Failed to add source"; - } finally { - isAddingSource = false; - } - }
@@ -177,57 +128,6 @@ No sources found for this hash

- -
-

Add First Source

- -
- -

- Verify URLs before adding. They will be immutable on the - blockchain. -

-
- - {#if addError} -
-

{addError}

-
- {/if} - -
-
- - -
- - - - {#if !profile} -

- You must have a profile to add sources. -

- {/if} -
-
{:else}
Date: Tue, 23 Jun 2026 09:22:33 +0200 Subject: [PATCH 20/23] package log rebuild --- package-lock.json | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 816358c..a168b55 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9815,9 +9815,9 @@ } }, "node_modules/postcss-load-config": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", - "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-5.1.0.tgz", + "integrity": "sha512-G5AJ+IX0aD0dygOE0yFZQ/huFFMSNneyfp0e3/bT05a8OfPC5FUoZRPfGijUdGOJNMewJiwzcHJXFafFzeKFVA==", "dev": true, "funding": [ { @@ -9831,7 +9831,8 @@ ], "license": "MIT", "dependencies": { - "lilconfig": "^3.1.1" + "lilconfig": "^3.1.1", + "yaml": "^2.4.2" }, "engines": { "node": ">= 18" @@ -9839,8 +9840,7 @@ "peerDependencies": { "jiti": ">=1.21.0", "postcss": ">=8.0.9", - "tsx": "^4.8.1", - "yaml": "^2.4.2" + "tsx": "^4.8.1" }, "peerDependenciesMeta": { "jiti": { @@ -9851,9 +9851,6 @@ }, "tsx": { "optional": true - }, - "yaml": { - "optional": true } } }, @@ -14286,6 +14283,22 @@ "node": ">=0.4" } }, + "node_modules/yaml": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, "node_modules/yargs-parser": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", From e03dfa17435ed8085c97793e1d04acd7d914e1a1 Mon Sep 17 00:00:00 2001 From: Captain Efficiency Date: Sat, 27 Jun 2026 07:23:18 -0400 Subject: [PATCH 21/23] feat: full-surface MCP server + Celaut .service (MCP HTTP + REST) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mirror the celaut-skills / reputation-system pattern for source-application: mcp/ (stdio MCP, full surface) - core.mjs framework-agnostic reads + pure helpers (Svelte-free port of sourceFetch.ts + sourceObject.ts); Explorer search via reputation-system/node - lib.mjs makeSigner (SOURCE_SIGNER_MODE=seed|unsigned), fetchMainBox, describeResult - writes.mjs port of sourceStore.ts via create_*_with_signer - tools.mjs shared TOOLS + HANDLERS (27 tools) - server.mjs stdio bootstrap (console routed to stderr to keep JSON-RPC clean) .service/ (Celaut microVM) - server-http.mjs 0.0.0.0:8080 — /health, /mcp (Streamable HTTP, same tools), and a REST API (/api/*) mirroring every method - core/lib/writes/tools.mjs copies of the mcp/ modules - Dockerfile, service.json (port 8080 http, api.ergoplatform.com net tag), start.sh, pack_config.json, package.json, README.md Both transports back every read and write with a SEED signer or an UNSIGNED signer; unsigned mode keeps no key in the process and returns an unsigned tx. Co-Authored-By: Claude Opus 4.8 --- .service/Dockerfile | 21 + .service/README.md | 89 + .service/core.mjs | 470 ++ .service/lib.mjs | 109 + .service/pack_config.json | 8 + .service/package-lock.json | 9762 ++++++++++++++++++++++++++++++++++++ .service/package.json | 19 + .service/server-http.mjs | 243 + .service/service.json | 30 + .service/start.sh | 7 + .service/tools.mjs | 302 ++ .service/writes.mjs | 144 + mcp/README.md | 53 + mcp/core.mjs | 470 ++ mcp/lib.mjs | 109 + mcp/package-lock.json | 9762 ++++++++++++++++++++++++++++++++++++ mcp/package.json | 20 + mcp/server.mjs | 52 + mcp/tools.mjs | 302 ++ mcp/writes.mjs | 144 + 20 files changed, 22116 insertions(+) create mode 100644 .service/Dockerfile create mode 100644 .service/README.md create mode 100644 .service/core.mjs create mode 100644 .service/lib.mjs create mode 100644 .service/pack_config.json create mode 100644 .service/package-lock.json create mode 100644 .service/package.json create mode 100644 .service/server-http.mjs create mode 100644 .service/service.json create mode 100644 .service/start.sh create mode 100644 .service/tools.mjs create mode 100644 .service/writes.mjs create mode 100644 mcp/README.md create mode 100644 mcp/core.mjs create mode 100644 mcp/lib.mjs create mode 100644 mcp/package-lock.json create mode 100644 mcp/package.json create mode 100644 mcp/server.mjs create mode 100644 mcp/tools.mjs create mode 100644 mcp/writes.mjs diff --git a/.service/Dockerfile b/.service/Dockerfile new file mode 100644 index 0000000..a4c6245 --- /dev/null +++ b/.service/Dockerfile @@ -0,0 +1,21 @@ +# Celaut builds this image only to export its filesystem (docker buildx +# --output type=tar); the container is never run directly. CMD/ENTRYPOINT, +# EXPOSE and runtime ENV are intentionally omitted — the entrypoint, ports and +# envs are declared in service.json. Relative ./ COPY paths are auto-adjusted +# to service/... by the packer when this Dockerfile is moved into .service/. +FROM node:20-slim + +WORKDIR /app + +# Production deps only (better layer caching: deps before source). +COPY ./package.json /app/package.json +RUN npm install --omit=dev --no-audit --no-fund + +# Application: HTTP+REST MCP server + shared registry core/lib/writes/tools + init wrapper. +COPY ./server-http.mjs /app/server-http.mjs +COPY ./core.mjs /app/core.mjs +COPY ./lib.mjs /app/lib.mjs +COPY ./writes.mjs /app/writes.mjs +COPY ./tools.mjs /app/tools.mjs +COPY ./start.sh /app/start.sh +RUN chmod +x /app/start.sh diff --git a/.service/README.md b/.service/README.md new file mode 100644 index 0000000..5908336 --- /dev/null +++ b/.service/README.md @@ -0,0 +1,89 @@ +# Source Application — Celaut Service (MCP + REST) + +A sealed Celaut microVM that exposes the **full** Source Application on-chain +file-source registry surface over plain HTTP on `0.0.0.0:8080`: + +- `GET /health` — liveness probe. +- `* /mcp` — the complete MCP tool surface (Streamable HTTP transport), identical + to the stdio server in [`../mcp/`](../mcp). +- `* /api/*` — a clean JSON REST mirror of every method (reads via `GET`, writes + via `POST`). + +Reads + pure helpers live in `core.mjs`; writes in `writes.mjs` (env-configured +signer in `lib.mjs`); the shared MCP tool registry is `tools.mjs`. The MCP and +REST layers call the same functions, so they never diverge. These four modules +are byte-for-byte copies of the ones under `../mcp/`. + +## Run locally + +```bash +npm install +npm start # binds 0.0.0.0:8080 +curl localhost:8080/health +``` + +## Signer modes (env) + +Default is **unsigned** — no key ever lives in the VM; writes return an unsigned +EIP-12 transaction for an external wallet (Nautilus/ErgoPay) to sign. + +| Mode | Env | +|------------|-------------------------------------------------------------------------------------| +| `unsigned` | `SOURCE_SIGNER_MODE=unsigned`, `SOURCE_ADDRESS=` (default) | +| `seed` | `SOURCE_SIGNER_MODE=seed`, `SOURCE_MNEMONIC=...`, optional `SOURCE_MNEMONIC_PASSWORD`, `SOURCE_NODE_URI`, `SOURCE_ADDRESS_INDEX` | + +Other env: `SOURCE_EXPLORER_API` (default `https://api.ergoplatform.com`), +`PORT` (default `8080`). + +## REST routes + +Reads (GET): + +| Route | Maps to | +|-------|---------| +| `GET /api/config` | type NFT ids + signer mode | +| `GET /api/sources?hash=HASH` | `fetchFileSourcesByHash` | +| `GET /api/sources/by-profile?profileTokenId=ID&limit=N` | `fetchFileSourcesByProfile` | +| `GET /api/sources/:boxId/invalidations` | `fetchInvalidFileSources` | +| `GET /api/unavailable?url=URL` | `fetchUnavailableSources` | +| `GET /api/invalidations/by-profile?profileTokenId=ID&limit=N` | `fetchInvalidFileSourcesByProfile` | +| `GET /api/unavailable/by-profile?profileTokenId=ID&limit=N` | `fetchUnavailableSourcesByProfile` | +| `GET /api/profiles/:profileTokenId/opinions` | `fetchProfileOpinions` | +| `GET /api/profiles/:authorTokenId/opinions-given` | `fetchProfileOpinionsByAuthor` | +| `GET /api/profiles/:profileTokenId` | `loadProfileData` | +| `GET /api/search?hash=HASH` | `searchByHash` | +| `GET /api/hash-algorithms` | `HASH_OPTIONS` | + +Writes (POST, signed per `SOURCE_SIGNER_MODE`): + +| Route | Body | Maps to | +|-------|------|---------| +| `POST /api/profile` | `{content?}` | `createProfileBox` | +| `POST /api/sources` | `{mainBoxId, fileHash, sourceEntry}` | `addFileSource` | +| `POST /api/sources/confirm` | `{mainBoxId, fileHash, sourceEntry}` | `confirmSource` | +| `POST /api/sources/update` | `{mainBoxId, fileHash, sourceEntry}` | `updateFileSource` (see note) | +| `POST /api/sources/invalidate` | `{mainBoxId, sourceBoxId}` | `markInvalidSource` | +| `POST /api/unavailable` | `{mainBoxId, sourceUrl}` | `markUnavailableSource` | +| `POST /api/profiles/trust` | `{mainBoxId, profileTokenId, isTrusted}` | `trustProfile` | + +`sourceEntry` = `{hashFunctionId, contentFormat, contentHash, rawFormat, urlLink, isChunked?}`. + +`mainBoxId` is the author's **PROFILE box** id (the box holding their reputation +token); every opinion is split from it. + +### Note on `update_file_source` + +The original browser flow spends the previous FILE_SOURCE box via +`update_opinion` (a Nautilus-only path). The headless `reputation-system/node` +entry exposes `create_*_with_signer` but **not** `update_opinion_with_signer`, so +here `update_file_source` publishes a **new** FILE_SOURCE opinion carrying the +new content for the same hash; the previous box is left in place (it can be +invalidated separately). + +## Type NFT placeholders + +`INVALID_FILE_SOURCE_TYPE_NFT_ID`, `UNAVAILABLE_SOURCE_TYPE_NFT_ID`, and +`PROFILE_OPINION_TYPE_NFT_ID` are still PLACEHOLDER (all-zero) values in +`src/lib/ergo/envs.ts`; they are preserved verbatim. Reads against them simply +return empty arrays until the real Type NFTs are minted. `FILE_SOURCE_TYPE_NFT_ID` +and `PROFILE_TYPE_NFT_ID` are real and return live data. diff --git a/.service/core.mjs b/.service/core.mjs new file mode 100644 index 0000000..a4f8253 --- /dev/null +++ b/.service/core.mjs @@ -0,0 +1,470 @@ +// @ts-nocheck — plain-ESM runtime module shared by the stdio MCP server, the +// HTTP/REST `.service`, and any bare-Node script. It mirrors the read surface of +// `src/lib/ergo/sourceFetch.ts` + the pure helpers of `src/lib/ergo/sourceObject.ts`, +// but is NOT TypeScript-checked and carries NO Svelte/Vite dependency. +/** + * Source Application registry — framework-agnostic data core. + * + * This is the SINGLE source of truth for the on-chain Source Application read + * layer outside the browser: the Type NFT ids, the box queries, the R9 + * (source-entry) parsers, the `fetch*` reads, and the pure aggregation helpers. + * + * The Explorer box search + block-timestamp lookup are imported from + * `reputation-system/node` — the headless, Node-safe entry of the reputation + * library (no `.svelte` imports in its graph). This is the SAME `searchBoxes` + * the Svelte app uses via `reputation-system`, so the reads never drift from the + * app, and they include the required reputation-proof `ergoTreeTemplateHash` + * filter that the Explorer's `/boxes/unspent/search` endpoint demands. + * + * Type NFT ids are copied verbatim from `src/lib/ergo/envs.ts`. Several are + * PLACEHOLDER values (all-zero hex); they are preserved as-is. Queries against a + * non-real Type NFT simply match no boxes and return a clean empty array, so the + * read tools degrade gracefully rather than throwing. + */ +import { searchBoxes, getTimestampFromBlockId } from 'reputation-system/node'; + +// ── Type NFT ids (verbatim from src/lib/ergo/envs.ts) ─────────────────────── +export const PROFILE_TYPE_NFT_ID = '1820fd428a0b92d61ce3f86cd98240fdeeee8a392900f0b19a2e017d66f79926'; +export const PROFILE_TOTAL_SUPPLY = 99999999; +export const FILE_SOURCE_TYPE_NFT_ID = '8299d98e15ebee7fa39ad716de7c8bb191790a1bf4b7c3f91af35a0e36187706'; +export const INVALID_FILE_SOURCE_TYPE_NFT_ID = '0000000000000000000000000000000000000000000000000000000000000002'; +export const UNAVAILABLE_SOURCE_TYPE_NFT_ID = '0000000000000000000000000000000000000000000000000000000000000003'; +export const PROFILE_OPINION_TYPE_NFT_ID = '0000000000000000000000000000000000000000000000000000000000000004'; + +export const DEFAULT_EXPLORER_API = + (typeof process !== 'undefined' && process.env && process.env.SOURCE_EXPLORER_API) || + 'https://api.ergoplatform.com'; + +export const isHexId = (v) => typeof v === 'string' && /^[0-9a-fA-F]{4,}$/.test(v); + +/** Decode a hex string (Explorer Coll[Byte] renderedValue) to UTF-8 text. */ +export function hexToUtf8(hexString) { + if (!hexString || typeof hexString !== 'string' || hexString.length % 2 !== 0) return null; + try { + const bytes = new Uint8Array(hexString.match(/.{1,2}/g).map((b) => parseInt(b, 16))); + return new TextDecoder('utf-8').decode(bytes); + } catch { + return null; + } +} + +// ── Source-entry (R9) serialization — verbatim from sourceObject.ts ───────── + +/** + * Serialize a SourceEntry to the R9 JSON string (Coll[Coll[Byte]] shape): + * [[hashFunctionId, contentFormat, contentHash, rawFormat, urlLink, isChunked]] + */ +export function serializeSourceEntry(entry) { + const tuple = [ + entry.hashFunctionId || '', + entry.contentFormat || '', + entry.contentHash || '', + entry.rawFormat || '', + entry.urlLink || '', + entry.isChunked ?? false + ]; + return JSON.stringify([tuple]); +} + +/** Deserialize an R9 content string into a SourceEntry (tuple/object/legacy-url). */ +export function deserializeSourceEntry(content) { + const empty = { hashFunctionId: '', contentFormat: '', contentHash: '', rawFormat: '', urlLink: '' }; + if (!content || content.trim() === '') return empty; + try { + const parsed = JSON.parse(content); + if (Array.isArray(parsed) && parsed.length > 0) { + const tuple = parsed[0]; + if (Array.isArray(tuple) && tuple.length >= 5) { + return { + hashFunctionId: tuple[0] || '', + contentFormat: tuple[1] || '', + contentHash: tuple[2] || '', + rawFormat: tuple[3] || '', + urlLink: tuple[4] || '', + isChunked: tuple[5] === true + }; + } + if (typeof tuple === 'object' && tuple !== null && !Array.isArray(tuple)) { + return { + hashFunctionId: tuple.hashFunctionId || '', + contentFormat: tuple.contentFormat || tuple.contentFormatNftId || '', + contentHash: tuple.contentHash || '', + rawFormat: tuple.rawFormat || tuple.rawFormatNftId || '', + urlLink: tuple.urlLink || '', + isChunked: tuple.isChunked === true + }; + } + } + } catch { + // not JSON — legacy plain URL string + } + return { hashFunctionId: '', contentFormat: '', contentHash: '', rawFormat: '', urlLink: content, isChunked: false }; +} + +// ── Internal helpers ──────────────────────────────────────────────────────── + +async function collectBoxes(generator) { + const boxes = []; + for await (const batch of generator) boxes.push(...batch); + return boxes; +} + +/** Block timestamp for a box; non-critical, so failures degrade to 0. */ +async function boxTimestamp(explorerUri, box) { + if (!box || !box.blockId) return 0; + try { + return await getTimestampFromBlockId(explorerUri, box.blockId); + } catch { + return 0; + } +} + +function parseR9SourceEntry(box) { + const rendered = box?.additionalRegisters?.R9?.renderedValue; + const raw = rendered ? hexToUtf8(rendered) : ''; + return deserializeSourceEntry(raw || ''); +} + +// ── Reads (port of src/lib/ergo/sourceFetch.ts, Svelte-free) ──────────────── +// Positional searchBoxes args (from reputation-system/node): +// (explorerUri, tokenId, typeNftId, objectPointer, isLocked, polarization, +// content, ownerAddress, limit, offset) + +/** All FILE_SOURCE boxes for a specific file hash. */ +export async function fetchFileSourcesByHash(fileHash, explorerUri = DEFAULT_EXPLORER_API) { + if (!isHexId(FILE_SOURCE_TYPE_NFT_ID)) return []; + const boxes = await collectBoxes( + searchBoxes(explorerUri, undefined, FILE_SOURCE_TYPE_NFT_ID, fileHash, undefined, undefined, undefined, undefined, undefined, undefined) + ); + const sources = []; + for (const box of boxes) { + if (!box.assets?.length) continue; + if (box.additionalRegisters.R6?.renderedValue !== 'false') continue; + if (!box.additionalRegisters.R9?.renderedValue) continue; + const sourceEntry = parseR9SourceEntry(box); + sources.push({ + id: box.boxId, + fileHash, + hashFunctionId: sourceEntry.hashFunctionId || '', + source: sourceEntry, + ownerTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await boxTimestamp(explorerUri, box), + isLocked: false, + transactionId: box.transactionId + }); + } + sources.sort((a, b) => b.timestamp - a.timestamp); + return sources; +} + +/** All INVALID_FILE_SOURCE boxes targeting a specific source box id. */ +export async function fetchInvalidFileSources(sourceBoxId, explorerUri = DEFAULT_EXPLORER_API) { + if (!isHexId(INVALID_FILE_SOURCE_TYPE_NFT_ID)) return []; + const boxes = await collectBoxes( + searchBoxes(explorerUri, undefined, INVALID_FILE_SOURCE_TYPE_NFT_ID, sourceBoxId, undefined, undefined, undefined, undefined, undefined, undefined) + ); + const out = []; + for (const box of boxes) { + if (!box.assets?.length) continue; + out.push({ + id: box.boxId, + targetBoxId: sourceBoxId, + authorTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await boxTimestamp(explorerUri, box), + transactionId: box.transactionId + }); + } + return out; +} + +/** All UNAVAILABLE_SOURCE boxes for a specific URL. */ +export async function fetchUnavailableSources(sourceUrl, explorerUri = DEFAULT_EXPLORER_API) { + if (!isHexId(UNAVAILABLE_SOURCE_TYPE_NFT_ID)) return []; + const boxes = await collectBoxes( + searchBoxes(explorerUri, undefined, UNAVAILABLE_SOURCE_TYPE_NFT_ID, sourceUrl, undefined, undefined, undefined, undefined, undefined, undefined) + ); + const out = []; + for (const box of boxes) { + if (!box.assets?.length) continue; + out.push({ + id: box.boxId, + sourceUrl, + authorTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await boxTimestamp(explorerUri, box), + transactionId: box.transactionId + }); + } + return out; +} + +/** All PROFILE_OPINION boxes targeting a specific profile token id. */ +export async function fetchProfileOpinions(profileTokenId, explorerUri = DEFAULT_EXPLORER_API) { + if (!isHexId(PROFILE_OPINION_TYPE_NFT_ID)) return []; + const boxes = await collectBoxes( + searchBoxes(explorerUri, undefined, PROFILE_OPINION_TYPE_NFT_ID, profileTokenId, undefined, undefined, undefined, undefined, undefined, undefined) + ); + const out = []; + for (const box of boxes) { + if (!box.assets?.length) continue; + if (box.additionalRegisters.R6?.renderedValue === 'false') continue; + out.push({ + id: box.boxId, + targetProfileTokenId: profileTokenId, + isTrusted: box.additionalRegisters.R8?.renderedValue === 'true', + authorTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await boxTimestamp(explorerUri, box), + transactionId: box.transactionId + }); + } + return out; +} + +/** FILE_SOURCE boxes created by a specific profile token id. */ +export async function fetchFileSourcesByProfile(profileTokenId, limit = 50, explorerUri = DEFAULT_EXPLORER_API) { + if (!isHexId(FILE_SOURCE_TYPE_NFT_ID)) return []; + const boxes = await collectBoxes( + searchBoxes(explorerUri, profileTokenId, FILE_SOURCE_TYPE_NFT_ID, undefined, undefined, undefined, undefined, undefined, limit, undefined) + ); + const sources = []; + for (const box of boxes) { + if (!box.assets?.length) continue; + if (box.additionalRegisters.R6?.renderedValue !== 'false') continue; + if (!box.additionalRegisters.R9?.renderedValue) continue; + const fileHash = box.additionalRegisters.R5?.renderedValue || '[Unknown]'; + const sourceEntry = parseR9SourceEntry(box); + sources.push({ + id: box.boxId, + fileHash, + hashFunctionId: sourceEntry.hashFunctionId || '', + source: sourceEntry, + ownerTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await boxTimestamp(explorerUri, box), + isLocked: false, + transactionId: box.transactionId + }); + } + sources.sort((a, b) => b.timestamp - a.timestamp); + return sources; +} + +/** INVALID_FILE_SOURCE boxes created by a specific profile. */ +export async function fetchInvalidFileSourcesByProfile(profileTokenId, limit = 50, explorerUri = DEFAULT_EXPLORER_API) { + if (!isHexId(INVALID_FILE_SOURCE_TYPE_NFT_ID)) return []; + const boxes = await collectBoxes( + searchBoxes(explorerUri, profileTokenId, INVALID_FILE_SOURCE_TYPE_NFT_ID, undefined, undefined, undefined, undefined, undefined, limit, undefined) + ); + const out = []; + for (const box of boxes) { + if (!box.assets?.length) continue; + out.push({ + id: box.boxId, + targetBoxId: hexToUtf8(box.additionalRegisters.R5?.renderedValue || '') || '', + authorTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await boxTimestamp(explorerUri, box), + transactionId: box.transactionId + }); + } + return out; +} + +/** UNAVAILABLE_SOURCE boxes created by a specific profile. */ +export async function fetchUnavailableSourcesByProfile(profileTokenId, limit = 50, explorerUri = DEFAULT_EXPLORER_API) { + if (!isHexId(UNAVAILABLE_SOURCE_TYPE_NFT_ID)) return []; + const boxes = await collectBoxes( + searchBoxes(explorerUri, profileTokenId, UNAVAILABLE_SOURCE_TYPE_NFT_ID, undefined, undefined, undefined, undefined, undefined, limit, undefined) + ); + const out = []; + for (const box of boxes) { + if (!box.assets?.length) continue; + out.push({ + id: box.boxId, + sourceUrl: hexToUtf8(box.additionalRegisters.R5?.renderedValue || '') || '', + authorTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await boxTimestamp(explorerUri, box), + transactionId: box.transactionId + }); + } + return out; +} + +/** PROFILE_OPINION boxes created by a specific author token id. */ +export async function fetchProfileOpinionsByAuthor(authorTokenId, explorerUri = DEFAULT_EXPLORER_API) { + if (!isHexId(PROFILE_OPINION_TYPE_NFT_ID)) return []; + const boxes = await collectBoxes( + searchBoxes(explorerUri, authorTokenId, PROFILE_OPINION_TYPE_NFT_ID, undefined, undefined, undefined, undefined, undefined, undefined, undefined) + ); + const out = []; + for (const box of boxes) { + if (!box.assets?.length) continue; + out.push({ + id: box.boxId, + targetProfileTokenId: hexToUtf8(box.additionalRegisters.R5?.renderedValue || '') || '', + isTrusted: box.additionalRegisters.R8?.renderedValue === 'true', + authorTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await boxTimestamp(explorerUri, box), + transactionId: box.transactionId + }); + } + return out; +} + +/** Full search by file hash: sources + their invalidations + URL unavailabilities. */ +export async function searchByHash(fileHash, explorerUri = DEFAULT_EXPLORER_API) { + const sources = await fetchFileSourcesByHash(fileHash, explorerUri); + const invalidations = {}; + const unavailabilities = {}; + for (const source of sources) { + const invs = await fetchInvalidFileSources(source.id, explorerUri); + if (invs.length > 0) invalidations[source.id] = invs; + const url = source.source?.urlLink; + if (url && !unavailabilities[url]) { + const unavs = await fetchUnavailableSources(url, explorerUri); + if (unavs.length > 0) unavailabilities[url] = unavs; + } + } + return { sources, invalidations, unavailabilities }; +} + +/** All data related to a profile: its sources, invalidations, unavailabilities, opinions received + given. */ +export async function loadProfileData(profileTokenId, explorerUri = DEFAULT_EXPLORER_API) { + const sources = await fetchFileSourcesByProfile(profileTokenId, 50, explorerUri); + const invalidations = await fetchInvalidFileSourcesByProfile(profileTokenId, 50, explorerUri); + const unavailabilities = await fetchUnavailableSourcesByProfile(profileTokenId, 50, explorerUri); + const opinions = await fetchProfileOpinions(profileTokenId, explorerUri); + const opinionsGiven = await fetchProfileOpinionsByAuthor(profileTokenId, explorerUri); + return { sources, invalidations, unavailabilities, opinions, opinionsGiven }; +} + +// ── Pure helpers (verbatim from sourceObject.ts) ──────────────────────────── + +export function getPrimaryUrl(source) { + return source?.source?.urlLink || ''; +} + +export function getAllUrls(source) { + return source?.source?.urlLink ? [source.source.urlLink] : []; +} + +export function groupByDownloadSource(sources, invalidationsMap = {}, unavailabilitiesMap = {}) { + const groups = {}; + for (const source of sources) { + const url = source.source?.urlLink; + if (!url) continue; + if (!groups[url]) { + groups[url] = { + sourceUrl: url, + sources: [], + owners: [], + invalidations: [], + unavailabilities: unavailabilitiesMap[url]?.data || [] + }; + } + if (!groups[url].sources.some((s) => s.id === source.id)) groups[url].sources.push(source); + if (!groups[url].owners.includes(source.ownerTokenId)) groups[url].owners.push(source.ownerTokenId); + const boxInvalidations = invalidationsMap[source.id]?.data || []; + groups[url].invalidations.push(...boxInvalidations); + } + return Object.values(groups).sort((a, b) => b.sources.length - a.sources.length); +} + +export function groupByProfile(sources) { + const groups = {}; + for (const source of sources) { + if (!groups[source.ownerTokenId]) { + groups[source.ownerTokenId] = { profileTokenId: source.ownerTokenId, sources: [] }; + } + groups[source.ownerTokenId].sources.push(source); + } + return Object.values(groups).sort((a, b) => b.sources.length - a.sources.length); +} + +export function calculateProfileTrust(profileTokenId, opinions) { + const trust = opinions.filter((o) => o.isTrusted).reduce((s, o) => s + o.reputationAmount, 0); + const distrust = opinions.filter((o) => !o.isTrusted).reduce((s, o) => s + o.reputationAmount, 0); + return trust - distrust; +} + +export function aggregateSourceScore(source, allSources, invalidations, unavailabilities, profileOpinions = []) { + const sourceUrl = source.source?.urlLink || ''; + const confirmations = allSources.filter( + (s) => s.id !== source.id && s.fileHash === source.fileHash && s.source?.urlLink === sourceUrl + ); + const filteredInvalidations = invalidations.filter((inv) => inv.targetBoxId === source.id); + const filteredUnavailabilities = unavailabilities.filter((un) => un.sourceUrl === sourceUrl); + const confirmationScore = confirmations.reduce((s, x) => s + x.reputationAmount, 0); + const invalidationScore = filteredInvalidations.reduce((s, x) => s + x.reputationAmount, 0); + const unavailabilityScore = filteredUnavailabilities.reduce((s, x) => s + x.reputationAmount, 0); + const ownerTrustScore = calculateProfileTrust(source.ownerTokenId, profileOpinions); + return { + ...source, + confirmations, + invalidations: filteredInvalidations, + unavailabilities: filteredUnavailabilities, + confirmationScore, + invalidationScore, + unavailabilityScore, + ownerTrustScore + }; +} + +// ── Hash helpers (from src/lib/ergo/hashUtils.ts) ─────────────────────────── + +export const HASH_ALGORITHMS = [ + { label: 'SHA3-256', value: 'sha3_256' }, + { label: 'Blake2b', value: 'blake2b' }, + { label: 'SHA-256', value: 'sha256' }, + { label: 'Keccak-256', value: 'keccak256' } +]; +export const HASH_OPTIONS = [...HASH_ALGORITHMS, { label: 'Custom', value: '__custom__' }]; +export const SEARCH_HASH_ALGORITHMS = HASH_ALGORITHMS; + +function uint8ArrayToHex(array) { + return [...array].map((x) => x.toString(16).padStart(2, '0')).join(''); +} + +/** Compute the hex hash of bytes with a known algorithm id, or null if unknown/custom. */ +export async function computeHash(data, algorithmId) { + const { sha256 } = await import('@noble/hashes/sha256'); + const { sha3_256, keccak_256 } = await import('@noble/hashes/sha3'); + const { blake2b } = await import('@noble/hashes/blake2b'); + switch (algorithmId) { + case 'sha256': + return uint8ArrayToHex(sha256(data)); + case 'sha3_256': + return uint8ArrayToHex(sha3_256(data)); + case 'keccak256': + return uint8ArrayToHex(keccak_256(data)); + case 'blake2b': + return uint8ArrayToHex(blake2b(data, { dkLen: 32 })); + default: + return null; + } +} + +/** Validate a hex hash for an algorithm. Returns null if valid, else an error string. */ +export function validateHash(hash, algorithmId) { + if (!hash || hash.trim() === '') return 'Hash cannot be empty'; + const trimmed = hash.trim(); + if (!/^[0-9a-fA-F]+$/.test(trimmed)) return 'Hash must contain only hexadecimal characters (0-9, a-f)'; + switch (algorithmId) { + case 'sha3_256': + case 'sha256': + case 'keccak256': + if (trimmed.length !== 64) return `${algorithmId} hash must be exactly 64 hex characters (256-bit). Got ${trimmed.length}.`; + break; + case 'blake2b': + if (trimmed.length !== 64 && trimmed.length !== 128) return `Blake2b hash must be 64 or 128 hex characters. Got ${trimmed.length}.`; + break; + default: + break; + } + return null; +} diff --git a/.service/lib.mjs b/.service/lib.mjs new file mode 100644 index 0000000..5eb24f4 --- /dev/null +++ b/.service/lib.mjs @@ -0,0 +1,109 @@ +/** + * Signer + main-box helpers for the Source Application MCP / `.service`. + * + * Source Application writes ARE reputation opinions (a FILE_SOURCE is a positive + * opinion against the FILE_SOURCE Type NFT; an invalidation/unavailability/trust + * are opinions against their respective Type NFTs). So publishing reuses the + * reputation library's headless Node entry exactly like + * `reputation-system/mcp/lib.mjs`: a Signer is built from the environment and + * passed to `create_profile_with_signer` / `create_opinion_with_signer`. + */ +import { SeedSigner, UnsignedSigner } from 'reputation-system/node'; + +export const EXPLORER_API = process.env.SOURCE_EXPLORER_API || 'https://api.ergoplatform.com'; + +/** + * Build the configured Signer from environment. + * + * SOURCE_SIGNER_MODE=seed – sign + submit autonomously with a mnemonic. + * SOURCE_MNEMONIC (required) BIP-39 mnemonic of the publishing wallet. + * SOURCE_MNEMONIC_PASSWORD optional BIP-39 passphrase. + * SOURCE_NODE_URI Ergo node for submission (default :9053). + * SOURCE_ADDRESS_INDEX change-path index (default 0). + * + * SOURCE_SIGNER_MODE=unsigned – build only; return the unsigned EIP-12 tx for + * an external wallet to sign. No key in the + * agent. (default) + * SOURCE_ADDRESS (required) the P2PK address whose UTXOs fund the tx. + */ +export function makeSigner() { + const mode = (process.env.SOURCE_SIGNER_MODE || 'unsigned').toLowerCase(); + if (mode === 'seed') { + const mnemonic = process.env.SOURCE_MNEMONIC; + if (!mnemonic) throw new Error('SOURCE_SIGNER_MODE=seed requires SOURCE_MNEMONIC.'); + return new SeedSigner({ + mnemonic, + password: process.env.SOURCE_MNEMONIC_PASSWORD, + addressIndex: process.env.SOURCE_ADDRESS_INDEX ? Number(process.env.SOURCE_ADDRESS_INDEX) : 0, + explorerUri: EXPLORER_API, + nodeUri: process.env.SOURCE_NODE_URI + }); + } + if (mode === 'unsigned') { + const address = process.env.SOURCE_ADDRESS; + if (!address) throw new Error('SOURCE_SIGNER_MODE=unsigned requires SOURCE_ADDRESS.'); + return new UnsignedSigner({ address, explorerUri: EXPLORER_API }); + } + throw new Error(`Unknown SOURCE_SIGNER_MODE: ${mode} (expected 'seed' or 'unsigned').`); +} + +/** Return the active signer mode (without constructing a signer / requiring keys). */ +export function signerMode() { + return (process.env.SOURCE_SIGNER_MODE || 'unsigned').toLowerCase(); +} + +/** + * Fetch a reputation-proof box by id and shape it into the RPBox `main_box` that + * `create_opinion_with_signer` consumes. R4 (rendered) is its Type NFT id, which + * the contract requires as a data input. For Source Application writes this is + * the author's PROFILE box (the box that holds their reputation token). + */ +export async function fetchMainBox(mainBoxId) { + if (!/^[0-9a-fA-F]{64}$/.test(mainBoxId || '')) { + throw new Error(`mainBoxId must be a 64-char hex box id (got: ${mainBoxId}).`); + } + const res = await fetch(`${EXPLORER_API}/api/v1/boxes/${mainBoxId}`); + if (!res.ok) throw new Error(`Failed to fetch main box ${mainBoxId}: HTTP ${res.status}`); + const box = await res.json(); + + const reputationTokenId = box?.assets?.[0]?.tokenId; + if (!reputationTokenId) { + throw new Error(`Box ${mainBoxId} holds no reputation token; not a valid main box.`); + } + + return { + box: { + boxId: box.boxId, + value: box.value.toString(), + assets: (box.assets ?? []).map((a) => ({ tokenId: a.tokenId, amount: a.amount.toString() })), + ergoTree: box.ergoTree, + creationHeight: box.creationHeight, + additionalRegisters: Object.entries(box.additionalRegisters ?? {}).reduce((acc, [k, v]) => { + acc[k] = v.serializedValue; + return acc; + }, {}), + index: box.index ?? 0, + transactionId: box.transactionId + }, + box_id: box.boxId, + type: { tokenId: box?.additionalRegisters?.R4?.renderedValue || '' }, + token_id: reputationTokenId, + token_amount: Number(box.assets[0].amount), + object_pointer: box?.additionalRegisters?.R5?.renderedValue || '', + is_locked: box?.additionalRegisters?.R6?.renderedValue === 'true', + polarization: box?.additionalRegisters?.R8?.renderedValue === 'true', + content: {} + }; +} + +/** Normalize a SignerResult into an MCP/REST-friendly payload. */ +export function describeResult(result) { + if (result.kind === 'submitted') { + return { submitted: true, txId: result.txId }; + } + return { + submitted: false, + unsignedTransaction: result.transaction, + note: 'Transaction built but not signed. Sign + submit with an external wallet (Nautilus/ErgoPay).' + }; +} diff --git a/.service/pack_config.json b/.service/pack_config.json new file mode 100644 index 0000000..d4a222a --- /dev/null +++ b/.service/pack_config.json @@ -0,0 +1,8 @@ +{ + "ignore": [ + "node_modules/", + ".git/", + "*.celaut", + "*.md" + ] +} diff --git a/.service/package-lock.json b/.service/package-lock.json new file mode 100644 index 0000000..4e421ce --- /dev/null +++ b/.service/package-lock.json @@ -0,0 +1,9762 @@ +{ + "name": "source-application-service", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "source-application-service", + "version": "0.1.0", + "dependencies": { + "@modelcontextprotocol/sdk": "^1.29.0", + "@noble/hashes": "^1.4.0", + "reputation-system": "github:agenticaihome/reputation-system#fix/seed-signer-derivation" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@dagrejs/dagre": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@dagrejs/dagre/-/dagre-1.1.8.tgz", + "integrity": "sha512-5SEDlndt4W/LaVzPYJW+bSmSEZc9EzTf8rJ20WCKvjS5EAZAN0b+x0Yww7VMT4R3Wootkg+X9bUfUxazYw6Blw==", + "license": "MIT", + "dependencies": { + "@dagrejs/graphlib": "2.2.4" + } + }, + "node_modules/@dagrejs/graphlib": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@dagrejs/graphlib/-/graphlib-2.2.4.tgz", + "integrity": "sha512-mepCf/e9+SKYy1d02/UkvSy6+6MoyXhVxP8lLDfA7BPE1X1d4dR0sZznmbM8/XVJ1GPM+Svnx7Xj6ZweByWUkw==", + "license": "MIT", + "engines": { + "node": ">17.0.0" + } + }, + "node_modules/@fleet-sdk/common": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@fleet-sdk/common/-/common-0.10.0.tgz", + "integrity": "sha512-N92zENyHYhKtKxhJ6jJbWgV3PCkCGM0LYLmn6OOXNqDVbwT9UFgHOTt7eXFd9tqIhwMMPCnlffNe4c+P+CnsJA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@fleet-sdk/compiler": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@fleet-sdk/compiler/-/compiler-0.12.0.tgz", + "integrity": "sha512-WH05qMRmWe8qTI1oX2NZ3qJobp2ZYPh3DqAAtKRPxmeHmfWmvFWM6QHwWeGR7M86QCQczWNdqeOY7qJKs12G4g==", + "license": "MIT", + "dependencies": { + "@fleet-sdk/common": "^0.10.0", + "@fleet-sdk/core": "^0.12.0", + "@fleet-sdk/crypto": "^0.11.0", + "@fleet-sdk/serializer": "^0.11.0", + "sigmastate-js": "0.4.6" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@fleet-sdk/core": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@fleet-sdk/core/-/core-0.12.0.tgz", + "integrity": "sha512-AYdfivEzfokem2eovnhp5rfv+cFrVR87l/ff71uxt1Xn1Arv0QivNtXn9H00i0t3LkiTxI7ttgU56FAbjWbUKw==", + "license": "MIT", + "dependencies": { + "@fleet-sdk/common": "^0.10.0", + "@fleet-sdk/crypto": "^0.11.0", + "@fleet-sdk/serializer": "^0.11.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@fleet-sdk/crypto": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@fleet-sdk/crypto/-/crypto-0.11.0.tgz", + "integrity": "sha512-oGyrnL0AyzPSsPdA32y4TEFQ6vJlNDMt9nwiArd2TYbtRCDMNTslHQmC/An4clf4R0e/c4yuZJSdfzHC3F0ssQ==", + "license": "MIT", + "dependencies": { + "@fleet-sdk/common": "^0.10.0", + "@noble/hashes": "^1.8.0", + "@scure/base": "^1.2.6" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@fleet-sdk/serializer": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@fleet-sdk/serializer/-/serializer-0.11.0.tgz", + "integrity": "sha512-EYun0nzxJn+23aOeaMM5COj62ibVrzgNOx2I6AM6P23mRs72I0Dv2prdBnU/lst4hqbNHi8a1E6UNvpjH2vhGQ==", + "license": "MIT", + "dependencies": { + "@fleet-sdk/common": "^0.10.0", + "@fleet-sdk/crypto": "^0.11.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@fleet-sdk/wallet": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@fleet-sdk/wallet/-/wallet-0.12.0.tgz", + "integrity": "sha512-ErAOa1mLG5XzmQRarQ3SR879Mm/Bk1Cp0KkQP0lSZovBbSOWlem0isHMlIfhpJEHkvdGdW+YkrbQ4DtEG5z+ew==", + "license": "MIT", + "dependencies": { + "@fleet-sdk/common": "^0.10.0", + "@fleet-sdk/core": "^0.12.0", + "@fleet-sdk/crypto": "^0.11.0", + "@fleet-sdk/serializer": "^0.11.0", + "@noble/curves": "^1.9.2", + "@scure/bip32": "^1.7.0", + "@scure/bip39": "^1.6.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@hono/node-server": { + "version": "1.19.14", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.14.tgz", + "integrity": "sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==", + "license": "MIT", + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT", + "peer": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.29.0.tgz", + "integrity": "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==", + "license": "MIT", + "dependencies": { + "@hono/node-server": "^1.19.9", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "hono": "^4.11.4", + "jose": "^6.1.3", + "json-schema-typed": "^8.0.2", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } + } + }, + "node_modules/@noble/curves": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", + "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/base": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", + "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.7.0.tgz", + "integrity": "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==", + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.9.0", + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.6.0.tgz", + "integrity": "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@svelte-put/shortcut": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@svelte-put/shortcut/-/shortcut-3.1.1.tgz", + "integrity": "sha512-2L5EYTZXiaKvbEelVkg5znxqvfZGZai3m97+cAiUBhLZwXnGtviTDpHxOoZBsqz41szlfRMcamW/8o0+fbW3ZQ==", + "license": "MIT", + "peerDependencies": { + "svelte": "^3.55.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-drag": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", + "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-selection": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", + "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==", + "license": "MIT" + }, + "node_modules/@types/d3-transition": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", + "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-zoom": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", + "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", + "license": "MIT", + "dependencies": { + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "license": "MIT", + "peer": true + }, + "node_modules/@types/stats.js": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/stats.js/-/stats.js-0.17.4.tgz", + "integrity": "sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==", + "license": "MIT" + }, + "node_modules/@types/three": { + "version": "0.161.2", + "resolved": "https://registry.npmjs.org/@types/three/-/three-0.161.2.tgz", + "integrity": "sha512-DazpZ+cIfBzbW/p0zm6G8CS03HBMd748A3R1ZOXHpqaXZLv2I5zNgQUrRG//UfJ6zYFp2cUoCQaOLaz8ubH07w==", + "license": "MIT", + "dependencies": { + "@types/stats.js": "*", + "@types/webxr": "*", + "fflate": "~0.6.10", + "meshoptimizer": "~0.18.1" + } + }, + "node_modules/@types/webxr": { + "version": "0.5.24", + "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.24.tgz", + "integrity": "sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg==", + "license": "MIT" + }, + "node_modules/@xyflow/svelte": { + "version": "0.1.39", + "resolved": "https://registry.npmjs.org/@xyflow/svelte/-/svelte-0.1.39.tgz", + "integrity": "sha512-QZ5mzNysvJeJW7DxmqI4Urhhef9tclqtPr7WAS5zQF5Gk6k9INwzey4CYNtEZo8XMj9H8lzgoJRmgMPnJEc1kw==", + "license": "MIT", + "dependencies": { + "@svelte-put/shortcut": "3.1.1", + "@xyflow/system": "0.0.59", + "classcat": "^5.0.4" + }, + "peerDependencies": { + "svelte": "^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/@xyflow/system": { + "version": "0.0.59", + "resolved": "https://registry.npmjs.org/@xyflow/system/-/system-0.0.59.tgz", + "integrity": "sha512-+xgqYhoBv5F10TQx0SiKZR/DcWtuxFYR+e/LluHb7DMtX4SsMDutZWEJ4da4fDco25jZxw5G9fOlmk7MWvYd5Q==", + "license": "MIT", + "dependencies": { + "@types/d3-drag": "^3.0.7", + "@types/d3-selection": "^3.0.10", + "@types/d3-transition": "^3.0.8", + "@types/d3-zoom": "^3.0.8", + "d3-drag": "^3.0.0", + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0" + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==", + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-bgblack": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgblack/-/ansi-bgblack-0.1.1.tgz", + "integrity": "sha512-tp8M/NCmSr6/skdteeo9UgJ2G1rG88X3ZVNZWXUxFw4Wh0PAGaAAWQS61sfBt/1QNcwMTY3EBKOMPujwioJLaw==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-bgblue": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgblue/-/ansi-bgblue-0.1.1.tgz", + "integrity": "sha512-R8JmX2Xv3+ichUQE99oL+LvjsyK+CDWo/BtVb4QUz3hOfmf2bdEmiDot3fQcpn2WAHW3toSRdjSLm6bgtWRDlA==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-bgcyan": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgcyan/-/ansi-bgcyan-0.1.1.tgz", + "integrity": "sha512-6SByK9q2H978bmqzuzA5NPT1lRDXl3ODLz/DjC4URO5f/HqK7dnRKfoO/xQLx/makOz7zWIbRf6+Uf7bmaPSkQ==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-bggreen": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bggreen/-/ansi-bggreen-0.1.1.tgz", + "integrity": "sha512-8TRtOKmIPOuxjpklrkhUbqD2NnVb4WZQuIjXrT+TGKFKzl7NrL7wuNvEap3leMt2kQaCngIN1ZzazSbJNzF+Aw==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-bgmagenta": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgmagenta/-/ansi-bgmagenta-0.1.1.tgz", + "integrity": "sha512-UZYhobiGAlV4NiwOlKAKbkCyxOl1PPZNvdIdl/Ce5by45vwiyNdBetwHk/AjIpo1Ji9z+eE29PUBAjjfVmz5SA==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-bgred": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgred/-/ansi-bgred-0.1.1.tgz", + "integrity": "sha512-BpPHMnYmRBhcjY5knRWKjQmPDPvYU7wrgBSW34xj7JCH9+a/SEIV7+oSYVOgMFopRIadOz9Qm4zIy+mEBvUOPA==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-bgwhite": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgwhite/-/ansi-bgwhite-0.1.1.tgz", + "integrity": "sha512-KIF19t+HOYOorUnHTOhZpeZ3bJsjzStBG2hSGM0WZ8YQQe4c7lj9CtwnucscJDPrNwfdz6GBF+pFkVfvHBq6uw==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-bgyellow": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgyellow/-/ansi-bgyellow-0.1.1.tgz", + "integrity": "sha512-WyRoOFSIvOeM7e7YdlSjfAV82Z6K1+VUVbygIQ7C/VGzWYuO/d30F0PG7oXeo4uSvSywR0ozixDQvtXJEorq4Q==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-black": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-black/-/ansi-black-0.1.1.tgz", + "integrity": "sha512-hl7re02lWus7lFOUG6zexhoF5gssAfG5whyr/fOWK9hxNjUFLTjhbU/b4UHWOh2dbJu9/STSUv+80uWYzYkbTQ==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-blue": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-blue/-/ansi-blue-0.1.1.tgz", + "integrity": "sha512-8Um59dYNDdQyoczlf49RgWLzYgC2H/28W3JAIyOAU/+WkMcfZmaznm+0i1ikrE0jME6Ypk9CJ9CY2+vxbPs7Fg==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-bold": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bold/-/ansi-bold-0.1.1.tgz", + "integrity": "sha512-wWKwcViX1E28U6FohtWOP4sHFyArELHJ2p7+3BzbibqJiuISeskq6t7JnrLisUngMF5zMhgmXVw8Equjzz9OlA==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-colors": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-0.2.0.tgz", + "integrity": "sha512-ScRNUT0TovnYw6+Xo3iKh6G+VXDw2Ds7ZRnMIuKBgHY02DgvT2T2K22/tc/916Fi0W/5Z1RzDaHQwnp75hqdbA==", + "license": "MIT", + "dependencies": { + "ansi-bgblack": "^0.1.1", + "ansi-bgblue": "^0.1.1", + "ansi-bgcyan": "^0.1.1", + "ansi-bggreen": "^0.1.1", + "ansi-bgmagenta": "^0.1.1", + "ansi-bgred": "^0.1.1", + "ansi-bgwhite": "^0.1.1", + "ansi-bgyellow": "^0.1.1", + "ansi-black": "^0.1.1", + "ansi-blue": "^0.1.1", + "ansi-bold": "^0.1.1", + "ansi-cyan": "^0.1.1", + "ansi-dim": "^0.1.1", + "ansi-gray": "^0.1.1", + "ansi-green": "^0.1.1", + "ansi-grey": "^0.1.1", + "ansi-hidden": "^0.1.1", + "ansi-inverse": "^0.1.1", + "ansi-italic": "^0.1.1", + "ansi-magenta": "^0.1.1", + "ansi-red": "^0.1.1", + "ansi-reset": "^0.1.1", + "ansi-strikethrough": "^0.1.1", + "ansi-underline": "^0.1.1", + "ansi-white": "^0.1.1", + "ansi-yellow": "^0.1.1", + "lazy-cache": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-cyan": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", + "integrity": "sha512-eCjan3AVo/SxZ0/MyIYRtkpxIu/H3xZN7URr1vXVrISxeyz8fUFz0FJziamK4sS8I+t35y4rHg1b2PklyBe/7A==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-dim": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-dim/-/ansi-dim-0.1.1.tgz", + "integrity": "sha512-zAfb1fokXsq4BoZBkL0eK+6MfFctbzX3R4UMcoWrL1n2WHewFKentTvOZv2P11u6P4NtW/V47hVjaN7fJiefOg==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha512-wiXutNjDUlNEDWHcYH3jtZUhd3c4/VojassD8zHdHCY13xbZy2XbW+NKQwA0tWGBVzDA9qEzYwfoSsWmviidhw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-green": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-green/-/ansi-green-0.1.1.tgz", + "integrity": "sha512-WJ70OI4jCaMy52vGa/ypFSKFb/TrYNPaQ2xco5nUwE0C5H8piume/uAZNNdXXiMQ6DbRmiE7l8oNBHu05ZKkrw==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-grey": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-grey/-/ansi-grey-0.1.1.tgz", + "integrity": "sha512-+J1nM4lC+whSvf3T4jsp1KR+C63lypb+VkkwtLQMc1Dlt+nOvdZpFT0wwFTYoSlSwCcLUAaOpHF6kPkYpSa24A==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-hidden": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-hidden/-/ansi-hidden-0.1.1.tgz", + "integrity": "sha512-8gB1bo9ym9qZ/Obvrse1flRsfp2RE+40B23DhQcKxY+GSeaOJblLnzBOxzvmLTWbi5jNON3as7wd9rC0fNK73Q==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-inverse": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-inverse/-/ansi-inverse-0.1.1.tgz", + "integrity": "sha512-Kq8Z0dBRhQhDMN/Rso1Nu9niwiTsRkJncfJZXiyj7ApbfJrGrrubHXqXI37feJZkYcIx6SlTBdNCeK0OQ6X6ag==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-italic": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-italic/-/ansi-italic-0.1.1.tgz", + "integrity": "sha512-jreCxifSAqbaBvcibeQxcwhQDbEj7gF69XnpA6x83qbECEBaRBD1epqskrmov1z4B+zzQuEdwbWxgzvhKa+PkA==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-magenta": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-magenta/-/ansi-magenta-0.1.1.tgz", + "integrity": "sha512-A1Giu+HRwyWuiXKyXPw2AhG1yWZjNHWO+5mpt+P+VWYkmGRpLPry0O5gmlJQEvpjNpl4RjFV7DJQ4iozWOmkbQ==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-red": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", + "integrity": "sha512-ewaIr5y+9CUTGFwZfpECUbFlGcC0GCw1oqR9RI6h1gQCd9Aj2GxSckCnPsVJnmfMZbwFYE+leZGASgkWl06Jow==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-reset": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-reset/-/ansi-reset-0.1.1.tgz", + "integrity": "sha512-n+D0qD3B+h/lP0dSwXX1SZMoXufdUVotLMwUuvXa50LtBAh3f+WV8b5nFMfLL/hgoPBUt+rG/pqqzF8krlZKcw==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-strikethrough": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-strikethrough/-/ansi-strikethrough-0.1.1.tgz", + "integrity": "sha512-gWkLPDvHH2pC9YEKqp8dIl0mg3sRglMPvioqGDIOXiwxjxUwIJ1gF86E2o4R5yLNh8IAkwHbaMtASkJfkQ2hIA==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-underline": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-underline/-/ansi-underline-0.1.1.tgz", + "integrity": "sha512-D+Bzwio/0/a0Fu5vJzrIT6bFk43TW46vXfSvzysOTEHcXOAUJTVMHWDbELIzGU4AVxVw2rCTb7YyWS4my2cSKQ==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-white": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-white/-/ansi-white-0.1.1.tgz", + "integrity": "sha512-DJHaF2SRzBb9wZBgqIJNjjTa7JUJTO98sHeTS1sDopyKKRopL1KpaJ20R6W2f/ZGras8bYyIZDtNwYOVXNgNFg==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-yellow": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-yellow/-/ansi-yellow-0.1.1.tgz", + "integrity": "sha512-6E3D4BQLXHLl3c/NwirWVZ+BCkMq2qsYxdeAGGOijKrx09FaqU+HktFL6QwAwNvgJiMLnv6AQ2C1gFZx0h1CBg==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha512-dtXTVMkh6VkEEA7OhXnN1Ecb8aAGFdZ1LFxtOCoqj4qkyOJMt7+qs6Ahdy6p/NQCPYsRSXXivhSB/J5E9jmYKA==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", + "integrity": "sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==", + "license": "MIT", + "dependencies": { + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-pluck": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/arr-pluck/-/arr-pluck-0.1.0.tgz", + "integrity": "sha512-r+XGzphTuhTu//mwL9wIjXawJCiKkZqUDgJsUxzq+YGiYb4Gg9+GuIVorvSo7halsbEiDj5D34cquiHj7jTvgg==", + "license": "MIT", + "dependencies": { + "arr-map": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-sort": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-0.1.4.tgz", + "integrity": "sha512-BNcM+RXxndPxiZ2rd76k6nyQLRZr2/B/sdi8pQ+Joafr5AH279L40dfokSUTp8O+AaqYjXWhblBWa2st2nc4fQ==", + "license": "MIT", + "dependencies": { + "default-compare": "^1.0.0", + "get-value": "^2.0.6", + "kind-of": "^5.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-sort/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha512-G2n5bG5fSUCpnsXz4+8FUkYsGPkNfLn9YvS66U5qbTIXI2Ynnlo4Bi42bWv+omKUCqz+ejzfClwne0alJWJPhg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arrayify-compact": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/arrayify-compact/-/arrayify-compact-0.2.0.tgz", + "integrity": "sha512-uCIqMaBeu+onuiFS1kB2raQYLETAAeWwAGwrZs7soA1nu4TuHfejWJMoFL06SvWHZAxmOCN7UDzcBjUZ6Y6s6Q==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assemble-core": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/assemble-core/-/assemble-core-0.25.0.tgz", + "integrity": "sha512-5vS/XZK0ke3gIHoKTyl88brqOR9zw3niz5jJHrEgrDLlZGEri4a1Wr4badallKCx4M4/TWG12GT/O5wABZjaVA==", + "license": "MIT", + "dependencies": { + "assemble-fs": "^0.6.0", + "assemble-render-file": "^0.7.1", + "assemble-streams": "^0.6.0", + "base-task": "^0.6.1", + "define-property": "^0.2.5", + "lazy-cache": "^2.0.1", + "templates": "^0.24.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/assemble-fs": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/assemble-fs/-/assemble-fs-0.6.0.tgz", + "integrity": "sha512-vp9szLsFTz0NFa7aiCBZ4JJZPsRRjLB7ftj3anSm/apE+DJ8d1s7kaVFHpxc2LCrEVIGMc1ALLyfRYJDwtzfaw==", + "license": "MIT", + "dependencies": { + "assemble-handle": "^0.1.2", + "extend-shallow": "^2.0.1", + "is-valid-app": "^0.2.0", + "lazy-cache": "^2.0.1", + "stream-combiner": "^0.2.2", + "through2": "^2.0.1", + "vinyl-fs": "^2.4.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assemble-handle": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/assemble-handle/-/assemble-handle-0.1.4.tgz", + "integrity": "sha512-7O1lbkR2fMqsGwrtGzHraLQHN0OKukPeLF/qgD7yTzFKSKg/HH2xeEN8mKutwymXRzVsUF3AvboJoOjMGiT+5g==", + "license": "MIT", + "dependencies": { + "through2": "^2.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assemble-loader": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/assemble-loader/-/assemble-loader-0.6.1.tgz", + "integrity": "sha512-jef7ecixuK8DgP2LMJ5TO1Zs6YnltxQN8KDLDYLav+VbfK7+BGVLHv2NNrIm0/Mls2CklNmMqeWcccdSUNRUnQ==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "file-contents": "^0.2.4", + "fs-exists-sync": "^0.1.0", + "has-glob": "^0.1.1", + "is-registered": "^0.1.5", + "is-valid-glob": "^0.3.0", + "is-valid-instance": "^0.1.0", + "isobject": "^2.1.0", + "lazy-cache": "^2.0.1", + "load-templates": "^0.11.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assemble-render-file": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/assemble-render-file/-/assemble-render-file-0.7.2.tgz", + "integrity": "sha512-Fmt/7KDIwHr/zIStwzl1QEzeph++eP0I7G3tQch1s0ftBllEwZZ5Py7IpO1WPkP+ef8xMRjXNrNKx8/cpTgb4w==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "is-valid-app": "^0.1.2", + "lazy-cache": "^2.0.1", + "mixin-deep": "^1.1.3", + "through2": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assemble-render-file/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/assemble-render-file/node_modules/is-valid-app": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.1.2.tgz", + "integrity": "sha512-UKIjincKieawS6pPJjpH76qUmblicLSi0pqGCvFdscOM3pWgnrRBtB/iWIRYXKNCW8qjxb+6k12wFd82Kq94CA==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "is-registered": "^0.1.5", + "is-valid-instance": "^0.1.0", + "lazy-cache": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assemble-render-file/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/assemble-streams": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/assemble-streams/-/assemble-streams-0.6.0.tgz", + "integrity": "sha512-JEZRYrkAQHKCT41jTVXQ63AxeYGD9aDuxRDZhZH5fsVfvLZGOHXsGPSJBEfDuC6Nz6APJGt9lwWfZH9lqmG65Q==", + "license": "MIT", + "dependencies": { + "assemble-handle": "^0.1.2", + "is-registered": "^0.1.4", + "is-valid-instance": "^0.1.0", + "lazy-cache": "^2.0.1", + "match-file": "^0.2.0", + "src-stream": "^0.1.1", + "through2": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assign-deep": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/assign-deep/-/assign-deep-0.4.8.tgz", + "integrity": "sha512-uxqXJCnNZDEjPnsaLKVzmh/ST5+Pqoz0wi06HDfHKx1ASNpSbbvz2qW2Gl8ZyHwr5jnm11X2S5eMQaP1lMZmCg==", + "license": "MIT", + "dependencies": { + "assign-symbols": "^0.1.1", + "is-primitive": "^2.0.0", + "kind-of": "^5.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assign-deep/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assign-symbols": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-0.1.1.tgz", + "integrity": "sha512-gwzH8QS/GV4pQsf6XOrlpBC6aDE8uJeZvymbEJ0W9TuDYqYOZc4RodvKDH98HCc+KFPYil1kD2XT0X0JWeOzQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "license": "MIT" + }, + "node_modules/async-array-reduce": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/async-array-reduce/-/async-array-reduce-0.2.1.tgz", + "integrity": "sha512-/ywTADOcaEnwiAnOEi0UB/rAcIq5bTFfCV9euv3jLYFUMmy6KvKccTQUnLlp8Ensmfj43wHSmbGiPqjsZ6RhNA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async-done": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", + "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.2", + "process-nextick-args": "^2.0.0", + "stream-exhaust": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/async-each": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", + "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/async-each-series": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-1.1.0.tgz", + "integrity": "sha512-/VIpPVIJJlJObJiXkHBJ1RhjDtydBRG/3/dWpsXoVGOShNw5tameXnC7Yys+wpb0p/myItxGmSGgNi/dNlsIiA==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/async-helpers": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/async-helpers/-/async-helpers-0.3.17.tgz", + "integrity": "sha512-LfgCyvmK6ZiC7pyqOgli2zfkWL4HYbEb+HXvGgdmqVBgsOOtQz5rSF8Ii/H/1cNNtrfj1KsdZE/lUMeIY3Qcwg==", + "license": "MIT", + "dependencies": { + "co": "^4.6.0", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/async-helpers/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async-settle": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-0.2.1.tgz", + "integrity": "sha512-3b4i8Bf/9Zw3V/EsLtMx+qj2r0mDYotjMhzXJQxjvESOe5LgevY5KaH5BHROVZWHE7TlSY2FkeTgIgDvdkRFYQ==", + "license": "MIT", + "dependencies": { + "async-done": "^0.4.0" + } + }, + "node_modules/async-settle/node_modules/async-done": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-0.4.0.tgz", + "integrity": "sha512-NcrnJY08hBDUa3qhZIfRALshlau6U/Q9X1WHA53t/8OfJpQz5qXPKGFVHwIY38md62TiM9JA+5tpRed5LFWrKw==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^0.1.4", + "next-tick": "^0.2.2", + "once": "^1.3.0", + "stream-exhaust": "^1.0.0" + } + }, + "node_modules/async-settle/node_modules/end-of-stream": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", + "integrity": "sha512-go5TQkd0YRXYhX+Lc3UrXkoKU5j+m72jEP5lHWr2Nh82L8wfZtH8toKgcg4T10o23ELIMGXQdwCbl+qAXIPDrw==", + "license": "MIT", + "dependencies": { + "once": "~1.3.0" + } + }, + "node_modules/async-settle/node_modules/once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/bach": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/bach/-/bach-0.5.0.tgz", + "integrity": "sha512-wr1KICs4sa/Ye4D38CEWkxmRi0E/1NnlcTXE4WT46993f+m+W8rVeRlQVh7O9jUHd3/cyNttv4qIDEUullFPcw==", + "license": "MIT", + "dependencies": { + "async-done": "^1.1.1", + "async-settle": "^0.2.1", + "lodash.filter": "^4.1.0", + "lodash.flatten": "^4.0.0", + "lodash.foreach": "^4.0.0", + "lodash.initial": "^4.0.1", + "lodash.last": "^3.0.0", + "lodash.map": "^4.1.0", + "now-and-later": "0.0.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "license": "MIT", + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-argv": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/base-argv/-/base-argv-0.4.5.tgz", + "integrity": "sha512-U78T4In2FMtSYBaf3utKCAOrOBJJXgvGLUmck71ZLQuJZBO6+DDUFoJGfuys0bX/wSQOZgB/HLLFiapvvUUFlw==", + "license": "MIT", + "dependencies": { + "arr-diff": "^2.0.0", + "arr-union": "^3.1.0", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "expand-args": "^0.4.1", + "extend-shallow": "^2.0.1", + "lazy-cache": "^1.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-argv/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-argv/node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-argv/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-cli": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/base-cli/-/base-cli-0.5.0.tgz", + "integrity": "sha512-GQnPyusKASZoCKR3JFf4iVygLvZjk6RwEQokZF35M9VHnhkoPycf22jYlWkwLEtCejtcLECgGC7fq0G/ab5k8g==", + "license": "MIT", + "dependencies": { + "base-argv": "^0.4.2", + "base-config": "^0.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-cli-process": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/base-cli-process/-/base-cli-process-0.1.19.tgz", + "integrity": "sha512-hH9MGqad9bZBmowsZ8uKL91rS4L+q4GEOc5SaL045jQWaR93sla0UI4Q9C6GzOD2AgVJulY2QtCMmwcBhdVYtQ==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "arrayify-compact": "^0.2.0", + "base-cli": "^0.5.0", + "base-cli-schema": "^0.1.19", + "base-config-process": "^0.1.9", + "base-cwd": "^0.3.4", + "base-option": "^0.8.4", + "base-pkg": "^0.2.4", + "debug": "^2.6.2", + "export-files": "^2.1.1", + "fs-exists-sync": "^0.1.0", + "is-valid-app": "^0.2.1", + "kind-of": "^3.1.0", + "lazy-cache": "^2.0.2", + "log-utils": "^0.2.1", + "merge-deep": "^3.0.0", + "mixin-deep": "^1.2.0", + "object.pick": "^1.2.0", + "pad-right": "^0.2.2", + "union-value": "^1.0.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/base-cli-process/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-cli-process/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-cli-schema": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/base-cli-schema/-/base-cli-schema-0.1.19.tgz", + "integrity": "sha512-8k3JPZjVjdwpYtaaF3F8JT9RztX1oFDWKsAVDpUUR/uXL6b85DyTpRX4TUw3rjwZMZIf1BmiTys2zOSqC7+oAA==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "array-unique": "^0.2.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "export-files": "^2.1.1", + "extend-shallow": "^2.0.1", + "falsey": "^0.3.0", + "fs-exists-sync": "^0.1.0", + "has-glob": "^0.1.1", + "has-value": "^0.3.1", + "kind-of": "^3.0.3", + "lazy-cache": "^2.0.1", + "map-schema": "^0.2.3", + "merge-deep": "^3.0.0", + "mixin-deep": "^1.1.3", + "resolve": "^1.1.7", + "tableize-object": "^0.1.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/base-cli-schema/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-cli-schema/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-compose": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/base-compose/-/base-compose-0.2.1.tgz", + "integrity": "sha512-z/wx9ij4i4Bj6WbXJeJlVO2O99eErMXSWjyYUt/NAfxrGpNfMz4SWS9P0OYx9RVQ2CyMEcT1J3z5+9EqQQr8Ug==", + "license": "MIT", + "dependencies": { + "copy-task": "^0.1.0", + "lazy-cache": "^2.0.1", + "mixin-deep": "^1.1.3" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/base-config": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/base-config/-/base-config-0.5.2.tgz", + "integrity": "sha512-Oq0PKM//Sh82mHQt64eUi5GZQOM8I+aNkM/P8Al4A5qwaGBkxKB+ElNqJHUVlF3WA9VjBLYUmO9asGzLEigxBw==", + "license": "MIT", + "dependencies": { + "isobject": "^2.0.0", + "lazy-cache": "^1.0.3", + "map-config": "^0.5.0", + "resolve-dir": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-config-process": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/base-config-process/-/base-config-process-0.1.9.tgz", + "integrity": "sha512-tShRbXNMml5V/qgcZ3ntWsaS6ovw1t7e4yvtYY9XzhJtNpuC8WudMwtSbG7lXAuEZ04jY1istJzKR3NzAoxo3A==", + "license": "MIT", + "dependencies": { + "base-config": "^0.5.2", + "base-config-schema": "^0.1.18", + "base-cwd": "^0.3.4", + "base-option": "^0.8.4", + "debug": "^2.2.0", + "export-files": "^2.1.1", + "is-valid-app": "^0.2.0", + "lazy-cache": "^2.0.1", + "micromatch": "^2.3.10", + "mixin-deep": "^1.1.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-config-process/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-config-process/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-config-schema": { + "version": "0.1.24", + "resolved": "https://registry.npmjs.org/base-config-schema/-/base-config-schema-0.1.24.tgz", + "integrity": "sha512-3CYvd28nsiNVp1rkAfVqfYo7VzDPdIxwv0Ab6iGY0K7JdGRsT6U7Jqq6BBMGNd9XLazLhVBPNGUzaDg5oUtV5w==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.3", + "array-unique": "^0.3.2", + "base-pkg": "^0.2.4", + "camel-case": "^3.0.0", + "debug": "^2.6.6", + "define-property": "^1.0.0", + "export-files": "^2.1.1", + "extend-shallow": "^2.0.1", + "has-glob": "^1.0.0", + "has-value": "^0.3.1", + "inflection": "^1.12.0", + "kind-of": "^3.2.0", + "lazy-cache": "^2.0.2", + "load-templates": "^1.0.2", + "map-schema": "^0.2.4", + "matched": "^0.4.4", + "mixin-deep": "^1.2.0", + "resolve": "^1.3.3" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/base-config-schema/node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-config-schema/node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/base-config-schema/node_modules/clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", + "license": "MIT" + }, + "node_modules/base-config-schema/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-config-schema/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-config-schema/node_modules/file-contents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/file-contents/-/file-contents-1.0.1.tgz", + "integrity": "sha512-yR9NGsF6Ua0vUjag441JRYB+WflAoBCF3+ReeKocYzpfAjN1U4TvQEjIKXOqwIxFl9Bflg8xf/Fi2qrNBoFUOQ==", + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "is-buffer": "^1.1.4", + "kind-of": "^3.1.0", + "lazy-cache": "^2.0.2", + "strip-bom-buffer": "^0.1.1", + "strip-bom-string": "^0.1.2", + "through2": "^2.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-config-schema/node_modules/file-contents/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-config-schema/node_modules/file-contents/node_modules/is-descriptor": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.8.tgz", + "integrity": "sha512-SceYGWXvdqlWa/OnQ5FQuV+NxvNmMRhMw/w9AHkH71hTzveND4BTYgvp16g+oITK47qbOl/3D0bl0iygehWAWQ==", + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/base-config-schema/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "license": "ISC", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/base-config-schema/node_modules/has-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", + "integrity": "sha512-D+8A457fBShSEI3tFCj65PAbT++5sKiFtdCdOam0gnfBgw9D277OERk+HM9qYJXmdVLZ/znez10SqHN0BBQ50g==", + "license": "MIT", + "dependencies": { + "is-glob": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-config-schema/node_modules/is-descriptor": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.4.tgz", + "integrity": "sha512-bv5z95W0dDtLfKwDfkTNxaRxmISBD3eQBKJeVxv2AQ7MjuUnDNG7cIQqvFtMOUYhsILWHhMayWdoGqNqYYYjww==", + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.2", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/base-config-schema/node_modules/is-extglob": { + "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" + } + }, + "node_modules/base-config-schema/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-config-schema/node_modules/load-templates": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/load-templates/-/load-templates-1.0.2.tgz", + "integrity": "sha512-UUfhwRTBH9V4Uf0gGX7FqU5RUdi9IvJWrY1AaPRCRkV/LE/cbudUtY0+YXZs1fNp1J4PFlwOMyrtfzSOCtBbJA==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "file-contents": "^1.0.0", + "glob-parent": "^3.1.0", + "is-glob": "^3.1.0", + "kind-of": "^3.1.0", + "lazy-cache": "^2.0.2", + "matched": "^0.4.4", + "vinyl": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-config-schema/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-config-schema/node_modules/replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/base-config-schema/node_modules/strip-bom-string": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-0.1.2.tgz", + "integrity": "sha512-3DgNqQFTfOwWgxn3cXsa6h/WRgFa7dVb6/7YqwfJlBpLSSQbiU1VhaBNRKmtLI59CHjc9awLp9yGJREu7AnaMQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-config-schema/node_modules/vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "license": "MIT", + "dependencies": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/base-config/node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-cwd": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/base-cwd/-/base-cwd-0.3.4.tgz", + "integrity": "sha512-/kxZE1Hg9p4tvy4DHrWyS/DelZeovOWvBZ9CZKTgeieIxMuZ47FaLIkEkcjOVFcu3nIY4TXdlxhMZFi8D2Rs9g==", + "license": "MIT", + "dependencies": { + "empty-dir": "^0.2.0", + "find-pkg": "^0.1.2", + "is-valid-app": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-data": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/base-data/-/base-data-0.6.2.tgz", + "integrity": "sha512-wH2ViG6CUO2AaeHSEt6fJTyQAk5gl0oY456DoSC5h8mnHrWUbvdctMCuF53CXgBmi0oalZQppKNH0iamG5+uqw==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.1.0", + "cache-base": "^1.0.0", + "extend-shallow": "^2.0.1", + "get-value": "^2.0.6", + "has-glob": "^1.0.0", + "has-value": "^1.0.0", + "is-registered": "^0.1.5", + "is-valid-app": "^0.3.0", + "kind-of": "^5.0.0", + "lazy-cache": "^2.0.2", + "merge-value": "^1.0.0", + "mixin-deep": "^1.2.0", + "read-file": "^0.2.0", + "resolve-glob": "^1.0.0", + "set-value": "^2.0.0", + "union-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-data/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-data/node_modules/has-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", + "integrity": "sha512-D+8A457fBShSEI3tFCj65PAbT++5sKiFtdCdOam0gnfBgw9D277OERk+HM9qYJXmdVLZ/znez10SqHN0BBQ50g==", + "license": "MIT", + "dependencies": { + "is-glob": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-data/node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "license": "MIT", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-data/node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "license": "MIT", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-data/node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-data/node_modules/is-extglob": { + "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" + } + }, + "node_modules/base-data/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-data/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-data/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-data/node_modules/is-valid-app": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.3.0.tgz", + "integrity": "sha512-6+PklNvJraE3XpoqWurkrPIqFIeJin5kwX+sJjcwhPcFY7TM0wjbJlPIBCvHtGawIfb4WtS1t22s7TdgQ0S+Xg==", + "license": "MIT", + "dependencies": { + "debug": "^2.6.3", + "is-registered": "^0.1.5", + "is-valid-instance": "^0.3.0", + "lazy-cache": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-data/node_modules/is-valid-instance": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-valid-instance/-/is-valid-instance-0.3.0.tgz", + "integrity": "sha512-XEd0ddnORLW/Qf1+VMh7PnYb6XhWs0zK0C/Kh8muwj26IjdlCTlo7QQIjt8+efkE8RqtyzlqYNZE5SfN8ys9hQ==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-data/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-data/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-data/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-engines": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/base-engines/-/base-engines-0.2.1.tgz", + "integrity": "sha512-s/A07Vbh6irEMNG+HpccmaGw8SUMXPBetJuYPpq7Rf1WCjtCU1L+FKyeKyRahONGNYBSIHEV0d3cqXYw35EjBw==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "define-property": "^0.2.5", + "engine-cache": "^0.19.0", + "is-valid-app": "^0.1.2", + "lazy-cache": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-engines/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-engines/node_modules/is-valid-app": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.1.2.tgz", + "integrity": "sha512-UKIjincKieawS6pPJjpH76qUmblicLSi0pqGCvFdscOM3pWgnrRBtB/iWIRYXKNCW8qjxb+6k12wFd82Kq94CA==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "is-registered": "^0.1.5", + "is-valid-instance": "^0.1.0", + "lazy-cache": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-engines/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-env": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/base-env/-/base-env-0.3.1.tgz", + "integrity": "sha512-/HxC8QV1m/bWqvjcu4WZl4Um1HRpTAjuY31uiFUEukXsXge4WIvNvGKG/gCs2PrpBFPCybowA406V/ivdPknpQ==", + "license": "MIT", + "dependencies": { + "base-namespace": "^0.2.0", + "contains-path": "^0.1.0", + "debug": "^2.2.0", + "extend-shallow": "^2.0.1", + "fs-exists-sync": "^0.1.0", + "global-modules": "^0.2.2", + "is-absolute": "^0.2.5", + "is-valid-app": "^0.1.0", + "is-valid-instance": "^0.1.0", + "kind-of": "^3.0.3", + "os-homedir": "^1.0.1", + "resolve-file": "^0.3.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-env/node_modules/cwd": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/cwd/-/cwd-0.10.0.tgz", + "integrity": "sha512-YGZxdTTL9lmLkCUTpg4j0zQ7IhRB5ZmqNBbGCl3Tg6MP/d5/6sY7L5mmTjzbc6JKgVZYiqTQTNhPFsbXNGlRaA==", + "license": "MIT", + "dependencies": { + "find-pkg": "^0.1.2", + "fs-exists-sync": "^0.1.0" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/base-env/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-env/node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "license": "MIT", + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-env/node_modules/is-valid-app": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.1.2.tgz", + "integrity": "sha512-UKIjincKieawS6pPJjpH76qUmblicLSi0pqGCvFdscOM3pWgnrRBtB/iWIRYXKNCW8qjxb+6k12wFd82Kq94CA==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "is-registered": "^0.1.5", + "is-valid-instance": "^0.1.0", + "lazy-cache": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-env/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-env/node_modules/resolve-file": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/resolve-file/-/resolve-file-0.3.0.tgz", + "integrity": "sha512-9RXicAgDvLD272hZ3HwJv9MJUGxCBRRwwSBRdOGWgcO03MtC9UTGC6XG1VbS4T5MvDrb+tVZx2RhZ90uk3uczg==", + "license": "MIT", + "dependencies": { + "cwd": "^0.10.0", + "expand-tilde": "^2.0.2", + "extend-shallow": "^2.0.1", + "fs-exists-sync": "^0.1.0", + "homedir-polyfill": "^1.0.1", + "lazy-cache": "^2.0.2", + "resolve": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-generators": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/base-generators/-/base-generators-0.4.6.tgz", + "integrity": "sha512-0k8QAoqYhOwIHQANQxwNOhtlQiuoMqv+rFu2szVIvLUNhZ8B7BOXWFRE5UXMAexRxz7H8rZIwLmeqxlYpOXJGw==", + "license": "MIT", + "dependencies": { + "async-each-series": "^1.1.0", + "base-compose": "^0.2.1", + "base-cwd": "^0.3.1", + "base-data": "^0.6.0", + "base-env": "^0.3.0", + "base-option": "^0.8.4", + "base-pkg": "^0.2.4", + "base-plugins": "^0.4.13", + "base-task": "^0.6.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "global-modules": "^0.2.2", + "is-valid-app": "^0.2.0", + "is-valid-instance": "^0.2.0", + "kind-of": "^3.0.3", + "lazy-cache": "^2.0.1", + "mixin-deep": "^1.1.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-generators/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-generators/node_modules/is-valid-instance": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-valid-instance/-/is-valid-instance-0.2.0.tgz", + "integrity": "sha512-dNT7bamkigo07gvbnoBRABSNX1ayAhkcw6/3fYhVDhiPXiqnCouD4JMmrozyOx37UUlC+Se1j/jCfLo1fNs0Ng==", + "license": "MIT", + "dependencies": { + "isobject": "^2.1.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-generators/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-helpers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/base-helpers/-/base-helpers-0.1.1.tgz", + "integrity": "sha512-aUdOoz47aMdM2OAkN71P3m8wjFB+pZDVfvLebDoNAsD0zhKUc68QR30q9iK6vW6S302yNNVW8bZxUF6FwFLnQw==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "define-property": "^0.2.5", + "is-valid-app": "^0.1.0", + "lazy-cache": "^2.0.1", + "load-helpers": "^0.2.11" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-helpers/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-helpers/node_modules/is-valid-app": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.1.2.tgz", + "integrity": "sha512-UKIjincKieawS6pPJjpH76qUmblicLSi0pqGCvFdscOM3pWgnrRBtB/iWIRYXKNCW8qjxb+6k12wFd82Kq94CA==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "is-registered": "^0.1.5", + "is-valid-instance": "^0.1.0", + "lazy-cache": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-helpers/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-namespace": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/base-namespace/-/base-namespace-0.2.0.tgz", + "integrity": "sha512-jZYAnj1wkwyi6HkqATtO86D8L9jbDdqVthISLG27LcXCFkc5EV+BwS/cfaPBkWoMGb3NsVMau+PLfFle58Xi2g==", + "license": "MIT", + "dependencies": { + "is-valid-app": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-namespace/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-namespace/node_modules/is-valid-app": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.1.2.tgz", + "integrity": "sha512-UKIjincKieawS6pPJjpH76qUmblicLSi0pqGCvFdscOM3pWgnrRBtB/iWIRYXKNCW8qjxb+6k12wFd82Kq94CA==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "is-registered": "^0.1.5", + "is-valid-instance": "^0.1.0", + "lazy-cache": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-namespace/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-option": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/base-option/-/base-option-0.8.4.tgz", + "integrity": "sha512-CS9V8trhwEccFFjmveBHWx4Wr4rwaohzMhwZx1DSUHdGHV9Nme3jbxJQ0U8JsrLFJvGtiav35NiHLeNd8n74XA==", + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "get-value": "^2.0.6", + "is-valid-app": "^0.2.0", + "isobject": "^2.1.0", + "lazy-cache": "^2.0.1", + "mixin-deep": "^1.1.3", + "option-cache": "^3.4.0", + "set-value": "^0.3.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-option/node_modules/set-value": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.3.3.tgz", + "integrity": "sha512-aJPTd11HzK47w8xJMpyY4tBmFC6EidC8EG2fENxCJvPwLYzXLnNaesgo796y1fhSISSYAuah4Het+wDoPXK2tg==", + "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "isobject": "^2.0.0", + "to-object-path": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-option/node_modules/to-object-path": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.2.0.tgz", + "integrity": "sha512-6oMu4CTicplxUMOXBoS1W9YNjIclUzmWpWf02v+JnYMEGVX24rTCsYMHay85WA7Wq+9wZa2iJ+HAAX0yGOcxCQ==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "is-arguments": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-pkg": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/base-pkg/-/base-pkg-0.2.5.tgz", + "integrity": "sha512-/POxajlgBhVsknwLXnqnbp//bAMh7SkDgHF+z/uoYnFqk46e05c3MxSEmn5vFCB8g4rHHKxAPLKrU/4Yb3vUdA==", + "license": "MIT", + "dependencies": { + "cache-base": "^1.0.0", + "debug": "^2.6.8", + "define-property": "^1.0.0", + "expand-pkg": "^0.1.8", + "extend-shallow": "^2.0.1", + "is-valid-app": "^0.3.0", + "log-utils": "^0.2.1", + "pkg-store": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-pkg/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-pkg/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-pkg/node_modules/is-descriptor": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.4.tgz", + "integrity": "sha512-bv5z95W0dDtLfKwDfkTNxaRxmISBD3eQBKJeVxv2AQ7MjuUnDNG7cIQqvFtMOUYhsILWHhMayWdoGqNqYYYjww==", + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.2", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/base-pkg/node_modules/is-valid-app": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.3.0.tgz", + "integrity": "sha512-6+PklNvJraE3XpoqWurkrPIqFIeJin5kwX+sJjcwhPcFY7TM0wjbJlPIBCvHtGawIfb4WtS1t22s7TdgQ0S+Xg==", + "license": "MIT", + "dependencies": { + "debug": "^2.6.3", + "is-registered": "^0.1.5", + "is-valid-instance": "^0.3.0", + "lazy-cache": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-pkg/node_modules/is-valid-instance": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-valid-instance/-/is-valid-instance-0.3.0.tgz", + "integrity": "sha512-XEd0ddnORLW/Qf1+VMh7PnYb6XhWs0zK0C/Kh8muwj26IjdlCTlo7QQIjt8+efkE8RqtyzlqYNZE5SfN8ys9hQ==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-pkg/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-pkg/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-plugins": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/base-plugins/-/base-plugins-0.4.13.tgz", + "integrity": "sha512-w77IDOnkxERPZ7x27A8MmSFcwEfTfrcZ43zK5eOt42itA8FZT9OFhZm1XgOtTEORKrCmW8yVT6DWr/ut7wvgiQ==", + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "is-registered": "^0.1.5", + "isobject": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-questions": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/base-questions/-/base-questions-0.7.4.tgz", + "integrity": "sha512-uHRp5ZM2MFXUhDOPK09lroJdDe3lrXTHtg2x7pC1x4RdimVZcsX+hvQuxNqyAUN62EHfFuaK+FIFjMiA4AoiQg==", + "license": "MIT", + "dependencies": { + "base-store": "^0.4.4", + "clone-deep": "^0.2.4", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "is-valid-app": "^0.2.0", + "isobject": "^2.1.0", + "lazy-cache": "^2.0.1", + "mixin-deep": "^1.1.3", + "question-store": "^0.11.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-questions/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-questions/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-routes": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/base-routes/-/base-routes-0.2.2.tgz", + "integrity": "sha512-z7jtXacfUbjAKUGj5jmJP8GrhZG+UqcwnfkKjLJtUa1w1bWrq5JmsZ1SFRfomXWbLAlEcE87dHvelvTkelQBIg==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "en-route": "^0.7.5", + "is-valid-app": "^0.2.0", + "lazy-cache": "^2.0.1", + "template-error": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-routes/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-routes/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-runtimes": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/base-runtimes/-/base-runtimes-0.2.0.tgz", + "integrity": "sha512-J98SbWB4Rpcva8w8kWtTts+Qc/X/imcmFoy9nt2fKemPTmVgvrt8DyDK5KFUDyQHt+hahYa69pJTGFfUma7V8A==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-valid-app": "^0.2.0", + "lazy-cache": "^2.0.1", + "log-utils": "^0.1.4", + "micromatch": "^2.3.10", + "time-diff": "^0.3.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-runtimes/node_modules/ansi-colors": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-0.1.0.tgz", + "integrity": "sha512-nUNbMZLDr1YQaPdMC2lREJXKttoaHwICajt9x40Js/POX7gNv7OK/VbC9ciJaIFshg9Xol+1GclqfY14UW+0ZA==", + "license": "MIT", + "dependencies": { + "ansi-bgblack": "^0.1.1", + "ansi-bgblue": "^0.1.1", + "ansi-bgcyan": "^0.1.1", + "ansi-bggreen": "^0.1.1", + "ansi-bgmagenta": "^0.1.1", + "ansi-bgred": "^0.1.1", + "ansi-bgwhite": "^0.1.1", + "ansi-bgyellow": "^0.1.1", + "ansi-black": "^0.1.1", + "ansi-blue": "^0.1.1", + "ansi-bold": "^0.1.1", + "ansi-cyan": "^0.1.1", + "ansi-dim": "^0.1.1", + "ansi-gray": "^0.1.1", + "ansi-green": "^0.1.1", + "ansi-grey": "^0.1.1", + "ansi-hidden": "^0.1.1", + "ansi-inverse": "^0.1.1", + "ansi-italic": "^0.1.1", + "ansi-magenta": "^0.1.1", + "ansi-red": "^0.1.1", + "ansi-reset": "^0.1.1", + "ansi-strikethrough": "^0.1.1", + "ansi-underline": "^0.1.1", + "ansi-white": "^0.1.1", + "ansi-yellow": "^0.1.1", + "lazy-cache": "^0.2.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-runtimes/node_modules/ansi-colors/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-runtimes/node_modules/log-utils": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/log-utils/-/log-utils-0.1.5.tgz", + "integrity": "sha512-5jLIj9RWWYxQbBhHDvNZTZE3J/oSTbw/fuPmsXJg8/vbY/4XiJ4YAiEPrwo3dLbcB/n9k1qTznOVr6IigiaF7A==", + "license": "MIT", + "dependencies": { + "ansi-colors": "^0.1.0", + "error-symbol": "^0.1.0", + "info-symbol": "^0.1.0", + "log-ok": "^0.1.1", + "success-symbol": "^0.1.0", + "time-stamp": "^1.0.1", + "warning-symbol": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-store": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/base-store/-/base-store-0.4.4.tgz", + "integrity": "sha512-fb5L2iNR9pCl85jeg88TCJYlcKg8xhmdH1Cjp1MI2RZNnMBjdIaQOuGy9Q4VjSD/GNGBWgQ2H8pQK61Xsx29OA==", + "license": "MIT", + "dependencies": { + "data-store": "^0.16.0", + "debug": "^2.2.0", + "extend-shallow": "^2.0.1", + "is-registered": "^0.1.4", + "is-valid-instance": "^0.1.0", + "lazy-cache": "^2.0.1", + "project-name": "^0.2.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-store/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-store/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-task": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/base-task/-/base-task-0.6.2.tgz", + "integrity": "sha512-dxCXKPLFRrl02kJ+Lu6Y0Y2/XeaVf3GbGXMoZKuHN9OvFjz+QXRwpTJ0PciQPAvktUgK46Mc9Kwakrcj8fSTog==", + "license": "MIT", + "dependencies": { + "composer": "^0.13.0", + "is-valid-app": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-task/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-task/node_modules/is-valid-app": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.1.2.tgz", + "integrity": "sha512-UKIjincKieawS6pPJjpH76qUmblicLSi0pqGCvFdscOM3pWgnrRBtB/iWIRYXKNCW8qjxb+6k12wFd82Kq94CA==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "is-registered": "^0.1.5", + "is-valid-instance": "^0.1.0", + "lazy-cache": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-task/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.4.tgz", + "integrity": "sha512-bv5z95W0dDtLfKwDfkTNxaRxmISBD3eQBKJeVxv2AQ7MjuUnDNG7cIQqvFtMOUYhsILWHhMayWdoGqNqYYYjww==", + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.2", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/base/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz", + "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^2.0.0", + "debug": "^4.4.3", + "http-errors": "^2.0.1", + "iconv-lite": "^0.7.2", + "on-finished": "^2.4.1", + "qs": "^6.15.2", + "raw-body": "^3.0.2", + "type-is": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/body-parser/node_modules/content-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", + "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==", + "license": "MIT", + "dependencies": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "license": "MIT", + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base/node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "license": "MIT", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base/node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "license": "MIT", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base/node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/classcat": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.5.tgz", + "integrity": "sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==", + "license": "MIT" + }, + "node_modules/cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha512-25tABq090YNKkF6JH7lcwO0zFJTRke4Jcq9iX2nr/Sz0Cjjv4gckmwlW6Ty/aoyFd6z3ysR2hMGC2GFugmBo6A==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-width": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-1.1.1.tgz", + "integrity": "sha512-eMU2akIeEIkCxGXUNmDnJq1KzOIiPnJ+rKqRe6hcxE3vIOPvpMrBYOn/Bl7zNlYJj/zQxXquAnozHUCf9Whnsg==", + "license": "ISC" + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/clone-deep": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", + "integrity": "sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==", + "license": "MIT", + "dependencies": { + "for-own": "^0.1.3", + "is-plain-object": "^2.0.1", + "kind-of": "^3.0.2", + "lazy-cache": "^1.0.3", + "shallow-clone": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clone-deep/node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==", + "license": "MIT" + }, + "node_modules/cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "node_modules/co": { + "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" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/code-red": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", + "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15", + "@types/estree": "^1.0.1", + "acorn": "^8.10.0", + "estree-walker": "^3.0.3", + "periscopic": "^3.1.0" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "license": "MIT", + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/common-config": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/common-config/-/common-config-0.1.1.tgz", + "integrity": "sha512-mDp+nqoFbYsHKZfjg8OSb0CYfdPkuoGTMCVKy4ceYHR0EACTLV/qG8Q4cih2c/0IleQ7SISiqWqLMLXXZnJ2FA==", + "license": "MIT", + "dependencies": { + "composer": "^0.13.0", + "data-store": "^0.16.1", + "get-value": "^2.0.6", + "lazy-cache": "^2.0.1", + "log-utils": "^0.2.0", + "object.pick": "^1.1.2", + "omit-empty": "^0.4.1", + "question-cache": "^0.4.0", + "set-value": "^3.0.1", + "strip-color": "^0.1.0", + "tableize-object": "^0.1.0", + "text-table": "^0.2.0", + "yargs-parser": "^2.4.0" + }, + "bin": { + "common-config": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/common-config/node_modules/set-value": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-3.0.3.tgz", + "integrity": "sha512-Xsn/XSatoVOGBbp5hs3UylFDs5Bi9i+ArpVJKdHPniZHoEgRniXTqHWrWrGQ0PbEClVT6WtfnBwR8CAHC9sveg==", + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/composer": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/composer/-/composer-0.13.0.tgz", + "integrity": "sha512-8bW8vzd0YdwjBTbbHmUV3fb1jGFlczUEwti3dbdogI+r/igv2yyLqZFh9IyQv4+gK3k1kdNGVrf6Af5BY8qB3Q==", + "license": "MIT", + "dependencies": { + "array-unique": "^0.2.1", + "bach": "^0.5.0", + "co": "^4.6.0", + "component-emitter": "^1.2.1", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "is-generator": "^1.0.3", + "is-glob": "^2.0.1", + "isobject": "^2.1.0", + "lazy-cache": "^2.0.1", + "micromatch": "^2.3.8", + "nanoseconds": "^0.1.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha512-OKZnPGeMQy2RPaUIBPFFd71iNf4791H12MCRuVQDnzGRwCYNYmTDy5pdafo2SLAcEMKzTOQnLWG4QdcjeJUMEg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "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" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-task": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/copy-task/-/copy-task-0.1.0.tgz", + "integrity": "sha512-Idcf7BdeyJY8kSQodguY8jevkP8CuB22S9Hr5blRqwEyO75yuZEJQbzJ755Q9vZREnCQ5sfOIRxjZWbUq2+K0g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cors": { + "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/cross-spawn": { + "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", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "license": "MIT", + "peer": true, + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/cwd": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/cwd/-/cwd-0.9.1.tgz", + "integrity": "sha512-4+0D+ojEasdLndYX4Cqff057I/Jp6ysXpwKkdLQLnZxV8f6IYZmZtTP5uqD91a/kWqejoc0sSqK4u8wpTKCh8A==", + "license": "MIT", + "dependencies": { + "find-pkg": "^0.1.0" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/data-store": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/data-store/-/data-store-0.16.1.tgz", + "integrity": "sha512-tGbl4oVi9UPysie6y6+fuCjUNhaR3KxnuIRV0OMUCwq/wvikmWHXQYALbW/IVQvmxBNbrxUwjG5BWsrjx5v55w==", + "license": "MIT", + "dependencies": { + "cache-base": "^0.8.4", + "clone-deep": "^0.2.4", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "graceful-fs": "^4.1.4", + "has-own-deep": "^0.1.4", + "lazy-cache": "^2.0.1", + "mkdirp": "^0.5.1", + "project-name": "^0.2.5", + "resolve-dir": "^0.1.0", + "rimraf": "^2.5.3", + "union-value": "^0.2.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/data-store/node_modules/cache-base": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-0.8.5.tgz", + "integrity": "sha512-19t0n7xdoVr5Q08+6sF85YZ9VuvbpVFq5JLm0gcsRmCvTO1Y3duTJGMaOQYf14Ras4o6dEnvoqvjdrUK1tNtgg==", + "license": "MIT", + "dependencies": { + "collection-visit": "^0.2.1", + "component-emitter": "^1.2.1", + "get-value": "^2.0.5", + "has-value": "^0.3.1", + "isobject": "^3.0.0", + "lazy-cache": "^2.0.1", + "set-value": "^0.4.2", + "to-object-path": "^0.3.0", + "union-value": "^0.2.3", + "unset-value": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/data-store/node_modules/collection-visit": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-0.2.3.tgz", + "integrity": "sha512-V88PJOCqJfsZS45YBELDgmhQkECokQAAr9XR4hT6eFkFsAPsCsk3EoDHSuBPYzygjquGM/0KF4vdwTiQO6lbdw==", + "license": "MIT", + "dependencies": { + "lazy-cache": "^2.0.1", + "map-visit": "^0.1.5", + "object-visit": "^0.3.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/data-store/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/data-store/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/data-store/node_modules/map-visit": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-0.1.5.tgz", + "integrity": "sha512-zdmJBFvvVR/H5wCfsCP7XxSLp+346yAZ30Wy2OsQLcH19OVGMWa3Ms9quO00lj9ybsySu3gKOINNgICb4Zqauw==", + "license": "MIT", + "dependencies": { + "lazy-cache": "^2.0.1", + "object-visit": "^0.3.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/data-store/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/data-store/node_modules/object-visit": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-0.3.4.tgz", + "integrity": "sha512-6QNyX7uTuwqxP7pmDBqgBDKdmZws1rXriUyXM5KG6+7J0aYRuuAGoc636IGdLzgOL77WUwL+EpoTJrEHwWsyOA==", + "license": "MIT", + "dependencies": { + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/data-store/node_modules/object-visit/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "license": "MIT", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/data-store/node_modules/set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha512-2Z0LRUUvYeF7gIFFep48ksPq0NR09e5oKoFXznaMGNcu+EZAfGnyL0K6xno2gCqX6dZYEZRjrcn04/gvZzcKhQ==", + "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/data-store/node_modules/union-value": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-0.2.4.tgz", + "integrity": "sha512-Tv3cqdyY8yjW9ZcJ9WP7JdHS34natzylD0oNRLlYbWOfUdC4EQ0sf3fubnqrK2IErtlmobFmuS1pWvv88VghpA==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/data-store/node_modules/unset-value": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-0.1.2.tgz", + "integrity": "sha512-yhv5I4TsldLdE3UcVQn0hD2T5sNCPv4+qm/CTUpRKIpwthYRIipsAPdsrNpOI79hPQa0rTTeW22Fq6JWRcTgNg==", + "license": "MIT", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/debug": { + "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" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-bind": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/deep-bind/-/deep-bind-0.3.0.tgz", + "integrity": "sha512-SwekOBPDnCT3qhOM78ARzBdPSbNMyQ63F8eZDahBzzVAoqousMhYh3HYIh2pLmhtGcVvO8/SU6B6kMsj0SXb1Q==", + "license": "MIT", + "dependencies": { + "mixin-deep": "^1.1.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", + "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "license": "MIT", + "dependencies": { + "kind-of": "^5.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-compare/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defaults-deep": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/defaults-deep/-/defaults-deep-0.2.4.tgz", + "integrity": "sha512-V6BtqzcMvn0EPOy7f+SfMhfmTawq+7UQdt9yZH0EBK89+IHo5f+Hse/qzTorAXOBrQpxpwb6cB/8OgtaMrT+Fg==", + "license": "MIT", + "dependencies": { + "for-own": "^0.1.3", + "is-extendable": "^0.1.1", + "lazy-cache": "^0.2.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defaults-deep/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delimiter-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/delimiter-regex/-/delimiter-regex-2.0.0.tgz", + "integrity": "sha512-EtGkq9TgEZlFACc/NvgwIidQ1wkEupWWbAIJTr9gi4TJUZOvHY8TdXd3i8/dan66BufB1/V6bI7rRW/zvGoVKw==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^1.1.2", + "isobject": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delimiter-regex/node_modules/extend-shallow": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", + "license": "MIT", + "dependencies": { + "kind-of": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delimiter-regex/node_modules/kind-of": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/depd": { + "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" + } + }, + "node_modules/dunder-proto": { + "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", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "license": "MIT" + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/empty-dir": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/empty-dir/-/empty-dir-0.2.1.tgz", + "integrity": "sha512-0f1naHGJh4K6iVG28nRN7SCdfzT18OlpGzHmXw3JGwREb8qmtibHdmRgqx08u4sQfDadezK7kpU3bcIZNSwoZw==", + "license": "MIT", + "dependencies": { + "fs-exists-sync": "^0.1.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/en-route": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/en-route/-/en-route-0.7.5.tgz", + "integrity": "sha512-WjnZ2HzvoztSL/NhKYmlN86tSP7VkOTN0Ck4FBJUsvTfLQOlULZak/1wcUArcdenvT9mNS3NzQ+41lqKf/gaGQ==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "debug": "^2.2.0", + "extend-shallow": "^2.0.1", + "kind-of": "^3.0.2", + "lazy-cache": "^1.0.3", + "path-to-regexp": "^1.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/en-route/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/en-route/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" + }, + "node_modules/en-route/node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/en-route/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/en-route/node_modules/path-to-regexp": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", + "license": "MIT", + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "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" + } + }, + "node_modules/engine": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/engine/-/engine-0.1.12.tgz", + "integrity": "sha512-1+oxmZV5nKFhoR3QkwIbyHKSVbMuNgU8+oxcx4Af1kpxuSjDD0nL3pKKJtY1mGjAPqSAwNeDEHzD94NR5LP5rg==", + "license": "MIT", + "dependencies": { + "assign-deep": "^0.4.3", + "collection-visit": "^0.2.0", + "get-value": "^1.2.1", + "kind-of": "^2.0.1", + "lazy-cache": "^0.2.3", + "object.omit": "^2.0.0", + "set-value": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine-base": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/engine-base/-/engine-base-0.1.3.tgz", + "integrity": "sha512-CdNgUJcWgD9OsZ4vDFDmQB1/sN+UM0hEaDcbTZ2Ya/eMTkgCbdRLGvNuRE1UbN+AQJNo8Sm6iT327ULB7ynqnQ==", + "license": "MIT", + "dependencies": { + "component-emitter": "^1.2.1", + "delimiter-regex": "^2.0.0", + "engine": "^0.1.12", + "engine-utils": "^0.1.1", + "lazy-cache": "^2.0.2", + "mixin-deep": "^1.1.3", + "object.omit": "^2.0.1", + "object.pick": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine-cache": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/engine-cache/-/engine-cache-0.19.4.tgz", + "integrity": "sha512-PNhE008O6X+7VggZSVe0+fZcafIAjVHWuU+iLIbeKXGGKzjb05Y8ht0l1O9sIusrULRsNq/FcYVPoqoNz7k4wg==", + "license": "MIT", + "dependencies": { + "async-helpers": "^0.3.9", + "extend-shallow": "^2.0.1", + "helper-cache": "^0.7.2", + "isobject": "^3.0.0", + "lazy-cache": "^2.0.2", + "mixin-deep": "^1.1.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine-cache/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine-utils": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/engine-utils/-/engine-utils-0.1.1.tgz", + "integrity": "sha512-5IdkZiV3qEGS3STfaRfeQsQ93Sokg9cEK7rdfjCGZFY6O/iTdq+d0obwqjkmv4fTSbTqEgYV+J3TeSzkq9GP5A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine/node_modules/collection-visit": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-0.2.3.tgz", + "integrity": "sha512-V88PJOCqJfsZS45YBELDgmhQkECokQAAr9XR4hT6eFkFsAPsCsk3EoDHSuBPYzygjquGM/0KF4vdwTiQO6lbdw==", + "license": "MIT", + "dependencies": { + "lazy-cache": "^2.0.1", + "map-visit": "^0.1.5", + "object-visit": "^0.3.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine/node_modules/collection-visit/node_modules/lazy-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", + "integrity": "sha512-7vp2Acd2+Kz4XkzxGxaB1FWOi8KjWIWsgdfD5MCb86DWvlLqhRPM+d6Pro3iNEL5VT9mstz5hKAlcd+QR6H3aA==", + "license": "MIT", + "dependencies": { + "set-getter": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine/node_modules/get-value": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-1.3.1.tgz", + "integrity": "sha512-TrDxHI5wqgpM5Guhoz7xmblwy7kzhDauSs4df3NP907yFmLtCkOau8YtGo087jZXKDwP22NG6fCo0UA4EFLjOw==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "is-extendable": "^0.1.1", + "lazy-cache": "^0.2.4", + "noncharacters": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine/node_modules/kind-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", + "integrity": "sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine/node_modules/map-visit": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-0.1.5.tgz", + "integrity": "sha512-zdmJBFvvVR/H5wCfsCP7XxSLp+346yAZ30Wy2OsQLcH19OVGMWa3Ms9quO00lj9ybsySu3gKOINNgICb4Zqauw==", + "license": "MIT", + "dependencies": { + "lazy-cache": "^2.0.1", + "object-visit": "^0.3.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine/node_modules/map-visit/node_modules/lazy-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", + "integrity": "sha512-7vp2Acd2+Kz4XkzxGxaB1FWOi8KjWIWsgdfD5MCb86DWvlLqhRPM+d6Pro3iNEL5VT9mstz5hKAlcd+QR6H3aA==", + "license": "MIT", + "dependencies": { + "set-getter": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine/node_modules/object-visit": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-0.3.4.tgz", + "integrity": "sha512-6QNyX7uTuwqxP7pmDBqgBDKdmZws1rXriUyXM5KG6+7J0aYRuuAGoc636IGdLzgOL77WUwL+EpoTJrEHwWsyOA==", + "license": "MIT", + "dependencies": { + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine/node_modules/set-value": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.2.0.tgz", + "integrity": "sha512-dJaeu7V8d1KwjePimg1oOpGp31cEw/uRcZlfL7wwemkr+A00ev/ZhikvSMiQ4hkf83d8JdY2AFoFmXsKzmHMSw==", + "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", + "dependencies": { + "isobject": "^1.0.0", + "noncharacters": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine/node_modules/set-value/node_modules/isobject": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-1.0.2.tgz", + "integrity": "sha512-WQQgFoML/sLgmhu9zTekYHZUJaPoa/fpVMQ8oxIuOvppzs70DxxyHZdAIjwcuuNDOVtNYsahhqtBbUvKwhRcGw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/error-symbol": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/error-symbol/-/error-symbol-0.1.0.tgz", + "integrity": "sha512-VyjaKxUmeDX/m2lxm/aknsJ1GWDWUO2Ze2Ad8S1Pb9dykAm9TjSKp5CjrNyltYqZ5W/PO6TInAmO2/BfwMyT1g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/es-define-property": { + "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" + } + }, + "node_modules/es-errors": { + "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-object-atoms": { + "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" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.0.tgz", + "integrity": "sha512-kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha512-MsG3prOVw1WtLXAZbM3KiYtooKR1LvxHh3VHsVtIy0uiUu8usxgB/94DP2HxtD/661lLdB6yzQ09lGJSQr6nkg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-args": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/expand-args/-/expand-args-0.4.3.tgz", + "integrity": "sha512-bAAnw/WnKZUkA9PI3tk4oWRpyZkRiHtFSJ+W8dkTX/oXGhM3rz9Vo5+qW9sJ34z1da8jPap35/igXmE7lEjdsQ==", + "license": "MIT", + "dependencies": { + "expand-object": "^0.4.2", + "kind-of": "^3.0.3", + "lazy-cache": "^2.0.1", + "minimist": "^1.2.0", + "mixin-deep": "^1.1.3", + "omit-empty": "^0.4.1", + "set-value": "^0.3.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-args/node_modules/set-value": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.3.3.tgz", + "integrity": "sha512-aJPTd11HzK47w8xJMpyY4tBmFC6EidC8EG2fENxCJvPwLYzXLnNaesgo796y1fhSISSYAuah4Het+wDoPXK2tg==", + "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "isobject": "^2.0.0", + "to-object-path": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-args/node_modules/to-object-path": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.2.0.tgz", + "integrity": "sha512-6oMu4CTicplxUMOXBoS1W9YNjIclUzmWpWf02v+JnYMEGVX24rTCsYMHay85WA7Wq+9wZa2iJ+HAAX0yGOcxCQ==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "is-arguments": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha512-hxx03P2dJxss6ceIeri9cmYOT4SRs3Zk3afZwWpOsRqLqprhTR8u++SlC+sFGsQr7WGFPdMF7Gjc1njDLDK6UA==", + "license": "MIT", + "dependencies": { + "is-posix-bracket": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-object": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/expand-object/-/expand-object-0.4.2.tgz", + "integrity": "sha512-rC0h+knI3YE2rT9v2m6HIowp1aLAVo19u02/wRzE+Dl5eyPowLRcWVyLQ3UaIjSLvjfsTiE0xGb0qqrap5ABKw==", + "license": "MIT", + "dependencies": { + "get-stdin": "^5.0.1", + "is-number": "^2.1.0", + "minimist": "^1.2.0", + "set-value": "^0.3.3" + }, + "bin": { + "expand-object": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-object/node_modules/set-value": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.3.3.tgz", + "integrity": "sha512-aJPTd11HzK47w8xJMpyY4tBmFC6EidC8EG2fENxCJvPwLYzXLnNaesgo796y1fhSISSYAuah4Het+wDoPXK2tg==", + "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "isobject": "^2.0.0", + "to-object-path": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-object/node_modules/to-object-path": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.2.0.tgz", + "integrity": "sha512-6oMu4CTicplxUMOXBoS1W9YNjIclUzmWpWf02v+JnYMEGVX24rTCsYMHay85WA7Wq+9wZa2iJ+HAAX0yGOcxCQ==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "is-arguments": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-pkg": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/expand-pkg/-/expand-pkg-0.1.9.tgz", + "integrity": "sha512-Qqtqzx/e8tODrDr0H8HtO7+nftN0wH9bsk3948KpKBZLrc86Cm3/8mRKJmDfNSDWWcuKsilMmFlKPhYx5gHYuA==", + "license": "MIT", + "dependencies": { + "component-emitter": "^1.2.1", + "debug": "^2.4.1", + "defaults-deep": "^0.2.4", + "export-files": "^2.1.1", + "get-value": "^2.0.6", + "kind-of": "^3.1.0", + "lazy-cache": "^2.0.2", + "load-pkg": "^3.0.1", + "mixin-deep": "^1.1.3", + "normalize-pkg": "^0.3.20", + "omit-empty": "^0.4.1", + "parse-author": "^1.0.0", + "parse-git-config": "^1.1.1", + "repo-utils": "^0.3.7" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/expand-pkg/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-pkg/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha512-AFASGfIlnIbkKPQwX1yHaDjFvh/1gyKJODme52V6IORh69uEYgZp0o9C+qsIGNVEiuuhQU0CSSl++Rlegg1qvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-tilde": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", + "integrity": "sha512-rtmc+cjLZqnu9dSYosX9EWmSJhTwpACgJQTfj4hgg2JjOD/6SIQalZrt4a3aQeh++oNxkazcaxrhPUj6+g5G/Q==", + "license": "MIT", + "dependencies": { + "os-homedir": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/export-files": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/export-files/-/export-files-2.1.1.tgz", + "integrity": "sha512-r2x1Zt0OKgdXRy0bXis3sOI8TNYmo5Fe71qXwsvpYaMvIlH5G0fWEf3AYiE2bONjePdSOojca7Jw+p9CQ6/6NQ==", + "license": "MIT", + "dependencies": { + "lazy-cache": "^1.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/export-files/node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.5.2.tgz", + "integrity": "sha512-5Kb34ipNX694DH48vN9irak1Qx30nb0PLYHXfJgw4YEjiC3ZEmZJhwOp+VfiCYwFzvFTdB9QkArYS5kXa2cx2A==", + "license": "MIT", + "dependencies": { + "ip-address": "^10.2.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha512-1FOj1LOwn42TMrruOHGt18HemVnbwAmAak7krWk+wa93KXxGbK+2jpezm+ytJYDaBX0/SPLZFHKM7m+tKobWGg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/falsey": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/falsey/-/falsey-0.3.2.tgz", + "integrity": "sha512-lxEuefF5MBIVDmE6XeqCdM4BWk1+vYmGZtkbKZ/VFcg6uBBw6fXNEbWmxCjDdQlFc9hy450nkiWwM3VAW6G1qg==", + "license": "MIT", + "dependencies": { + "kind-of": "^5.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/falsey/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", + "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fflate": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.6.10.tgz", + "integrity": "sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==", + "license": "MIT" + }, + "node_modules/figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-contents": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/file-contents/-/file-contents-0.2.4.tgz", + "integrity": "sha512-PEz7U6YlXr+dvWCtW63DUY1LUTHOVs1rv4s1/I/39dpvvidQqMSTY6JklazQS60MMoI/ztpo5kMlpdvGagvLbA==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.0", + "file-stat": "^0.1.0", + "graceful-fs": "^4.1.2", + "is-buffer": "^1.1.0", + "is-utf8": "^0.2.0", + "lazy-cache": "^0.2.3", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-contents/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-is-binary": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-is-binary/-/file-is-binary-1.0.0.tgz", + "integrity": "sha512-71I2LciuolZDBUCu4JzFBKxSvVurMD84G97uCYgt9PZ7ElhEomGqYHTKKU2NcDOxR1g2bwn+hRbkTFSrD80Pfw==", + "license": "MIT", + "dependencies": { + "is-binary-buffer": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-is-binary/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-name": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/file-name/-/file-name-0.1.0.tgz", + "integrity": "sha512-Q8SskhjF4eUk/xoQkmubwLkoHwOTv6Jj/WGtOVLKkZ0vvM+LipkSXugkn1F/+mjWXU32AXLZB3qaz0arUzgtRw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-stat": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/file-stat/-/file-stat-0.1.3.tgz", + "integrity": "sha512-f72m4132aOd5DVtREdDX8I0Dd7Zf/3PiUYYvn4BFCxfsLqj6r8joBZzrRlfvsNvxhADw+jpEa0AnWPII9H0Fbg==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "lazy-cache": "^0.2.3", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-stat/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha512-BTCqyBaWBTsauvnHiE8i562+EdJj+oUpkqWp2R1iCoR8f6oo8STRu3of7WJJ0TqWtxN50a5YFpzYK4Jj9esYfQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "license": "MIT", + "dependencies": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/find-file-up": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/find-file-up/-/find-file-up-0.1.3.tgz", + "integrity": "sha512-mBxmNbVyjg1LQIIpgO8hN+ybWBgDQK8qjht+EbrTCGmmPV/sc7RF1i9stPTD6bpvXZywBdrwRYxhSdJv867L6A==", + "license": "MIT", + "dependencies": { + "fs-exists-sync": "^0.1.0", + "resolve-dir": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/find-pkg": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/find-pkg/-/find-pkg-0.1.2.tgz", + "integrity": "sha512-0rnQWcFwZr7eO0513HahrWafsc3CTFioEB7DRiEYCUM/70QXSY8f3mCST17HXLcPvEhzH/Ty/Bxd72ZZsr/yvw==", + "license": "MIT", + "dependencies": { + "find-file-up": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/first-chunk-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", + "integrity": "sha512-ArRi5axuv66gEsyl3UuK80CzW7t56hem73YGNYxNWTGNKFJUadSb9Gu9SHijYEUi8ulQMf1bJomYNwSCPHhtTQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==", + "license": "MIT", + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fs-exists-sync": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", + "integrity": "sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "license": "ISC" + }, + "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" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "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" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha512-jZV7n6jGE3Gt7fgSTJoz91Ak5MuTLwMwkoYdjxuJ/AmjIsE1UC03y/IWkZCQGEvVNS9qoRNwy5BCqxImv0FVeA==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/get-view": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/get-view/-/get-view-0.1.3.tgz", + "integrity": "sha512-PZOmJnoY9wEDzAWW/0L6vRVfmPx/iKNiAxXdEI83dD8EPaqnI3GQraUTTSVgIVt5R1ja25/C3ARQAyVSkxN2Cg==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.0", + "match-file": "^0.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/get-view/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/git-config-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/git-config-path/-/git-config-path-1.0.1.tgz", + "integrity": "sha512-KcJ2dlrrP5DbBnYIZ2nlikALfRhKzNSX0stvv3ImJ+fvC4hXKoV+U+74SV0upg+jlQZbrtQzc0bu6/Zh+7aQbg==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "fs-exists-sync": "^0.1.0", + "homedir-polyfill": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/git-repo-name": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/git-repo-name/-/git-repo-name-0.6.0.tgz", + "integrity": "sha512-DF4XxB6H+Te79JA08/QF/IjIv+j+0gF990WlgAX3SXXU2irfqvBc/xxlAIh6eJWYaKz45MrrGVBFS0Qc4bBz5g==", + "license": "MIT", + "dependencies": { + "cwd": "^0.9.1", + "file-name": "^0.1.0", + "lazy-cache": "^1.0.4", + "remote-origin-url": "^0.5.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/git-repo-name/node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "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", + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA==", + "license": "MIT", + "dependencies": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==", + "license": "ISC", + "dependencies": { + "is-glob": "^2.0.0" + } + }, + "node_modules/glob-stream": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", + "integrity": "sha512-piN8XVAO2sNxwVLokL4PswgJvK/uQ6+awwXUVRTGF+rRfgCZpn4hOqxiRuTEbU/k3qgKl0DACYQ/0Sge54UMQg==", + "license": "MIT", + "dependencies": { + "extend": "^3.0.0", + "glob": "^5.0.3", + "glob-parent": "^3.0.0", + "micromatch": "^2.3.7", + "ordered-read-streams": "^0.3.0", + "through2": "^0.6.0", + "to-absolute-glob": "^0.1.1", + "unique-stream": "^2.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/glob-stream/node_modules/glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "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", + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-stream/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "license": "ISC", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-stream/node_modules/is-extglob": { + "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" + } + }, + "node_modules/glob-stream/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-stream/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" + }, + "node_modules/glob-stream/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/glob-stream/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "license": "MIT" + }, + "node_modules/glob-stream/node_modules/through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", + "license": "MIT", + "dependencies": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + }, + "node_modules/global-modules": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", + "integrity": "sha512-JeXuCbvYzYXcwE6acL9V2bAOeSIGl4dD+iwLY9iUx2VBJJ80R18HCn+JCwHM9Oegdfya3lEkGCdaRkSyc10hDA==", + "license": "MIT", + "dependencies": { + "global-prefix": "^0.1.4", + "is-windows": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", + "integrity": "sha512-gOPiyxcD9dJGCEArAhF4Hd0BAqvAe/JzERP7tYumE4yIkmIedPUVXcJFWbV3/p/ovIIvKjkrTk+f1UVkq7vvbw==", + "license": "MIT", + "dependencies": { + "homedir-polyfill": "^1.0.0", + "ini": "^1.3.4", + "is-windows": "^0.2.0", + "which": "^1.2.12" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/gopd": { + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "ISC" + }, + "node_modules/gray-matter": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-3.1.1.tgz", + "integrity": "sha512-nZ1qjLmayEv0/wt3sHig7I0s3/sJO0dkAaKYQ5YAOApUtYEOonXSFdWvL1khvnZMTvov4UufkqlFsilPnejEXA==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "js-yaml": "^3.10.0", + "kind-of": "^5.0.2", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gray-matter/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/group-array": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/group-array/-/group-array-0.3.4.tgz", + "integrity": "sha512-YAmNsgsi1uQ7Ai3T4FFkMoskqbLEUPRajAmrn8FclwZQQnV98NLrNWjQ3n2+i1pANxdO3n6wsNEkKq5XrYy0Ow==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "for-own": "^0.1.4", + "get-value": "^2.0.6", + "kind-of": "^3.1.0", + "split-string": "^1.0.1", + "union-value": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/group-array/node_modules/split-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-1.0.1.tgz", + "integrity": "sha512-ZuVODgxrpJnBD5LezfE484E2ArRF8HGgJqaiGBWvCbGS1iqynO45FQxBx7Ze4t45X9a994ejFD5kLhI6WtL1xA==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-choose-files": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/gulp-choose-files/-/gulp-choose-files-0.1.3.tgz", + "integrity": "sha512-SuAg0I2iCMEDcE3BJ46cfIo1Gn5N16403eie6G/iqrttDuKJUK1q3wh/2HBP/ZAJAqNXABI0uEavL2QxSMka1A==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "question-cache": "^0.5.1", + "through2": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-choose-files/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/gulp-choose-files/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/gulp-choose-files/node_modules/question-cache": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/question-cache/-/question-cache-0.5.1.tgz", + "integrity": "sha512-v9F1LnlSQIUEAGFtrfVX/76lH4u4zyV34t94o6EkguPTKKfbvV6SLH8h3pn7LXGZLmAgD1PbmVOuKMY8ZWnuPg==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "arr-union": "^3.1.0", + "async-each-series": "^1.1.0", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "get-value": "^2.0.6", + "has-value": "^0.3.1", + "inquirer2": "^0.1.1", + "is-answer": "^0.1.0", + "isobject": "^2.1.0", + "lazy-cache": "^2.0.1", + "mixin-deep": "^1.1.3", + "omit-empty": "^0.4.1", + "option-cache": "^3.4.0", + "os-homedir": "^1.0.1", + "project-name": "^0.2.5", + "set-value": "^0.3.3", + "to-choices": "^0.2.0", + "use": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-choose-files/node_modules/set-value": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.3.3.tgz", + "integrity": "sha512-aJPTd11HzK47w8xJMpyY4tBmFC6EidC8EG2fENxCJvPwLYzXLnNaesgo796y1fhSISSYAuah4Het+wDoPXK2tg==", + "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "isobject": "^2.0.0", + "to-object-path": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-choose-files/node_modules/to-object-path": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.2.0.tgz", + "integrity": "sha512-6oMu4CTicplxUMOXBoS1W9YNjIclUzmWpWf02v+JnYMEGVX24rTCsYMHay85WA7Wq+9wZa2iJ+HAAX0yGOcxCQ==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "is-arguments": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-choose-files/node_modules/use": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz", + "integrity": "sha512-RrhWfFWkNCz3djfSFZh7uSwu491QRhwNaHyAgB2sGl4kmmznb5ZUuuHpiWLVEsXOdpDakYK/x5+9o4lgg41UMw==", + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "lazy-cache": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-choose-files/node_modules/use/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-sourcemaps": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", + "integrity": "sha512-NjRy6+Qb5K1xbwOvPviD3uA4KSq2zsalPL+4vxPQPuL+kKzHjXJL10/kLaESic3LmBto8VIBHr3gIN3F9AjnhA==", + "license": "ISC", + "dependencies": { + "convert-source-map": "^1.1.1", + "graceful-fs": "^4.1.2", + "strip-bom": "^2.0.0", + "through2": "^2.0.0", + "vinyl": "^1.0.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-glob": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-0.1.1.tgz", + "integrity": "sha512-WMHzb7oCwDcMDngWy0b+viLjED8zvSi5d4/YdBetADHX/rLH+noJaRTytuyN6thTxxM7lK+FloogQHHdOOR+7g==", + "license": "MIT", + "dependencies": { + "is-glob": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-own-deep": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-own-deep/-/has-own-deep-0.1.4.tgz", + "integrity": "sha512-a9Dn8Q46DZySlvZqjCX5rkwS9AYIv3VQM3IoOhTXJVJ/cEmVDMLTrJClIihLS0a09PzhrEBbueji44ZQjLh19g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-symbols": { + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "license": "MIT", + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/helper-cache": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/helper-cache/-/helper-cache-0.7.2.tgz", + "integrity": "sha512-ictXA4Nsj9HZcY5Sf4PyWKOXRkQLCDLJLvekaKKrQ+IGLMe4Z+u2oM1QqRGjtWeQRfQCA3NJyIzZpfmw6GvwOQ==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "lazy-cache": "^0.2.3", + "lodash.bind": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/helper-cache/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "license": "MIT", + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hono": { + "version": "4.12.27", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.27.tgz", + "integrity": "sha512-1yrb/+w6HWQJrUCLkJ2IF5jNIPvvFkblV5RNOYl6bV+OA6p9GLcMpHFFGTosSvHvcAUibuUukRqhlYI4z32C7Q==", + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/http-errors": { + "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.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "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/inflection": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.4.tgz", + "integrity": "sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==", + "engines": [ + "node >= 0.4.0" + ], + "license": "MIT" + }, + "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.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/info-symbol": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/info-symbol/-/info-symbol-0.1.0.tgz", + "integrity": "sha512-qkc9wjLDQ+dYYZnY5uJXGNNHyZ0UOMDUnhvy0SEZGVVYmQ5s4i8cPAin2MbU6OxJgi8dfj/AnwqPx0CJE6+Lsw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/inquirer2": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inquirer2/-/inquirer2-0.1.1.tgz", + "integrity": "sha512-U7R6xvJmmcAx8Bq3Ok7+9L5kyBiUbCokZJMSibn+lDQasL9RtW9kYmnO5fezF0EcqE+pt4Hp3gc5XBGCqLkRDg==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^1.1.1", + "ansi-regex": "^2.0.0", + "arr-flatten": "^1.0.1", + "arr-pluck": "^0.1.0", + "array-unique": "^0.2.1", + "chalk": "^1.1.1", + "cli-cursor": "^1.0.2", + "cli-width": "^1.1.0", + "extend-shallow": "^2.0.1", + "figures": "^1.4.0", + "is-number": "^2.1.0", + "is-plain-object": "^2.0.1", + "lazy-cache": "^1.0.3", + "lodash.where": "^3.1.0", + "readline2": "^1.0.1", + "run-async": "^0.1.0", + "rx-lite": "^4.0.7", + "strip-color": "^0.1.0", + "through2": "^2.0.0" + } + }, + "node_modules/inquirer2/node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ip-address": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", + "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-absolute": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", + "integrity": "sha512-7Kr05z5LkcOpoMvxHN1PC11WbPabdNFmMYYo0eZvWu3BfVS0T03yoqYDczoCBx17xqk2x1XAZrcKiFVL88jxlQ==", + "license": "MIT", + "dependencies": { + "is-relative": "^0.2.1", + "is-windows": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.2.tgz", + "integrity": "sha512-AIbwAcazqP3R65dGvqk1V+a+vE5Fg1yu/ZKMOiBWSUIXXiwQkYmXQcVa2O0nh0tSDKDFKxG2mY7dB1Sr4hEP1g==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-answer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-answer/-/is-answer-0.1.1.tgz", + "integrity": "sha512-ifVYWfVjXzeNx32XK7twC8xMzVYfOqFGETEuwww/Oo8OZQe/tv+huAjP+05qP8omK+IfLmPWN0omZ7YvIvejMw==", + "license": "MIT", + "dependencies": { + "has-values": "^0.1.4", + "is-primitive": "^2.0.0", + "omit-empty": "^0.4.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-binary-buffer/-/is-binary-buffer-1.0.0.tgz", + "integrity": "sha512-fP08vt1YuBWSWdDCWkHUDo/Gb+YpnsiK41w2kP3iAkWhMKV4uuAAwPQm9GkA4r+OCDzpa+APIOaHZW6d83e5Ug==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "license": "MIT" + }, + "node_modules/is-core-module": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", + "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-descriptor": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.8.tgz", + "integrity": "sha512-SceYGWXvdqlWa/OnQ5FQuV+NxvNmMRhMw/w9AHkH71hTzveND4BTYgvp16g+oITK47qbOl/3D0bl0iygehWAWQ==", + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha512-0EygVC5qPvIyb+gSz7zdD5/AAoS6Qrx1e//6N4yv4oNm30kqvdmG66oZFWVlQHUWe5OjP08FuTw2IdT0EOTcYA==", + "license": "MIT", + "dependencies": { + "is-primitive": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-generator": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-generator/-/is-generator-1.0.3.tgz", + "integrity": "sha512-G56jBpbJeg7ds83HW1LuShNs8J73Fv3CPz/bmROHOHlnKkN8sWb9ujiagjmxxMUywftgq48HlBZELKKqFLk0oA==", + "license": "MIT" + }, + "node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==", + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha512-Yu68oeXJ7LeWNmZ3Zov/xg/oDBnBK2RNxwYY1ilNJX+tKKZqgPK+qOn/Gs9jEu66KDY9Netf5XLKNGzas/vPfQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha512-N3w1tFaRfk3UrPfqeRyD+GYDASU3W5VinKhlORy8EWVf/sIdDL9GAcew85XmktCfH+ngG7SRXEVDoO18WMdB/Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/is-reference": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", + "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/estree": "^1.0.6" + } + }, + "node_modules/is-registered": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/is-registered/-/is-registered-0.1.5.tgz", + "integrity": "sha512-dOOjAYNmKGtjoW229wn/SDmrO65oQcUvng9WUYF/AIZAQZG/l+puNUPt+/x7YCn4W9A33H6LItHgSETDmS0urg==", + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "isobject": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-relative": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", + "integrity": "sha512-9AMzjRmLqcue629b4ezEVSK6kJsYJlUIhMcygmYORUgwUNJiavHcC3HkaGx0XYpyVKQSOqFbMEZmW42cY87sYw==", + "license": "MIT", + "dependencies": { + "is-unc-path": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-unc-path": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", + "integrity": "sha512-HhLc5VDMH4pu3oMtIuunz/DFQUIoR561kMME3U3Afhj8b7vH085vkIkemrz1kLXCEIuoMAmO3yVmafWdSbGW8w==", + "license": "MIT", + "dependencies": { + "unc-path-regex": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "license": "MIT" + }, + "node_modules/is-valid-app": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.2.1.tgz", + "integrity": "sha512-2/qNSVFKyi5WiaIgv153Vt2ZM7T7HSlUu/m3HMnoyp6pk5NYhOUz0aU7Gx2DGYRnZ/8q+pMOwd93pCE8uWhvBg==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "is-registered": "^0.1.5", + "is-valid-instance": "^0.2.0", + "lazy-cache": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-valid-app/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/is-valid-app/node_modules/is-valid-instance": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-valid-instance/-/is-valid-instance-0.2.0.tgz", + "integrity": "sha512-dNT7bamkigo07gvbnoBRABSNX1ayAhkcw6/3fYhVDhiPXiqnCouD4JMmrozyOx37UUlC+Se1j/jCfLo1fNs0Ng==", + "license": "MIT", + "dependencies": { + "isobject": "^2.1.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-valid-app/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/is-valid-glob": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", + "integrity": "sha512-CvG8EtJZ8FyzVOGPzrDorzyN65W1Ld8BVnqshRCah6pFIsprGx3dKgFtjLn/Vw9kGqR4OlR84U7yhT9ZVTyWIQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-valid-instance": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-valid-instance/-/is-valid-instance-0.1.0.tgz", + "integrity": "sha512-js5DRu650+u3zcGfCe23npdFtPuBeLx3iR8q2vfCO4m1KqNz5R35fDQlLPm++gAzg5H+OJXDOG5LGyn8pzl/1Q==", + "license": "MIT", + "dependencies": { + "isobject": "^2.1.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-whitespace": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz", + "integrity": "sha512-RydPhl4S6JwAyj0JJjshWJEFG6hNye3pZFBRZaTUfZFwGHxzppNaNOVgQuS/E/SlhrApuMXrpnK1EEIXfdo3Dg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-windows": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", + "integrity": "sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "license": "MIT", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jose": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.3.tgz", + "integrity": "sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-yaml": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.0.tgz", + "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/json-schema-typed": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", + "license": "BSD-2-Clause" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "license": "MIT" + }, + "node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/layouts": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/layouts/-/layouts-0.11.0.tgz", + "integrity": "sha512-Zt65tua9otUMsfoQMAKmUSMGBwgkchSCc33ko/xBBSGnc/Q4+G8gJgouynZy7/iSnzpt3+myRRDQ9HQ5cctSog==", + "license": "MIT", + "dependencies": { + "delimiter-regex": "^1.3.1", + "falsey": "^0.3.0", + "get-view": "^0.1.1", + "lazy-cache": "^1.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/layouts/node_modules/delimiter-regex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/delimiter-regex/-/delimiter-regex-1.3.1.tgz", + "integrity": "sha512-NyEdbzFCa0imbFMxQH6X5AB/DxngubpAAiQEqaam+YYcT0gGiM1gFo410HwpiPOruHl8HfFM913tFLjA8kkvHg==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^1.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/layouts/node_modules/extend-shallow": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", + "license": "MIT", + "dependencies": { + "kind-of": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/layouts/node_modules/kind-of": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/layouts/node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lazy-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", + "integrity": "sha512-7vp2Acd2+Kz4XkzxGxaB1FWOi8KjWIWsgdfD5MCb86DWvlLqhRPM+d6Pro3iNEL5VT9mstz5hKAlcd+QR6H3aA==", + "license": "MIT", + "dependencies": { + "set-getter": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/load-helpers": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/load-helpers/-/load-helpers-0.2.11.tgz", + "integrity": "sha512-+iUnxQSddtpXoeRrza02jbJOUgCbJGG6GGeE4WTf6nV0Z0uR+/+/h2RMfDAl5SI4Cd/fu5xFPqo0ibP3v9y1ew==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-valid-glob": "^0.3.0", + "lazy-cache": "^2.0.1", + "matched": "^0.4.1", + "resolve-dir": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-pkg": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/load-pkg/-/load-pkg-3.0.1.tgz", + "integrity": "sha512-wW6PBOWKbPceeIamjHjoacmI0F7Q+JdHoYl1nYE3lGOQCmq+xAnfIp24dqhUSfsO6Y7YSlrmyi3JxvSiRnoivg==", + "license": "MIT", + "dependencies": { + "find-pkg": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-templates": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/load-templates/-/load-templates-0.11.4.tgz", + "integrity": "sha512-roLgv19smhcE2x9mBvuuUzj3u3jRL+lWr+7u6v0KSk2wtdX0v8KOEHYZGBUdMjY1YPIh9864YQdO0SqpxiA+6Q==", + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "glob-parent": "^2.0.0", + "has-glob": "^0.1.1", + "is-valid-glob": "^0.3.0", + "lazy-cache": "^2.0.1", + "matched": "^0.4.1", + "to-file": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "license": "MIT", + "peer": true + }, + "node_modules/lodash._arrayfilter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._arrayfilter/-/lodash._arrayfilter-3.0.0.tgz", + "integrity": "sha512-xi4jscMHMkWtF8vXNpmvAXTmes6gKMpXsWM8kKuJ5tfk/VhJujrAG2sVc/LBsUERkReV9blMG2GD4SjPHyqaTw==", + "license": "MIT" + }, + "node_modules/lodash._basecallback": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/lodash._basecallback/-/lodash._basecallback-3.3.1.tgz", + "integrity": "sha512-LQffghuO63ufDY33KKO1ezGKbcFZK3ngYV7JpxaUomoM5acf0YeXU3Pm8csVE0girVs50TXzfNibl69Co3ggJA==", + "license": "MIT", + "dependencies": { + "lodash._baseisequal": "^3.0.0", + "lodash._bindcallback": "^3.0.0", + "lodash.isarray": "^3.0.0", + "lodash.pairs": "^3.0.0" + } + }, + "node_modules/lodash._baseeach": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash._baseeach/-/lodash._baseeach-3.0.4.tgz", + "integrity": "sha512-IqUZ9MQo2UT1XPGuBntInqTOlc+oV+bCo0kMp+yuKGsfvRSNgUW0YjWVZUrG/gs+8z/Eyuc0jkJjOBESt9BXxg==", + "license": "MIT", + "dependencies": { + "lodash.keys": "^3.0.0" + } + }, + "node_modules/lodash._basefilter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._basefilter/-/lodash._basefilter-3.0.0.tgz", + "integrity": "sha512-EjWjqBE5KHmvrzgZ9tSvt7ggGmDF0pjPzaiUONQ97M4+YDYW8VMH3VnyKS/JHFoqDAYEIIx+3/Tg4C0zlC6qPA==", + "license": "MIT", + "dependencies": { + "lodash._baseeach": "^3.0.0" + } + }, + "node_modules/lodash._baseisequal": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/lodash._baseisequal/-/lodash._baseisequal-3.0.7.tgz", + "integrity": "sha512-U+3GsNEZj9ebI03ncLC2pLmYVjgtYZEwdkAPO7UGgtGvAz36JVFPAQUufpSaVL93Cz5arc6JGRKZRhaOhyVJYA==", + "license": "MIT", + "dependencies": { + "lodash.isarray": "^3.0.0", + "lodash.istypedarray": "^3.0.0", + "lodash.keys": "^3.0.0" + } + }, + "node_modules/lodash._baseismatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lodash._baseismatch/-/lodash._baseismatch-3.1.3.tgz", + "integrity": "sha512-lq0Z+O/HfAJ16frtiZnvi2sLQrFfcYxK2q5R+n10+cWbXQ/Mz6R52mLOX/8R3npLGIO7Rq7zNP7ENTCJB/GN+g==", + "license": "MIT", + "dependencies": { + "lodash._baseisequal": "^3.0.0" + } + }, + "node_modules/lodash._basematches": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._basematches/-/lodash._basematches-3.2.0.tgz", + "integrity": "sha512-E6aibw9mFnfTO8z4zu1Fc2Pgv102/c11RtunY0MBdnIRWy27CtwnTVBQjfXohtUoDH1BI+vxZ9+b2JJY13dt3A==", + "license": "MIT", + "dependencies": { + "lodash._baseismatch": "^3.0.0", + "lodash.pairs": "^3.0.0" + } + }, + "node_modules/lodash._bindcallback": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", + "integrity": "sha512-2wlI0JRAGX8WEf4Gm1p/mv/SZ+jLijpj0jyaE/AXeuQphzCgD8ZQW4oSpoN8JAopujOFGU3KMuq7qfHBWlGpjQ==", + "license": "MIT" + }, + "node_modules/lodash._createwrapper": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._createwrapper/-/lodash._createwrapper-3.2.0.tgz", + "integrity": "sha512-O8fi7P57KZQjtTJN3tbUAJsm6Coo35JVi4OiEU/WV0rrqaWemk+rRB/1ohiIiv1cIK3dIkVhMehaFOFyNZDYkQ==", + "license": "MIT", + "dependencies": { + "lodash._root": "^3.0.0" + } + }, + "node_modules/lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==", + "license": "MIT" + }, + "node_modules/lodash._replaceholders": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._replaceholders/-/lodash._replaceholders-3.0.0.tgz", + "integrity": "sha512-FbnZp+6+UaT8VzGNXUK8nIH7rC/P+c2te5R/rpjgwLY27OsEMqCyF6yOxqHMj9Qv3yelSVVuYzCjtrJzcKbAhg==", + "license": "MIT" + }, + "node_modules/lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==", + "license": "MIT" + }, + "node_modules/lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==", + "license": "MIT" + }, + "node_modules/lodash.bind": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-3.1.0.tgz", + "integrity": "sha512-GaXlyWuJbyuJ54vRypYLVq1NS4v7QIBVicEX4lmW8PE5XaltCuFzWLG4WuXKYQ7SKfzxkiEsadQyuVOxym7paQ==", + "license": "MIT", + "dependencies": { + "lodash._createwrapper": "^3.0.0", + "lodash._replaceholders": "^3.0.0", + "lodash.restparam": "^3.0.0" + } + }, + "node_modules/lodash.filter": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", + "integrity": "sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==", + "license": "MIT" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "license": "MIT" + }, + "node_modules/lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==", + "license": "MIT" + }, + "node_modules/lodash.initial": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.initial/-/lodash.initial-4.1.1.tgz", + "integrity": "sha512-/eZXy8y0IGQTuCKScq32mU+O/Qc160EfYPrAD7y4oXPAgWdQvyxxhTOIpl+tDfP86yT7jrMtUA8noSqYUdKWQg==", + "license": "MIT" + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", + "license": "MIT" + }, + "node_modules/lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==", + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT" + }, + "node_modules/lodash.istypedarray": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz", + "integrity": "sha512-lGWJ6N8AA3KSv+ZZxlTdn4f6A7kMfpJboeyvbFdE7IU9YAgweODqmOgdUHOA+c6lVWeVLysdaxciFXi+foVsWw==", + "license": "MIT" + }, + "node_modules/lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==", + "license": "MIT", + "dependencies": { + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + }, + "node_modules/lodash.last": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash.last/-/lodash.last-3.0.0.tgz", + "integrity": "sha512-14mq7rSkCxG4XMy9lF2FbIOqqgF0aH0NfPuQ3LPR3vIh0kHnUvIYP70dqa1Hf47zyXfQ8FzAg0MYOQeSuE1R7A==", + "license": "MIT" + }, + "node_modules/lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", + "license": "MIT" + }, + "node_modules/lodash.pairs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash.pairs/-/lodash.pairs-3.0.1.tgz", + "integrity": "sha512-lgXvpU43ZNQrZ/pK2cR97YzKeAno3e3HhcyvLKsofljeHKrQcZhT1vW7fg4X61c92tM+mjD/DypoLZYuAKNIkQ==", + "license": "MIT", + "dependencies": { + "lodash.keys": "^3.0.0" + } + }, + "node_modules/lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw==", + "license": "MIT" + }, + "node_modules/lodash.where": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.where/-/lodash.where-3.1.0.tgz", + "integrity": "sha512-9iH6No94IEtewjRRAykRVVW4Sw0DULKFp9H7x92MvbYUjg5EHj/+o58/Jx/kxAu7UWJLItwBH4FemHaQIGFIeg==", + "license": "MIT", + "dependencies": { + "lodash._arrayfilter": "^3.0.0", + "lodash._basecallback": "^3.0.0", + "lodash._basefilter": "^3.0.0", + "lodash._basematches": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + }, + "node_modules/log-ok": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/log-ok/-/log-ok-0.1.1.tgz", + "integrity": "sha512-cc8VrkS6C+9TFuYAwuHpshrcrGRAv7d0tUJ0GdM72ZBlKXtlgjUZF84O+OhQUdiVHoF7U/nVxwpjOdwUJ8d3Vg==", + "license": "MIT", + "dependencies": { + "ansi-green": "^0.1.1", + "success-symbol": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/log-utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/log-utils/-/log-utils-0.2.1.tgz", + "integrity": "sha512-udyegKoMz9eGfpKAX//Khy7sVAZ8b1F7oLDnepZv/1/y8xTvsyPgqQrM94eG8V0vcc2BieYI2kVW4+aa6m+8Qw==", + "license": "MIT", + "dependencies": { + "ansi-colors": "^0.2.0", + "error-symbol": "^0.1.0", + "info-symbol": "^0.1.0", + "log-ok": "^0.1.1", + "success-symbol": "^0.1.0", + "time-stamp": "^1.0.1", + "warning-symbol": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/make-iterator/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-config": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/map-config/-/map-config-0.5.0.tgz", + "integrity": "sha512-7pgduXtyOXZ/py4n6IM8G+7wanqbRDPK5Myp7P3jUUAFQwzGDeuMm0N8Dxrwaf3bySqJpne4NdglRUxdw7I7QQ==", + "license": "MIT", + "dependencies": { + "array-unique": "^0.2.1", + "async": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-schema": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/map-schema/-/map-schema-0.2.4.tgz", + "integrity": "sha512-1sgduImleUF+8NiS1wlqDJ8uhmJtFbLRjVW3PZP5IZJd1n+11eV91AnHI4jOYT2UCirriivNUgh6DG73V+G9QQ==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "collection-visit": "^0.2.3", + "component-emitter": "^1.2.1", + "debug": "^2.6.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "get-value": "^2.0.6", + "is-primitive": "^2.0.0", + "kind-of": "^3.1.0", + "lazy-cache": "^2.0.2", + "log-utils": "^0.2.1", + "longest": "^1.0.1", + "mixin-deep": "^1.1.3", + "object.omit": "^2.0.1", + "object.pick": "^1.2.0", + "omit-empty": "^0.4.1", + "pad-right": "^0.2.2", + "set-value": "^0.4.0", + "sort-object-arrays": "^0.1.1", + "union-value": "^0.2.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-schema/node_modules/collection-visit": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-0.2.3.tgz", + "integrity": "sha512-V88PJOCqJfsZS45YBELDgmhQkECokQAAr9XR4hT6eFkFsAPsCsk3EoDHSuBPYzygjquGM/0KF4vdwTiQO6lbdw==", + "license": "MIT", + "dependencies": { + "lazy-cache": "^2.0.1", + "map-visit": "^0.1.5", + "object-visit": "^0.3.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-schema/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/map-schema/node_modules/map-visit": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-0.1.5.tgz", + "integrity": "sha512-zdmJBFvvVR/H5wCfsCP7XxSLp+346yAZ30Wy2OsQLcH19OVGMWa3Ms9quO00lj9ybsySu3gKOINNgICb4Zqauw==", + "license": "MIT", + "dependencies": { + "lazy-cache": "^2.0.1", + "object-visit": "^0.3.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-schema/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/map-schema/node_modules/object-visit": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-0.3.4.tgz", + "integrity": "sha512-6QNyX7uTuwqxP7pmDBqgBDKdmZws1rXriUyXM5KG6+7J0aYRuuAGoc636IGdLzgOL77WUwL+EpoTJrEHwWsyOA==", + "license": "MIT", + "dependencies": { + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-schema/node_modules/set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha512-2Z0LRUUvYeF7gIFFep48ksPq0NR09e5oKoFXznaMGNcu+EZAfGnyL0K6xno2gCqX6dZYEZRjrcn04/gvZzcKhQ==", + "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-schema/node_modules/union-value": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-0.2.4.tgz", + "integrity": "sha512-Tv3cqdyY8yjW9ZcJ9WP7JdHS34natzylD0oNRLlYbWOfUdC4EQ0sf3fubnqrK2IErtlmobFmuS1pWvv88VghpA==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "license": "MIT", + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/match-file": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/match-file/-/match-file-0.2.2.tgz", + "integrity": "sha512-BDEZIcrBSnooL0zC72Yt3z1HhJiCq+2pMnHKVDeYN/cilCrz3KrpqKPm4ZOfWCoDolRl4QyKQpfRlQWF6PqnjQ==", + "license": "MIT", + "dependencies": { + "is-glob": "^3.1.0", + "isobject": "^3.0.0", + "micromatch": "^2.3.11" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/match-file/node_modules/is-extglob": { + "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" + } + }, + "node_modules/match-file/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/match-file/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matched": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/matched/-/matched-0.4.4.tgz", + "integrity": "sha512-zpasnbB5vQkvb0nfcKV0zEoGgMtV7atlWR1Vk3E8tEKh6EicMseKtVV+5vc+zsZwvDlcNMKlKK/CVOEeAalYRQ==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "async-array-reduce": "^0.2.0", + "extend-shallow": "^2.0.1", + "fs-exists-sync": "^0.1.0", + "glob": "^7.0.5", + "has-glob": "^0.1.1", + "is-valid-glob": "^0.3.0", + "lazy-cache": "^2.0.1", + "resolve-dir": "^0.1.0" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/math-intrinsics": { + "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" + } + }, + "node_modules/math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", + "license": "MIT" + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "license": "CC0-1.0", + "peer": true + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/merge-deep": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.3.tgz", + "integrity": "sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "clone-deep": "^0.2.4", + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-0.1.8.tgz", + "integrity": "sha512-ivGsLZth/AkvevAzPlRLSie8Q3GdyH/5xUYgn+ItAJYslT0NsKd2cxx0bAjmqoY5swX0NoWJjvkDkfpaVZx9lw==", + "license": "MIT", + "dependencies": { + "through2": "^0.6.1" + } + }, + "node_modules/merge-stream/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" + }, + "node_modules/merge-stream/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/merge-stream/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "license": "MIT" + }, + "node_modules/merge-stream/node_modules/through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", + "license": "MIT", + "dependencies": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + }, + "node_modules/merge-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/merge-value/-/merge-value-1.0.0.tgz", + "integrity": "sha512-fJMmvat4NeKz63Uv9iHWcPDjCWcCkoiRoajRTEO8hlhUC6rwaHg0QCF9hBOTjZmm4JuglPckPSTtcuJL5kp0TQ==", + "license": "MIT", + "dependencies": { + "get-value": "^2.0.6", + "is-extendable": "^1.0.0", + "mixin-deep": "^1.2.0", + "set-value": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge-value/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/meshoptimizer": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-0.18.1.tgz", + "integrity": "sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==", + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==", + "license": "MIT", + "dependencies": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/minimatch": { + "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" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "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" + } + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "license": "MIT", + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==", + "license": "MIT", + "dependencies": { + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-object/node_modules/for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/mute-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha512-EbrziT4s8cWPmzr47eYVW3wimS4HsvlnV5ri1xw1aR6JQo/OrJX5rkl32K/QQHdxeabJETtfeaROGhd8W7uBgg==", + "license": "ISC" + }, + "node_modules/nanoseconds": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/nanoseconds/-/nanoseconds-0.1.0.tgz", + "integrity": "sha512-6yOHqTvJNI9xGmVHWQ4ZTYhGpT0O4h9N+uk/UuRVPI8TskViB4s4QL3y+jY/Yxsdz7gvoBGPCHWRUibOyyYMwA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/next-tick": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-0.2.2.tgz", + "integrity": "sha512-f7h4svPtl+QidoBv4taKXUjJ70G2asaZ8G28nS0OkqaalX8dwwrtWtyxEDPK62AC00ur/+/E0pUwBwY5EPn15Q==", + "license": "MIT" + }, + "node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/noncharacters": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/noncharacters/-/noncharacters-1.1.0.tgz", + "integrity": "sha512-U69XzMNq7UQXR27xT17tkQsHPsLc+5W9yfXvYzVCwFxghVf+7VttxFnCKFMxM/cHD+/QIyU009263hxIIurj4g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "license": "MIT", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-pkg": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/normalize-pkg/-/normalize-pkg-0.3.20.tgz", + "integrity": "sha512-kM3ee93xDLnhu7R1j2BpJ+0zenlOB5ZE6H+vt2iCNXdGgcxedzweZn6UeW5p2iJEdkNYaXDoJm8uoSLiXF4eBw==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "array-unique": "^0.3.2", + "component-emitter": "^1.2.1", + "export-files": "^2.1.1", + "extend-shallow": "^2.0.1", + "fs-exists-sync": "^0.1.0", + "get-value": "^2.0.6", + "kind-of": "^3.0.4", + "lazy-cache": "^2.0.1", + "map-schema": "^0.2.3", + "minimist": "^1.2.0", + "mixin-deep": "^1.1.3", + "omit-empty": "^0.4.1", + "parse-git-config": "^1.0.2", + "repo-utils": "^0.3.6", + "semver": "^5.3.0", + "stringify-author": "^0.1.3", + "write-json": "^0.2.2" + }, + "bin": { + "normalize-pkg": "cli.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/normalize-pkg/node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/now-and-later": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-0.0.6.tgz", + "integrity": "sha512-qNIeNeH6v6KbriliCoOEmKhelv+66P2yCKEQta3MYcwN98S3NrVMgYEh9hWxJRPqPna3d7r0KElZQKQkAm0/jA==", + "license": "MIT", + "dependencies": { + "once": "^1.3.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "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" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "license": "MIT", + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-visit/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha512-UiAM5mhmIuKLsOvrL+B0U2d1hXHF3bFYWIuH1LMpuV2EJEHG1Ntz06PgLEHjm6VFd87NpH8rastvPoyv6UW2fA==", + "license": "MIT", + "dependencies": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/omit-empty": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/omit-empty/-/omit-empty-0.4.1.tgz", + "integrity": "sha512-NwnVOAaLwUEYmvvwLKKqvG6BkSG0pu0yKhKc6uYbWerkIXe6Wi2HQ1qoL+Wksj3DCauRuNKIjZUsLyjLj1/lrw==", + "license": "MIT", + "dependencies": { + "has-values": "^0.1.4", + "kind-of": "^3.0.3", + "reduce-object": "^0.1.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/on-finished": { + "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" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "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" + } + }, + "node_modules/onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha512-GZ+g4jayMqzCRMgB2sol7GiCLjKfS1PINkjmx8spcKce1LiVqcbQreXwqs2YAFXC6R03VIG28ZS31t8M866v6A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/option-cache": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/option-cache/-/option-cache-3.5.0.tgz", + "integrity": "sha512-Hr14410H8ajAHeUirXZtuE9drwy8e85l0CssHB/k7Y6nRkleKsGAzB/gwltUzsnIqr9Y+7ZQ+H16GYWAJH3PVg==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.3", + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^0.3.1", + "kind-of": "^3.2.2", + "lazy-cache": "^2.0.2", + "set-value": "^0.4.3", + "to-object-path": "^0.3.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/option-cache/node_modules/set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha512-2Z0LRUUvYeF7gIFFep48ksPq0NR09e5oKoFXznaMGNcu+EZAfGnyL0K6xno2gCqX6dZYEZRjrcn04/gvZzcKhQ==", + "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ordered-read-streams": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", + "integrity": "sha512-xQvd8qvx9U1iYY9aVqPpoF5V9uaWJKV6ZGljkh/jkiNX0DiQsjbWvRumbh10QTMDE8DheaOEU8xi0szbrgjzcw==", + "license": "MIT", + "dependencies": { + "is-stream": "^1.0.1", + "readable-stream": "^2.0.1" + } + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pad-right": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/pad-right/-/pad-right-0.2.2.tgz", + "integrity": "sha512-4cy8M95ioIGolCoMmm2cMntGR1lPLEbOMzOKu8bzjuJP6JpzEMQcDHmh7hHLYGgob+nKe1YHFMaG4V59HQa89g==", + "license": "MIT", + "dependencies": { + "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/paginationator": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/paginationator/-/paginationator-0.1.4.tgz", + "integrity": "sha512-o46P8Z9DK0blcmY7F95SnsBWZ6bow3HAcLKXlgIc/SZE8og21qrxL14nAi6Wy8E0Iw06wA0yS5icSayXw8BU8A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-author": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-author/-/parse-author-1.0.0.tgz", + "integrity": "sha512-OrNKo0jTFjJNCT0UKOPtnUctvGJvKdfB5ild+r3xwg/TgU5k2CCZW4fU9uJdKJ3njVFw5InP/2gd+n2vEXKgLQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-git-config": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-git-config/-/parse-git-config-1.1.1.tgz", + "integrity": "sha512-S3LGXJZVSy/hswvbSkfdbKBRVsnqKrVu6j8fcvdtJ4TxosSELyQDsJPuGPXuZ+EyuYuJd3O4uAF8gcISR0OFrQ==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "fs-exists-sync": "^0.1.0", + "git-config-path": "^1.0.1", + "ini": "^1.3.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-github-url": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-0.3.2.tgz", + "integrity": "sha512-vawkgsrRR8wm/nqFTVQIl9G/VkRJK2VVo0ECPni20WRV+NOmHXGilnWwC/EjVqRqQ4oSIKwRKP1jW8CjlxlJ2Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==", + "license": "MIT", + "dependencies": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parser-front-matter": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/parser-front-matter/-/parser-front-matter-1.6.4.tgz", + "integrity": "sha512-eqtUnI5+COkf1CQOYo8FmykN5Zs+5Yr60f/7GcPgQDZEEjdE/VZ4WMaMo9g37foof8h64t/TH2Uvk2Sq0fDy/g==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "file-is-binary": "^1.0.0", + "gray-matter": "^3.0.2", + "isobject": "^3.0.1", + "lazy-cache": "^2.0.2", + "mixin-deep": "^1.2.0", + "trim-leading-lines": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parser-front-matter/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parseurl": { + "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" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/periscopic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", + "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^3.0.0", + "is-reference": "^3.0.0" + } + }, + "node_modules/pkce-challenge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/pkg-store": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/pkg-store/-/pkg-store-0.2.2.tgz", + "integrity": "sha512-1JZVLbIRN6Dgsfk918EMZyL/T4NvJduSaT7n6ssHO3FV1FCrg6zjHJmuj3+Fb/Y5nBe3IBDoMYsY6Jf2IoRH0A==", + "license": "MIT", + "dependencies": { + "cache-base": "^0.8.2", + "kind-of": "^3.0.2", + "lazy-cache": "^1.0.3", + "union-value": "^0.2.3", + "write-json": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-store/node_modules/cache-base": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-0.8.5.tgz", + "integrity": "sha512-19t0n7xdoVr5Q08+6sF85YZ9VuvbpVFq5JLm0gcsRmCvTO1Y3duTJGMaOQYf14Ras4o6dEnvoqvjdrUK1tNtgg==", + "license": "MIT", + "dependencies": { + "collection-visit": "^0.2.1", + "component-emitter": "^1.2.1", + "get-value": "^2.0.5", + "has-value": "^0.3.1", + "isobject": "^3.0.0", + "lazy-cache": "^2.0.1", + "set-value": "^0.4.2", + "to-object-path": "^0.3.0", + "union-value": "^0.2.3", + "unset-value": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-store/node_modules/cache-base/node_modules/lazy-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", + "integrity": "sha512-7vp2Acd2+Kz4XkzxGxaB1FWOi8KjWIWsgdfD5MCb86DWvlLqhRPM+d6Pro3iNEL5VT9mstz5hKAlcd+QR6H3aA==", + "license": "MIT", + "dependencies": { + "set-getter": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-store/node_modules/collection-visit": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-0.2.3.tgz", + "integrity": "sha512-V88PJOCqJfsZS45YBELDgmhQkECokQAAr9XR4hT6eFkFsAPsCsk3EoDHSuBPYzygjquGM/0KF4vdwTiQO6lbdw==", + "license": "MIT", + "dependencies": { + "lazy-cache": "^2.0.1", + "map-visit": "^0.1.5", + "object-visit": "^0.3.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-store/node_modules/collection-visit/node_modules/lazy-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", + "integrity": "sha512-7vp2Acd2+Kz4XkzxGxaB1FWOi8KjWIWsgdfD5MCb86DWvlLqhRPM+d6Pro3iNEL5VT9mstz5hKAlcd+QR6H3aA==", + "license": "MIT", + "dependencies": { + "set-getter": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-store/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-store/node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-store/node_modules/map-visit": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-0.1.5.tgz", + "integrity": "sha512-zdmJBFvvVR/H5wCfsCP7XxSLp+346yAZ30Wy2OsQLcH19OVGMWa3Ms9quO00lj9ybsySu3gKOINNgICb4Zqauw==", + "license": "MIT", + "dependencies": { + "lazy-cache": "^2.0.1", + "object-visit": "^0.3.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-store/node_modules/map-visit/node_modules/lazy-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", + "integrity": "sha512-7vp2Acd2+Kz4XkzxGxaB1FWOi8KjWIWsgdfD5MCb86DWvlLqhRPM+d6Pro3iNEL5VT9mstz5hKAlcd+QR6H3aA==", + "license": "MIT", + "dependencies": { + "set-getter": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-store/node_modules/object-visit": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-0.3.4.tgz", + "integrity": "sha512-6QNyX7uTuwqxP7pmDBqgBDKdmZws1rXriUyXM5KG6+7J0aYRuuAGoc636IGdLzgOL77WUwL+EpoTJrEHwWsyOA==", + "license": "MIT", + "dependencies": { + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-store/node_modules/object-visit/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "license": "MIT", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-store/node_modules/set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha512-2Z0LRUUvYeF7gIFFep48ksPq0NR09e5oKoFXznaMGNcu+EZAfGnyL0K6xno2gCqX6dZYEZRjrcn04/gvZzcKhQ==", + "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-store/node_modules/union-value": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-0.2.4.tgz", + "integrity": "sha512-Tv3cqdyY8yjW9ZcJ9WP7JdHS34natzylD0oNRLlYbWOfUdC4EQ0sf3fubnqrK2IErtlmobFmuS1pWvv88VghpA==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-store/node_modules/unset-value": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-0.1.2.tgz", + "integrity": "sha512-yhv5I4TsldLdE3UcVQn0hD2T5sNCPv4+qm/CTUpRKIpwthYRIipsAPdsrNpOI79hPQa0rTTeW22Fq6JWRcTgNg==", + "license": "MIT", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha512-s/46sYeylUfHNjI+sA/78FAHlmIuKqI9wNnzEOGehAlUUYeObv5C2mOinXBjyUyWmJ2SfcS2/ydApH4hTF4WXQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pretty-time": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-0.2.0.tgz", + "integrity": "sha512-BwYVCPtnSq3nIGDK2rgwZTN2ClhBQmnG8pudrXIfGBwuMutIBj/W7wm/jz1WCHl/Kk2Q5i1Am1uD2Q74oPyBCw==", + "license": "MIT", + "dependencies": { + "is-number": "^2.0.2", + "nanoseconds": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/project-name": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/project-name/-/project-name-0.2.6.tgz", + "integrity": "sha512-ZOxqunIi7fnAX+E0tE+FLHv2pSEa7IgEbnVG2s4wPxWL+p2cUk9KRDZV4lNkpfyrVR6rfOUBxIbctbJDo/qOTA==", + "license": "MIT", + "dependencies": { + "find-pkg": "^0.1.2", + "git-repo-name": "^0.6.0", + "minimist": "^1.2.0" + }, + "bin": { + "project-name": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.15.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", + "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", + "license": "BSD-3-Clause", + "dependencies": { + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/question-cache": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/question-cache/-/question-cache-0.4.0.tgz", + "integrity": "sha512-QgX1mI/ZNBbG8M5gYfZQG/qxZRggP2Fk+WOqE/FKylmNwi5aWy6o1JSaojYrHT5JUtRdyG+wwVJSlTfW7UBmog==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "arr-union": "^3.1.0", + "async": "1.5.2", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "get-value": "^2.0.5", + "has-value": "^0.3.1", + "inquirer2": "^0.1.1", + "is-answer": "^0.1.0", + "isobject": "^2.0.0", + "lazy-cache": "^1.0.3", + "mixin-deep": "^1.1.3", + "omit-empty": "^0.3.6", + "option-cache": "^3.3.5", + "os-homedir": "^1.0.1", + "project-name": "^0.2.4", + "set-value": "^0.3.3", + "to-choices": "^0.2.0", + "use": "^1.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/question-cache/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/question-cache/node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/question-cache/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/question-cache/node_modules/omit-empty": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/omit-empty/-/omit-empty-0.3.6.tgz", + "integrity": "sha512-P5zl3TYREgcRAjjyj9kYHNhVtOOXMlCyYh/KNm53oUZNKpGOBbS0WLdRcThDPWbuFleXlbCd1KTBRZD86nj3RA==", + "license": "MIT", + "dependencies": { + "has-values": "^0.1.4", + "is-date-object": "^1.0.1", + "isobject": "^2.0.0", + "reduce-object": "^0.1.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/question-cache/node_modules/set-value": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.3.3.tgz", + "integrity": "sha512-aJPTd11HzK47w8xJMpyY4tBmFC6EidC8EG2fENxCJvPwLYzXLnNaesgo796y1fhSISSYAuah4Het+wDoPXK2tg==", + "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "isobject": "^2.0.0", + "to-object-path": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/question-cache/node_modules/to-object-path": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.2.0.tgz", + "integrity": "sha512-6oMu4CTicplxUMOXBoS1W9YNjIclUzmWpWf02v+JnYMEGVX24rTCsYMHay85WA7Wq+9wZa2iJ+HAAX0yGOcxCQ==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "is-arguments": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/question-store": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/question-store/-/question-store-0.11.1.tgz", + "integrity": "sha512-rvyFpqLYQCO7FOnX+3qZ7b8K7omWkn9MWyj/7dknf7BaGZHo//fzBS2/0atmcvZfjT2mu1q64oiZIrsB7OqqGg==", + "license": "MIT", + "dependencies": { + "common-config": "^0.1.0", + "data-store": "^0.16.1", + "debug": "^2.2.0", + "is-answer": "^0.1.0", + "lazy-cache": "^2.0.1", + "project-name": "^0.2.6", + "question-cache": "^0.5.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/question-store/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/question-store/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/question-store/node_modules/question-cache": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/question-cache/-/question-cache-0.5.1.tgz", + "integrity": "sha512-v9F1LnlSQIUEAGFtrfVX/76lH4u4zyV34t94o6EkguPTKKfbvV6SLH8h3pn7LXGZLmAgD1PbmVOuKMY8ZWnuPg==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "arr-union": "^3.1.0", + "async-each-series": "^1.1.0", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "get-value": "^2.0.6", + "has-value": "^0.3.1", + "inquirer2": "^0.1.1", + "is-answer": "^0.1.0", + "isobject": "^2.1.0", + "lazy-cache": "^2.0.1", + "mixin-deep": "^1.1.3", + "omit-empty": "^0.4.1", + "option-cache": "^3.4.0", + "os-homedir": "^1.0.1", + "project-name": "^0.2.5", + "set-value": "^0.3.3", + "to-choices": "^0.2.0", + "use": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/question-store/node_modules/set-value": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.3.3.tgz", + "integrity": "sha512-aJPTd11HzK47w8xJMpyY4tBmFC6EidC8EG2fENxCJvPwLYzXLnNaesgo796y1fhSISSYAuah4Het+wDoPXK2tg==", + "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "isobject": "^2.0.0", + "to-object-path": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/question-store/node_modules/to-object-path": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.2.0.tgz", + "integrity": "sha512-6oMu4CTicplxUMOXBoS1W9YNjIclUzmWpWf02v+JnYMEGVX24rTCsYMHay85WA7Wq+9wZa2iJ+HAAX0yGOcxCQ==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "is-arguments": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/question-store/node_modules/use": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz", + "integrity": "sha512-RrhWfFWkNCz3djfSFZh7uSwu491QRhwNaHyAgB2sGl4kmmznb5ZUuuHpiWLVEsXOdpDakYK/x5+9o4lgg41UMw==", + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "lazy-cache": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/question-store/node_modules/use/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "license": "MIT", + "dependencies": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/randomatic/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/randomatic/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/range-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/raw-body": { + "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.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/read-file": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/read-file/-/read-file-0.2.0.tgz", + "integrity": "sha512-na/zgd5KplGlR+io+ygXQMIoDfX/Y0bNS5+P2TOXOTk5plquOVd0snudCd30hZJAsnVK2rxuxUP2z0CN+Aw1lQ==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readline2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", + "integrity": "sha512-8/td4MmwUB6PkZUbV25uKz7dfrmjYWxsW8DVfibWdlHRk/l/DfHKn4pU+dfcoGLFgWOdyGCzINRQD7jn+Bv+/g==", + "license": "MIT", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "mute-stream": "0.0.5" + } + }, + "node_modules/reduce-object": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/reduce-object/-/reduce-object-0.1.3.tgz", + "integrity": "sha512-7js/WmWoI5NRe/mfxUimt0rmj04lfhJIa8SDyt+OKasagu+KjffnVxElTKuZs1fRjytlN46BrDoVK+IsBVovtw==", + "dependencies": { + "for-own": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "license": "MIT", + "dependencies": { + "is-equal-shallow": "^0.1.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/relative": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/relative/-/relative-3.0.2.tgz", + "integrity": "sha512-Q5W2qeYtY9GbiR8z1yHNZ1DGhyjb4AnLEjt8iE6XfcC1QIu+FAtj3HQaO0wH28H1mX6cqNLvAqWhP402dxJGyA==", + "license": "MIT", + "dependencies": { + "isobject": "^2.0.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/remote-origin-url": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/remote-origin-url/-/remote-origin-url-0.5.3.tgz", + "integrity": "sha512-crQ7Xk1m/F2IiwBx5oTqk/c0hjoumrEz+a36+ZoVupskQRE/q7pAwHKsTNeiZ31sbSTELvVlVv4h1W0Xo5szKg==", + "license": "MIT", + "dependencies": { + "parse-git-config": "^1.1.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "license": "ISC" + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/repo-utils": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/repo-utils/-/repo-utils-0.3.7.tgz", + "integrity": "sha512-NQmnug1GX04LoNb2bXGsCV3FzLDqmwf3qMmjToibrxI1CFV2uyE2XDdo9SYW8epfBK7wmw0ANhkmDtbGlrkyWQ==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "get-value": "^2.0.6", + "git-config-path": "^1.0.1", + "is-absolute": "^0.2.6", + "kind-of": "^3.0.4", + "lazy-cache": "^2.0.1", + "mixin-deep": "^1.1.3", + "omit-empty": "^0.4.1", + "parse-author": "^1.0.0", + "parse-git-config": "^1.0.2", + "parse-github-url": "^0.3.2", + "project-name": "^0.2.6" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reputation-system": { + "version": "0.0.1", + "resolved": "git+ssh://git@github.com/agenticaihome/reputation-system.git#7e4ed7116b87a4c6e57b9e18b18f0cd46eba25cd", + "dependencies": { + "@dagrejs/dagre": "^1.0.4", + "@fleet-sdk/compiler": "^0.12.0", + "@fleet-sdk/core": "^0.12.0", + "@fleet-sdk/wallet": "^0.12.0", + "@scure/base": "^1.1.3", + "@scure/bip32": "^1.4.0", + "@scure/bip39": "^1.3.0", + "@types/three": "^0.161.2", + "@xyflow/svelte": "^0.1.3", + "update": "^0.7.4", + "uuid": "^11.0.4" + }, + "peerDependencies": { + "svelte": "^4" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", + "integrity": "sha512-QxMPqI6le2u0dCLyiGzgy92kjkkL6zO0XyvHzjdTNH3zM6e5Hz3BwG6+aEyNgiQ5Xz6PwTwgQEj3U50dByPKIA==", + "license": "MIT", + "dependencies": { + "expand-tilde": "^1.2.2", + "global-modules": "^0.2.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-file": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/resolve-file/-/resolve-file-0.2.2.tgz", + "integrity": "sha512-3t2k4iUeMlX3PbjgZPcKzILg8HEtl0VW/lS8G+k4FCgj3kNn1uTOv6YJtm192rYMFpq9abzfJ2xd5W6ibOwVag==", + "license": "MIT", + "dependencies": { + "cwd": "^0.10.0", + "expand-tilde": "^2.0.1", + "extend-shallow": "^2.0.1", + "fs-exists-sync": "^0.1.0", + "global-modules": "^0.2.3", + "homedir-polyfill": "^1.0.0", + "lazy-cache": "^2.0.1", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-file/node_modules/cwd": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/cwd/-/cwd-0.10.0.tgz", + "integrity": "sha512-YGZxdTTL9lmLkCUTpg4j0zQ7IhRB5ZmqNBbGCl3Tg6MP/d5/6sY7L5mmTjzbc6JKgVZYiqTQTNhPFsbXNGlRaA==", + "license": "MIT", + "dependencies": { + "find-pkg": "^0.1.2", + "fs-exists-sync": "^0.1.0" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/resolve-file/node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "license": "MIT", + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-glob/-/resolve-glob-1.0.0.tgz", + "integrity": "sha512-wSW9pVGJRs89k0wEXhM7C6+va9998NsDhgc0Y+6Nv8hrHsu0hUS7Ug10J1EiVtU6N2tKlSNvx9wLihL8Ao22Lg==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-valid-glob": "^1.0.0", + "matched": "^1.0.2", + "relative": "^3.0.2", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-glob/node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "license": "MIT", + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-glob/node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "license": "MIT", + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-glob/node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "license": "MIT", + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-glob/node_modules/has-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", + "integrity": "sha512-D+8A457fBShSEI3tFCj65PAbT++5sKiFtdCdOam0gnfBgw9D277OERk+HM9qYJXmdVLZ/znez10SqHN0BBQ50g==", + "license": "MIT", + "dependencies": { + "is-glob": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-glob/node_modules/is-extglob": { + "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" + } + }, + "node_modules/resolve-glob/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-glob/node_modules/is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-glob/node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-glob/node_modules/matched": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/matched/-/matched-1.0.2.tgz", + "integrity": "sha512-7ivM1jFZVTOOS77QsR+TtYHH0ecdLclMkqbf5qiJdX2RorqfhsL65QHySPZgDE0ZjHoh+mQUNHTanNXIlzXd0Q==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "async-array-reduce": "^0.2.1", + "glob": "^7.1.2", + "has-glob": "^1.0.0", + "is-valid-glob": "^1.0.0", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/resolve-glob/node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "license": "MIT", + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-glob/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha512-reSjH4HuiFlxlaBaFCiS6O76ZGG2ygKoSlCsipKdaZuKSPx/+bt9mULkn4l0asVzbEfQQmXRg6Wp6gv6m0wElw==", + "license": "MIT", + "dependencies": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rethrow": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/rethrow/-/rethrow-0.2.3.tgz", + "integrity": "sha512-vtB0AIP/FlRbR4stc8szvHXe+N4158/K1hRMZbFHljIiQAHru54M9LylbxNjBGHl9biuwQNVUdvRzVxv1QWAiA==", + "license": "MIT", + "dependencies": { + "ansi-bgred": "^0.1.1", + "ansi-red": "^0.1.1", + "ansi-yellow": "^0.1.1", + "extend-shallow": "^1.1.4", + "lazy-cache": "^0.2.3", + "right-align": "^0.1.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rethrow/node_modules/extend-shallow": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", + "license": "MIT", + "dependencies": { + "kind-of": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rethrow/node_modules/kind-of": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rethrow/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha512-yqINtL/G7vs2v+dFIZmFUDbnVyFUJFKd6gK22Kgo6R4jfJGFtisKyncWDDULgjfqf4ASQuIQyjJ7XZ+3aWpsAg==", + "license": "MIT", + "dependencies": { + "align-text": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/run-async": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "integrity": "sha512-qOX+w+IxFgpUpJfkv2oGN0+ExPs68F4sZHfaRRx4dDexAQkG83atugKVEylyT5ARees3HBbfmuvnjbrd8j9Wjw==", + "license": "MIT", + "dependencies": { + "once": "^1.3.0" + } + }, + "node_modules/rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha512-Cun9QucwK6MIrp3mry/Y7hqD1oFqTYLQ4pGxaHTjIdaFDWRGGLikqp6u8LcWJnzpoALg9hap+JGk8sFIUuEGNA==" + }, + "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/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC" + }, + "node_modules/set-getter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.1.tgz", + "integrity": "sha512-9sVWOy+gthr+0G9DzqqLaYNA7+5OKkSmcqjL9cBpDEaZrr3ShQlyX2cZ/O/ozE41oxn/Tt0LGEM/w4Rub3A3gw==", + "license": "MIT", + "dependencies": { + "to-object-path": "^0.3.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", + "integrity": "sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw==", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.1", + "kind-of": "^2.0.1", + "lazy-cache": "^0.2.3", + "mixin-object": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shallow-clone/node_modules/kind-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", + "integrity": "sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shallow-clone/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sigmajs-crypto-facade": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/sigmajs-crypto-facade/-/sigmajs-crypto-facade-0.0.7.tgz", + "integrity": "sha512-4XK8ZS9NKAbo8aGnU6o5GkBW6Upl8+OK8A1KreVDMAamfvZ0iq4LoVH8rHaeEPf9moVtaC4QZY5RYI+0OwiydA==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.1.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sigmastate-js": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/sigmastate-js/-/sigmastate-js-0.4.6.tgz", + "integrity": "sha512-Vo/TSFbkKrG28eiWn7EmoaBNgyabC6En6B7cKjb3z2ivBpFBMCGxUZgmKu83GgJboRvCikZ3/vvWFfbxpbloig==", + "license": "MIT", + "dependencies": { + "@fleet-sdk/common": "0.1.3", + "@noble/hashes": "1.1.4", + "sigmajs-crypto-facade": "0.0.7" + } + }, + "node_modules/sigmastate-js/node_modules/@fleet-sdk/common": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@fleet-sdk/common/-/common-0.1.3.tgz", + "integrity": "sha512-gYEkHhgGpgIcmCL3nCw8E9zHkT2WLmR+mPdxFlUE6fwcwISURbJrP6W9mF7D5Y0ShAP5Is2w3edh7AyIc7ctIQ==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/sigmastate-js/node_modules/@noble/hashes": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.4.tgz", + "integrity": "sha512-+PYsVPrTSqtVjatKt2A/Proukn2Yrz61OBThOCKErc5w2/r1Fh37vbDv0Eah7pyNltrmacjwTvdw3JoR+WE4TA==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/sort-object-arrays": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/sort-object-arrays/-/sort-object-arrays-0.1.1.tgz", + "integrity": "sha512-yqoVMBF2wzCdE4f2zeYKq2dQHe1WjGIdAV1dYSkXOFB+M3Bo+Bp0u+NdZCOETM3OC1VXerlruTD6Ckgus1NsnA==", + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/src-stream": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/src-stream/-/src-stream-0.1.1.tgz", + "integrity": "sha512-fczCn/BzNcH27V7unPzgCl+owTuC/Uv3UG9BQxGemRs6Fy1M2GFmYu1ZHQ2UjeYlGQqAmkModp949g235kYzcw==", + "license": "MIT", + "dependencies": { + "duplexify": "^3.4.2", + "merge-stream": "^0.1.8", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "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" + } + }, + "node_modules/stream-combiner": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", + "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", + "license": "MIT", + "dependencies": { + "duplexer": "~0.1.1", + "through": "~2.3.4" + } + }, + "node_modules/stream-exhaust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", + "license": "MIT" + }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "license": "MIT" + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/stringify-author": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/stringify-author/-/stringify-author-0.1.3.tgz", + "integrity": "sha512-OxmcAnr4DESGl/ics9lAv30DdOBC2bdqswEAzTiOZSQRqVpWfnmlr3cpfxTmExf7phS5WxBJ1flD1e3ResNTBA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "license": "MIT", + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-bom-buffer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/strip-bom-buffer/-/strip-bom-buffer-0.1.1.tgz", + "integrity": "sha512-dbIOX/cOLFgLH/2ofd7n78uPD3uPkXyt3P1IgaVoGiPYEdOnb7D1mawyhOTXyYWva1kCuRxJY5FkMsVKYlZRRg==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.0", + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-bom-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", + "integrity": "sha512-7jfJB9YpI2Z0aH3wu10ZqitvYJaE0s5IzFuWE+0pbb4Q/armTloEUShymkDO47YSLnjAW52mlXT//hs9wXNNJQ==", + "license": "MIT", + "dependencies": { + "first-chunk-stream": "^1.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-color": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/strip-color/-/strip-color-0.1.0.tgz", + "integrity": "sha512-p9LsUieSjWNNAxVCXLeilaDlmuUOrDS5/dF9znM1nZc7EGX5+zEFC0bEevsNIaldjlks+2jns5Siz6F9iK6jwA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/success-symbol": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/success-symbol/-/success-symbol-0.1.0.tgz", + "integrity": "sha512-7S6uOTxPklNGxOSbDIg4KlVLBQw1UiGVyfCUYgYxrZUKRblUkmGj7r8xlfQoFudvqLv6Ap5gd76/IIFfI9JG2A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svelte": { + "version": "4.2.20", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.20.tgz", + "integrity": "sha512-eeEgGc2DtiUil5ANdtd8vPwt9AgaMdnuUFnPft9F5oMvU/FHu5IHFic+p1dR/UOB7XU2mX2yHW+NcTch4DCh5Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "@jridgewell/sourcemap-codec": "^1.4.15", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/estree": "^1.0.1", + "acorn": "^8.9.0", + "aria-query": "^5.3.0", + "axobject-query": "^4.0.0", + "code-red": "^1.0.3", + "css-tree": "^2.3.1", + "estree-walker": "^3.0.3", + "is-reference": "^3.0.1", + "locate-character": "^3.0.0", + "magic-string": "^0.30.4", + "periscopic": "^3.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tableize-object": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/tableize-object/-/tableize-object-0.1.0.tgz", + "integrity": "sha512-seDB76zNqvGXG0W8gxUteRuq1fk1dvSxcRVbeYQ1a1QqMkbtqrGwvqTubfN6VCizzlb7NxOPM/j3z9JeBrbxYg==", + "license": "MIT", + "dependencies": { + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/template-error": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/template-error/-/template-error-0.1.2.tgz", + "integrity": "sha512-soS5m+iT4k/okmMyydvMjPlmyz3CowvMcOxfgoAqccmkyF81W3D+zMi4lhqbSIhTgLhKE/Bh8wUlXzr6F+ERCw==", + "license": "MIT", + "dependencies": { + "engine": "^0.1.5", + "kind-of": "^2.0.1", + "lazy-cache": "^0.2.3", + "rethrow": "^0.2.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/template-error/node_modules/kind-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", + "integrity": "sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/template-error/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/templates": { + "version": "0.24.3", + "resolved": "https://registry.npmjs.org/templates/-/templates-0.24.3.tgz", + "integrity": "sha512-R5CUlz3atppbifPePB5Z2KGXCsB0Y87lQ/+ziizq/d3kyydDlNk40yX98RWLprNnKjTiwqeiuGjLJlPPJPYshg==", + "license": "MIT", + "dependencies": { + "array-sort": "^0.1.2", + "async-each": "^1.0.0", + "base": "^0.11.1", + "base-data": "^0.6.0", + "base-engines": "^0.2.0", + "base-helpers": "^0.1.1", + "base-option": "^0.8.3", + "base-plugins": "^0.4.13", + "base-routes": "^0.2.1", + "debug": "^2.2.0", + "deep-bind": "^0.3.0", + "define-property": "^0.2.5", + "engine-base": "^0.1.2", + "export-files": "^2.1.1", + "extend-shallow": "^2.0.1", + "falsey": "^0.3.0", + "get-value": "^2.0.6", + "get-view": "^0.1.1", + "group-array": "^0.3.0", + "has-glob": "^0.1.1", + "has-value": "^0.3.1", + "inflection": "^1.10.0", + "is-valid-app": "^0.2.0", + "layouts": "^0.11.0", + "lazy-cache": "^2.0.1", + "match-file": "^0.2.0", + "mixin-deep": "^1.1.3", + "paginationator": "^0.1.3", + "pascalcase": "^0.1.1", + "set-value": "^0.3.3", + "template-error": "^0.1.2", + "vinyl-item": "^0.1.0", + "vinyl-view": "^0.1.2" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/templates/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/templates/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/templates/node_modules/set-value": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.3.3.tgz", + "integrity": "sha512-aJPTd11HzK47w8xJMpyY4tBmFC6EidC8EG2fENxCJvPwLYzXLnNaesgo796y1fhSISSYAuah4Het+wDoPXK2tg==", + "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "isobject": "^2.0.0", + "to-object-path": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/templates/node_modules/to-object-path": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.2.0.tgz", + "integrity": "sha512-6oMu4CTicplxUMOXBoS1W9YNjIclUzmWpWf02v+JnYMEGVX24rTCsYMHay85WA7Wq+9wZa2iJ+HAAX0yGOcxCQ==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "is-arguments": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2-filter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", + "integrity": "sha512-miwWajb1B80NvIVKXFPN/o7+vJc4jYUvnZCwvhicRAoTxdD9wbcjri70j+BenCrN/JXEPKDjhpw4iY7yiNsCGg==", + "license": "MIT", + "dependencies": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "node_modules/time-diff": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/time-diff/-/time-diff-0.3.1.tgz", + "integrity": "sha512-8/LJTO3zKbhj6sQFeN3aoAA04GGjUgwKEquQVnKXkziHjEHadpIVIQ1rAjQgSVMnBRubJ/q5gMjK9WqXTzSykA==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^2.1.0", + "log-utils": "^0.1.0", + "pretty-time": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/time-diff/node_modules/ansi-colors": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-0.1.0.tgz", + "integrity": "sha512-nUNbMZLDr1YQaPdMC2lREJXKttoaHwICajt9x40Js/POX7gNv7OK/VbC9ciJaIFshg9Xol+1GclqfY14UW+0ZA==", + "license": "MIT", + "dependencies": { + "ansi-bgblack": "^0.1.1", + "ansi-bgblue": "^0.1.1", + "ansi-bgcyan": "^0.1.1", + "ansi-bggreen": "^0.1.1", + "ansi-bgmagenta": "^0.1.1", + "ansi-bgred": "^0.1.1", + "ansi-bgwhite": "^0.1.1", + "ansi-bgyellow": "^0.1.1", + "ansi-black": "^0.1.1", + "ansi-blue": "^0.1.1", + "ansi-bold": "^0.1.1", + "ansi-cyan": "^0.1.1", + "ansi-dim": "^0.1.1", + "ansi-gray": "^0.1.1", + "ansi-green": "^0.1.1", + "ansi-grey": "^0.1.1", + "ansi-hidden": "^0.1.1", + "ansi-inverse": "^0.1.1", + "ansi-italic": "^0.1.1", + "ansi-magenta": "^0.1.1", + "ansi-red": "^0.1.1", + "ansi-reset": "^0.1.1", + "ansi-strikethrough": "^0.1.1", + "ansi-underline": "^0.1.1", + "ansi-white": "^0.1.1", + "ansi-yellow": "^0.1.1", + "lazy-cache": "^0.2.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/time-diff/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/time-diff/node_modules/log-utils": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/log-utils/-/log-utils-0.1.5.tgz", + "integrity": "sha512-5jLIj9RWWYxQbBhHDvNZTZE3J/oSTbw/fuPmsXJg8/vbY/4XiJ4YAiEPrwo3dLbcB/n9k1qTznOVr6IigiaF7A==", + "license": "MIT", + "dependencies": { + "ansi-colors": "^0.1.0", + "error-symbol": "^0.1.0", + "info-symbol": "^0.1.0", + "log-ok": "^0.1.1", + "success-symbol": "^0.1.0", + "time-stamp": "^1.0.1", + "warning-symbol": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-absolute-glob": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", + "integrity": "sha512-Vvl5x6zNf9iVG1QTWeknmWrKzZxaeKfIDRibrZCR3b2V/2NlFJuD2HV7P7AVjaKLZNqLPHqyr0jGrW0fTcxCPQ==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-choices": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/to-choices/-/to-choices-0.2.0.tgz", + "integrity": "sha512-oPVwP4jpJZM4R3Yvfcod8/OjddMoi33amdFzwZktcHAjddmIEAzQ9DQsdPKUr/Q4hLxNMWPys4Pn1qJdLiR4Kg==", + "license": "MIT", + "dependencies": { + "ansi-gray": "^0.1.1", + "mixin-deep": "^1.1.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-file": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/to-file/-/to-file-0.2.0.tgz", + "integrity": "sha512-xLyYVRKJQTwy2tKMOLD0M0yL+YSZVgMAzkaY9hh7GhzgBBHSIWARDkgPx8krPPm0mW5CgoIFsQEdKRFOyIRdqg==", + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "file-contents": "^0.2.4", + "glob-parent": "^2.0.0", + "is-valid-glob": "^0.3.0", + "isobject": "^2.1.0", + "lazy-cache": "^2.0.1", + "vinyl": "^1.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/toidentifier": { + "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" + } + }, + "node_modules/trim-leading-lines": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/trim-leading-lines/-/trim-leading-lines-0.1.1.tgz", + "integrity": "sha512-ViFS8blDWJN4Jg10fyZ+sIAfkSSAn5NiTVywc3kKtMWK3DZjaV7FV86oX3i9KY6/gqYkdka/UNeM2/NMGttiyA==", + "license": "MIT", + "dependencies": { + "is-whitespace": "^0.3.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/type-is": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", + "license": "MIT", + "dependencies": { + "content-type": "^2.0.0", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/type-is/node_modules/content-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", + "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unique-stream": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.4.0.tgz", + "integrity": "sha512-V6QarSfeSgDipGA9EZdoIzu03ZDlOFkk+FbEP5cwgrZXN3iIkYR91IjU2EnM6rB835kGQsqHX8qncObTXV+6KA==", + "license": "MIT", + "dependencies": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "3.0.0" + } + }, + "node_modules/unique-stream/node_modules/through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "license": "MIT", + "dependencies": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "node_modules/unpipe": { + "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/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "license": "MIT", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/update": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/update/-/update-0.7.4.tgz", + "integrity": "sha512-B7HArWh4T6TSmMffmxlbD9gZM0QdboQ8N/p5aHcyhGCuuVRHSk37pvuQlAvi1XBrQMrEX5WJUQyQR8+jy/x4iQ==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "assemble-core": "^0.25.0", + "assemble-loader": "^0.6.1", + "base-cli-process": "^0.1.18", + "base-config-process": "^0.1.9", + "base-generators": "^0.4.5", + "base-questions": "^0.7.3", + "base-runtimes": "^0.2.0", + "base-store": "^0.4.4", + "common-config": "^0.1.0", + "data-store": "^0.16.1", + "export-files": "^2.1.1", + "extend-shallow": "^2.0.1", + "find-pkg": "^0.1.2", + "fs-exists-sync": "^0.1.0", + "global-modules": "^0.2.2", + "gulp-choose-files": "^0.1.3", + "is-valid-app": "^0.2.0", + "isobject": "^2.1.0", + "lazy-cache": "^2.0.1", + "log-utils": "^0.2.1", + "parser-front-matter": "^1.4.1", + "resolve-dir": "^0.1.0", + "resolve-file": "^0.2.0", + "set-blocking": "^2.0.0", + "strip-color": "^0.1.0", + "text-table": "^0.2.0", + "through2": "^2.0.1", + "yargs-parser": "^2.4.1" + }, + "bin": { + "update": "bin/update.js" + }, + "engines": { + "node": ">=5.0" + } + }, + "node_modules/upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", + "license": "MIT" + }, + "node_modules/use": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use/-/use-1.1.2.tgz", + "integrity": "sha512-25Uw2xiVk0m2ySqmnu2GjOIROlImdXMRcpI6Cq7sZeG/zFZgFkSeo2+QwKNWJncfZOVS55eACoinvJ3EtprOBw==", + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/uuid": { + "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/esm/bin/uuid" + } + }, + "node_modules/vali-date": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", + "integrity": "sha512-sgECfZthyaCKW10N0fm27cg8HYTFK5qMWgypqkXMQ4Wbl/zZKx7xZICgcoxIIE+WFAP/MBL2EFwC/YvLxw3Zeg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vary": { + "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" + } + }, + "node_modules/vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha512-Ci3wnR2uuSAWFMSglZuB8Z2apBdtOyz8CV7dC6/U1XbltXBC+IuutUkXQISz01P+US2ouBuesSbV6zILZ6BuzQ==", + "license": "MIT", + "dependencies": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + }, + "engines": { + "node": ">= 0.9" + } + }, + "node_modules/vinyl-fs": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", + "integrity": "sha512-lxMlQW/Wxk/pwhooY3Ut0Q11OH5ZvZfV0Gg1c306fBNWznQ6ZeQaCdE7XX0O/PpGSqgAsHMBxwFgcGxiYW3hZg==", + "license": "MIT", + "dependencies": { + "duplexify": "^3.2.0", + "glob-stream": "^5.3.2", + "graceful-fs": "^4.0.0", + "gulp-sourcemaps": "1.6.0", + "is-valid-glob": "^0.3.0", + "lazystream": "^1.0.0", + "lodash.isequal": "^4.0.0", + "merge-stream": "^1.0.0", + "mkdirp": "^0.5.0", + "object-assign": "^4.0.0", + "readable-stream": "^2.0.4", + "strip-bom": "^2.0.0", + "strip-bom-stream": "^1.0.0", + "through2": "^2.0.0", + "through2-filter": "^2.0.0", + "vali-date": "^1.0.0", + "vinyl": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/vinyl-fs/node_modules/merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha512-e6RM36aegd4f+r8BZCcYXlO2P3H6xbUM6ktL2Xmf45GAOit9bI4z6/3VU7JwllVO1L7u0UDSg/EhzQ5lmMLolA==", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/vinyl-item": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/vinyl-item/-/vinyl-item-0.1.0.tgz", + "integrity": "sha512-9L2HEcbtuTdKCLWDucRPObPoAxnUUCdAXg0QDf3aDPM3oFpb6C+yct/R31PA9EhLGeilNl8TF/inc3OwFSSEMg==", + "license": "MIT", + "dependencies": { + "base": "^0.8.1", + "base-option": "^0.8.2", + "base-plugins": "^0.4.12", + "clone": "^1.0.2", + "clone-stats": "^1.0.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "isobject": "^2.1.0", + "lazy-cache": "^2.0.1", + "vinyl": "^1.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-item/node_modules/base": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/base/-/base-0.8.1.tgz", + "integrity": "sha512-hCEtSWF9Xin1mVIrgCAwJhIJxURWOu3odjKsv+9TXofdJly0vO9Di87hnkChwi44v0+LPzHtNOjoCUYb36fBhg==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "cache-base": "^0.8.2", + "class-utils": "^0.3.2", + "component-emitter": "^1.2.0", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "lazy-cache": "^1.0.3", + "mixin-deep": "^1.1.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-item/node_modules/base/node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-item/node_modules/cache-base": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-0.8.5.tgz", + "integrity": "sha512-19t0n7xdoVr5Q08+6sF85YZ9VuvbpVFq5JLm0gcsRmCvTO1Y3duTJGMaOQYf14Ras4o6dEnvoqvjdrUK1tNtgg==", + "license": "MIT", + "dependencies": { + "collection-visit": "^0.2.1", + "component-emitter": "^1.2.1", + "get-value": "^2.0.5", + "has-value": "^0.3.1", + "isobject": "^3.0.0", + "lazy-cache": "^2.0.1", + "set-value": "^0.4.2", + "to-object-path": "^0.3.0", + "union-value": "^0.2.3", + "unset-value": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-item/node_modules/cache-base/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-item/node_modules/clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", + "license": "MIT" + }, + "node_modules/vinyl-item/node_modules/collection-visit": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-0.2.3.tgz", + "integrity": "sha512-V88PJOCqJfsZS45YBELDgmhQkECokQAAr9XR4hT6eFkFsAPsCsk3EoDHSuBPYzygjquGM/0KF4vdwTiQO6lbdw==", + "license": "MIT", + "dependencies": { + "lazy-cache": "^2.0.1", + "map-visit": "^0.1.5", + "object-visit": "^0.3.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-item/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/vinyl-item/node_modules/map-visit": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-0.1.5.tgz", + "integrity": "sha512-zdmJBFvvVR/H5wCfsCP7XxSLp+346yAZ30Wy2OsQLcH19OVGMWa3Ms9quO00lj9ybsySu3gKOINNgICb4Zqauw==", + "license": "MIT", + "dependencies": { + "lazy-cache": "^2.0.1", + "object-visit": "^0.3.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-item/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/vinyl-item/node_modules/object-visit": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-0.3.4.tgz", + "integrity": "sha512-6QNyX7uTuwqxP7pmDBqgBDKdmZws1rXriUyXM5KG6+7J0aYRuuAGoc636IGdLzgOL77WUwL+EpoTJrEHwWsyOA==", + "license": "MIT", + "dependencies": { + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-item/node_modules/set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha512-2Z0LRUUvYeF7gIFFep48ksPq0NR09e5oKoFXznaMGNcu+EZAfGnyL0K6xno2gCqX6dZYEZRjrcn04/gvZzcKhQ==", + "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-item/node_modules/union-value": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-0.2.4.tgz", + "integrity": "sha512-Tv3cqdyY8yjW9ZcJ9WP7JdHS34natzylD0oNRLlYbWOfUdC4EQ0sf3fubnqrK2IErtlmobFmuS1pWvv88VghpA==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-item/node_modules/unset-value": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-0.1.2.tgz", + "integrity": "sha512-yhv5I4TsldLdE3UcVQn0hD2T5sNCPv4+qm/CTUpRKIpwthYRIipsAPdsrNpOI79hPQa0rTTeW22Fq6JWRcTgNg==", + "license": "MIT", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-item/node_modules/unset-value/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-view": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/vinyl-view/-/vinyl-view-0.1.2.tgz", + "integrity": "sha512-qIc2qnXgOXZrT1Q1ViR1VMTjuylAi3Y/LSYSYfwJ6ZG7Ar5miUfioSIBu30bsHTo5dSz4ReDNSUw3lelCtc5Jw==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "engine-base": "^0.1.2", + "isobject": "^2.1.0", + "lazy-cache": "^2.0.1", + "mixin-deep": "^1.1.3", + "vinyl-item": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/warning-symbol": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/warning-symbol/-/warning-symbol-0.1.0.tgz", + "integrity": "sha512-1S0lwbHo3kNUKA4VomBAhqn4DPjQkIKSdbOin5K7EFUQNwyIKx+wZMGXKI53RUjla8V2B8ouQduUlgtx8LoSMw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/which": { + "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" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 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==", + "license": "ISC" + }, + "node_modules/write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha512-CJ17OoULEKXpA5pef3qLj5AxTJ6mSt7g84he2WIskKwqFO4T97d5V7Tadl0DYDk7qyUOQD5WlUlOMChaYrhxeA==", + "license": "MIT", + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/write-json": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/write-json/-/write-json-0.2.2.tgz", + "integrity": "sha512-3HOXDnA8CgyaObzkxKPTHBw0feFlYMn9Mi8ZIrnoNJTTMABn+XOhmTsVlX/P/WeZuXEV9ApvQvR1fpZOOQ5FOg==", + "license": "MIT", + "dependencies": { + "write": "^0.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yargs-parser": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", + "integrity": "sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA==", + "license": "ISC", + "dependencies": { + "camelcase": "^3.0.0", + "lodash.assign": "^4.0.6" + } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", + "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.25.28 || ^4" + } + } + } +} diff --git a/.service/package.json b/.service/package.json new file mode 100644 index 0000000..51d3384 --- /dev/null +++ b/.service/package.json @@ -0,0 +1,19 @@ +{ + "name": "source-application-service", + "version": "0.1.0", + "private": true, + "type": "module", + "description": "Source Application Celaut microVM — full-surface MCP (Streamable HTTP) + REST API over the on-chain file-source registry, with seed/unsigned signer.", + "main": "server-http.mjs", + "scripts": { + "start": "node server-http.mjs" + }, + "engines": { + "node": ">=20" + }, + "dependencies": { + "@modelcontextprotocol/sdk": "^1.29.0", + "@noble/hashes": "^1.4.0", + "reputation-system": "github:agenticaihome/reputation-system#fix/seed-signer-derivation" + } +} diff --git a/.service/server-http.mjs b/.service/server-http.mjs new file mode 100644 index 0000000..9cc1092 --- /dev/null +++ b/.service/server-http.mjs @@ -0,0 +1,243 @@ +#!/usr/bin/env node +/** + * Source Application Celaut service — network-facing twin of mcp/server.mjs. + * + * A Celaut service is a sealed microVM reached over TCP, so stdio is unusable. + * This process binds 0.0.0.0:8080 and exposes THREE surfaces over plain HTTP: + * + * GET /health – liveness probe (not part of MCP). + * * /mcp – the FULL MCP tool surface (same TOOLS/HANDLERS as + * the stdio server) over the SDK's Streamable HTTP + * transport, stateless (one Server per request). + * * /api/* – a clean JSON REST mirror of every method: reads via + * GET, writes via POST using the env-configured signer + * (SOURCE_SIGNER_MODE=seed|unsigned — see lib.mjs). + * + * Reads + pure helpers come from core.mjs; writes from writes.mjs. Both the MCP + * and REST layers call the SAME core/writes functions, so they never diverge. + * + * Data source: Ergo Explorer mainnet (override via SOURCE_EXPLORER_API). + */ +import { createServer } from 'node:http'; +import { Server } from '@modelcontextprotocol/sdk/server/index.js'; +import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js'; +import { + CallToolRequestSchema, + ListToolsRequestSchema +} from '@modelcontextprotocol/sdk/types.js'; + +import { TOOLS, HANDLERS } from './tools.mjs'; +import * as core from './core.mjs'; +import * as writes from './writes.mjs'; +import { signerMode, EXPLORER_API } from './lib.mjs'; + +// ── MCP server factory (stateless: one per request) ───────────────────────── + +function makeServer() { + const server = new Server( + { name: 'source-application', version: '0.1.0' }, + { capabilities: { tools: {} } } + ); + server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: TOOLS })); + server.setRequestHandler(CallToolRequestSchema, async (req) => { + const { name, arguments: args = {} } = req.params; + const handler = HANDLERS[name]; + if (!handler) return { isError: true, content: [{ type: 'text', text: `Unknown tool: ${name}` }] }; + try { + const data = await handler(args); + return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] }; + } catch (err) { + return { isError: true, content: [{ type: 'text', text: `Error in ${name}: ${err?.message || String(err)}` }] }; + } + }); + return server; +} + +// ── HTTP plumbing ─────────────────────────────────────────────────────────── + +const PORT = Number(process.env.PORT) || 8080; +const MCP_PATH = '/mcp'; + +function readBody(req) { + return new Promise((resolve, reject) => { + const chunks = []; + req.on('data', (c) => chunks.push(c)); + req.on('end', () => { + const raw = Buffer.concat(chunks).toString('utf8'); + if (!raw) return resolve(undefined); + try { + resolve(JSON.parse(raw)); + } catch (err) { + reject(err); + } + }); + req.on('error', reject); + }); +} + +function sendJson(res, status, payload) { + res.writeHead(status, { 'Content-Type': 'application/json' }); + res.end(JSON.stringify(payload, null, 2)); +} + +// ── REST API (clean JSON mirror of every method) ──────────────────────────── +// +// Reads (GET): +// GET /api/config +// GET /api/sources?hash=HASH +// GET /api/sources/by-profile?profileTokenId=ID&limit=N +// GET /api/sources/:boxId/invalidations +// GET /api/unavailable?url=URL +// GET /api/invalidations/by-profile?profileTokenId=ID&limit=N +// GET /api/unavailable/by-profile?profileTokenId=ID&limit=N +// GET /api/profiles/:profileTokenId/opinions +// GET /api/profiles/:authorTokenId/opinions-given +// GET /api/profiles/:profileTokenId (full loadProfileData) +// GET /api/search?hash=HASH (searchByHash) +// GET /api/hash-algorithms +// Writes (POST, signer per SOURCE_SIGNER_MODE): +// POST /api/profile {content?} +// POST /api/sources {mainBoxId, fileHash, sourceEntry} +// POST /api/sources/confirm {mainBoxId, fileHash, sourceEntry} +// POST /api/sources/update {mainBoxId, fileHash, sourceEntry} +// POST /api/sources/invalidate {mainBoxId, sourceBoxId} +// POST /api/unavailable {mainBoxId, sourceUrl} +// POST /api/profiles/trust {mainBoxId, profileTokenId, isTrusted} + +async function handleRest(req, res, url, query) { + const method = req.method; + const path = url.replace(/\/+$/, '') || '/'; + + // ---- GET reads ---- + if (method === 'GET') { + if (path === '/api/config') { + return sendJson(res, 200, { explorerUri: EXPLORER_API, signerMode: signerMode(), typeNfts: { + PROFILE_TYPE_NFT_ID: core.PROFILE_TYPE_NFT_ID, + FILE_SOURCE_TYPE_NFT_ID: core.FILE_SOURCE_TYPE_NFT_ID, + INVALID_FILE_SOURCE_TYPE_NFT_ID: core.INVALID_FILE_SOURCE_TYPE_NFT_ID, + UNAVAILABLE_SOURCE_TYPE_NFT_ID: core.UNAVAILABLE_SOURCE_TYPE_NFT_ID, + PROFILE_OPINION_TYPE_NFT_ID: core.PROFILE_OPINION_TYPE_NFT_ID + } }); + } + if (path === '/api/hash-algorithms') { + return sendJson(res, 200, { options: core.HASH_OPTIONS, search: core.SEARCH_HASH_ALGORITHMS }); + } + if (path === '/api/sources/by-profile') { + const { profileTokenId, limit } = query; + if (!profileTokenId) return sendJson(res, 400, { error: 'profileTokenId is required' }); + return sendJson(res, 200, await core.fetchFileSourcesByProfile(profileTokenId, limit ? Number(limit) : 50)); + } + if (path === '/api/sources') { + const { hash } = query; + if (!hash) return sendJson(res, 400, { error: 'hash query param is required' }); + return sendJson(res, 200, await core.fetchFileSourcesByHash(hash)); + } + let m = path.match(/^\/api\/sources\/([0-9a-fA-F]{64})\/invalidations$/); + if (m) return sendJson(res, 200, await core.fetchInvalidFileSources(m[1])); + if (path === '/api/unavailable') { + const { url: srcUrl } = query; + if (!srcUrl) return sendJson(res, 400, { error: 'url query param is required' }); + return sendJson(res, 200, await core.fetchUnavailableSources(srcUrl)); + } + if (path === '/api/invalidations/by-profile') { + const { profileTokenId, limit } = query; + if (!profileTokenId) return sendJson(res, 400, { error: 'profileTokenId is required' }); + return sendJson(res, 200, await core.fetchInvalidFileSourcesByProfile(profileTokenId, limit ? Number(limit) : 50)); + } + if (path === '/api/unavailable/by-profile') { + const { profileTokenId, limit } = query; + if (!profileTokenId) return sendJson(res, 400, { error: 'profileTokenId is required' }); + return sendJson(res, 200, await core.fetchUnavailableSourcesByProfile(profileTokenId, limit ? Number(limit) : 50)); + } + if (path === '/api/search') { + const { hash } = query; + if (!hash) return sendJson(res, 400, { error: 'hash query param is required' }); + return sendJson(res, 200, await core.searchByHash(hash)); + } + m = path.match(/^\/api\/profiles\/([^/]+)\/opinions-given$/); + if (m) return sendJson(res, 200, await core.fetchProfileOpinionsByAuthor(m[1])); + m = path.match(/^\/api\/profiles\/([^/]+)\/opinions$/); + if (m) return sendJson(res, 200, await core.fetchProfileOpinions(m[1])); + m = path.match(/^\/api\/profiles\/([^/]+)$/); + if (m) return sendJson(res, 200, await core.loadProfileData(m[1])); + return sendJson(res, 404, { error: `No GET route: ${path}` }); + } + + // ---- POST writes ---- + if (method === 'POST') { + let body; + try { + body = (await readBody(req)) || {}; + } catch { + return sendJson(res, 400, { error: 'Invalid JSON body' }); + } + try { + if (path === '/api/profile') return sendJson(res, 200, await writes.createProfileBox(body.content ?? { name: 'Anon' })); + if (path === '/api/sources') return sendJson(res, 200, await writes.addFileSource(body.mainBoxId, body.fileHash, body.sourceEntry)); + if (path === '/api/sources/confirm') return sendJson(res, 200, await writes.confirmSource(body.mainBoxId, body.fileHash, body.sourceEntry)); + if (path === '/api/sources/update') return sendJson(res, 200, await writes.updateFileSource(body.mainBoxId, body.fileHash, body.sourceEntry)); + if (path === '/api/sources/invalidate') return sendJson(res, 200, await writes.markInvalidSource(body.mainBoxId, body.sourceBoxId)); + if (path === '/api/unavailable') return sendJson(res, 200, await writes.markUnavailableSource(body.mainBoxId, body.sourceUrl)); + if (path === '/api/profiles/trust') return sendJson(res, 200, await writes.trustProfile(body.mainBoxId, body.profileTokenId, body.isTrusted)); + return sendJson(res, 404, { error: `No POST route: ${path}` }); + } catch (err) { + return sendJson(res, 500, { error: err?.message || String(err) }); + } + } + + return sendJson(res, 405, { error: `Method not allowed: ${method}` }); +} + +// ── Bootstrap ─────────────────────────────────────────────────────────────── + +const httpServer = createServer(async (req, res) => { + const [rawPath, rawQuery = ''] = (req.url || '').split('?'); + const path = rawPath || '/'; + const query = Object.fromEntries(new URLSearchParams(rawQuery)); + + // Liveness probe. + if (req.method === 'GET' && (path === '/health' || path === '/')) { + return sendJson(res, 200, { + status: 'ok', + service: 'source-application', + transport: 'streamable-http', + mcp: MCP_PATH, + rest: '/api', + signerMode: signerMode() + }); + } + + // REST API. + if (path === '/api' || path.startsWith('/api/')) { + try { + return await handleRest(req, res, path, query); + } catch (err) { + return sendJson(res, 500, { error: err?.message || String(err) }); + } + } + + // MCP over Streamable HTTP. + if (path !== MCP_PATH) { + return sendJson(res, 404, { jsonrpc: '2.0', error: { code: -32601, message: 'Not found' }, id: null }); + } + const server = makeServer(); + const transport = new StreamableHTTPServerTransport({ sessionIdGenerator: undefined }); + res.on('close', () => { + transport.close(); + server.close(); + }); + try { + await server.connect(transport); + let body; + if (req.method === 'POST') body = await readBody(req); + await transport.handleRequest(req, res, body); + } catch (err) { + if (!res.headersSent) { + sendJson(res, 500, { jsonrpc: '2.0', error: { code: -32603, message: `Internal error: ${err?.message || String(err)}` }, id: null }); + } + } +}); + +httpServer.listen(PORT, '0.0.0.0', () => { + console.log(`source-application service on 0.0.0.0:${PORT} — MCP ${MCP_PATH}, REST /api, health /health`); +}); diff --git a/.service/service.json b/.service/service.json new file mode 100644 index 0000000..a50006a --- /dev/null +++ b/.service/service.json @@ -0,0 +1,30 @@ +{ + "tag": ["source-application-mcp", "mcp+rest", "v0.1.0"], + "architecture": "linux/amd64", + "init": { + "entry_path": ["app", "start.sh"] + }, + "api": [ + { + "port": 8080, + "transport": ["tcp"], + "protocol": ["http"] + } + ], + "resources": { + "at_init": { + "mem_limit": 67108864, + "disk_space": 2147483648 + }, + "at_most": { + "mem_limit": 268435456, + "disk_space": 4294967296 + } + }, + "network": [ + { + "tags": ["api.ergoplatform.com", "ipv4", "public"], + "prose": "Outbound HTTPS to the Ergo Explorer API (api.ergoplatform.com) for on-chain file-source registry reads and for building reputation-opinion transactions. The node restricts the sealed VM to this host only. In seed mode an additional Ergo node host (SOURCE_NODE_URI) is contacted for tx submission; in the default unsigned mode no node is needed (unsigned txs are returned to the caller)." + } + ] +} diff --git a/.service/start.sh b/.service/start.sh new file mode 100644 index 0000000..1c079d1 --- /dev/null +++ b/.service/start.sh @@ -0,0 +1,7 @@ +#!/bin/sh +# Celaut init entrypoint. The microVM init runs this script (declared in +# service.json -> init.entry_path); Docker CMD/ENTRYPOINT are ignored by the +# packer. Bind the MCP (Streamable HTTP) + REST server on 0.0.0.0:8080 (PORT +# defaults to 8080 inside server-http.mjs). SOURCE_EXPLORER_API defaults to Ergo +# mainnet; SOURCE_SIGNER_MODE defaults to 'unsigned' (no key in the VM). +exec node /app/server-http.mjs diff --git a/.service/tools.mjs b/.service/tools.mjs new file mode 100644 index 0000000..4305291 --- /dev/null +++ b/.service/tools.mjs @@ -0,0 +1,302 @@ +/** + * Shared MCP tool registry for the Source Application. + * + * A single TOOLS array + HANDLERS map, consumed by BOTH transports: + * - mcp/server.mjs (stdio, local agents/IDEs) + * - .service/server-http.mjs (Streamable HTTP, the Celaut microVM) + * + * so the two never drift. Reads + pure helpers come from core.mjs; writes from + * writes.mjs (env-configured signer, see lib.mjs). Write tools are no-ops on + * keys in unsigned mode — they return an unsigned tx for an external wallet. + */ +import * as core from './core.mjs'; +import * as writes from './writes.mjs'; +import { signerMode, EXPLORER_API } from './lib.mjs'; + +const sourceEntrySchema = { + type: 'object', + description: 'A single source entry (the R9 payload of a FILE_SOURCE box).', + properties: { + hashFunctionId: { type: 'string', description: 'Hash function identifier, HASH(EMPTY_INPUT).' }, + contentFormat: { type: 'string', description: 'Content file format (e.g. ".tar.gz") or a format box id.' }, + contentHash: { type: 'string', description: 'Hash of the content at the URL.' }, + rawFormat: { type: 'string', description: 'Raw (uncompressed) file format or a format box id.' }, + urlLink: { type: 'string', description: 'The download URL.' }, + isChunked: { type: 'boolean', description: 'If true, urlLink points to a manifest of chunk URLs.' } + }, + required: ['urlLink'], + additionalProperties: false +}; + +export const TOOLS = [ + // ── Info ────────────────────────────────────────────────────────────────── + { + name: 'get_source_config', + description: 'Return the Source Application Type NFT ids, the configured Explorer, and the active signer mode (seed|unsigned).', + inputSchema: { type: 'object', properties: {}, additionalProperties: false } + }, + + // ── Reads ───────────────────────────────────────────────────────────────── + { + name: 'fetch_file_sources_by_hash', + description: 'All FILE_SOURCE boxes (download sources) for a specific raw file hash.', + inputSchema: { type: 'object', properties: { fileHash: { type: 'string' } }, required: ['fileHash'], additionalProperties: false } + }, + { + name: 'fetch_invalid_file_sources', + description: 'All INVALID_FILE_SOURCE opinions targeting a specific FILE_SOURCE box id.', + inputSchema: { type: 'object', properties: { sourceBoxId: { type: 'string' } }, required: ['sourceBoxId'], additionalProperties: false } + }, + { + name: 'fetch_unavailable_sources', + description: 'All UNAVAILABLE_SOURCE opinions for a specific source URL.', + inputSchema: { type: 'object', properties: { sourceUrl: { type: 'string' } }, required: ['sourceUrl'], additionalProperties: false } + }, + { + name: 'fetch_profile_opinions', + description: 'All PROFILE_OPINION (trust/distrust) boxes targeting a specific profile token id.', + inputSchema: { type: 'object', properties: { profileTokenId: { type: 'string' } }, required: ['profileTokenId'], additionalProperties: false } + }, + { + name: 'fetch_file_sources_by_profile', + description: 'FILE_SOURCE boxes created by a specific profile token id.', + inputSchema: { type: 'object', properties: { profileTokenId: { type: 'string' }, limit: { type: 'number' } }, required: ['profileTokenId'], additionalProperties: false } + }, + { + name: 'fetch_invalid_file_sources_by_profile', + description: 'INVALID_FILE_SOURCE opinions created by a specific profile token id.', + inputSchema: { type: 'object', properties: { profileTokenId: { type: 'string' }, limit: { type: 'number' } }, required: ['profileTokenId'], additionalProperties: false } + }, + { + name: 'fetch_unavailable_sources_by_profile', + description: 'UNAVAILABLE_SOURCE opinions created by a specific profile token id.', + inputSchema: { type: 'object', properties: { profileTokenId: { type: 'string' }, limit: { type: 'number' } }, required: ['profileTokenId'], additionalProperties: false } + }, + { + name: 'fetch_profile_opinions_by_author', + description: 'PROFILE_OPINION boxes created BY a specific author token id (opinions given).', + inputSchema: { type: 'object', properties: { authorTokenId: { type: 'string' } }, required: ['authorTokenId'], additionalProperties: false } + }, + { + name: 'search_by_hash', + description: 'Full search by file hash: sources plus their invalidations and per-URL unavailabilities.', + inputSchema: { type: 'object', properties: { fileHash: { type: 'string' } }, required: ['fileHash'], additionalProperties: false } + }, + { + name: 'load_profile_data', + description: 'All data for a profile: its sources, invalidations, unavailabilities, opinions received and opinions given.', + inputSchema: { type: 'object', properties: { profileTokenId: { type: 'string' } }, required: ['profileTokenId'], additionalProperties: false } + }, + + // ── Pure helpers ────────────────────────────────────────────────────────-- + { + name: 'group_by_download_source', + description: 'Group FILE_SOURCE entries by their download URL (pure; operates on provided arrays/maps, no chain access).', + inputSchema: { + type: 'object', + properties: { + sources: { type: 'array', items: { type: 'object' } }, + invalidationsMap: { type: 'object' }, + unavailabilitiesMap: { type: 'object' } + }, + required: ['sources'], + additionalProperties: false + } + }, + { + name: 'group_by_profile', + description: 'Group FILE_SOURCE entries by the profile that submitted them (pure).', + inputSchema: { type: 'object', properties: { sources: { type: 'array', items: { type: 'object' } } }, required: ['sources'], additionalProperties: false } + }, + { + name: 'calculate_profile_trust', + description: 'Net trust score (trust − distrust reputation) for a profile, from provided PROFILE_OPINION boxes (pure).', + inputSchema: { + type: 'object', + properties: { profileTokenId: { type: 'string' }, opinions: { type: 'array', items: { type: 'object' } } }, + required: ['profileTokenId', 'opinions'], + additionalProperties: false + } + }, + { + name: 'aggregate_source_score', + description: 'Aggregate confirmations/invalidations/unavailabilities + owner trust into a scored FileSourceWithScore (pure).', + inputSchema: { + type: 'object', + properties: { + source: { type: 'object' }, + allSources: { type: 'array', items: { type: 'object' } }, + invalidations: { type: 'array', items: { type: 'object' } }, + unavailabilities: { type: 'array', items: { type: 'object' } }, + profileOpinions: { type: 'array', items: { type: 'object' } } + }, + required: ['source', 'allSources', 'invalidations', 'unavailabilities'], + additionalProperties: false + } + }, + { + name: 'get_primary_url', + description: 'Primary download URL of a FileSource (pure).', + inputSchema: { type: 'object', properties: { source: { type: 'object' } }, required: ['source'], additionalProperties: false } + }, + { + name: 'get_all_urls', + description: 'All download URLs of a FileSource (pure).', + inputSchema: { type: 'object', properties: { source: { type: 'object' } }, required: ['source'], additionalProperties: false } + }, + { + name: 'list_hash_algorithms', + description: 'Supported hash algorithm ids/labels (HASH_OPTIONS and the search subset).', + inputSchema: { type: 'object', properties: {}, additionalProperties: false } + }, + { + name: 'validate_hash', + description: 'Validate a hex hash for an algorithm id. Returns { valid, error } (pure).', + inputSchema: { type: 'object', properties: { hash: { type: 'string' }, algorithmId: { type: 'string' } }, required: ['hash', 'algorithmId'], additionalProperties: false } + }, + { + name: 'compute_hash', + description: 'Compute the hex hash of UTF-8 text or base64 bytes with a known algorithm id (sha256|sha3_256|keccak256|blake2b).', + inputSchema: { + type: 'object', + properties: { + text: { type: 'string', description: 'UTF-8 text to hash (use this OR base64).' }, + base64: { type: 'string', description: 'Base64-encoded bytes to hash (use this OR text).' }, + algorithmId: { type: 'string' } + }, + required: ['algorithmId'], + additionalProperties: false + } + }, + + // ── Writes (signer per SOURCE_SIGNER_MODE) ────────────────────────────────── + { + name: 'create_profile_box', + description: 'Mint a reputation PROFILE box (author identity holding rep tokens). Signing per SOURCE_SIGNER_MODE (seed submits; unsigned returns the tx).', + inputSchema: { type: 'object', properties: { content: { description: 'Optional profile content (string or JSON object).' } }, additionalProperties: false } + }, + { + name: 'add_file_source', + description: 'Publish a FILE_SOURCE opinion (R5=fileHash, R9=source entry) spending from the author PROFILE box mainBoxId. Signing per SOURCE_SIGNER_MODE.', + inputSchema: { + type: 'object', + properties: { mainBoxId: { type: 'string' }, fileHash: { type: 'string' }, sourceEntry: sourceEntrySchema }, + required: ['mainBoxId', 'fileHash', 'sourceEntry'], + additionalProperties: false + } + }, + { + name: 'confirm_source', + description: 'Confirm a source — same on-chain shape as add_file_source (a confirming FILE_SOURCE opinion). Signing per SOURCE_SIGNER_MODE.', + inputSchema: { + type: 'object', + properties: { mainBoxId: { type: 'string' }, fileHash: { type: 'string' }, sourceEntry: sourceEntrySchema }, + required: ['mainBoxId', 'fileHash', 'sourceEntry'], + additionalProperties: false + } + }, + { + name: 'update_file_source', + description: 'Update a file source. NOTE: the Node signer surface has no update_opinion; this publishes a NEW FILE_SOURCE opinion with the new content for the same hash. Signing per SOURCE_SIGNER_MODE.', + inputSchema: { + type: 'object', + properties: { mainBoxId: { type: 'string' }, fileHash: { type: 'string' }, sourceEntry: sourceEntrySchema }, + required: ['mainBoxId', 'fileHash', 'sourceEntry'], + additionalProperties: false + } + }, + { + name: 'mark_invalid_source', + description: 'Mark a FILE_SOURCE box invalid (negative opinion against INVALID_FILE_SOURCE_TYPE_NFT_ID, R5=sourceBoxId). Signing per SOURCE_SIGNER_MODE.', + inputSchema: { + type: 'object', + properties: { mainBoxId: { type: 'string' }, sourceBoxId: { type: 'string' } }, + required: ['mainBoxId', 'sourceBoxId'], + additionalProperties: false + } + }, + { + name: 'mark_unavailable_source', + description: 'Mark a URL unavailable (negative opinion against UNAVAILABLE_SOURCE_TYPE_NFT_ID, R5=sourceUrl). Signing per SOURCE_SIGNER_MODE.', + inputSchema: { + type: 'object', + properties: { mainBoxId: { type: 'string' }, sourceUrl: { type: 'string' } }, + required: ['mainBoxId', 'sourceUrl'], + additionalProperties: false + } + }, + { + name: 'trust_profile', + description: 'Trust or distrust a profile (PROFILE_OPINION, R5=profileTokenId, R8=isTrusted). Signing per SOURCE_SIGNER_MODE.', + inputSchema: { + type: 'object', + properties: { mainBoxId: { type: 'string' }, profileTokenId: { type: 'string' }, isTrusted: { type: 'boolean' } }, + required: ['mainBoxId', 'profileTokenId', 'isTrusted'], + additionalProperties: false + } + } +]; + +export const HANDLERS = { + // info + get_source_config: async () => ({ + explorerUri: EXPLORER_API, + signerMode: signerMode(), + typeNfts: { + PROFILE_TYPE_NFT_ID: core.PROFILE_TYPE_NFT_ID, + FILE_SOURCE_TYPE_NFT_ID: core.FILE_SOURCE_TYPE_NFT_ID, + INVALID_FILE_SOURCE_TYPE_NFT_ID: core.INVALID_FILE_SOURCE_TYPE_NFT_ID, + UNAVAILABLE_SOURCE_TYPE_NFT_ID: core.UNAVAILABLE_SOURCE_TYPE_NFT_ID, + PROFILE_OPINION_TYPE_NFT_ID: core.PROFILE_OPINION_TYPE_NFT_ID + }, + profileTotalSupply: core.PROFILE_TOTAL_SUPPLY + }), + + // reads + fetch_file_sources_by_hash: async ({ fileHash }) => core.fetchFileSourcesByHash(fileHash), + fetch_invalid_file_sources: async ({ sourceBoxId }) => core.fetchInvalidFileSources(sourceBoxId), + fetch_unavailable_sources: async ({ sourceUrl }) => core.fetchUnavailableSources(sourceUrl), + fetch_profile_opinions: async ({ profileTokenId }) => core.fetchProfileOpinions(profileTokenId), + fetch_file_sources_by_profile: async ({ profileTokenId, limit = 50 }) => core.fetchFileSourcesByProfile(profileTokenId, limit), + fetch_invalid_file_sources_by_profile: async ({ profileTokenId, limit = 50 }) => core.fetchInvalidFileSourcesByProfile(profileTokenId, limit), + fetch_unavailable_sources_by_profile: async ({ profileTokenId, limit = 50 }) => core.fetchUnavailableSourcesByProfile(profileTokenId, limit), + fetch_profile_opinions_by_author: async ({ authorTokenId }) => core.fetchProfileOpinionsByAuthor(authorTokenId), + search_by_hash: async ({ fileHash }) => core.searchByHash(fileHash), + load_profile_data: async ({ profileTokenId }) => core.loadProfileData(profileTokenId), + + // pure helpers + group_by_download_source: async ({ sources, invalidationsMap = {}, unavailabilitiesMap = {} }) => + core.groupByDownloadSource(sources, invalidationsMap, unavailabilitiesMap), + group_by_profile: async ({ sources }) => core.groupByProfile(sources), + calculate_profile_trust: async ({ profileTokenId, opinions }) => ({ + profileTokenId, + trustScore: core.calculateProfileTrust(profileTokenId, opinions) + }), + aggregate_source_score: async ({ source, allSources, invalidations, unavailabilities, profileOpinions = [] }) => + core.aggregateSourceScore(source, allSources, invalidations, unavailabilities, profileOpinions), + get_primary_url: async ({ source }) => ({ url: core.getPrimaryUrl(source) }), + get_all_urls: async ({ source }) => ({ urls: core.getAllUrls(source) }), + list_hash_algorithms: async () => ({ options: core.HASH_OPTIONS, search: core.SEARCH_HASH_ALGORITHMS }), + validate_hash: async ({ hash, algorithmId }) => { + const error = core.validateHash(hash, algorithmId); + return { valid: error === null, error }; + }, + compute_hash: async ({ text, base64, algorithmId }) => { + let data; + if (typeof base64 === 'string') data = new Uint8Array(Buffer.from(base64, 'base64')); + else if (typeof text === 'string') data = new TextEncoder().encode(text); + else throw new Error('compute_hash requires either `text` or `base64`.'); + const hash = await core.computeHash(data, algorithmId); + if (hash === null) throw new Error(`Unsupported hash algorithm: ${algorithmId}`); + return { algorithmId, hash }; + }, + + // writes + create_profile_box: async ({ content } = {}) => writes.createProfileBox(content ?? { name: 'Anon' }), + add_file_source: async ({ mainBoxId, fileHash, sourceEntry }) => writes.addFileSource(mainBoxId, fileHash, sourceEntry), + confirm_source: async ({ mainBoxId, fileHash, sourceEntry }) => writes.confirmSource(mainBoxId, fileHash, sourceEntry), + update_file_source: async ({ mainBoxId, fileHash, sourceEntry }) => writes.updateFileSource(mainBoxId, fileHash, sourceEntry), + mark_invalid_source: async ({ mainBoxId, sourceBoxId }) => writes.markInvalidSource(mainBoxId, sourceBoxId), + mark_unavailable_source: async ({ mainBoxId, sourceUrl }) => writes.markUnavailableSource(mainBoxId, sourceUrl), + trust_profile: async ({ mainBoxId, profileTokenId, isTrusted }) => writes.trustProfile(mainBoxId, profileTokenId, isTrusted) +}; diff --git a/.service/writes.mjs b/.service/writes.mjs new file mode 100644 index 0000000..24b5f8c --- /dev/null +++ b/.service/writes.mjs @@ -0,0 +1,144 @@ +/** + * Source Application write surface — a faithful port of + * `src/lib/ergo/sourceStore.ts` to the headless Node signer path. + * + * The browser store calls the reputation library through the Nautilus `ergo` + * dApp connector; here every write goes through `create_*_with_signer` from + * `reputation-system/node` with the env-configured Signer (see lib.mjs). Each + * write maps to an opinion against the matching Type NFT: + * + * createProfileBox → create_profile (PROFILE_TYPE_NFT_ID) + * addFileSource → opinion(FILE_SOURCE_TYPE_NFT_ID, R5=fileHash, R8=true, R9=sourceEntry) + * confirmSource → addFileSource (a re-publish / confirming opinion) + * updateFileSource → opinion(FILE_SOURCE_TYPE_NFT_ID, ...) — see note below + * markInvalidSource → opinion(INVALID_FILE_SOURCE_TYPE_NFT_ID, R5=sourceBoxId, R8=false) + * markUnavailableSource → opinion(UNAVAILABLE_SOURCE_TYPE_NFT_ID, R5=sourceUrl, R8=false) + * trustProfile → opinion(PROFILE_OPINION_TYPE_NFT_ID, R5=profileTokenId, R8=isTrusted) + * + * Every opinion spends from the author's PROFILE box, addressed by `mainBoxId` + * and resolved on-chain via `fetchMainBox`. Results are normalized by + * `describeResult`: in seed mode a submitted txId; in unsigned mode the unsigned + * EIP-12 transaction for an external wallet to sign. + * + * NOTE on updateFileSource: the original spends the previous FILE_SOURCE box via + * `update_opinion` (a Nautilus-only flow). The Node entry exposes + * `create_*_with_signer` but NOT `update_opinion_with_signer`, so here + * updateFileSource publishes a NEW FILE_SOURCE opinion carrying the new content + * for the same hash. The previous box is left in place (it can be invalidated + * separately). This is called out in `.service/README.md` and the tool text. + */ +import { + create_profile_with_signer, + create_opinion_with_signer +} from 'reputation-system/node'; + +import { + PROFILE_TYPE_NFT_ID, + PROFILE_TOTAL_SUPPLY, + FILE_SOURCE_TYPE_NFT_ID, + INVALID_FILE_SOURCE_TYPE_NFT_ID, + UNAVAILABLE_SOURCE_TYPE_NFT_ID, + PROFILE_OPINION_TYPE_NFT_ID, + serializeSourceEntry +} from './core.mjs'; + +import { EXPLORER_API, makeSigner, fetchMainBox, describeResult } from './lib.mjs'; + +/** Mint a new reputation PROFILE box (the author identity that holds rep tokens). */ +export async function createProfileBox(content = { name: 'Anon' }) { + const signer = makeSigner(); + const result = await create_profile_with_signer( + signer, + EXPLORER_API, + PROFILE_TOTAL_SUPPLY, + PROFILE_TYPE_NFT_ID, + content, + 0n + ); + return describeResult(result); +} + +/** Add a FILE_SOURCE opinion: R5=fileHash, R8=positive, R9=serialized source entry. */ +export async function addFileSource(mainBoxId, fileHash, sourceEntry) { + const signer = makeSigner(); + const main_box = await fetchMainBox(mainBoxId); + const result = await create_opinion_with_signer( + signer, + EXPLORER_API, + 1, + FILE_SOURCE_TYPE_NFT_ID, + fileHash, + true, + serializeSourceEntry(sourceEntry), + false, + main_box + ); + return describeResult(result); +} + +/** Confirm a source — same on-chain shape as addFileSource (a confirming opinion). */ +export async function confirmSource(mainBoxId, fileHash, sourceEntry) { + return addFileSource(mainBoxId, fileHash, sourceEntry); +} + +/** + * Update a FILE_SOURCE — publishes a fresh FILE_SOURCE opinion with new content + * for the same hash (Node signer surface has no `update_opinion_with_signer`). + */ +export async function updateFileSource(mainBoxId, fileHash, sourceEntry) { + return addFileSource(mainBoxId, fileHash, sourceEntry); +} + +/** Mark a FILE_SOURCE box as invalid: opinion against INVALID_FILE_SOURCE_TYPE_NFT_ID, R5=sourceBoxId. */ +export async function markInvalidSource(mainBoxId, sourceBoxId) { + const signer = makeSigner(); + const main_box = await fetchMainBox(mainBoxId); + const result = await create_opinion_with_signer( + signer, + EXPLORER_API, + 1, + INVALID_FILE_SOURCE_TYPE_NFT_ID, + sourceBoxId, + false, + null, + false, + main_box + ); + return describeResult(result); +} + +/** Mark a URL unavailable: opinion against UNAVAILABLE_SOURCE_TYPE_NFT_ID, R5=sourceUrl. */ +export async function markUnavailableSource(mainBoxId, sourceUrl) { + const signer = makeSigner(); + const main_box = await fetchMainBox(mainBoxId); + const result = await create_opinion_with_signer( + signer, + EXPLORER_API, + 1, + UNAVAILABLE_SOURCE_TYPE_NFT_ID, + sourceUrl, + false, + null, + false, + main_box + ); + return describeResult(result); +} + +/** Trust / distrust a profile: opinion against PROFILE_OPINION_TYPE_NFT_ID, R5=profileTokenId, R8=isTrusted. */ +export async function trustProfile(mainBoxId, profileTokenId, isTrusted) { + const signer = makeSigner(); + const main_box = await fetchMainBox(mainBoxId); + const result = await create_opinion_with_signer( + signer, + EXPLORER_API, + 1, + PROFILE_OPINION_TYPE_NFT_ID, + profileTokenId, + Boolean(isTrusted), + null, + false, + main_box + ); + return describeResult(result); +} diff --git a/mcp/README.md b/mcp/README.md new file mode 100644 index 0000000..a69d282 --- /dev/null +++ b/mcp/README.md @@ -0,0 +1,53 @@ +# Source Application — MCP server (stdio) + +A full-surface [MCP](https://modelcontextprotocol.io) server over **stdio** for +the Source Application on-chain file-source registry. Any MCP-aware client +(Claude, IDEs, agents) can read the registry AND publish to it. + +```bash +npm install +npm run mcp # speaks MCP over stdio +``` + +## Layout + +| File | Role | +|------|------| +| `core.mjs` | framework-agnostic reads + pure helpers + Type NFT ids (no Svelte). Port of `src/lib/ergo/sourceFetch.ts` + `sourceObject.ts`. | +| `lib.mjs` | `makeSigner()` (seed/unsigned from env), `fetchMainBox()`, `describeResult()`. | +| `writes.mjs` | write surface (port of `src/lib/ergo/sourceStore.ts`) via `reputation-system/node`'s `create_*_with_signer`. | +| `tools.mjs` | shared MCP tool registry (TOOLS + HANDLERS), also used by `../.service`. | +| `server.mjs` | stdio bootstrap. | + +The Streamable-HTTP + REST twin lives in [`../.service`](../.service) and reuses +the same `core/lib/writes/tools` modules. + +## Signer modes (env) + +Default **unsigned** — no key; writes return an unsigned EIP-12 tx. + +- `SOURCE_SIGNER_MODE=unsigned` (default) + `SOURCE_ADDRESS=` +- `SOURCE_SIGNER_MODE=seed` + `SOURCE_MNEMONIC=...` (optional + `SOURCE_MNEMONIC_PASSWORD`, `SOURCE_NODE_URI`, `SOURCE_ADDRESS_INDEX`) +- `SOURCE_EXPLORER_API` (default `https://api.ergoplatform.com`) + +## Tools (27) + +**Info:** `get_source_config` + +**Reads:** `fetch_file_sources_by_hash`, `fetch_invalid_file_sources`, +`fetch_unavailable_sources`, `fetch_profile_opinions`, +`fetch_file_sources_by_profile`, `fetch_invalid_file_sources_by_profile`, +`fetch_unavailable_sources_by_profile`, `fetch_profile_opinions_by_author`, +`search_by_hash`, `load_profile_data` + +**Pure helpers:** `group_by_download_source`, `group_by_profile`, +`calculate_profile_trust`, `aggregate_source_score`, `get_primary_url`, +`get_all_urls`, `list_hash_algorithms`, `validate_hash`, `compute_hash` + +**Writes (signer per `SOURCE_SIGNER_MODE`):** `create_profile_box`, +`add_file_source`, `confirm_source`, `update_file_source`, `mark_invalid_source`, +`mark_unavailable_source`, `trust_profile` + +See [`../.service/README.md`](../.service/README.md) for the write→opinion +mapping and the `update_file_source` caveat. diff --git a/mcp/core.mjs b/mcp/core.mjs new file mode 100644 index 0000000..a4f8253 --- /dev/null +++ b/mcp/core.mjs @@ -0,0 +1,470 @@ +// @ts-nocheck — plain-ESM runtime module shared by the stdio MCP server, the +// HTTP/REST `.service`, and any bare-Node script. It mirrors the read surface of +// `src/lib/ergo/sourceFetch.ts` + the pure helpers of `src/lib/ergo/sourceObject.ts`, +// but is NOT TypeScript-checked and carries NO Svelte/Vite dependency. +/** + * Source Application registry — framework-agnostic data core. + * + * This is the SINGLE source of truth for the on-chain Source Application read + * layer outside the browser: the Type NFT ids, the box queries, the R9 + * (source-entry) parsers, the `fetch*` reads, and the pure aggregation helpers. + * + * The Explorer box search + block-timestamp lookup are imported from + * `reputation-system/node` — the headless, Node-safe entry of the reputation + * library (no `.svelte` imports in its graph). This is the SAME `searchBoxes` + * the Svelte app uses via `reputation-system`, so the reads never drift from the + * app, and they include the required reputation-proof `ergoTreeTemplateHash` + * filter that the Explorer's `/boxes/unspent/search` endpoint demands. + * + * Type NFT ids are copied verbatim from `src/lib/ergo/envs.ts`. Several are + * PLACEHOLDER values (all-zero hex); they are preserved as-is. Queries against a + * non-real Type NFT simply match no boxes and return a clean empty array, so the + * read tools degrade gracefully rather than throwing. + */ +import { searchBoxes, getTimestampFromBlockId } from 'reputation-system/node'; + +// ── Type NFT ids (verbatim from src/lib/ergo/envs.ts) ─────────────────────── +export const PROFILE_TYPE_NFT_ID = '1820fd428a0b92d61ce3f86cd98240fdeeee8a392900f0b19a2e017d66f79926'; +export const PROFILE_TOTAL_SUPPLY = 99999999; +export const FILE_SOURCE_TYPE_NFT_ID = '8299d98e15ebee7fa39ad716de7c8bb191790a1bf4b7c3f91af35a0e36187706'; +export const INVALID_FILE_SOURCE_TYPE_NFT_ID = '0000000000000000000000000000000000000000000000000000000000000002'; +export const UNAVAILABLE_SOURCE_TYPE_NFT_ID = '0000000000000000000000000000000000000000000000000000000000000003'; +export const PROFILE_OPINION_TYPE_NFT_ID = '0000000000000000000000000000000000000000000000000000000000000004'; + +export const DEFAULT_EXPLORER_API = + (typeof process !== 'undefined' && process.env && process.env.SOURCE_EXPLORER_API) || + 'https://api.ergoplatform.com'; + +export const isHexId = (v) => typeof v === 'string' && /^[0-9a-fA-F]{4,}$/.test(v); + +/** Decode a hex string (Explorer Coll[Byte] renderedValue) to UTF-8 text. */ +export function hexToUtf8(hexString) { + if (!hexString || typeof hexString !== 'string' || hexString.length % 2 !== 0) return null; + try { + const bytes = new Uint8Array(hexString.match(/.{1,2}/g).map((b) => parseInt(b, 16))); + return new TextDecoder('utf-8').decode(bytes); + } catch { + return null; + } +} + +// ── Source-entry (R9) serialization — verbatim from sourceObject.ts ───────── + +/** + * Serialize a SourceEntry to the R9 JSON string (Coll[Coll[Byte]] shape): + * [[hashFunctionId, contentFormat, contentHash, rawFormat, urlLink, isChunked]] + */ +export function serializeSourceEntry(entry) { + const tuple = [ + entry.hashFunctionId || '', + entry.contentFormat || '', + entry.contentHash || '', + entry.rawFormat || '', + entry.urlLink || '', + entry.isChunked ?? false + ]; + return JSON.stringify([tuple]); +} + +/** Deserialize an R9 content string into a SourceEntry (tuple/object/legacy-url). */ +export function deserializeSourceEntry(content) { + const empty = { hashFunctionId: '', contentFormat: '', contentHash: '', rawFormat: '', urlLink: '' }; + if (!content || content.trim() === '') return empty; + try { + const parsed = JSON.parse(content); + if (Array.isArray(parsed) && parsed.length > 0) { + const tuple = parsed[0]; + if (Array.isArray(tuple) && tuple.length >= 5) { + return { + hashFunctionId: tuple[0] || '', + contentFormat: tuple[1] || '', + contentHash: tuple[2] || '', + rawFormat: tuple[3] || '', + urlLink: tuple[4] || '', + isChunked: tuple[5] === true + }; + } + if (typeof tuple === 'object' && tuple !== null && !Array.isArray(tuple)) { + return { + hashFunctionId: tuple.hashFunctionId || '', + contentFormat: tuple.contentFormat || tuple.contentFormatNftId || '', + contentHash: tuple.contentHash || '', + rawFormat: tuple.rawFormat || tuple.rawFormatNftId || '', + urlLink: tuple.urlLink || '', + isChunked: tuple.isChunked === true + }; + } + } + } catch { + // not JSON — legacy plain URL string + } + return { hashFunctionId: '', contentFormat: '', contentHash: '', rawFormat: '', urlLink: content, isChunked: false }; +} + +// ── Internal helpers ──────────────────────────────────────────────────────── + +async function collectBoxes(generator) { + const boxes = []; + for await (const batch of generator) boxes.push(...batch); + return boxes; +} + +/** Block timestamp for a box; non-critical, so failures degrade to 0. */ +async function boxTimestamp(explorerUri, box) { + if (!box || !box.blockId) return 0; + try { + return await getTimestampFromBlockId(explorerUri, box.blockId); + } catch { + return 0; + } +} + +function parseR9SourceEntry(box) { + const rendered = box?.additionalRegisters?.R9?.renderedValue; + const raw = rendered ? hexToUtf8(rendered) : ''; + return deserializeSourceEntry(raw || ''); +} + +// ── Reads (port of src/lib/ergo/sourceFetch.ts, Svelte-free) ──────────────── +// Positional searchBoxes args (from reputation-system/node): +// (explorerUri, tokenId, typeNftId, objectPointer, isLocked, polarization, +// content, ownerAddress, limit, offset) + +/** All FILE_SOURCE boxes for a specific file hash. */ +export async function fetchFileSourcesByHash(fileHash, explorerUri = DEFAULT_EXPLORER_API) { + if (!isHexId(FILE_SOURCE_TYPE_NFT_ID)) return []; + const boxes = await collectBoxes( + searchBoxes(explorerUri, undefined, FILE_SOURCE_TYPE_NFT_ID, fileHash, undefined, undefined, undefined, undefined, undefined, undefined) + ); + const sources = []; + for (const box of boxes) { + if (!box.assets?.length) continue; + if (box.additionalRegisters.R6?.renderedValue !== 'false') continue; + if (!box.additionalRegisters.R9?.renderedValue) continue; + const sourceEntry = parseR9SourceEntry(box); + sources.push({ + id: box.boxId, + fileHash, + hashFunctionId: sourceEntry.hashFunctionId || '', + source: sourceEntry, + ownerTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await boxTimestamp(explorerUri, box), + isLocked: false, + transactionId: box.transactionId + }); + } + sources.sort((a, b) => b.timestamp - a.timestamp); + return sources; +} + +/** All INVALID_FILE_SOURCE boxes targeting a specific source box id. */ +export async function fetchInvalidFileSources(sourceBoxId, explorerUri = DEFAULT_EXPLORER_API) { + if (!isHexId(INVALID_FILE_SOURCE_TYPE_NFT_ID)) return []; + const boxes = await collectBoxes( + searchBoxes(explorerUri, undefined, INVALID_FILE_SOURCE_TYPE_NFT_ID, sourceBoxId, undefined, undefined, undefined, undefined, undefined, undefined) + ); + const out = []; + for (const box of boxes) { + if (!box.assets?.length) continue; + out.push({ + id: box.boxId, + targetBoxId: sourceBoxId, + authorTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await boxTimestamp(explorerUri, box), + transactionId: box.transactionId + }); + } + return out; +} + +/** All UNAVAILABLE_SOURCE boxes for a specific URL. */ +export async function fetchUnavailableSources(sourceUrl, explorerUri = DEFAULT_EXPLORER_API) { + if (!isHexId(UNAVAILABLE_SOURCE_TYPE_NFT_ID)) return []; + const boxes = await collectBoxes( + searchBoxes(explorerUri, undefined, UNAVAILABLE_SOURCE_TYPE_NFT_ID, sourceUrl, undefined, undefined, undefined, undefined, undefined, undefined) + ); + const out = []; + for (const box of boxes) { + if (!box.assets?.length) continue; + out.push({ + id: box.boxId, + sourceUrl, + authorTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await boxTimestamp(explorerUri, box), + transactionId: box.transactionId + }); + } + return out; +} + +/** All PROFILE_OPINION boxes targeting a specific profile token id. */ +export async function fetchProfileOpinions(profileTokenId, explorerUri = DEFAULT_EXPLORER_API) { + if (!isHexId(PROFILE_OPINION_TYPE_NFT_ID)) return []; + const boxes = await collectBoxes( + searchBoxes(explorerUri, undefined, PROFILE_OPINION_TYPE_NFT_ID, profileTokenId, undefined, undefined, undefined, undefined, undefined, undefined) + ); + const out = []; + for (const box of boxes) { + if (!box.assets?.length) continue; + if (box.additionalRegisters.R6?.renderedValue === 'false') continue; + out.push({ + id: box.boxId, + targetProfileTokenId: profileTokenId, + isTrusted: box.additionalRegisters.R8?.renderedValue === 'true', + authorTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await boxTimestamp(explorerUri, box), + transactionId: box.transactionId + }); + } + return out; +} + +/** FILE_SOURCE boxes created by a specific profile token id. */ +export async function fetchFileSourcesByProfile(profileTokenId, limit = 50, explorerUri = DEFAULT_EXPLORER_API) { + if (!isHexId(FILE_SOURCE_TYPE_NFT_ID)) return []; + const boxes = await collectBoxes( + searchBoxes(explorerUri, profileTokenId, FILE_SOURCE_TYPE_NFT_ID, undefined, undefined, undefined, undefined, undefined, limit, undefined) + ); + const sources = []; + for (const box of boxes) { + if (!box.assets?.length) continue; + if (box.additionalRegisters.R6?.renderedValue !== 'false') continue; + if (!box.additionalRegisters.R9?.renderedValue) continue; + const fileHash = box.additionalRegisters.R5?.renderedValue || '[Unknown]'; + const sourceEntry = parseR9SourceEntry(box); + sources.push({ + id: box.boxId, + fileHash, + hashFunctionId: sourceEntry.hashFunctionId || '', + source: sourceEntry, + ownerTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await boxTimestamp(explorerUri, box), + isLocked: false, + transactionId: box.transactionId + }); + } + sources.sort((a, b) => b.timestamp - a.timestamp); + return sources; +} + +/** INVALID_FILE_SOURCE boxes created by a specific profile. */ +export async function fetchInvalidFileSourcesByProfile(profileTokenId, limit = 50, explorerUri = DEFAULT_EXPLORER_API) { + if (!isHexId(INVALID_FILE_SOURCE_TYPE_NFT_ID)) return []; + const boxes = await collectBoxes( + searchBoxes(explorerUri, profileTokenId, INVALID_FILE_SOURCE_TYPE_NFT_ID, undefined, undefined, undefined, undefined, undefined, limit, undefined) + ); + const out = []; + for (const box of boxes) { + if (!box.assets?.length) continue; + out.push({ + id: box.boxId, + targetBoxId: hexToUtf8(box.additionalRegisters.R5?.renderedValue || '') || '', + authorTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await boxTimestamp(explorerUri, box), + transactionId: box.transactionId + }); + } + return out; +} + +/** UNAVAILABLE_SOURCE boxes created by a specific profile. */ +export async function fetchUnavailableSourcesByProfile(profileTokenId, limit = 50, explorerUri = DEFAULT_EXPLORER_API) { + if (!isHexId(UNAVAILABLE_SOURCE_TYPE_NFT_ID)) return []; + const boxes = await collectBoxes( + searchBoxes(explorerUri, profileTokenId, UNAVAILABLE_SOURCE_TYPE_NFT_ID, undefined, undefined, undefined, undefined, undefined, limit, undefined) + ); + const out = []; + for (const box of boxes) { + if (!box.assets?.length) continue; + out.push({ + id: box.boxId, + sourceUrl: hexToUtf8(box.additionalRegisters.R5?.renderedValue || '') || '', + authorTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await boxTimestamp(explorerUri, box), + transactionId: box.transactionId + }); + } + return out; +} + +/** PROFILE_OPINION boxes created by a specific author token id. */ +export async function fetchProfileOpinionsByAuthor(authorTokenId, explorerUri = DEFAULT_EXPLORER_API) { + if (!isHexId(PROFILE_OPINION_TYPE_NFT_ID)) return []; + const boxes = await collectBoxes( + searchBoxes(explorerUri, authorTokenId, PROFILE_OPINION_TYPE_NFT_ID, undefined, undefined, undefined, undefined, undefined, undefined, undefined) + ); + const out = []; + for (const box of boxes) { + if (!box.assets?.length) continue; + out.push({ + id: box.boxId, + targetProfileTokenId: hexToUtf8(box.additionalRegisters.R5?.renderedValue || '') || '', + isTrusted: box.additionalRegisters.R8?.renderedValue === 'true', + authorTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await boxTimestamp(explorerUri, box), + transactionId: box.transactionId + }); + } + return out; +} + +/** Full search by file hash: sources + their invalidations + URL unavailabilities. */ +export async function searchByHash(fileHash, explorerUri = DEFAULT_EXPLORER_API) { + const sources = await fetchFileSourcesByHash(fileHash, explorerUri); + const invalidations = {}; + const unavailabilities = {}; + for (const source of sources) { + const invs = await fetchInvalidFileSources(source.id, explorerUri); + if (invs.length > 0) invalidations[source.id] = invs; + const url = source.source?.urlLink; + if (url && !unavailabilities[url]) { + const unavs = await fetchUnavailableSources(url, explorerUri); + if (unavs.length > 0) unavailabilities[url] = unavs; + } + } + return { sources, invalidations, unavailabilities }; +} + +/** All data related to a profile: its sources, invalidations, unavailabilities, opinions received + given. */ +export async function loadProfileData(profileTokenId, explorerUri = DEFAULT_EXPLORER_API) { + const sources = await fetchFileSourcesByProfile(profileTokenId, 50, explorerUri); + const invalidations = await fetchInvalidFileSourcesByProfile(profileTokenId, 50, explorerUri); + const unavailabilities = await fetchUnavailableSourcesByProfile(profileTokenId, 50, explorerUri); + const opinions = await fetchProfileOpinions(profileTokenId, explorerUri); + const opinionsGiven = await fetchProfileOpinionsByAuthor(profileTokenId, explorerUri); + return { sources, invalidations, unavailabilities, opinions, opinionsGiven }; +} + +// ── Pure helpers (verbatim from sourceObject.ts) ──────────────────────────── + +export function getPrimaryUrl(source) { + return source?.source?.urlLink || ''; +} + +export function getAllUrls(source) { + return source?.source?.urlLink ? [source.source.urlLink] : []; +} + +export function groupByDownloadSource(sources, invalidationsMap = {}, unavailabilitiesMap = {}) { + const groups = {}; + for (const source of sources) { + const url = source.source?.urlLink; + if (!url) continue; + if (!groups[url]) { + groups[url] = { + sourceUrl: url, + sources: [], + owners: [], + invalidations: [], + unavailabilities: unavailabilitiesMap[url]?.data || [] + }; + } + if (!groups[url].sources.some((s) => s.id === source.id)) groups[url].sources.push(source); + if (!groups[url].owners.includes(source.ownerTokenId)) groups[url].owners.push(source.ownerTokenId); + const boxInvalidations = invalidationsMap[source.id]?.data || []; + groups[url].invalidations.push(...boxInvalidations); + } + return Object.values(groups).sort((a, b) => b.sources.length - a.sources.length); +} + +export function groupByProfile(sources) { + const groups = {}; + for (const source of sources) { + if (!groups[source.ownerTokenId]) { + groups[source.ownerTokenId] = { profileTokenId: source.ownerTokenId, sources: [] }; + } + groups[source.ownerTokenId].sources.push(source); + } + return Object.values(groups).sort((a, b) => b.sources.length - a.sources.length); +} + +export function calculateProfileTrust(profileTokenId, opinions) { + const trust = opinions.filter((o) => o.isTrusted).reduce((s, o) => s + o.reputationAmount, 0); + const distrust = opinions.filter((o) => !o.isTrusted).reduce((s, o) => s + o.reputationAmount, 0); + return trust - distrust; +} + +export function aggregateSourceScore(source, allSources, invalidations, unavailabilities, profileOpinions = []) { + const sourceUrl = source.source?.urlLink || ''; + const confirmations = allSources.filter( + (s) => s.id !== source.id && s.fileHash === source.fileHash && s.source?.urlLink === sourceUrl + ); + const filteredInvalidations = invalidations.filter((inv) => inv.targetBoxId === source.id); + const filteredUnavailabilities = unavailabilities.filter((un) => un.sourceUrl === sourceUrl); + const confirmationScore = confirmations.reduce((s, x) => s + x.reputationAmount, 0); + const invalidationScore = filteredInvalidations.reduce((s, x) => s + x.reputationAmount, 0); + const unavailabilityScore = filteredUnavailabilities.reduce((s, x) => s + x.reputationAmount, 0); + const ownerTrustScore = calculateProfileTrust(source.ownerTokenId, profileOpinions); + return { + ...source, + confirmations, + invalidations: filteredInvalidations, + unavailabilities: filteredUnavailabilities, + confirmationScore, + invalidationScore, + unavailabilityScore, + ownerTrustScore + }; +} + +// ── Hash helpers (from src/lib/ergo/hashUtils.ts) ─────────────────────────── + +export const HASH_ALGORITHMS = [ + { label: 'SHA3-256', value: 'sha3_256' }, + { label: 'Blake2b', value: 'blake2b' }, + { label: 'SHA-256', value: 'sha256' }, + { label: 'Keccak-256', value: 'keccak256' } +]; +export const HASH_OPTIONS = [...HASH_ALGORITHMS, { label: 'Custom', value: '__custom__' }]; +export const SEARCH_HASH_ALGORITHMS = HASH_ALGORITHMS; + +function uint8ArrayToHex(array) { + return [...array].map((x) => x.toString(16).padStart(2, '0')).join(''); +} + +/** Compute the hex hash of bytes with a known algorithm id, or null if unknown/custom. */ +export async function computeHash(data, algorithmId) { + const { sha256 } = await import('@noble/hashes/sha256'); + const { sha3_256, keccak_256 } = await import('@noble/hashes/sha3'); + const { blake2b } = await import('@noble/hashes/blake2b'); + switch (algorithmId) { + case 'sha256': + return uint8ArrayToHex(sha256(data)); + case 'sha3_256': + return uint8ArrayToHex(sha3_256(data)); + case 'keccak256': + return uint8ArrayToHex(keccak_256(data)); + case 'blake2b': + return uint8ArrayToHex(blake2b(data, { dkLen: 32 })); + default: + return null; + } +} + +/** Validate a hex hash for an algorithm. Returns null if valid, else an error string. */ +export function validateHash(hash, algorithmId) { + if (!hash || hash.trim() === '') return 'Hash cannot be empty'; + const trimmed = hash.trim(); + if (!/^[0-9a-fA-F]+$/.test(trimmed)) return 'Hash must contain only hexadecimal characters (0-9, a-f)'; + switch (algorithmId) { + case 'sha3_256': + case 'sha256': + case 'keccak256': + if (trimmed.length !== 64) return `${algorithmId} hash must be exactly 64 hex characters (256-bit). Got ${trimmed.length}.`; + break; + case 'blake2b': + if (trimmed.length !== 64 && trimmed.length !== 128) return `Blake2b hash must be 64 or 128 hex characters. Got ${trimmed.length}.`; + break; + default: + break; + } + return null; +} diff --git a/mcp/lib.mjs b/mcp/lib.mjs new file mode 100644 index 0000000..5eb24f4 --- /dev/null +++ b/mcp/lib.mjs @@ -0,0 +1,109 @@ +/** + * Signer + main-box helpers for the Source Application MCP / `.service`. + * + * Source Application writes ARE reputation opinions (a FILE_SOURCE is a positive + * opinion against the FILE_SOURCE Type NFT; an invalidation/unavailability/trust + * are opinions against their respective Type NFTs). So publishing reuses the + * reputation library's headless Node entry exactly like + * `reputation-system/mcp/lib.mjs`: a Signer is built from the environment and + * passed to `create_profile_with_signer` / `create_opinion_with_signer`. + */ +import { SeedSigner, UnsignedSigner } from 'reputation-system/node'; + +export const EXPLORER_API = process.env.SOURCE_EXPLORER_API || 'https://api.ergoplatform.com'; + +/** + * Build the configured Signer from environment. + * + * SOURCE_SIGNER_MODE=seed – sign + submit autonomously with a mnemonic. + * SOURCE_MNEMONIC (required) BIP-39 mnemonic of the publishing wallet. + * SOURCE_MNEMONIC_PASSWORD optional BIP-39 passphrase. + * SOURCE_NODE_URI Ergo node for submission (default :9053). + * SOURCE_ADDRESS_INDEX change-path index (default 0). + * + * SOURCE_SIGNER_MODE=unsigned – build only; return the unsigned EIP-12 tx for + * an external wallet to sign. No key in the + * agent. (default) + * SOURCE_ADDRESS (required) the P2PK address whose UTXOs fund the tx. + */ +export function makeSigner() { + const mode = (process.env.SOURCE_SIGNER_MODE || 'unsigned').toLowerCase(); + if (mode === 'seed') { + const mnemonic = process.env.SOURCE_MNEMONIC; + if (!mnemonic) throw new Error('SOURCE_SIGNER_MODE=seed requires SOURCE_MNEMONIC.'); + return new SeedSigner({ + mnemonic, + password: process.env.SOURCE_MNEMONIC_PASSWORD, + addressIndex: process.env.SOURCE_ADDRESS_INDEX ? Number(process.env.SOURCE_ADDRESS_INDEX) : 0, + explorerUri: EXPLORER_API, + nodeUri: process.env.SOURCE_NODE_URI + }); + } + if (mode === 'unsigned') { + const address = process.env.SOURCE_ADDRESS; + if (!address) throw new Error('SOURCE_SIGNER_MODE=unsigned requires SOURCE_ADDRESS.'); + return new UnsignedSigner({ address, explorerUri: EXPLORER_API }); + } + throw new Error(`Unknown SOURCE_SIGNER_MODE: ${mode} (expected 'seed' or 'unsigned').`); +} + +/** Return the active signer mode (without constructing a signer / requiring keys). */ +export function signerMode() { + return (process.env.SOURCE_SIGNER_MODE || 'unsigned').toLowerCase(); +} + +/** + * Fetch a reputation-proof box by id and shape it into the RPBox `main_box` that + * `create_opinion_with_signer` consumes. R4 (rendered) is its Type NFT id, which + * the contract requires as a data input. For Source Application writes this is + * the author's PROFILE box (the box that holds their reputation token). + */ +export async function fetchMainBox(mainBoxId) { + if (!/^[0-9a-fA-F]{64}$/.test(mainBoxId || '')) { + throw new Error(`mainBoxId must be a 64-char hex box id (got: ${mainBoxId}).`); + } + const res = await fetch(`${EXPLORER_API}/api/v1/boxes/${mainBoxId}`); + if (!res.ok) throw new Error(`Failed to fetch main box ${mainBoxId}: HTTP ${res.status}`); + const box = await res.json(); + + const reputationTokenId = box?.assets?.[0]?.tokenId; + if (!reputationTokenId) { + throw new Error(`Box ${mainBoxId} holds no reputation token; not a valid main box.`); + } + + return { + box: { + boxId: box.boxId, + value: box.value.toString(), + assets: (box.assets ?? []).map((a) => ({ tokenId: a.tokenId, amount: a.amount.toString() })), + ergoTree: box.ergoTree, + creationHeight: box.creationHeight, + additionalRegisters: Object.entries(box.additionalRegisters ?? {}).reduce((acc, [k, v]) => { + acc[k] = v.serializedValue; + return acc; + }, {}), + index: box.index ?? 0, + transactionId: box.transactionId + }, + box_id: box.boxId, + type: { tokenId: box?.additionalRegisters?.R4?.renderedValue || '' }, + token_id: reputationTokenId, + token_amount: Number(box.assets[0].amount), + object_pointer: box?.additionalRegisters?.R5?.renderedValue || '', + is_locked: box?.additionalRegisters?.R6?.renderedValue === 'true', + polarization: box?.additionalRegisters?.R8?.renderedValue === 'true', + content: {} + }; +} + +/** Normalize a SignerResult into an MCP/REST-friendly payload. */ +export function describeResult(result) { + if (result.kind === 'submitted') { + return { submitted: true, txId: result.txId }; + } + return { + submitted: false, + unsignedTransaction: result.transaction, + note: 'Transaction built but not signed. Sign + submit with an external wallet (Nautilus/ErgoPay).' + }; +} diff --git a/mcp/package-lock.json b/mcp/package-lock.json new file mode 100644 index 0000000..ef5e5c9 --- /dev/null +++ b/mcp/package-lock.json @@ -0,0 +1,9762 @@ +{ + "name": "source-application-mcp", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "source-application-mcp", + "version": "0.1.0", + "dependencies": { + "@modelcontextprotocol/sdk": "^1.29.0", + "@noble/hashes": "^1.4.0", + "reputation-system": "github:agenticaihome/reputation-system#fix/seed-signer-derivation" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@dagrejs/dagre": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@dagrejs/dagre/-/dagre-1.1.8.tgz", + "integrity": "sha512-5SEDlndt4W/LaVzPYJW+bSmSEZc9EzTf8rJ20WCKvjS5EAZAN0b+x0Yww7VMT4R3Wootkg+X9bUfUxazYw6Blw==", + "license": "MIT", + "dependencies": { + "@dagrejs/graphlib": "2.2.4" + } + }, + "node_modules/@dagrejs/graphlib": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@dagrejs/graphlib/-/graphlib-2.2.4.tgz", + "integrity": "sha512-mepCf/e9+SKYy1d02/UkvSy6+6MoyXhVxP8lLDfA7BPE1X1d4dR0sZznmbM8/XVJ1GPM+Svnx7Xj6ZweByWUkw==", + "license": "MIT", + "engines": { + "node": ">17.0.0" + } + }, + "node_modules/@fleet-sdk/common": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@fleet-sdk/common/-/common-0.10.0.tgz", + "integrity": "sha512-N92zENyHYhKtKxhJ6jJbWgV3PCkCGM0LYLmn6OOXNqDVbwT9UFgHOTt7eXFd9tqIhwMMPCnlffNe4c+P+CnsJA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@fleet-sdk/compiler": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@fleet-sdk/compiler/-/compiler-0.12.0.tgz", + "integrity": "sha512-WH05qMRmWe8qTI1oX2NZ3qJobp2ZYPh3DqAAtKRPxmeHmfWmvFWM6QHwWeGR7M86QCQczWNdqeOY7qJKs12G4g==", + "license": "MIT", + "dependencies": { + "@fleet-sdk/common": "^0.10.0", + "@fleet-sdk/core": "^0.12.0", + "@fleet-sdk/crypto": "^0.11.0", + "@fleet-sdk/serializer": "^0.11.0", + "sigmastate-js": "0.4.6" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@fleet-sdk/core": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@fleet-sdk/core/-/core-0.12.0.tgz", + "integrity": "sha512-AYdfivEzfokem2eovnhp5rfv+cFrVR87l/ff71uxt1Xn1Arv0QivNtXn9H00i0t3LkiTxI7ttgU56FAbjWbUKw==", + "license": "MIT", + "dependencies": { + "@fleet-sdk/common": "^0.10.0", + "@fleet-sdk/crypto": "^0.11.0", + "@fleet-sdk/serializer": "^0.11.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@fleet-sdk/crypto": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@fleet-sdk/crypto/-/crypto-0.11.0.tgz", + "integrity": "sha512-oGyrnL0AyzPSsPdA32y4TEFQ6vJlNDMt9nwiArd2TYbtRCDMNTslHQmC/An4clf4R0e/c4yuZJSdfzHC3F0ssQ==", + "license": "MIT", + "dependencies": { + "@fleet-sdk/common": "^0.10.0", + "@noble/hashes": "^1.8.0", + "@scure/base": "^1.2.6" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@fleet-sdk/serializer": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@fleet-sdk/serializer/-/serializer-0.11.0.tgz", + "integrity": "sha512-EYun0nzxJn+23aOeaMM5COj62ibVrzgNOx2I6AM6P23mRs72I0Dv2prdBnU/lst4hqbNHi8a1E6UNvpjH2vhGQ==", + "license": "MIT", + "dependencies": { + "@fleet-sdk/common": "^0.10.0", + "@fleet-sdk/crypto": "^0.11.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@fleet-sdk/wallet": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@fleet-sdk/wallet/-/wallet-0.12.0.tgz", + "integrity": "sha512-ErAOa1mLG5XzmQRarQ3SR879Mm/Bk1Cp0KkQP0lSZovBbSOWlem0isHMlIfhpJEHkvdGdW+YkrbQ4DtEG5z+ew==", + "license": "MIT", + "dependencies": { + "@fleet-sdk/common": "^0.10.0", + "@fleet-sdk/core": "^0.12.0", + "@fleet-sdk/crypto": "^0.11.0", + "@fleet-sdk/serializer": "^0.11.0", + "@noble/curves": "^1.9.2", + "@scure/bip32": "^1.7.0", + "@scure/bip39": "^1.6.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@hono/node-server": { + "version": "1.19.14", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.14.tgz", + "integrity": "sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==", + "license": "MIT", + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT", + "peer": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.29.0.tgz", + "integrity": "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==", + "license": "MIT", + "dependencies": { + "@hono/node-server": "^1.19.9", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "hono": "^4.11.4", + "jose": "^6.1.3", + "json-schema-typed": "^8.0.2", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } + } + }, + "node_modules/@noble/curves": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", + "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/base": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", + "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.7.0.tgz", + "integrity": "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==", + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.9.0", + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.6.0.tgz", + "integrity": "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@svelte-put/shortcut": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@svelte-put/shortcut/-/shortcut-3.1.1.tgz", + "integrity": "sha512-2L5EYTZXiaKvbEelVkg5znxqvfZGZai3m97+cAiUBhLZwXnGtviTDpHxOoZBsqz41szlfRMcamW/8o0+fbW3ZQ==", + "license": "MIT", + "peerDependencies": { + "svelte": "^3.55.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-drag": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", + "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-selection": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", + "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==", + "license": "MIT" + }, + "node_modules/@types/d3-transition": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", + "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-zoom": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", + "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", + "license": "MIT", + "dependencies": { + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "license": "MIT", + "peer": true + }, + "node_modules/@types/stats.js": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/stats.js/-/stats.js-0.17.4.tgz", + "integrity": "sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==", + "license": "MIT" + }, + "node_modules/@types/three": { + "version": "0.161.2", + "resolved": "https://registry.npmjs.org/@types/three/-/three-0.161.2.tgz", + "integrity": "sha512-DazpZ+cIfBzbW/p0zm6G8CS03HBMd748A3R1ZOXHpqaXZLv2I5zNgQUrRG//UfJ6zYFp2cUoCQaOLaz8ubH07w==", + "license": "MIT", + "dependencies": { + "@types/stats.js": "*", + "@types/webxr": "*", + "fflate": "~0.6.10", + "meshoptimizer": "~0.18.1" + } + }, + "node_modules/@types/webxr": { + "version": "0.5.24", + "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.24.tgz", + "integrity": "sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg==", + "license": "MIT" + }, + "node_modules/@xyflow/svelte": { + "version": "0.1.39", + "resolved": "https://registry.npmjs.org/@xyflow/svelte/-/svelte-0.1.39.tgz", + "integrity": "sha512-QZ5mzNysvJeJW7DxmqI4Urhhef9tclqtPr7WAS5zQF5Gk6k9INwzey4CYNtEZo8XMj9H8lzgoJRmgMPnJEc1kw==", + "license": "MIT", + "dependencies": { + "@svelte-put/shortcut": "3.1.1", + "@xyflow/system": "0.0.59", + "classcat": "^5.0.4" + }, + "peerDependencies": { + "svelte": "^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/@xyflow/system": { + "version": "0.0.59", + "resolved": "https://registry.npmjs.org/@xyflow/system/-/system-0.0.59.tgz", + "integrity": "sha512-+xgqYhoBv5F10TQx0SiKZR/DcWtuxFYR+e/LluHb7DMtX4SsMDutZWEJ4da4fDco25jZxw5G9fOlmk7MWvYd5Q==", + "license": "MIT", + "dependencies": { + "@types/d3-drag": "^3.0.7", + "@types/d3-selection": "^3.0.10", + "@types/d3-transition": "^3.0.8", + "@types/d3-zoom": "^3.0.8", + "d3-drag": "^3.0.0", + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0" + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==", + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-bgblack": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgblack/-/ansi-bgblack-0.1.1.tgz", + "integrity": "sha512-tp8M/NCmSr6/skdteeo9UgJ2G1rG88X3ZVNZWXUxFw4Wh0PAGaAAWQS61sfBt/1QNcwMTY3EBKOMPujwioJLaw==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-bgblue": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgblue/-/ansi-bgblue-0.1.1.tgz", + "integrity": "sha512-R8JmX2Xv3+ichUQE99oL+LvjsyK+CDWo/BtVb4QUz3hOfmf2bdEmiDot3fQcpn2WAHW3toSRdjSLm6bgtWRDlA==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-bgcyan": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgcyan/-/ansi-bgcyan-0.1.1.tgz", + "integrity": "sha512-6SByK9q2H978bmqzuzA5NPT1lRDXl3ODLz/DjC4URO5f/HqK7dnRKfoO/xQLx/makOz7zWIbRf6+Uf7bmaPSkQ==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-bggreen": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bggreen/-/ansi-bggreen-0.1.1.tgz", + "integrity": "sha512-8TRtOKmIPOuxjpklrkhUbqD2NnVb4WZQuIjXrT+TGKFKzl7NrL7wuNvEap3leMt2kQaCngIN1ZzazSbJNzF+Aw==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-bgmagenta": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgmagenta/-/ansi-bgmagenta-0.1.1.tgz", + "integrity": "sha512-UZYhobiGAlV4NiwOlKAKbkCyxOl1PPZNvdIdl/Ce5by45vwiyNdBetwHk/AjIpo1Ji9z+eE29PUBAjjfVmz5SA==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-bgred": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgred/-/ansi-bgred-0.1.1.tgz", + "integrity": "sha512-BpPHMnYmRBhcjY5knRWKjQmPDPvYU7wrgBSW34xj7JCH9+a/SEIV7+oSYVOgMFopRIadOz9Qm4zIy+mEBvUOPA==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-bgwhite": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgwhite/-/ansi-bgwhite-0.1.1.tgz", + "integrity": "sha512-KIF19t+HOYOorUnHTOhZpeZ3bJsjzStBG2hSGM0WZ8YQQe4c7lj9CtwnucscJDPrNwfdz6GBF+pFkVfvHBq6uw==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-bgyellow": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgyellow/-/ansi-bgyellow-0.1.1.tgz", + "integrity": "sha512-WyRoOFSIvOeM7e7YdlSjfAV82Z6K1+VUVbygIQ7C/VGzWYuO/d30F0PG7oXeo4uSvSywR0ozixDQvtXJEorq4Q==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-black": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-black/-/ansi-black-0.1.1.tgz", + "integrity": "sha512-hl7re02lWus7lFOUG6zexhoF5gssAfG5whyr/fOWK9hxNjUFLTjhbU/b4UHWOh2dbJu9/STSUv+80uWYzYkbTQ==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-blue": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-blue/-/ansi-blue-0.1.1.tgz", + "integrity": "sha512-8Um59dYNDdQyoczlf49RgWLzYgC2H/28W3JAIyOAU/+WkMcfZmaznm+0i1ikrE0jME6Ypk9CJ9CY2+vxbPs7Fg==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-bold": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bold/-/ansi-bold-0.1.1.tgz", + "integrity": "sha512-wWKwcViX1E28U6FohtWOP4sHFyArELHJ2p7+3BzbibqJiuISeskq6t7JnrLisUngMF5zMhgmXVw8Equjzz9OlA==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-colors": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-0.2.0.tgz", + "integrity": "sha512-ScRNUT0TovnYw6+Xo3iKh6G+VXDw2Ds7ZRnMIuKBgHY02DgvT2T2K22/tc/916Fi0W/5Z1RzDaHQwnp75hqdbA==", + "license": "MIT", + "dependencies": { + "ansi-bgblack": "^0.1.1", + "ansi-bgblue": "^0.1.1", + "ansi-bgcyan": "^0.1.1", + "ansi-bggreen": "^0.1.1", + "ansi-bgmagenta": "^0.1.1", + "ansi-bgred": "^0.1.1", + "ansi-bgwhite": "^0.1.1", + "ansi-bgyellow": "^0.1.1", + "ansi-black": "^0.1.1", + "ansi-blue": "^0.1.1", + "ansi-bold": "^0.1.1", + "ansi-cyan": "^0.1.1", + "ansi-dim": "^0.1.1", + "ansi-gray": "^0.1.1", + "ansi-green": "^0.1.1", + "ansi-grey": "^0.1.1", + "ansi-hidden": "^0.1.1", + "ansi-inverse": "^0.1.1", + "ansi-italic": "^0.1.1", + "ansi-magenta": "^0.1.1", + "ansi-red": "^0.1.1", + "ansi-reset": "^0.1.1", + "ansi-strikethrough": "^0.1.1", + "ansi-underline": "^0.1.1", + "ansi-white": "^0.1.1", + "ansi-yellow": "^0.1.1", + "lazy-cache": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-cyan": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", + "integrity": "sha512-eCjan3AVo/SxZ0/MyIYRtkpxIu/H3xZN7URr1vXVrISxeyz8fUFz0FJziamK4sS8I+t35y4rHg1b2PklyBe/7A==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-dim": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-dim/-/ansi-dim-0.1.1.tgz", + "integrity": "sha512-zAfb1fokXsq4BoZBkL0eK+6MfFctbzX3R4UMcoWrL1n2WHewFKentTvOZv2P11u6P4NtW/V47hVjaN7fJiefOg==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha512-wiXutNjDUlNEDWHcYH3jtZUhd3c4/VojassD8zHdHCY13xbZy2XbW+NKQwA0tWGBVzDA9qEzYwfoSsWmviidhw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-green": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-green/-/ansi-green-0.1.1.tgz", + "integrity": "sha512-WJ70OI4jCaMy52vGa/ypFSKFb/TrYNPaQ2xco5nUwE0C5H8piume/uAZNNdXXiMQ6DbRmiE7l8oNBHu05ZKkrw==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-grey": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-grey/-/ansi-grey-0.1.1.tgz", + "integrity": "sha512-+J1nM4lC+whSvf3T4jsp1KR+C63lypb+VkkwtLQMc1Dlt+nOvdZpFT0wwFTYoSlSwCcLUAaOpHF6kPkYpSa24A==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-hidden": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-hidden/-/ansi-hidden-0.1.1.tgz", + "integrity": "sha512-8gB1bo9ym9qZ/Obvrse1flRsfp2RE+40B23DhQcKxY+GSeaOJblLnzBOxzvmLTWbi5jNON3as7wd9rC0fNK73Q==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-inverse": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-inverse/-/ansi-inverse-0.1.1.tgz", + "integrity": "sha512-Kq8Z0dBRhQhDMN/Rso1Nu9niwiTsRkJncfJZXiyj7ApbfJrGrrubHXqXI37feJZkYcIx6SlTBdNCeK0OQ6X6ag==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-italic": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-italic/-/ansi-italic-0.1.1.tgz", + "integrity": "sha512-jreCxifSAqbaBvcibeQxcwhQDbEj7gF69XnpA6x83qbECEBaRBD1epqskrmov1z4B+zzQuEdwbWxgzvhKa+PkA==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-magenta": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-magenta/-/ansi-magenta-0.1.1.tgz", + "integrity": "sha512-A1Giu+HRwyWuiXKyXPw2AhG1yWZjNHWO+5mpt+P+VWYkmGRpLPry0O5gmlJQEvpjNpl4RjFV7DJQ4iozWOmkbQ==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-red": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", + "integrity": "sha512-ewaIr5y+9CUTGFwZfpECUbFlGcC0GCw1oqR9RI6h1gQCd9Aj2GxSckCnPsVJnmfMZbwFYE+leZGASgkWl06Jow==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-reset": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-reset/-/ansi-reset-0.1.1.tgz", + "integrity": "sha512-n+D0qD3B+h/lP0dSwXX1SZMoXufdUVotLMwUuvXa50LtBAh3f+WV8b5nFMfLL/hgoPBUt+rG/pqqzF8krlZKcw==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-strikethrough": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-strikethrough/-/ansi-strikethrough-0.1.1.tgz", + "integrity": "sha512-gWkLPDvHH2pC9YEKqp8dIl0mg3sRglMPvioqGDIOXiwxjxUwIJ1gF86E2o4R5yLNh8IAkwHbaMtASkJfkQ2hIA==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-underline": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-underline/-/ansi-underline-0.1.1.tgz", + "integrity": "sha512-D+Bzwio/0/a0Fu5vJzrIT6bFk43TW46vXfSvzysOTEHcXOAUJTVMHWDbELIzGU4AVxVw2rCTb7YyWS4my2cSKQ==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-white": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-white/-/ansi-white-0.1.1.tgz", + "integrity": "sha512-DJHaF2SRzBb9wZBgqIJNjjTa7JUJTO98sHeTS1sDopyKKRopL1KpaJ20R6W2f/ZGras8bYyIZDtNwYOVXNgNFg==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-yellow": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-yellow/-/ansi-yellow-0.1.1.tgz", + "integrity": "sha512-6E3D4BQLXHLl3c/NwirWVZ+BCkMq2qsYxdeAGGOijKrx09FaqU+HktFL6QwAwNvgJiMLnv6AQ2C1gFZx0h1CBg==", + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha512-dtXTVMkh6VkEEA7OhXnN1Ecb8aAGFdZ1LFxtOCoqj4qkyOJMt7+qs6Ahdy6p/NQCPYsRSXXivhSB/J5E9jmYKA==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", + "integrity": "sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==", + "license": "MIT", + "dependencies": { + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-pluck": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/arr-pluck/-/arr-pluck-0.1.0.tgz", + "integrity": "sha512-r+XGzphTuhTu//mwL9wIjXawJCiKkZqUDgJsUxzq+YGiYb4Gg9+GuIVorvSo7halsbEiDj5D34cquiHj7jTvgg==", + "license": "MIT", + "dependencies": { + "arr-map": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-sort": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-0.1.4.tgz", + "integrity": "sha512-BNcM+RXxndPxiZ2rd76k6nyQLRZr2/B/sdi8pQ+Joafr5AH279L40dfokSUTp8O+AaqYjXWhblBWa2st2nc4fQ==", + "license": "MIT", + "dependencies": { + "default-compare": "^1.0.0", + "get-value": "^2.0.6", + "kind-of": "^5.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-sort/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha512-G2n5bG5fSUCpnsXz4+8FUkYsGPkNfLn9YvS66U5qbTIXI2Ynnlo4Bi42bWv+omKUCqz+ejzfClwne0alJWJPhg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arrayify-compact": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/arrayify-compact/-/arrayify-compact-0.2.0.tgz", + "integrity": "sha512-uCIqMaBeu+onuiFS1kB2raQYLETAAeWwAGwrZs7soA1nu4TuHfejWJMoFL06SvWHZAxmOCN7UDzcBjUZ6Y6s6Q==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assemble-core": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/assemble-core/-/assemble-core-0.25.0.tgz", + "integrity": "sha512-5vS/XZK0ke3gIHoKTyl88brqOR9zw3niz5jJHrEgrDLlZGEri4a1Wr4badallKCx4M4/TWG12GT/O5wABZjaVA==", + "license": "MIT", + "dependencies": { + "assemble-fs": "^0.6.0", + "assemble-render-file": "^0.7.1", + "assemble-streams": "^0.6.0", + "base-task": "^0.6.1", + "define-property": "^0.2.5", + "lazy-cache": "^2.0.1", + "templates": "^0.24.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/assemble-fs": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/assemble-fs/-/assemble-fs-0.6.0.tgz", + "integrity": "sha512-vp9szLsFTz0NFa7aiCBZ4JJZPsRRjLB7ftj3anSm/apE+DJ8d1s7kaVFHpxc2LCrEVIGMc1ALLyfRYJDwtzfaw==", + "license": "MIT", + "dependencies": { + "assemble-handle": "^0.1.2", + "extend-shallow": "^2.0.1", + "is-valid-app": "^0.2.0", + "lazy-cache": "^2.0.1", + "stream-combiner": "^0.2.2", + "through2": "^2.0.1", + "vinyl-fs": "^2.4.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assemble-handle": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/assemble-handle/-/assemble-handle-0.1.4.tgz", + "integrity": "sha512-7O1lbkR2fMqsGwrtGzHraLQHN0OKukPeLF/qgD7yTzFKSKg/HH2xeEN8mKutwymXRzVsUF3AvboJoOjMGiT+5g==", + "license": "MIT", + "dependencies": { + "through2": "^2.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assemble-loader": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/assemble-loader/-/assemble-loader-0.6.1.tgz", + "integrity": "sha512-jef7ecixuK8DgP2LMJ5TO1Zs6YnltxQN8KDLDYLav+VbfK7+BGVLHv2NNrIm0/Mls2CklNmMqeWcccdSUNRUnQ==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "file-contents": "^0.2.4", + "fs-exists-sync": "^0.1.0", + "has-glob": "^0.1.1", + "is-registered": "^0.1.5", + "is-valid-glob": "^0.3.0", + "is-valid-instance": "^0.1.0", + "isobject": "^2.1.0", + "lazy-cache": "^2.0.1", + "load-templates": "^0.11.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assemble-render-file": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/assemble-render-file/-/assemble-render-file-0.7.2.tgz", + "integrity": "sha512-Fmt/7KDIwHr/zIStwzl1QEzeph++eP0I7G3tQch1s0ftBllEwZZ5Py7IpO1WPkP+ef8xMRjXNrNKx8/cpTgb4w==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "is-valid-app": "^0.1.2", + "lazy-cache": "^2.0.1", + "mixin-deep": "^1.1.3", + "through2": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assemble-render-file/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/assemble-render-file/node_modules/is-valid-app": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.1.2.tgz", + "integrity": "sha512-UKIjincKieawS6pPJjpH76qUmblicLSi0pqGCvFdscOM3pWgnrRBtB/iWIRYXKNCW8qjxb+6k12wFd82Kq94CA==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "is-registered": "^0.1.5", + "is-valid-instance": "^0.1.0", + "lazy-cache": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assemble-render-file/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/assemble-streams": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/assemble-streams/-/assemble-streams-0.6.0.tgz", + "integrity": "sha512-JEZRYrkAQHKCT41jTVXQ63AxeYGD9aDuxRDZhZH5fsVfvLZGOHXsGPSJBEfDuC6Nz6APJGt9lwWfZH9lqmG65Q==", + "license": "MIT", + "dependencies": { + "assemble-handle": "^0.1.2", + "is-registered": "^0.1.4", + "is-valid-instance": "^0.1.0", + "lazy-cache": "^2.0.1", + "match-file": "^0.2.0", + "src-stream": "^0.1.1", + "through2": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assign-deep": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/assign-deep/-/assign-deep-0.4.8.tgz", + "integrity": "sha512-uxqXJCnNZDEjPnsaLKVzmh/ST5+Pqoz0wi06HDfHKx1ASNpSbbvz2qW2Gl8ZyHwr5jnm11X2S5eMQaP1lMZmCg==", + "license": "MIT", + "dependencies": { + "assign-symbols": "^0.1.1", + "is-primitive": "^2.0.0", + "kind-of": "^5.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assign-deep/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assign-symbols": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-0.1.1.tgz", + "integrity": "sha512-gwzH8QS/GV4pQsf6XOrlpBC6aDE8uJeZvymbEJ0W9TuDYqYOZc4RodvKDH98HCc+KFPYil1kD2XT0X0JWeOzQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "license": "MIT" + }, + "node_modules/async-array-reduce": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/async-array-reduce/-/async-array-reduce-0.2.1.tgz", + "integrity": "sha512-/ywTADOcaEnwiAnOEi0UB/rAcIq5bTFfCV9euv3jLYFUMmy6KvKccTQUnLlp8Ensmfj43wHSmbGiPqjsZ6RhNA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async-done": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", + "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.2", + "process-nextick-args": "^2.0.0", + "stream-exhaust": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/async-each": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", + "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/async-each-series": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-1.1.0.tgz", + "integrity": "sha512-/VIpPVIJJlJObJiXkHBJ1RhjDtydBRG/3/dWpsXoVGOShNw5tameXnC7Yys+wpb0p/myItxGmSGgNi/dNlsIiA==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/async-helpers": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/async-helpers/-/async-helpers-0.3.17.tgz", + "integrity": "sha512-LfgCyvmK6ZiC7pyqOgli2zfkWL4HYbEb+HXvGgdmqVBgsOOtQz5rSF8Ii/H/1cNNtrfj1KsdZE/lUMeIY3Qcwg==", + "license": "MIT", + "dependencies": { + "co": "^4.6.0", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/async-helpers/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async-settle": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-0.2.1.tgz", + "integrity": "sha512-3b4i8Bf/9Zw3V/EsLtMx+qj2r0mDYotjMhzXJQxjvESOe5LgevY5KaH5BHROVZWHE7TlSY2FkeTgIgDvdkRFYQ==", + "license": "MIT", + "dependencies": { + "async-done": "^0.4.0" + } + }, + "node_modules/async-settle/node_modules/async-done": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-0.4.0.tgz", + "integrity": "sha512-NcrnJY08hBDUa3qhZIfRALshlau6U/Q9X1WHA53t/8OfJpQz5qXPKGFVHwIY38md62TiM9JA+5tpRed5LFWrKw==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^0.1.4", + "next-tick": "^0.2.2", + "once": "^1.3.0", + "stream-exhaust": "^1.0.0" + } + }, + "node_modules/async-settle/node_modules/end-of-stream": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", + "integrity": "sha512-go5TQkd0YRXYhX+Lc3UrXkoKU5j+m72jEP5lHWr2Nh82L8wfZtH8toKgcg4T10o23ELIMGXQdwCbl+qAXIPDrw==", + "license": "MIT", + "dependencies": { + "once": "~1.3.0" + } + }, + "node_modules/async-settle/node_modules/once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/bach": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/bach/-/bach-0.5.0.tgz", + "integrity": "sha512-wr1KICs4sa/Ye4D38CEWkxmRi0E/1NnlcTXE4WT46993f+m+W8rVeRlQVh7O9jUHd3/cyNttv4qIDEUullFPcw==", + "license": "MIT", + "dependencies": { + "async-done": "^1.1.1", + "async-settle": "^0.2.1", + "lodash.filter": "^4.1.0", + "lodash.flatten": "^4.0.0", + "lodash.foreach": "^4.0.0", + "lodash.initial": "^4.0.1", + "lodash.last": "^3.0.0", + "lodash.map": "^4.1.0", + "now-and-later": "0.0.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "license": "MIT", + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-argv": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/base-argv/-/base-argv-0.4.5.tgz", + "integrity": "sha512-U78T4In2FMtSYBaf3utKCAOrOBJJXgvGLUmck71ZLQuJZBO6+DDUFoJGfuys0bX/wSQOZgB/HLLFiapvvUUFlw==", + "license": "MIT", + "dependencies": { + "arr-diff": "^2.0.0", + "arr-union": "^3.1.0", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "expand-args": "^0.4.1", + "extend-shallow": "^2.0.1", + "lazy-cache": "^1.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-argv/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-argv/node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-argv/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-cli": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/base-cli/-/base-cli-0.5.0.tgz", + "integrity": "sha512-GQnPyusKASZoCKR3JFf4iVygLvZjk6RwEQokZF35M9VHnhkoPycf22jYlWkwLEtCejtcLECgGC7fq0G/ab5k8g==", + "license": "MIT", + "dependencies": { + "base-argv": "^0.4.2", + "base-config": "^0.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-cli-process": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/base-cli-process/-/base-cli-process-0.1.19.tgz", + "integrity": "sha512-hH9MGqad9bZBmowsZ8uKL91rS4L+q4GEOc5SaL045jQWaR93sla0UI4Q9C6GzOD2AgVJulY2QtCMmwcBhdVYtQ==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "arrayify-compact": "^0.2.0", + "base-cli": "^0.5.0", + "base-cli-schema": "^0.1.19", + "base-config-process": "^0.1.9", + "base-cwd": "^0.3.4", + "base-option": "^0.8.4", + "base-pkg": "^0.2.4", + "debug": "^2.6.2", + "export-files": "^2.1.1", + "fs-exists-sync": "^0.1.0", + "is-valid-app": "^0.2.1", + "kind-of": "^3.1.0", + "lazy-cache": "^2.0.2", + "log-utils": "^0.2.1", + "merge-deep": "^3.0.0", + "mixin-deep": "^1.2.0", + "object.pick": "^1.2.0", + "pad-right": "^0.2.2", + "union-value": "^1.0.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/base-cli-process/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-cli-process/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-cli-schema": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/base-cli-schema/-/base-cli-schema-0.1.19.tgz", + "integrity": "sha512-8k3JPZjVjdwpYtaaF3F8JT9RztX1oFDWKsAVDpUUR/uXL6b85DyTpRX4TUw3rjwZMZIf1BmiTys2zOSqC7+oAA==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "array-unique": "^0.2.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "export-files": "^2.1.1", + "extend-shallow": "^2.0.1", + "falsey": "^0.3.0", + "fs-exists-sync": "^0.1.0", + "has-glob": "^0.1.1", + "has-value": "^0.3.1", + "kind-of": "^3.0.3", + "lazy-cache": "^2.0.1", + "map-schema": "^0.2.3", + "merge-deep": "^3.0.0", + "mixin-deep": "^1.1.3", + "resolve": "^1.1.7", + "tableize-object": "^0.1.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/base-cli-schema/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-cli-schema/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-compose": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/base-compose/-/base-compose-0.2.1.tgz", + "integrity": "sha512-z/wx9ij4i4Bj6WbXJeJlVO2O99eErMXSWjyYUt/NAfxrGpNfMz4SWS9P0OYx9RVQ2CyMEcT1J3z5+9EqQQr8Ug==", + "license": "MIT", + "dependencies": { + "copy-task": "^0.1.0", + "lazy-cache": "^2.0.1", + "mixin-deep": "^1.1.3" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/base-config": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/base-config/-/base-config-0.5.2.tgz", + "integrity": "sha512-Oq0PKM//Sh82mHQt64eUi5GZQOM8I+aNkM/P8Al4A5qwaGBkxKB+ElNqJHUVlF3WA9VjBLYUmO9asGzLEigxBw==", + "license": "MIT", + "dependencies": { + "isobject": "^2.0.0", + "lazy-cache": "^1.0.3", + "map-config": "^0.5.0", + "resolve-dir": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-config-process": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/base-config-process/-/base-config-process-0.1.9.tgz", + "integrity": "sha512-tShRbXNMml5V/qgcZ3ntWsaS6ovw1t7e4yvtYY9XzhJtNpuC8WudMwtSbG7lXAuEZ04jY1istJzKR3NzAoxo3A==", + "license": "MIT", + "dependencies": { + "base-config": "^0.5.2", + "base-config-schema": "^0.1.18", + "base-cwd": "^0.3.4", + "base-option": "^0.8.4", + "debug": "^2.2.0", + "export-files": "^2.1.1", + "is-valid-app": "^0.2.0", + "lazy-cache": "^2.0.1", + "micromatch": "^2.3.10", + "mixin-deep": "^1.1.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-config-process/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-config-process/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-config-schema": { + "version": "0.1.24", + "resolved": "https://registry.npmjs.org/base-config-schema/-/base-config-schema-0.1.24.tgz", + "integrity": "sha512-3CYvd28nsiNVp1rkAfVqfYo7VzDPdIxwv0Ab6iGY0K7JdGRsT6U7Jqq6BBMGNd9XLazLhVBPNGUzaDg5oUtV5w==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.3", + "array-unique": "^0.3.2", + "base-pkg": "^0.2.4", + "camel-case": "^3.0.0", + "debug": "^2.6.6", + "define-property": "^1.0.0", + "export-files": "^2.1.1", + "extend-shallow": "^2.0.1", + "has-glob": "^1.0.0", + "has-value": "^0.3.1", + "inflection": "^1.12.0", + "kind-of": "^3.2.0", + "lazy-cache": "^2.0.2", + "load-templates": "^1.0.2", + "map-schema": "^0.2.4", + "matched": "^0.4.4", + "mixin-deep": "^1.2.0", + "resolve": "^1.3.3" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/base-config-schema/node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-config-schema/node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/base-config-schema/node_modules/clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", + "license": "MIT" + }, + "node_modules/base-config-schema/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-config-schema/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-config-schema/node_modules/file-contents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/file-contents/-/file-contents-1.0.1.tgz", + "integrity": "sha512-yR9NGsF6Ua0vUjag441JRYB+WflAoBCF3+ReeKocYzpfAjN1U4TvQEjIKXOqwIxFl9Bflg8xf/Fi2qrNBoFUOQ==", + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "is-buffer": "^1.1.4", + "kind-of": "^3.1.0", + "lazy-cache": "^2.0.2", + "strip-bom-buffer": "^0.1.1", + "strip-bom-string": "^0.1.2", + "through2": "^2.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-config-schema/node_modules/file-contents/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-config-schema/node_modules/file-contents/node_modules/is-descriptor": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.8.tgz", + "integrity": "sha512-SceYGWXvdqlWa/OnQ5FQuV+NxvNmMRhMw/w9AHkH71hTzveND4BTYgvp16g+oITK47qbOl/3D0bl0iygehWAWQ==", + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/base-config-schema/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "license": "ISC", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/base-config-schema/node_modules/has-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", + "integrity": "sha512-D+8A457fBShSEI3tFCj65PAbT++5sKiFtdCdOam0gnfBgw9D277OERk+HM9qYJXmdVLZ/znez10SqHN0BBQ50g==", + "license": "MIT", + "dependencies": { + "is-glob": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-config-schema/node_modules/is-descriptor": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.4.tgz", + "integrity": "sha512-bv5z95W0dDtLfKwDfkTNxaRxmISBD3eQBKJeVxv2AQ7MjuUnDNG7cIQqvFtMOUYhsILWHhMayWdoGqNqYYYjww==", + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.2", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/base-config-schema/node_modules/is-extglob": { + "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" + } + }, + "node_modules/base-config-schema/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-config-schema/node_modules/load-templates": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/load-templates/-/load-templates-1.0.2.tgz", + "integrity": "sha512-UUfhwRTBH9V4Uf0gGX7FqU5RUdi9IvJWrY1AaPRCRkV/LE/cbudUtY0+YXZs1fNp1J4PFlwOMyrtfzSOCtBbJA==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "file-contents": "^1.0.0", + "glob-parent": "^3.1.0", + "is-glob": "^3.1.0", + "kind-of": "^3.1.0", + "lazy-cache": "^2.0.2", + "matched": "^0.4.4", + "vinyl": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-config-schema/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-config-schema/node_modules/replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/base-config-schema/node_modules/strip-bom-string": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-0.1.2.tgz", + "integrity": "sha512-3DgNqQFTfOwWgxn3cXsa6h/WRgFa7dVb6/7YqwfJlBpLSSQbiU1VhaBNRKmtLI59CHjc9awLp9yGJREu7AnaMQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-config-schema/node_modules/vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "license": "MIT", + "dependencies": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/base-config/node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-cwd": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/base-cwd/-/base-cwd-0.3.4.tgz", + "integrity": "sha512-/kxZE1Hg9p4tvy4DHrWyS/DelZeovOWvBZ9CZKTgeieIxMuZ47FaLIkEkcjOVFcu3nIY4TXdlxhMZFi8D2Rs9g==", + "license": "MIT", + "dependencies": { + "empty-dir": "^0.2.0", + "find-pkg": "^0.1.2", + "is-valid-app": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-data": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/base-data/-/base-data-0.6.2.tgz", + "integrity": "sha512-wH2ViG6CUO2AaeHSEt6fJTyQAk5gl0oY456DoSC5h8mnHrWUbvdctMCuF53CXgBmi0oalZQppKNH0iamG5+uqw==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.1.0", + "cache-base": "^1.0.0", + "extend-shallow": "^2.0.1", + "get-value": "^2.0.6", + "has-glob": "^1.0.0", + "has-value": "^1.0.0", + "is-registered": "^0.1.5", + "is-valid-app": "^0.3.0", + "kind-of": "^5.0.0", + "lazy-cache": "^2.0.2", + "merge-value": "^1.0.0", + "mixin-deep": "^1.2.0", + "read-file": "^0.2.0", + "resolve-glob": "^1.0.0", + "set-value": "^2.0.0", + "union-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-data/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-data/node_modules/has-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", + "integrity": "sha512-D+8A457fBShSEI3tFCj65PAbT++5sKiFtdCdOam0gnfBgw9D277OERk+HM9qYJXmdVLZ/znez10SqHN0BBQ50g==", + "license": "MIT", + "dependencies": { + "is-glob": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-data/node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "license": "MIT", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-data/node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "license": "MIT", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-data/node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-data/node_modules/is-extglob": { + "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" + } + }, + "node_modules/base-data/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-data/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-data/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-data/node_modules/is-valid-app": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.3.0.tgz", + "integrity": "sha512-6+PklNvJraE3XpoqWurkrPIqFIeJin5kwX+sJjcwhPcFY7TM0wjbJlPIBCvHtGawIfb4WtS1t22s7TdgQ0S+Xg==", + "license": "MIT", + "dependencies": { + "debug": "^2.6.3", + "is-registered": "^0.1.5", + "is-valid-instance": "^0.3.0", + "lazy-cache": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-data/node_modules/is-valid-instance": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-valid-instance/-/is-valid-instance-0.3.0.tgz", + "integrity": "sha512-XEd0ddnORLW/Qf1+VMh7PnYb6XhWs0zK0C/Kh8muwj26IjdlCTlo7QQIjt8+efkE8RqtyzlqYNZE5SfN8ys9hQ==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-data/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-data/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-data/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-engines": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/base-engines/-/base-engines-0.2.1.tgz", + "integrity": "sha512-s/A07Vbh6irEMNG+HpccmaGw8SUMXPBetJuYPpq7Rf1WCjtCU1L+FKyeKyRahONGNYBSIHEV0d3cqXYw35EjBw==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "define-property": "^0.2.5", + "engine-cache": "^0.19.0", + "is-valid-app": "^0.1.2", + "lazy-cache": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-engines/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-engines/node_modules/is-valid-app": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.1.2.tgz", + "integrity": "sha512-UKIjincKieawS6pPJjpH76qUmblicLSi0pqGCvFdscOM3pWgnrRBtB/iWIRYXKNCW8qjxb+6k12wFd82Kq94CA==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "is-registered": "^0.1.5", + "is-valid-instance": "^0.1.0", + "lazy-cache": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-engines/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-env": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/base-env/-/base-env-0.3.1.tgz", + "integrity": "sha512-/HxC8QV1m/bWqvjcu4WZl4Um1HRpTAjuY31uiFUEukXsXge4WIvNvGKG/gCs2PrpBFPCybowA406V/ivdPknpQ==", + "license": "MIT", + "dependencies": { + "base-namespace": "^0.2.0", + "contains-path": "^0.1.0", + "debug": "^2.2.0", + "extend-shallow": "^2.0.1", + "fs-exists-sync": "^0.1.0", + "global-modules": "^0.2.2", + "is-absolute": "^0.2.5", + "is-valid-app": "^0.1.0", + "is-valid-instance": "^0.1.0", + "kind-of": "^3.0.3", + "os-homedir": "^1.0.1", + "resolve-file": "^0.3.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-env/node_modules/cwd": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/cwd/-/cwd-0.10.0.tgz", + "integrity": "sha512-YGZxdTTL9lmLkCUTpg4j0zQ7IhRB5ZmqNBbGCl3Tg6MP/d5/6sY7L5mmTjzbc6JKgVZYiqTQTNhPFsbXNGlRaA==", + "license": "MIT", + "dependencies": { + "find-pkg": "^0.1.2", + "fs-exists-sync": "^0.1.0" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/base-env/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-env/node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "license": "MIT", + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-env/node_modules/is-valid-app": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.1.2.tgz", + "integrity": "sha512-UKIjincKieawS6pPJjpH76qUmblicLSi0pqGCvFdscOM3pWgnrRBtB/iWIRYXKNCW8qjxb+6k12wFd82Kq94CA==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "is-registered": "^0.1.5", + "is-valid-instance": "^0.1.0", + "lazy-cache": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-env/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-env/node_modules/resolve-file": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/resolve-file/-/resolve-file-0.3.0.tgz", + "integrity": "sha512-9RXicAgDvLD272hZ3HwJv9MJUGxCBRRwwSBRdOGWgcO03MtC9UTGC6XG1VbS4T5MvDrb+tVZx2RhZ90uk3uczg==", + "license": "MIT", + "dependencies": { + "cwd": "^0.10.0", + "expand-tilde": "^2.0.2", + "extend-shallow": "^2.0.1", + "fs-exists-sync": "^0.1.0", + "homedir-polyfill": "^1.0.1", + "lazy-cache": "^2.0.2", + "resolve": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-generators": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/base-generators/-/base-generators-0.4.6.tgz", + "integrity": "sha512-0k8QAoqYhOwIHQANQxwNOhtlQiuoMqv+rFu2szVIvLUNhZ8B7BOXWFRE5UXMAexRxz7H8rZIwLmeqxlYpOXJGw==", + "license": "MIT", + "dependencies": { + "async-each-series": "^1.1.0", + "base-compose": "^0.2.1", + "base-cwd": "^0.3.1", + "base-data": "^0.6.0", + "base-env": "^0.3.0", + "base-option": "^0.8.4", + "base-pkg": "^0.2.4", + "base-plugins": "^0.4.13", + "base-task": "^0.6.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "global-modules": "^0.2.2", + "is-valid-app": "^0.2.0", + "is-valid-instance": "^0.2.0", + "kind-of": "^3.0.3", + "lazy-cache": "^2.0.1", + "mixin-deep": "^1.1.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-generators/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-generators/node_modules/is-valid-instance": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-valid-instance/-/is-valid-instance-0.2.0.tgz", + "integrity": "sha512-dNT7bamkigo07gvbnoBRABSNX1ayAhkcw6/3fYhVDhiPXiqnCouD4JMmrozyOx37UUlC+Se1j/jCfLo1fNs0Ng==", + "license": "MIT", + "dependencies": { + "isobject": "^2.1.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-generators/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-helpers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/base-helpers/-/base-helpers-0.1.1.tgz", + "integrity": "sha512-aUdOoz47aMdM2OAkN71P3m8wjFB+pZDVfvLebDoNAsD0zhKUc68QR30q9iK6vW6S302yNNVW8bZxUF6FwFLnQw==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "define-property": "^0.2.5", + "is-valid-app": "^0.1.0", + "lazy-cache": "^2.0.1", + "load-helpers": "^0.2.11" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-helpers/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-helpers/node_modules/is-valid-app": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.1.2.tgz", + "integrity": "sha512-UKIjincKieawS6pPJjpH76qUmblicLSi0pqGCvFdscOM3pWgnrRBtB/iWIRYXKNCW8qjxb+6k12wFd82Kq94CA==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "is-registered": "^0.1.5", + "is-valid-instance": "^0.1.0", + "lazy-cache": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-helpers/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-namespace": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/base-namespace/-/base-namespace-0.2.0.tgz", + "integrity": "sha512-jZYAnj1wkwyi6HkqATtO86D8L9jbDdqVthISLG27LcXCFkc5EV+BwS/cfaPBkWoMGb3NsVMau+PLfFle58Xi2g==", + "license": "MIT", + "dependencies": { + "is-valid-app": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-namespace/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-namespace/node_modules/is-valid-app": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.1.2.tgz", + "integrity": "sha512-UKIjincKieawS6pPJjpH76qUmblicLSi0pqGCvFdscOM3pWgnrRBtB/iWIRYXKNCW8qjxb+6k12wFd82Kq94CA==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "is-registered": "^0.1.5", + "is-valid-instance": "^0.1.0", + "lazy-cache": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-namespace/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-option": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/base-option/-/base-option-0.8.4.tgz", + "integrity": "sha512-CS9V8trhwEccFFjmveBHWx4Wr4rwaohzMhwZx1DSUHdGHV9Nme3jbxJQ0U8JsrLFJvGtiav35NiHLeNd8n74XA==", + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "get-value": "^2.0.6", + "is-valid-app": "^0.2.0", + "isobject": "^2.1.0", + "lazy-cache": "^2.0.1", + "mixin-deep": "^1.1.3", + "option-cache": "^3.4.0", + "set-value": "^0.3.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-option/node_modules/set-value": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.3.3.tgz", + "integrity": "sha512-aJPTd11HzK47w8xJMpyY4tBmFC6EidC8EG2fENxCJvPwLYzXLnNaesgo796y1fhSISSYAuah4Het+wDoPXK2tg==", + "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "isobject": "^2.0.0", + "to-object-path": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-option/node_modules/to-object-path": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.2.0.tgz", + "integrity": "sha512-6oMu4CTicplxUMOXBoS1W9YNjIclUzmWpWf02v+JnYMEGVX24rTCsYMHay85WA7Wq+9wZa2iJ+HAAX0yGOcxCQ==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "is-arguments": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-pkg": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/base-pkg/-/base-pkg-0.2.5.tgz", + "integrity": "sha512-/POxajlgBhVsknwLXnqnbp//bAMh7SkDgHF+z/uoYnFqk46e05c3MxSEmn5vFCB8g4rHHKxAPLKrU/4Yb3vUdA==", + "license": "MIT", + "dependencies": { + "cache-base": "^1.0.0", + "debug": "^2.6.8", + "define-property": "^1.0.0", + "expand-pkg": "^0.1.8", + "extend-shallow": "^2.0.1", + "is-valid-app": "^0.3.0", + "log-utils": "^0.2.1", + "pkg-store": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-pkg/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-pkg/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-pkg/node_modules/is-descriptor": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.4.tgz", + "integrity": "sha512-bv5z95W0dDtLfKwDfkTNxaRxmISBD3eQBKJeVxv2AQ7MjuUnDNG7cIQqvFtMOUYhsILWHhMayWdoGqNqYYYjww==", + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.2", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/base-pkg/node_modules/is-valid-app": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.3.0.tgz", + "integrity": "sha512-6+PklNvJraE3XpoqWurkrPIqFIeJin5kwX+sJjcwhPcFY7TM0wjbJlPIBCvHtGawIfb4WtS1t22s7TdgQ0S+Xg==", + "license": "MIT", + "dependencies": { + "debug": "^2.6.3", + "is-registered": "^0.1.5", + "is-valid-instance": "^0.3.0", + "lazy-cache": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-pkg/node_modules/is-valid-instance": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-valid-instance/-/is-valid-instance-0.3.0.tgz", + "integrity": "sha512-XEd0ddnORLW/Qf1+VMh7PnYb6XhWs0zK0C/Kh8muwj26IjdlCTlo7QQIjt8+efkE8RqtyzlqYNZE5SfN8ys9hQ==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-pkg/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-pkg/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-plugins": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/base-plugins/-/base-plugins-0.4.13.tgz", + "integrity": "sha512-w77IDOnkxERPZ7x27A8MmSFcwEfTfrcZ43zK5eOt42itA8FZT9OFhZm1XgOtTEORKrCmW8yVT6DWr/ut7wvgiQ==", + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "is-registered": "^0.1.5", + "isobject": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-questions": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/base-questions/-/base-questions-0.7.4.tgz", + "integrity": "sha512-uHRp5ZM2MFXUhDOPK09lroJdDe3lrXTHtg2x7pC1x4RdimVZcsX+hvQuxNqyAUN62EHfFuaK+FIFjMiA4AoiQg==", + "license": "MIT", + "dependencies": { + "base-store": "^0.4.4", + "clone-deep": "^0.2.4", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "is-valid-app": "^0.2.0", + "isobject": "^2.1.0", + "lazy-cache": "^2.0.1", + "mixin-deep": "^1.1.3", + "question-store": "^0.11.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-questions/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-questions/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-routes": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/base-routes/-/base-routes-0.2.2.tgz", + "integrity": "sha512-z7jtXacfUbjAKUGj5jmJP8GrhZG+UqcwnfkKjLJtUa1w1bWrq5JmsZ1SFRfomXWbLAlEcE87dHvelvTkelQBIg==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "en-route": "^0.7.5", + "is-valid-app": "^0.2.0", + "lazy-cache": "^2.0.1", + "template-error": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-routes/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-routes/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-runtimes": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/base-runtimes/-/base-runtimes-0.2.0.tgz", + "integrity": "sha512-J98SbWB4Rpcva8w8kWtTts+Qc/X/imcmFoy9nt2fKemPTmVgvrt8DyDK5KFUDyQHt+hahYa69pJTGFfUma7V8A==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-valid-app": "^0.2.0", + "lazy-cache": "^2.0.1", + "log-utils": "^0.1.4", + "micromatch": "^2.3.10", + "time-diff": "^0.3.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-runtimes/node_modules/ansi-colors": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-0.1.0.tgz", + "integrity": "sha512-nUNbMZLDr1YQaPdMC2lREJXKttoaHwICajt9x40Js/POX7gNv7OK/VbC9ciJaIFshg9Xol+1GclqfY14UW+0ZA==", + "license": "MIT", + "dependencies": { + "ansi-bgblack": "^0.1.1", + "ansi-bgblue": "^0.1.1", + "ansi-bgcyan": "^0.1.1", + "ansi-bggreen": "^0.1.1", + "ansi-bgmagenta": "^0.1.1", + "ansi-bgred": "^0.1.1", + "ansi-bgwhite": "^0.1.1", + "ansi-bgyellow": "^0.1.1", + "ansi-black": "^0.1.1", + "ansi-blue": "^0.1.1", + "ansi-bold": "^0.1.1", + "ansi-cyan": "^0.1.1", + "ansi-dim": "^0.1.1", + "ansi-gray": "^0.1.1", + "ansi-green": "^0.1.1", + "ansi-grey": "^0.1.1", + "ansi-hidden": "^0.1.1", + "ansi-inverse": "^0.1.1", + "ansi-italic": "^0.1.1", + "ansi-magenta": "^0.1.1", + "ansi-red": "^0.1.1", + "ansi-reset": "^0.1.1", + "ansi-strikethrough": "^0.1.1", + "ansi-underline": "^0.1.1", + "ansi-white": "^0.1.1", + "ansi-yellow": "^0.1.1", + "lazy-cache": "^0.2.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-runtimes/node_modules/ansi-colors/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-runtimes/node_modules/log-utils": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/log-utils/-/log-utils-0.1.5.tgz", + "integrity": "sha512-5jLIj9RWWYxQbBhHDvNZTZE3J/oSTbw/fuPmsXJg8/vbY/4XiJ4YAiEPrwo3dLbcB/n9k1qTznOVr6IigiaF7A==", + "license": "MIT", + "dependencies": { + "ansi-colors": "^0.1.0", + "error-symbol": "^0.1.0", + "info-symbol": "^0.1.0", + "log-ok": "^0.1.1", + "success-symbol": "^0.1.0", + "time-stamp": "^1.0.1", + "warning-symbol": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-store": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/base-store/-/base-store-0.4.4.tgz", + "integrity": "sha512-fb5L2iNR9pCl85jeg88TCJYlcKg8xhmdH1Cjp1MI2RZNnMBjdIaQOuGy9Q4VjSD/GNGBWgQ2H8pQK61Xsx29OA==", + "license": "MIT", + "dependencies": { + "data-store": "^0.16.0", + "debug": "^2.2.0", + "extend-shallow": "^2.0.1", + "is-registered": "^0.1.4", + "is-valid-instance": "^0.1.0", + "lazy-cache": "^2.0.1", + "project-name": "^0.2.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-store/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-store/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base-task": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/base-task/-/base-task-0.6.2.tgz", + "integrity": "sha512-dxCXKPLFRrl02kJ+Lu6Y0Y2/XeaVf3GbGXMoZKuHN9OvFjz+QXRwpTJ0PciQPAvktUgK46Mc9Kwakrcj8fSTog==", + "license": "MIT", + "dependencies": { + "composer": "^0.13.0", + "is-valid-app": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-task/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/base-task/node_modules/is-valid-app": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.1.2.tgz", + "integrity": "sha512-UKIjincKieawS6pPJjpH76qUmblicLSi0pqGCvFdscOM3pWgnrRBtB/iWIRYXKNCW8qjxb+6k12wFd82Kq94CA==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "is-registered": "^0.1.5", + "is-valid-instance": "^0.1.0", + "lazy-cache": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-task/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.4.tgz", + "integrity": "sha512-bv5z95W0dDtLfKwDfkTNxaRxmISBD3eQBKJeVxv2AQ7MjuUnDNG7cIQqvFtMOUYhsILWHhMayWdoGqNqYYYjww==", + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.2", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/base/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz", + "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^2.0.0", + "debug": "^4.4.3", + "http-errors": "^2.0.1", + "iconv-lite": "^0.7.2", + "on-finished": "^2.4.1", + "qs": "^6.15.2", + "raw-body": "^3.0.2", + "type-is": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/body-parser/node_modules/content-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", + "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==", + "license": "MIT", + "dependencies": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "license": "MIT", + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base/node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "license": "MIT", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base/node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "license": "MIT", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base/node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/classcat": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.5.tgz", + "integrity": "sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==", + "license": "MIT" + }, + "node_modules/cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha512-25tABq090YNKkF6JH7lcwO0zFJTRke4Jcq9iX2nr/Sz0Cjjv4gckmwlW6Ty/aoyFd6z3ysR2hMGC2GFugmBo6A==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-width": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-1.1.1.tgz", + "integrity": "sha512-eMU2akIeEIkCxGXUNmDnJq1KzOIiPnJ+rKqRe6hcxE3vIOPvpMrBYOn/Bl7zNlYJj/zQxXquAnozHUCf9Whnsg==", + "license": "ISC" + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/clone-deep": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", + "integrity": "sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==", + "license": "MIT", + "dependencies": { + "for-own": "^0.1.3", + "is-plain-object": "^2.0.1", + "kind-of": "^3.0.2", + "lazy-cache": "^1.0.3", + "shallow-clone": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clone-deep/node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==", + "license": "MIT" + }, + "node_modules/cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "node_modules/co": { + "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" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/code-red": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", + "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15", + "@types/estree": "^1.0.1", + "acorn": "^8.10.0", + "estree-walker": "^3.0.3", + "periscopic": "^3.1.0" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "license": "MIT", + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/common-config": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/common-config/-/common-config-0.1.1.tgz", + "integrity": "sha512-mDp+nqoFbYsHKZfjg8OSb0CYfdPkuoGTMCVKy4ceYHR0EACTLV/qG8Q4cih2c/0IleQ7SISiqWqLMLXXZnJ2FA==", + "license": "MIT", + "dependencies": { + "composer": "^0.13.0", + "data-store": "^0.16.1", + "get-value": "^2.0.6", + "lazy-cache": "^2.0.1", + "log-utils": "^0.2.0", + "object.pick": "^1.1.2", + "omit-empty": "^0.4.1", + "question-cache": "^0.4.0", + "set-value": "^3.0.1", + "strip-color": "^0.1.0", + "tableize-object": "^0.1.0", + "text-table": "^0.2.0", + "yargs-parser": "^2.4.0" + }, + "bin": { + "common-config": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/common-config/node_modules/set-value": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-3.0.3.tgz", + "integrity": "sha512-Xsn/XSatoVOGBbp5hs3UylFDs5Bi9i+ArpVJKdHPniZHoEgRniXTqHWrWrGQ0PbEClVT6WtfnBwR8CAHC9sveg==", + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/composer": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/composer/-/composer-0.13.0.tgz", + "integrity": "sha512-8bW8vzd0YdwjBTbbHmUV3fb1jGFlczUEwti3dbdogI+r/igv2yyLqZFh9IyQv4+gK3k1kdNGVrf6Af5BY8qB3Q==", + "license": "MIT", + "dependencies": { + "array-unique": "^0.2.1", + "bach": "^0.5.0", + "co": "^4.6.0", + "component-emitter": "^1.2.1", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "is-generator": "^1.0.3", + "is-glob": "^2.0.1", + "isobject": "^2.1.0", + "lazy-cache": "^2.0.1", + "micromatch": "^2.3.8", + "nanoseconds": "^0.1.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha512-OKZnPGeMQy2RPaUIBPFFd71iNf4791H12MCRuVQDnzGRwCYNYmTDy5pdafo2SLAcEMKzTOQnLWG4QdcjeJUMEg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "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" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-task": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/copy-task/-/copy-task-0.1.0.tgz", + "integrity": "sha512-Idcf7BdeyJY8kSQodguY8jevkP8CuB22S9Hr5blRqwEyO75yuZEJQbzJ755Q9vZREnCQ5sfOIRxjZWbUq2+K0g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cors": { + "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/cross-spawn": { + "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", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "license": "MIT", + "peer": true, + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/cwd": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/cwd/-/cwd-0.9.1.tgz", + "integrity": "sha512-4+0D+ojEasdLndYX4Cqff057I/Jp6ysXpwKkdLQLnZxV8f6IYZmZtTP5uqD91a/kWqejoc0sSqK4u8wpTKCh8A==", + "license": "MIT", + "dependencies": { + "find-pkg": "^0.1.0" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/data-store": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/data-store/-/data-store-0.16.1.tgz", + "integrity": "sha512-tGbl4oVi9UPysie6y6+fuCjUNhaR3KxnuIRV0OMUCwq/wvikmWHXQYALbW/IVQvmxBNbrxUwjG5BWsrjx5v55w==", + "license": "MIT", + "dependencies": { + "cache-base": "^0.8.4", + "clone-deep": "^0.2.4", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "graceful-fs": "^4.1.4", + "has-own-deep": "^0.1.4", + "lazy-cache": "^2.0.1", + "mkdirp": "^0.5.1", + "project-name": "^0.2.5", + "resolve-dir": "^0.1.0", + "rimraf": "^2.5.3", + "union-value": "^0.2.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/data-store/node_modules/cache-base": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-0.8.5.tgz", + "integrity": "sha512-19t0n7xdoVr5Q08+6sF85YZ9VuvbpVFq5JLm0gcsRmCvTO1Y3duTJGMaOQYf14Ras4o6dEnvoqvjdrUK1tNtgg==", + "license": "MIT", + "dependencies": { + "collection-visit": "^0.2.1", + "component-emitter": "^1.2.1", + "get-value": "^2.0.5", + "has-value": "^0.3.1", + "isobject": "^3.0.0", + "lazy-cache": "^2.0.1", + "set-value": "^0.4.2", + "to-object-path": "^0.3.0", + "union-value": "^0.2.3", + "unset-value": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/data-store/node_modules/collection-visit": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-0.2.3.tgz", + "integrity": "sha512-V88PJOCqJfsZS45YBELDgmhQkECokQAAr9XR4hT6eFkFsAPsCsk3EoDHSuBPYzygjquGM/0KF4vdwTiQO6lbdw==", + "license": "MIT", + "dependencies": { + "lazy-cache": "^2.0.1", + "map-visit": "^0.1.5", + "object-visit": "^0.3.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/data-store/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/data-store/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/data-store/node_modules/map-visit": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-0.1.5.tgz", + "integrity": "sha512-zdmJBFvvVR/H5wCfsCP7XxSLp+346yAZ30Wy2OsQLcH19OVGMWa3Ms9quO00lj9ybsySu3gKOINNgICb4Zqauw==", + "license": "MIT", + "dependencies": { + "lazy-cache": "^2.0.1", + "object-visit": "^0.3.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/data-store/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/data-store/node_modules/object-visit": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-0.3.4.tgz", + "integrity": "sha512-6QNyX7uTuwqxP7pmDBqgBDKdmZws1rXriUyXM5KG6+7J0aYRuuAGoc636IGdLzgOL77WUwL+EpoTJrEHwWsyOA==", + "license": "MIT", + "dependencies": { + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/data-store/node_modules/object-visit/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "license": "MIT", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/data-store/node_modules/set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha512-2Z0LRUUvYeF7gIFFep48ksPq0NR09e5oKoFXznaMGNcu+EZAfGnyL0K6xno2gCqX6dZYEZRjrcn04/gvZzcKhQ==", + "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/data-store/node_modules/union-value": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-0.2.4.tgz", + "integrity": "sha512-Tv3cqdyY8yjW9ZcJ9WP7JdHS34natzylD0oNRLlYbWOfUdC4EQ0sf3fubnqrK2IErtlmobFmuS1pWvv88VghpA==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/data-store/node_modules/unset-value": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-0.1.2.tgz", + "integrity": "sha512-yhv5I4TsldLdE3UcVQn0hD2T5sNCPv4+qm/CTUpRKIpwthYRIipsAPdsrNpOI79hPQa0rTTeW22Fq6JWRcTgNg==", + "license": "MIT", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/debug": { + "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" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-bind": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/deep-bind/-/deep-bind-0.3.0.tgz", + "integrity": "sha512-SwekOBPDnCT3qhOM78ARzBdPSbNMyQ63F8eZDahBzzVAoqousMhYh3HYIh2pLmhtGcVvO8/SU6B6kMsj0SXb1Q==", + "license": "MIT", + "dependencies": { + "mixin-deep": "^1.1.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", + "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "license": "MIT", + "dependencies": { + "kind-of": "^5.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-compare/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defaults-deep": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/defaults-deep/-/defaults-deep-0.2.4.tgz", + "integrity": "sha512-V6BtqzcMvn0EPOy7f+SfMhfmTawq+7UQdt9yZH0EBK89+IHo5f+Hse/qzTorAXOBrQpxpwb6cB/8OgtaMrT+Fg==", + "license": "MIT", + "dependencies": { + "for-own": "^0.1.3", + "is-extendable": "^0.1.1", + "lazy-cache": "^0.2.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defaults-deep/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delimiter-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/delimiter-regex/-/delimiter-regex-2.0.0.tgz", + "integrity": "sha512-EtGkq9TgEZlFACc/NvgwIidQ1wkEupWWbAIJTr9gi4TJUZOvHY8TdXd3i8/dan66BufB1/V6bI7rRW/zvGoVKw==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^1.1.2", + "isobject": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delimiter-regex/node_modules/extend-shallow": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", + "license": "MIT", + "dependencies": { + "kind-of": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delimiter-regex/node_modules/kind-of": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/depd": { + "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" + } + }, + "node_modules/dunder-proto": { + "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", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "license": "MIT" + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/empty-dir": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/empty-dir/-/empty-dir-0.2.1.tgz", + "integrity": "sha512-0f1naHGJh4K6iVG28nRN7SCdfzT18OlpGzHmXw3JGwREb8qmtibHdmRgqx08u4sQfDadezK7kpU3bcIZNSwoZw==", + "license": "MIT", + "dependencies": { + "fs-exists-sync": "^0.1.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/en-route": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/en-route/-/en-route-0.7.5.tgz", + "integrity": "sha512-WjnZ2HzvoztSL/NhKYmlN86tSP7VkOTN0Ck4FBJUsvTfLQOlULZak/1wcUArcdenvT9mNS3NzQ+41lqKf/gaGQ==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "debug": "^2.2.0", + "extend-shallow": "^2.0.1", + "kind-of": "^3.0.2", + "lazy-cache": "^1.0.3", + "path-to-regexp": "^1.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/en-route/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/en-route/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" + }, + "node_modules/en-route/node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/en-route/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/en-route/node_modules/path-to-regexp": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", + "license": "MIT", + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "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" + } + }, + "node_modules/engine": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/engine/-/engine-0.1.12.tgz", + "integrity": "sha512-1+oxmZV5nKFhoR3QkwIbyHKSVbMuNgU8+oxcx4Af1kpxuSjDD0nL3pKKJtY1mGjAPqSAwNeDEHzD94NR5LP5rg==", + "license": "MIT", + "dependencies": { + "assign-deep": "^0.4.3", + "collection-visit": "^0.2.0", + "get-value": "^1.2.1", + "kind-of": "^2.0.1", + "lazy-cache": "^0.2.3", + "object.omit": "^2.0.0", + "set-value": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine-base": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/engine-base/-/engine-base-0.1.3.tgz", + "integrity": "sha512-CdNgUJcWgD9OsZ4vDFDmQB1/sN+UM0hEaDcbTZ2Ya/eMTkgCbdRLGvNuRE1UbN+AQJNo8Sm6iT327ULB7ynqnQ==", + "license": "MIT", + "dependencies": { + "component-emitter": "^1.2.1", + "delimiter-regex": "^2.0.0", + "engine": "^0.1.12", + "engine-utils": "^0.1.1", + "lazy-cache": "^2.0.2", + "mixin-deep": "^1.1.3", + "object.omit": "^2.0.1", + "object.pick": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine-cache": { + "version": "0.19.4", + "resolved": "https://registry.npmjs.org/engine-cache/-/engine-cache-0.19.4.tgz", + "integrity": "sha512-PNhE008O6X+7VggZSVe0+fZcafIAjVHWuU+iLIbeKXGGKzjb05Y8ht0l1O9sIusrULRsNq/FcYVPoqoNz7k4wg==", + "license": "MIT", + "dependencies": { + "async-helpers": "^0.3.9", + "extend-shallow": "^2.0.1", + "helper-cache": "^0.7.2", + "isobject": "^3.0.0", + "lazy-cache": "^2.0.2", + "mixin-deep": "^1.1.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine-cache/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine-utils": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/engine-utils/-/engine-utils-0.1.1.tgz", + "integrity": "sha512-5IdkZiV3qEGS3STfaRfeQsQ93Sokg9cEK7rdfjCGZFY6O/iTdq+d0obwqjkmv4fTSbTqEgYV+J3TeSzkq9GP5A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine/node_modules/collection-visit": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-0.2.3.tgz", + "integrity": "sha512-V88PJOCqJfsZS45YBELDgmhQkECokQAAr9XR4hT6eFkFsAPsCsk3EoDHSuBPYzygjquGM/0KF4vdwTiQO6lbdw==", + "license": "MIT", + "dependencies": { + "lazy-cache": "^2.0.1", + "map-visit": "^0.1.5", + "object-visit": "^0.3.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine/node_modules/collection-visit/node_modules/lazy-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", + "integrity": "sha512-7vp2Acd2+Kz4XkzxGxaB1FWOi8KjWIWsgdfD5MCb86DWvlLqhRPM+d6Pro3iNEL5VT9mstz5hKAlcd+QR6H3aA==", + "license": "MIT", + "dependencies": { + "set-getter": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine/node_modules/get-value": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-1.3.1.tgz", + "integrity": "sha512-TrDxHI5wqgpM5Guhoz7xmblwy7kzhDauSs4df3NP907yFmLtCkOau8YtGo087jZXKDwP22NG6fCo0UA4EFLjOw==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "is-extendable": "^0.1.1", + "lazy-cache": "^0.2.4", + "noncharacters": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine/node_modules/kind-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", + "integrity": "sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine/node_modules/map-visit": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-0.1.5.tgz", + "integrity": "sha512-zdmJBFvvVR/H5wCfsCP7XxSLp+346yAZ30Wy2OsQLcH19OVGMWa3Ms9quO00lj9ybsySu3gKOINNgICb4Zqauw==", + "license": "MIT", + "dependencies": { + "lazy-cache": "^2.0.1", + "object-visit": "^0.3.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine/node_modules/map-visit/node_modules/lazy-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", + "integrity": "sha512-7vp2Acd2+Kz4XkzxGxaB1FWOi8KjWIWsgdfD5MCb86DWvlLqhRPM+d6Pro3iNEL5VT9mstz5hKAlcd+QR6H3aA==", + "license": "MIT", + "dependencies": { + "set-getter": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine/node_modules/object-visit": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-0.3.4.tgz", + "integrity": "sha512-6QNyX7uTuwqxP7pmDBqgBDKdmZws1rXriUyXM5KG6+7J0aYRuuAGoc636IGdLzgOL77WUwL+EpoTJrEHwWsyOA==", + "license": "MIT", + "dependencies": { + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine/node_modules/set-value": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.2.0.tgz", + "integrity": "sha512-dJaeu7V8d1KwjePimg1oOpGp31cEw/uRcZlfL7wwemkr+A00ev/ZhikvSMiQ4hkf83d8JdY2AFoFmXsKzmHMSw==", + "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", + "dependencies": { + "isobject": "^1.0.0", + "noncharacters": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine/node_modules/set-value/node_modules/isobject": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-1.0.2.tgz", + "integrity": "sha512-WQQgFoML/sLgmhu9zTekYHZUJaPoa/fpVMQ8oxIuOvppzs70DxxyHZdAIjwcuuNDOVtNYsahhqtBbUvKwhRcGw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/error-symbol": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/error-symbol/-/error-symbol-0.1.0.tgz", + "integrity": "sha512-VyjaKxUmeDX/m2lxm/aknsJ1GWDWUO2Ze2Ad8S1Pb9dykAm9TjSKp5CjrNyltYqZ5W/PO6TInAmO2/BfwMyT1g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/es-define-property": { + "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" + } + }, + "node_modules/es-errors": { + "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-object-atoms": { + "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" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.0.tgz", + "integrity": "sha512-kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha512-MsG3prOVw1WtLXAZbM3KiYtooKR1LvxHh3VHsVtIy0uiUu8usxgB/94DP2HxtD/661lLdB6yzQ09lGJSQr6nkg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-args": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/expand-args/-/expand-args-0.4.3.tgz", + "integrity": "sha512-bAAnw/WnKZUkA9PI3tk4oWRpyZkRiHtFSJ+W8dkTX/oXGhM3rz9Vo5+qW9sJ34z1da8jPap35/igXmE7lEjdsQ==", + "license": "MIT", + "dependencies": { + "expand-object": "^0.4.2", + "kind-of": "^3.0.3", + "lazy-cache": "^2.0.1", + "minimist": "^1.2.0", + "mixin-deep": "^1.1.3", + "omit-empty": "^0.4.1", + "set-value": "^0.3.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-args/node_modules/set-value": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.3.3.tgz", + "integrity": "sha512-aJPTd11HzK47w8xJMpyY4tBmFC6EidC8EG2fENxCJvPwLYzXLnNaesgo796y1fhSISSYAuah4Het+wDoPXK2tg==", + "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "isobject": "^2.0.0", + "to-object-path": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-args/node_modules/to-object-path": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.2.0.tgz", + "integrity": "sha512-6oMu4CTicplxUMOXBoS1W9YNjIclUzmWpWf02v+JnYMEGVX24rTCsYMHay85WA7Wq+9wZa2iJ+HAAX0yGOcxCQ==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "is-arguments": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha512-hxx03P2dJxss6ceIeri9cmYOT4SRs3Zk3afZwWpOsRqLqprhTR8u++SlC+sFGsQr7WGFPdMF7Gjc1njDLDK6UA==", + "license": "MIT", + "dependencies": { + "is-posix-bracket": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-object": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/expand-object/-/expand-object-0.4.2.tgz", + "integrity": "sha512-rC0h+knI3YE2rT9v2m6HIowp1aLAVo19u02/wRzE+Dl5eyPowLRcWVyLQ3UaIjSLvjfsTiE0xGb0qqrap5ABKw==", + "license": "MIT", + "dependencies": { + "get-stdin": "^5.0.1", + "is-number": "^2.1.0", + "minimist": "^1.2.0", + "set-value": "^0.3.3" + }, + "bin": { + "expand-object": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-object/node_modules/set-value": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.3.3.tgz", + "integrity": "sha512-aJPTd11HzK47w8xJMpyY4tBmFC6EidC8EG2fENxCJvPwLYzXLnNaesgo796y1fhSISSYAuah4Het+wDoPXK2tg==", + "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "isobject": "^2.0.0", + "to-object-path": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-object/node_modules/to-object-path": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.2.0.tgz", + "integrity": "sha512-6oMu4CTicplxUMOXBoS1W9YNjIclUzmWpWf02v+JnYMEGVX24rTCsYMHay85WA7Wq+9wZa2iJ+HAAX0yGOcxCQ==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "is-arguments": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-pkg": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/expand-pkg/-/expand-pkg-0.1.9.tgz", + "integrity": "sha512-Qqtqzx/e8tODrDr0H8HtO7+nftN0wH9bsk3948KpKBZLrc86Cm3/8mRKJmDfNSDWWcuKsilMmFlKPhYx5gHYuA==", + "license": "MIT", + "dependencies": { + "component-emitter": "^1.2.1", + "debug": "^2.4.1", + "defaults-deep": "^0.2.4", + "export-files": "^2.1.1", + "get-value": "^2.0.6", + "kind-of": "^3.1.0", + "lazy-cache": "^2.0.2", + "load-pkg": "^3.0.1", + "mixin-deep": "^1.1.3", + "normalize-pkg": "^0.3.20", + "omit-empty": "^0.4.1", + "parse-author": "^1.0.0", + "parse-git-config": "^1.1.1", + "repo-utils": "^0.3.7" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/expand-pkg/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-pkg/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha512-AFASGfIlnIbkKPQwX1yHaDjFvh/1gyKJODme52V6IORh69uEYgZp0o9C+qsIGNVEiuuhQU0CSSl++Rlegg1qvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-tilde": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", + "integrity": "sha512-rtmc+cjLZqnu9dSYosX9EWmSJhTwpACgJQTfj4hgg2JjOD/6SIQalZrt4a3aQeh++oNxkazcaxrhPUj6+g5G/Q==", + "license": "MIT", + "dependencies": { + "os-homedir": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/export-files": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/export-files/-/export-files-2.1.1.tgz", + "integrity": "sha512-r2x1Zt0OKgdXRy0bXis3sOI8TNYmo5Fe71qXwsvpYaMvIlH5G0fWEf3AYiE2bONjePdSOojca7Jw+p9CQ6/6NQ==", + "license": "MIT", + "dependencies": { + "lazy-cache": "^1.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/export-files/node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.5.2.tgz", + "integrity": "sha512-5Kb34ipNX694DH48vN9irak1Qx30nb0PLYHXfJgw4YEjiC3ZEmZJhwOp+VfiCYwFzvFTdB9QkArYS5kXa2cx2A==", + "license": "MIT", + "dependencies": { + "ip-address": "^10.2.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha512-1FOj1LOwn42TMrruOHGt18HemVnbwAmAak7krWk+wa93KXxGbK+2jpezm+ytJYDaBX0/SPLZFHKM7m+tKobWGg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/falsey": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/falsey/-/falsey-0.3.2.tgz", + "integrity": "sha512-lxEuefF5MBIVDmE6XeqCdM4BWk1+vYmGZtkbKZ/VFcg6uBBw6fXNEbWmxCjDdQlFc9hy450nkiWwM3VAW6G1qg==", + "license": "MIT", + "dependencies": { + "kind-of": "^5.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/falsey/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", + "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fflate": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.6.10.tgz", + "integrity": "sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==", + "license": "MIT" + }, + "node_modules/figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-contents": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/file-contents/-/file-contents-0.2.4.tgz", + "integrity": "sha512-PEz7U6YlXr+dvWCtW63DUY1LUTHOVs1rv4s1/I/39dpvvidQqMSTY6JklazQS60MMoI/ztpo5kMlpdvGagvLbA==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.0", + "file-stat": "^0.1.0", + "graceful-fs": "^4.1.2", + "is-buffer": "^1.1.0", + "is-utf8": "^0.2.0", + "lazy-cache": "^0.2.3", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-contents/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-is-binary": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-is-binary/-/file-is-binary-1.0.0.tgz", + "integrity": "sha512-71I2LciuolZDBUCu4JzFBKxSvVurMD84G97uCYgt9PZ7ElhEomGqYHTKKU2NcDOxR1g2bwn+hRbkTFSrD80Pfw==", + "license": "MIT", + "dependencies": { + "is-binary-buffer": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-is-binary/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-name": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/file-name/-/file-name-0.1.0.tgz", + "integrity": "sha512-Q8SskhjF4eUk/xoQkmubwLkoHwOTv6Jj/WGtOVLKkZ0vvM+LipkSXugkn1F/+mjWXU32AXLZB3qaz0arUzgtRw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-stat": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/file-stat/-/file-stat-0.1.3.tgz", + "integrity": "sha512-f72m4132aOd5DVtREdDX8I0Dd7Zf/3PiUYYvn4BFCxfsLqj6r8joBZzrRlfvsNvxhADw+jpEa0AnWPII9H0Fbg==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "lazy-cache": "^0.2.3", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-stat/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha512-BTCqyBaWBTsauvnHiE8i562+EdJj+oUpkqWp2R1iCoR8f6oo8STRu3of7WJJ0TqWtxN50a5YFpzYK4Jj9esYfQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "license": "MIT", + "dependencies": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/find-file-up": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/find-file-up/-/find-file-up-0.1.3.tgz", + "integrity": "sha512-mBxmNbVyjg1LQIIpgO8hN+ybWBgDQK8qjht+EbrTCGmmPV/sc7RF1i9stPTD6bpvXZywBdrwRYxhSdJv867L6A==", + "license": "MIT", + "dependencies": { + "fs-exists-sync": "^0.1.0", + "resolve-dir": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/find-pkg": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/find-pkg/-/find-pkg-0.1.2.tgz", + "integrity": "sha512-0rnQWcFwZr7eO0513HahrWafsc3CTFioEB7DRiEYCUM/70QXSY8f3mCST17HXLcPvEhzH/Ty/Bxd72ZZsr/yvw==", + "license": "MIT", + "dependencies": { + "find-file-up": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/first-chunk-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", + "integrity": "sha512-ArRi5axuv66gEsyl3UuK80CzW7t56hem73YGNYxNWTGNKFJUadSb9Gu9SHijYEUi8ulQMf1bJomYNwSCPHhtTQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==", + "license": "MIT", + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fs-exists-sync": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", + "integrity": "sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "license": "ISC" + }, + "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" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "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" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha512-jZV7n6jGE3Gt7fgSTJoz91Ak5MuTLwMwkoYdjxuJ/AmjIsE1UC03y/IWkZCQGEvVNS9qoRNwy5BCqxImv0FVeA==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/get-view": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/get-view/-/get-view-0.1.3.tgz", + "integrity": "sha512-PZOmJnoY9wEDzAWW/0L6vRVfmPx/iKNiAxXdEI83dD8EPaqnI3GQraUTTSVgIVt5R1ja25/C3ARQAyVSkxN2Cg==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.0", + "match-file": "^0.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/get-view/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/git-config-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/git-config-path/-/git-config-path-1.0.1.tgz", + "integrity": "sha512-KcJ2dlrrP5DbBnYIZ2nlikALfRhKzNSX0stvv3ImJ+fvC4hXKoV+U+74SV0upg+jlQZbrtQzc0bu6/Zh+7aQbg==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "fs-exists-sync": "^0.1.0", + "homedir-polyfill": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/git-repo-name": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/git-repo-name/-/git-repo-name-0.6.0.tgz", + "integrity": "sha512-DF4XxB6H+Te79JA08/QF/IjIv+j+0gF990WlgAX3SXXU2irfqvBc/xxlAIh6eJWYaKz45MrrGVBFS0Qc4bBz5g==", + "license": "MIT", + "dependencies": { + "cwd": "^0.9.1", + "file-name": "^0.1.0", + "lazy-cache": "^1.0.4", + "remote-origin-url": "^0.5.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/git-repo-name/node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "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", + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA==", + "license": "MIT", + "dependencies": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==", + "license": "ISC", + "dependencies": { + "is-glob": "^2.0.0" + } + }, + "node_modules/glob-stream": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", + "integrity": "sha512-piN8XVAO2sNxwVLokL4PswgJvK/uQ6+awwXUVRTGF+rRfgCZpn4hOqxiRuTEbU/k3qgKl0DACYQ/0Sge54UMQg==", + "license": "MIT", + "dependencies": { + "extend": "^3.0.0", + "glob": "^5.0.3", + "glob-parent": "^3.0.0", + "micromatch": "^2.3.7", + "ordered-read-streams": "^0.3.0", + "through2": "^0.6.0", + "to-absolute-glob": "^0.1.1", + "unique-stream": "^2.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/glob-stream/node_modules/glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "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", + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-stream/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "license": "ISC", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-stream/node_modules/is-extglob": { + "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" + } + }, + "node_modules/glob-stream/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-stream/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" + }, + "node_modules/glob-stream/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/glob-stream/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "license": "MIT" + }, + "node_modules/glob-stream/node_modules/through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", + "license": "MIT", + "dependencies": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + }, + "node_modules/global-modules": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", + "integrity": "sha512-JeXuCbvYzYXcwE6acL9V2bAOeSIGl4dD+iwLY9iUx2VBJJ80R18HCn+JCwHM9Oegdfya3lEkGCdaRkSyc10hDA==", + "license": "MIT", + "dependencies": { + "global-prefix": "^0.1.4", + "is-windows": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", + "integrity": "sha512-gOPiyxcD9dJGCEArAhF4Hd0BAqvAe/JzERP7tYumE4yIkmIedPUVXcJFWbV3/p/ovIIvKjkrTk+f1UVkq7vvbw==", + "license": "MIT", + "dependencies": { + "homedir-polyfill": "^1.0.0", + "ini": "^1.3.4", + "is-windows": "^0.2.0", + "which": "^1.2.12" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/gopd": { + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "ISC" + }, + "node_modules/gray-matter": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-3.1.1.tgz", + "integrity": "sha512-nZ1qjLmayEv0/wt3sHig7I0s3/sJO0dkAaKYQ5YAOApUtYEOonXSFdWvL1khvnZMTvov4UufkqlFsilPnejEXA==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "js-yaml": "^3.10.0", + "kind-of": "^5.0.2", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gray-matter/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/group-array": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/group-array/-/group-array-0.3.4.tgz", + "integrity": "sha512-YAmNsgsi1uQ7Ai3T4FFkMoskqbLEUPRajAmrn8FclwZQQnV98NLrNWjQ3n2+i1pANxdO3n6wsNEkKq5XrYy0Ow==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "for-own": "^0.1.4", + "get-value": "^2.0.6", + "kind-of": "^3.1.0", + "split-string": "^1.0.1", + "union-value": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/group-array/node_modules/split-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-1.0.1.tgz", + "integrity": "sha512-ZuVODgxrpJnBD5LezfE484E2ArRF8HGgJqaiGBWvCbGS1iqynO45FQxBx7Ze4t45X9a994ejFD5kLhI6WtL1xA==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-choose-files": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/gulp-choose-files/-/gulp-choose-files-0.1.3.tgz", + "integrity": "sha512-SuAg0I2iCMEDcE3BJ46cfIo1Gn5N16403eie6G/iqrttDuKJUK1q3wh/2HBP/ZAJAqNXABI0uEavL2QxSMka1A==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "question-cache": "^0.5.1", + "through2": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-choose-files/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/gulp-choose-files/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/gulp-choose-files/node_modules/question-cache": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/question-cache/-/question-cache-0.5.1.tgz", + "integrity": "sha512-v9F1LnlSQIUEAGFtrfVX/76lH4u4zyV34t94o6EkguPTKKfbvV6SLH8h3pn7LXGZLmAgD1PbmVOuKMY8ZWnuPg==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "arr-union": "^3.1.0", + "async-each-series": "^1.1.0", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "get-value": "^2.0.6", + "has-value": "^0.3.1", + "inquirer2": "^0.1.1", + "is-answer": "^0.1.0", + "isobject": "^2.1.0", + "lazy-cache": "^2.0.1", + "mixin-deep": "^1.1.3", + "omit-empty": "^0.4.1", + "option-cache": "^3.4.0", + "os-homedir": "^1.0.1", + "project-name": "^0.2.5", + "set-value": "^0.3.3", + "to-choices": "^0.2.0", + "use": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-choose-files/node_modules/set-value": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.3.3.tgz", + "integrity": "sha512-aJPTd11HzK47w8xJMpyY4tBmFC6EidC8EG2fENxCJvPwLYzXLnNaesgo796y1fhSISSYAuah4Het+wDoPXK2tg==", + "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "isobject": "^2.0.0", + "to-object-path": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-choose-files/node_modules/to-object-path": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.2.0.tgz", + "integrity": "sha512-6oMu4CTicplxUMOXBoS1W9YNjIclUzmWpWf02v+JnYMEGVX24rTCsYMHay85WA7Wq+9wZa2iJ+HAAX0yGOcxCQ==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "is-arguments": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-choose-files/node_modules/use": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz", + "integrity": "sha512-RrhWfFWkNCz3djfSFZh7uSwu491QRhwNaHyAgB2sGl4kmmznb5ZUuuHpiWLVEsXOdpDakYK/x5+9o4lgg41UMw==", + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "lazy-cache": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-choose-files/node_modules/use/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-sourcemaps": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", + "integrity": "sha512-NjRy6+Qb5K1xbwOvPviD3uA4KSq2zsalPL+4vxPQPuL+kKzHjXJL10/kLaESic3LmBto8VIBHr3gIN3F9AjnhA==", + "license": "ISC", + "dependencies": { + "convert-source-map": "^1.1.1", + "graceful-fs": "^4.1.2", + "strip-bom": "^2.0.0", + "through2": "^2.0.0", + "vinyl": "^1.0.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-glob": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-0.1.1.tgz", + "integrity": "sha512-WMHzb7oCwDcMDngWy0b+viLjED8zvSi5d4/YdBetADHX/rLH+noJaRTytuyN6thTxxM7lK+FloogQHHdOOR+7g==", + "license": "MIT", + "dependencies": { + "is-glob": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-own-deep": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-own-deep/-/has-own-deep-0.1.4.tgz", + "integrity": "sha512-a9Dn8Q46DZySlvZqjCX5rkwS9AYIv3VQM3IoOhTXJVJ/cEmVDMLTrJClIihLS0a09PzhrEBbueji44ZQjLh19g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-symbols": { + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "license": "MIT", + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/helper-cache": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/helper-cache/-/helper-cache-0.7.2.tgz", + "integrity": "sha512-ictXA4Nsj9HZcY5Sf4PyWKOXRkQLCDLJLvekaKKrQ+IGLMe4Z+u2oM1QqRGjtWeQRfQCA3NJyIzZpfmw6GvwOQ==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "lazy-cache": "^0.2.3", + "lodash.bind": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/helper-cache/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "license": "MIT", + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hono": { + "version": "4.12.27", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.27.tgz", + "integrity": "sha512-1yrb/+w6HWQJrUCLkJ2IF5jNIPvvFkblV5RNOYl6bV+OA6p9GLcMpHFFGTosSvHvcAUibuUukRqhlYI4z32C7Q==", + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/http-errors": { + "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.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "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/inflection": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.4.tgz", + "integrity": "sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==", + "engines": [ + "node >= 0.4.0" + ], + "license": "MIT" + }, + "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.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/info-symbol": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/info-symbol/-/info-symbol-0.1.0.tgz", + "integrity": "sha512-qkc9wjLDQ+dYYZnY5uJXGNNHyZ0UOMDUnhvy0SEZGVVYmQ5s4i8cPAin2MbU6OxJgi8dfj/AnwqPx0CJE6+Lsw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/inquirer2": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inquirer2/-/inquirer2-0.1.1.tgz", + "integrity": "sha512-U7R6xvJmmcAx8Bq3Ok7+9L5kyBiUbCokZJMSibn+lDQasL9RtW9kYmnO5fezF0EcqE+pt4Hp3gc5XBGCqLkRDg==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^1.1.1", + "ansi-regex": "^2.0.0", + "arr-flatten": "^1.0.1", + "arr-pluck": "^0.1.0", + "array-unique": "^0.2.1", + "chalk": "^1.1.1", + "cli-cursor": "^1.0.2", + "cli-width": "^1.1.0", + "extend-shallow": "^2.0.1", + "figures": "^1.4.0", + "is-number": "^2.1.0", + "is-plain-object": "^2.0.1", + "lazy-cache": "^1.0.3", + "lodash.where": "^3.1.0", + "readline2": "^1.0.1", + "run-async": "^0.1.0", + "rx-lite": "^4.0.7", + "strip-color": "^0.1.0", + "through2": "^2.0.0" + } + }, + "node_modules/inquirer2/node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ip-address": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", + "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-absolute": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", + "integrity": "sha512-7Kr05z5LkcOpoMvxHN1PC11WbPabdNFmMYYo0eZvWu3BfVS0T03yoqYDczoCBx17xqk2x1XAZrcKiFVL88jxlQ==", + "license": "MIT", + "dependencies": { + "is-relative": "^0.2.1", + "is-windows": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.2.tgz", + "integrity": "sha512-AIbwAcazqP3R65dGvqk1V+a+vE5Fg1yu/ZKMOiBWSUIXXiwQkYmXQcVa2O0nh0tSDKDFKxG2mY7dB1Sr4hEP1g==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-answer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-answer/-/is-answer-0.1.1.tgz", + "integrity": "sha512-ifVYWfVjXzeNx32XK7twC8xMzVYfOqFGETEuwww/Oo8OZQe/tv+huAjP+05qP8omK+IfLmPWN0omZ7YvIvejMw==", + "license": "MIT", + "dependencies": { + "has-values": "^0.1.4", + "is-primitive": "^2.0.0", + "omit-empty": "^0.4.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-binary-buffer/-/is-binary-buffer-1.0.0.tgz", + "integrity": "sha512-fP08vt1YuBWSWdDCWkHUDo/Gb+YpnsiK41w2kP3iAkWhMKV4uuAAwPQm9GkA4r+OCDzpa+APIOaHZW6d83e5Ug==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "license": "MIT" + }, + "node_modules/is-core-module": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", + "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-descriptor": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.8.tgz", + "integrity": "sha512-SceYGWXvdqlWa/OnQ5FQuV+NxvNmMRhMw/w9AHkH71hTzveND4BTYgvp16g+oITK47qbOl/3D0bl0iygehWAWQ==", + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha512-0EygVC5qPvIyb+gSz7zdD5/AAoS6Qrx1e//6N4yv4oNm30kqvdmG66oZFWVlQHUWe5OjP08FuTw2IdT0EOTcYA==", + "license": "MIT", + "dependencies": { + "is-primitive": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-generator": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-generator/-/is-generator-1.0.3.tgz", + "integrity": "sha512-G56jBpbJeg7ds83HW1LuShNs8J73Fv3CPz/bmROHOHlnKkN8sWb9ujiagjmxxMUywftgq48HlBZELKKqFLk0oA==", + "license": "MIT" + }, + "node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==", + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha512-Yu68oeXJ7LeWNmZ3Zov/xg/oDBnBK2RNxwYY1ilNJX+tKKZqgPK+qOn/Gs9jEu66KDY9Netf5XLKNGzas/vPfQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha512-N3w1tFaRfk3UrPfqeRyD+GYDASU3W5VinKhlORy8EWVf/sIdDL9GAcew85XmktCfH+ngG7SRXEVDoO18WMdB/Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/is-reference": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", + "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/estree": "^1.0.6" + } + }, + "node_modules/is-registered": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/is-registered/-/is-registered-0.1.5.tgz", + "integrity": "sha512-dOOjAYNmKGtjoW229wn/SDmrO65oQcUvng9WUYF/AIZAQZG/l+puNUPt+/x7YCn4W9A33H6LItHgSETDmS0urg==", + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "isobject": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-relative": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", + "integrity": "sha512-9AMzjRmLqcue629b4ezEVSK6kJsYJlUIhMcygmYORUgwUNJiavHcC3HkaGx0XYpyVKQSOqFbMEZmW42cY87sYw==", + "license": "MIT", + "dependencies": { + "is-unc-path": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-unc-path": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", + "integrity": "sha512-HhLc5VDMH4pu3oMtIuunz/DFQUIoR561kMME3U3Afhj8b7vH085vkIkemrz1kLXCEIuoMAmO3yVmafWdSbGW8w==", + "license": "MIT", + "dependencies": { + "unc-path-regex": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "license": "MIT" + }, + "node_modules/is-valid-app": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-valid-app/-/is-valid-app-0.2.1.tgz", + "integrity": "sha512-2/qNSVFKyi5WiaIgv153Vt2ZM7T7HSlUu/m3HMnoyp6pk5NYhOUz0aU7Gx2DGYRnZ/8q+pMOwd93pCE8uWhvBg==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "is-registered": "^0.1.5", + "is-valid-instance": "^0.2.0", + "lazy-cache": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-valid-app/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/is-valid-app/node_modules/is-valid-instance": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-valid-instance/-/is-valid-instance-0.2.0.tgz", + "integrity": "sha512-dNT7bamkigo07gvbnoBRABSNX1ayAhkcw6/3fYhVDhiPXiqnCouD4JMmrozyOx37UUlC+Se1j/jCfLo1fNs0Ng==", + "license": "MIT", + "dependencies": { + "isobject": "^2.1.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-valid-app/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/is-valid-glob": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", + "integrity": "sha512-CvG8EtJZ8FyzVOGPzrDorzyN65W1Ld8BVnqshRCah6pFIsprGx3dKgFtjLn/Vw9kGqR4OlR84U7yhT9ZVTyWIQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-valid-instance": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-valid-instance/-/is-valid-instance-0.1.0.tgz", + "integrity": "sha512-js5DRu650+u3zcGfCe23npdFtPuBeLx3iR8q2vfCO4m1KqNz5R35fDQlLPm++gAzg5H+OJXDOG5LGyn8pzl/1Q==", + "license": "MIT", + "dependencies": { + "isobject": "^2.1.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-whitespace": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz", + "integrity": "sha512-RydPhl4S6JwAyj0JJjshWJEFG6hNye3pZFBRZaTUfZFwGHxzppNaNOVgQuS/E/SlhrApuMXrpnK1EEIXfdo3Dg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-windows": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", + "integrity": "sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "license": "MIT", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jose": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.3.tgz", + "integrity": "sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-yaml": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.0.tgz", + "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/json-schema-typed": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", + "license": "BSD-2-Clause" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "license": "MIT" + }, + "node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/layouts": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/layouts/-/layouts-0.11.0.tgz", + "integrity": "sha512-Zt65tua9otUMsfoQMAKmUSMGBwgkchSCc33ko/xBBSGnc/Q4+G8gJgouynZy7/iSnzpt3+myRRDQ9HQ5cctSog==", + "license": "MIT", + "dependencies": { + "delimiter-regex": "^1.3.1", + "falsey": "^0.3.0", + "get-view": "^0.1.1", + "lazy-cache": "^1.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/layouts/node_modules/delimiter-regex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/delimiter-regex/-/delimiter-regex-1.3.1.tgz", + "integrity": "sha512-NyEdbzFCa0imbFMxQH6X5AB/DxngubpAAiQEqaam+YYcT0gGiM1gFo410HwpiPOruHl8HfFM913tFLjA8kkvHg==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^1.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/layouts/node_modules/extend-shallow": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", + "license": "MIT", + "dependencies": { + "kind-of": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/layouts/node_modules/kind-of": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/layouts/node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lazy-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", + "integrity": "sha512-7vp2Acd2+Kz4XkzxGxaB1FWOi8KjWIWsgdfD5MCb86DWvlLqhRPM+d6Pro3iNEL5VT9mstz5hKAlcd+QR6H3aA==", + "license": "MIT", + "dependencies": { + "set-getter": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/load-helpers": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/load-helpers/-/load-helpers-0.2.11.tgz", + "integrity": "sha512-+iUnxQSddtpXoeRrza02jbJOUgCbJGG6GGeE4WTf6nV0Z0uR+/+/h2RMfDAl5SI4Cd/fu5xFPqo0ibP3v9y1ew==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-valid-glob": "^0.3.0", + "lazy-cache": "^2.0.1", + "matched": "^0.4.1", + "resolve-dir": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-pkg": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/load-pkg/-/load-pkg-3.0.1.tgz", + "integrity": "sha512-wW6PBOWKbPceeIamjHjoacmI0F7Q+JdHoYl1nYE3lGOQCmq+xAnfIp24dqhUSfsO6Y7YSlrmyi3JxvSiRnoivg==", + "license": "MIT", + "dependencies": { + "find-pkg": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-templates": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/load-templates/-/load-templates-0.11.4.tgz", + "integrity": "sha512-roLgv19smhcE2x9mBvuuUzj3u3jRL+lWr+7u6v0KSk2wtdX0v8KOEHYZGBUdMjY1YPIh9864YQdO0SqpxiA+6Q==", + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "glob-parent": "^2.0.0", + "has-glob": "^0.1.1", + "is-valid-glob": "^0.3.0", + "lazy-cache": "^2.0.1", + "matched": "^0.4.1", + "to-file": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "license": "MIT", + "peer": true + }, + "node_modules/lodash._arrayfilter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._arrayfilter/-/lodash._arrayfilter-3.0.0.tgz", + "integrity": "sha512-xi4jscMHMkWtF8vXNpmvAXTmes6gKMpXsWM8kKuJ5tfk/VhJujrAG2sVc/LBsUERkReV9blMG2GD4SjPHyqaTw==", + "license": "MIT" + }, + "node_modules/lodash._basecallback": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/lodash._basecallback/-/lodash._basecallback-3.3.1.tgz", + "integrity": "sha512-LQffghuO63ufDY33KKO1ezGKbcFZK3ngYV7JpxaUomoM5acf0YeXU3Pm8csVE0girVs50TXzfNibl69Co3ggJA==", + "license": "MIT", + "dependencies": { + "lodash._baseisequal": "^3.0.0", + "lodash._bindcallback": "^3.0.0", + "lodash.isarray": "^3.0.0", + "lodash.pairs": "^3.0.0" + } + }, + "node_modules/lodash._baseeach": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash._baseeach/-/lodash._baseeach-3.0.4.tgz", + "integrity": "sha512-IqUZ9MQo2UT1XPGuBntInqTOlc+oV+bCo0kMp+yuKGsfvRSNgUW0YjWVZUrG/gs+8z/Eyuc0jkJjOBESt9BXxg==", + "license": "MIT", + "dependencies": { + "lodash.keys": "^3.0.0" + } + }, + "node_modules/lodash._basefilter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._basefilter/-/lodash._basefilter-3.0.0.tgz", + "integrity": "sha512-EjWjqBE5KHmvrzgZ9tSvt7ggGmDF0pjPzaiUONQ97M4+YDYW8VMH3VnyKS/JHFoqDAYEIIx+3/Tg4C0zlC6qPA==", + "license": "MIT", + "dependencies": { + "lodash._baseeach": "^3.0.0" + } + }, + "node_modules/lodash._baseisequal": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/lodash._baseisequal/-/lodash._baseisequal-3.0.7.tgz", + "integrity": "sha512-U+3GsNEZj9ebI03ncLC2pLmYVjgtYZEwdkAPO7UGgtGvAz36JVFPAQUufpSaVL93Cz5arc6JGRKZRhaOhyVJYA==", + "license": "MIT", + "dependencies": { + "lodash.isarray": "^3.0.0", + "lodash.istypedarray": "^3.0.0", + "lodash.keys": "^3.0.0" + } + }, + "node_modules/lodash._baseismatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lodash._baseismatch/-/lodash._baseismatch-3.1.3.tgz", + "integrity": "sha512-lq0Z+O/HfAJ16frtiZnvi2sLQrFfcYxK2q5R+n10+cWbXQ/Mz6R52mLOX/8R3npLGIO7Rq7zNP7ENTCJB/GN+g==", + "license": "MIT", + "dependencies": { + "lodash._baseisequal": "^3.0.0" + } + }, + "node_modules/lodash._basematches": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._basematches/-/lodash._basematches-3.2.0.tgz", + "integrity": "sha512-E6aibw9mFnfTO8z4zu1Fc2Pgv102/c11RtunY0MBdnIRWy27CtwnTVBQjfXohtUoDH1BI+vxZ9+b2JJY13dt3A==", + "license": "MIT", + "dependencies": { + "lodash._baseismatch": "^3.0.0", + "lodash.pairs": "^3.0.0" + } + }, + "node_modules/lodash._bindcallback": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", + "integrity": "sha512-2wlI0JRAGX8WEf4Gm1p/mv/SZ+jLijpj0jyaE/AXeuQphzCgD8ZQW4oSpoN8JAopujOFGU3KMuq7qfHBWlGpjQ==", + "license": "MIT" + }, + "node_modules/lodash._createwrapper": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._createwrapper/-/lodash._createwrapper-3.2.0.tgz", + "integrity": "sha512-O8fi7P57KZQjtTJN3tbUAJsm6Coo35JVi4OiEU/WV0rrqaWemk+rRB/1ohiIiv1cIK3dIkVhMehaFOFyNZDYkQ==", + "license": "MIT", + "dependencies": { + "lodash._root": "^3.0.0" + } + }, + "node_modules/lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==", + "license": "MIT" + }, + "node_modules/lodash._replaceholders": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._replaceholders/-/lodash._replaceholders-3.0.0.tgz", + "integrity": "sha512-FbnZp+6+UaT8VzGNXUK8nIH7rC/P+c2te5R/rpjgwLY27OsEMqCyF6yOxqHMj9Qv3yelSVVuYzCjtrJzcKbAhg==", + "license": "MIT" + }, + "node_modules/lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==", + "license": "MIT" + }, + "node_modules/lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==", + "license": "MIT" + }, + "node_modules/lodash.bind": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-3.1.0.tgz", + "integrity": "sha512-GaXlyWuJbyuJ54vRypYLVq1NS4v7QIBVicEX4lmW8PE5XaltCuFzWLG4WuXKYQ7SKfzxkiEsadQyuVOxym7paQ==", + "license": "MIT", + "dependencies": { + "lodash._createwrapper": "^3.0.0", + "lodash._replaceholders": "^3.0.0", + "lodash.restparam": "^3.0.0" + } + }, + "node_modules/lodash.filter": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", + "integrity": "sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==", + "license": "MIT" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "license": "MIT" + }, + "node_modules/lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==", + "license": "MIT" + }, + "node_modules/lodash.initial": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.initial/-/lodash.initial-4.1.1.tgz", + "integrity": "sha512-/eZXy8y0IGQTuCKScq32mU+O/Qc160EfYPrAD7y4oXPAgWdQvyxxhTOIpl+tDfP86yT7jrMtUA8noSqYUdKWQg==", + "license": "MIT" + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", + "license": "MIT" + }, + "node_modules/lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==", + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT" + }, + "node_modules/lodash.istypedarray": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz", + "integrity": "sha512-lGWJ6N8AA3KSv+ZZxlTdn4f6A7kMfpJboeyvbFdE7IU9YAgweODqmOgdUHOA+c6lVWeVLysdaxciFXi+foVsWw==", + "license": "MIT" + }, + "node_modules/lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==", + "license": "MIT", + "dependencies": { + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + }, + "node_modules/lodash.last": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash.last/-/lodash.last-3.0.0.tgz", + "integrity": "sha512-14mq7rSkCxG4XMy9lF2FbIOqqgF0aH0NfPuQ3LPR3vIh0kHnUvIYP70dqa1Hf47zyXfQ8FzAg0MYOQeSuE1R7A==", + "license": "MIT" + }, + "node_modules/lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", + "license": "MIT" + }, + "node_modules/lodash.pairs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash.pairs/-/lodash.pairs-3.0.1.tgz", + "integrity": "sha512-lgXvpU43ZNQrZ/pK2cR97YzKeAno3e3HhcyvLKsofljeHKrQcZhT1vW7fg4X61c92tM+mjD/DypoLZYuAKNIkQ==", + "license": "MIT", + "dependencies": { + "lodash.keys": "^3.0.0" + } + }, + "node_modules/lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw==", + "license": "MIT" + }, + "node_modules/lodash.where": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.where/-/lodash.where-3.1.0.tgz", + "integrity": "sha512-9iH6No94IEtewjRRAykRVVW4Sw0DULKFp9H7x92MvbYUjg5EHj/+o58/Jx/kxAu7UWJLItwBH4FemHaQIGFIeg==", + "license": "MIT", + "dependencies": { + "lodash._arrayfilter": "^3.0.0", + "lodash._basecallback": "^3.0.0", + "lodash._basefilter": "^3.0.0", + "lodash._basematches": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + }, + "node_modules/log-ok": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/log-ok/-/log-ok-0.1.1.tgz", + "integrity": "sha512-cc8VrkS6C+9TFuYAwuHpshrcrGRAv7d0tUJ0GdM72ZBlKXtlgjUZF84O+OhQUdiVHoF7U/nVxwpjOdwUJ8d3Vg==", + "license": "MIT", + "dependencies": { + "ansi-green": "^0.1.1", + "success-symbol": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/log-utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/log-utils/-/log-utils-0.2.1.tgz", + "integrity": "sha512-udyegKoMz9eGfpKAX//Khy7sVAZ8b1F7oLDnepZv/1/y8xTvsyPgqQrM94eG8V0vcc2BieYI2kVW4+aa6m+8Qw==", + "license": "MIT", + "dependencies": { + "ansi-colors": "^0.2.0", + "error-symbol": "^0.1.0", + "info-symbol": "^0.1.0", + "log-ok": "^0.1.1", + "success-symbol": "^0.1.0", + "time-stamp": "^1.0.1", + "warning-symbol": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/make-iterator/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-config": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/map-config/-/map-config-0.5.0.tgz", + "integrity": "sha512-7pgduXtyOXZ/py4n6IM8G+7wanqbRDPK5Myp7P3jUUAFQwzGDeuMm0N8Dxrwaf3bySqJpne4NdglRUxdw7I7QQ==", + "license": "MIT", + "dependencies": { + "array-unique": "^0.2.1", + "async": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-schema": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/map-schema/-/map-schema-0.2.4.tgz", + "integrity": "sha512-1sgduImleUF+8NiS1wlqDJ8uhmJtFbLRjVW3PZP5IZJd1n+11eV91AnHI4jOYT2UCirriivNUgh6DG73V+G9QQ==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "collection-visit": "^0.2.3", + "component-emitter": "^1.2.1", + "debug": "^2.6.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "get-value": "^2.0.6", + "is-primitive": "^2.0.0", + "kind-of": "^3.1.0", + "lazy-cache": "^2.0.2", + "log-utils": "^0.2.1", + "longest": "^1.0.1", + "mixin-deep": "^1.1.3", + "object.omit": "^2.0.1", + "object.pick": "^1.2.0", + "omit-empty": "^0.4.1", + "pad-right": "^0.2.2", + "set-value": "^0.4.0", + "sort-object-arrays": "^0.1.1", + "union-value": "^0.2.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-schema/node_modules/collection-visit": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-0.2.3.tgz", + "integrity": "sha512-V88PJOCqJfsZS45YBELDgmhQkECokQAAr9XR4hT6eFkFsAPsCsk3EoDHSuBPYzygjquGM/0KF4vdwTiQO6lbdw==", + "license": "MIT", + "dependencies": { + "lazy-cache": "^2.0.1", + "map-visit": "^0.1.5", + "object-visit": "^0.3.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-schema/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/map-schema/node_modules/map-visit": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-0.1.5.tgz", + "integrity": "sha512-zdmJBFvvVR/H5wCfsCP7XxSLp+346yAZ30Wy2OsQLcH19OVGMWa3Ms9quO00lj9ybsySu3gKOINNgICb4Zqauw==", + "license": "MIT", + "dependencies": { + "lazy-cache": "^2.0.1", + "object-visit": "^0.3.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-schema/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/map-schema/node_modules/object-visit": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-0.3.4.tgz", + "integrity": "sha512-6QNyX7uTuwqxP7pmDBqgBDKdmZws1rXriUyXM5KG6+7J0aYRuuAGoc636IGdLzgOL77WUwL+EpoTJrEHwWsyOA==", + "license": "MIT", + "dependencies": { + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-schema/node_modules/set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha512-2Z0LRUUvYeF7gIFFep48ksPq0NR09e5oKoFXznaMGNcu+EZAfGnyL0K6xno2gCqX6dZYEZRjrcn04/gvZzcKhQ==", + "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-schema/node_modules/union-value": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-0.2.4.tgz", + "integrity": "sha512-Tv3cqdyY8yjW9ZcJ9WP7JdHS34natzylD0oNRLlYbWOfUdC4EQ0sf3fubnqrK2IErtlmobFmuS1pWvv88VghpA==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "license": "MIT", + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/match-file": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/match-file/-/match-file-0.2.2.tgz", + "integrity": "sha512-BDEZIcrBSnooL0zC72Yt3z1HhJiCq+2pMnHKVDeYN/cilCrz3KrpqKPm4ZOfWCoDolRl4QyKQpfRlQWF6PqnjQ==", + "license": "MIT", + "dependencies": { + "is-glob": "^3.1.0", + "isobject": "^3.0.0", + "micromatch": "^2.3.11" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/match-file/node_modules/is-extglob": { + "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" + } + }, + "node_modules/match-file/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/match-file/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matched": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/matched/-/matched-0.4.4.tgz", + "integrity": "sha512-zpasnbB5vQkvb0nfcKV0zEoGgMtV7atlWR1Vk3E8tEKh6EicMseKtVV+5vc+zsZwvDlcNMKlKK/CVOEeAalYRQ==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "async-array-reduce": "^0.2.0", + "extend-shallow": "^2.0.1", + "fs-exists-sync": "^0.1.0", + "glob": "^7.0.5", + "has-glob": "^0.1.1", + "is-valid-glob": "^0.3.0", + "lazy-cache": "^2.0.1", + "resolve-dir": "^0.1.0" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/math-intrinsics": { + "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" + } + }, + "node_modules/math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", + "license": "MIT" + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "license": "CC0-1.0", + "peer": true + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/merge-deep": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.3.tgz", + "integrity": "sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "clone-deep": "^0.2.4", + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-0.1.8.tgz", + "integrity": "sha512-ivGsLZth/AkvevAzPlRLSie8Q3GdyH/5xUYgn+ItAJYslT0NsKd2cxx0bAjmqoY5swX0NoWJjvkDkfpaVZx9lw==", + "license": "MIT", + "dependencies": { + "through2": "^0.6.1" + } + }, + "node_modules/merge-stream/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" + }, + "node_modules/merge-stream/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/merge-stream/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "license": "MIT" + }, + "node_modules/merge-stream/node_modules/through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", + "license": "MIT", + "dependencies": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + }, + "node_modules/merge-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/merge-value/-/merge-value-1.0.0.tgz", + "integrity": "sha512-fJMmvat4NeKz63Uv9iHWcPDjCWcCkoiRoajRTEO8hlhUC6rwaHg0QCF9hBOTjZmm4JuglPckPSTtcuJL5kp0TQ==", + "license": "MIT", + "dependencies": { + "get-value": "^2.0.6", + "is-extendable": "^1.0.0", + "mixin-deep": "^1.2.0", + "set-value": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge-value/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/meshoptimizer": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-0.18.1.tgz", + "integrity": "sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==", + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==", + "license": "MIT", + "dependencies": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/minimatch": { + "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" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "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" + } + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "license": "MIT", + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==", + "license": "MIT", + "dependencies": { + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-object/node_modules/for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/mute-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha512-EbrziT4s8cWPmzr47eYVW3wimS4HsvlnV5ri1xw1aR6JQo/OrJX5rkl32K/QQHdxeabJETtfeaROGhd8W7uBgg==", + "license": "ISC" + }, + "node_modules/nanoseconds": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/nanoseconds/-/nanoseconds-0.1.0.tgz", + "integrity": "sha512-6yOHqTvJNI9xGmVHWQ4ZTYhGpT0O4h9N+uk/UuRVPI8TskViB4s4QL3y+jY/Yxsdz7gvoBGPCHWRUibOyyYMwA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/next-tick": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-0.2.2.tgz", + "integrity": "sha512-f7h4svPtl+QidoBv4taKXUjJ70G2asaZ8G28nS0OkqaalX8dwwrtWtyxEDPK62AC00ur/+/E0pUwBwY5EPn15Q==", + "license": "MIT" + }, + "node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/noncharacters": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/noncharacters/-/noncharacters-1.1.0.tgz", + "integrity": "sha512-U69XzMNq7UQXR27xT17tkQsHPsLc+5W9yfXvYzVCwFxghVf+7VttxFnCKFMxM/cHD+/QIyU009263hxIIurj4g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "license": "MIT", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-pkg": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/normalize-pkg/-/normalize-pkg-0.3.20.tgz", + "integrity": "sha512-kM3ee93xDLnhu7R1j2BpJ+0zenlOB5ZE6H+vt2iCNXdGgcxedzweZn6UeW5p2iJEdkNYaXDoJm8uoSLiXF4eBw==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "array-unique": "^0.3.2", + "component-emitter": "^1.2.1", + "export-files": "^2.1.1", + "extend-shallow": "^2.0.1", + "fs-exists-sync": "^0.1.0", + "get-value": "^2.0.6", + "kind-of": "^3.0.4", + "lazy-cache": "^2.0.1", + "map-schema": "^0.2.3", + "minimist": "^1.2.0", + "mixin-deep": "^1.1.3", + "omit-empty": "^0.4.1", + "parse-git-config": "^1.0.2", + "repo-utils": "^0.3.6", + "semver": "^5.3.0", + "stringify-author": "^0.1.3", + "write-json": "^0.2.2" + }, + "bin": { + "normalize-pkg": "cli.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/normalize-pkg/node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/now-and-later": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-0.0.6.tgz", + "integrity": "sha512-qNIeNeH6v6KbriliCoOEmKhelv+66P2yCKEQta3MYcwN98S3NrVMgYEh9hWxJRPqPna3d7r0KElZQKQkAm0/jA==", + "license": "MIT", + "dependencies": { + "once": "^1.3.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "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" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "license": "MIT", + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-visit/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha512-UiAM5mhmIuKLsOvrL+B0U2d1hXHF3bFYWIuH1LMpuV2EJEHG1Ntz06PgLEHjm6VFd87NpH8rastvPoyv6UW2fA==", + "license": "MIT", + "dependencies": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/omit-empty": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/omit-empty/-/omit-empty-0.4.1.tgz", + "integrity": "sha512-NwnVOAaLwUEYmvvwLKKqvG6BkSG0pu0yKhKc6uYbWerkIXe6Wi2HQ1qoL+Wksj3DCauRuNKIjZUsLyjLj1/lrw==", + "license": "MIT", + "dependencies": { + "has-values": "^0.1.4", + "kind-of": "^3.0.3", + "reduce-object": "^0.1.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/on-finished": { + "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" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "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" + } + }, + "node_modules/onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha512-GZ+g4jayMqzCRMgB2sol7GiCLjKfS1PINkjmx8spcKce1LiVqcbQreXwqs2YAFXC6R03VIG28ZS31t8M866v6A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/option-cache": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/option-cache/-/option-cache-3.5.0.tgz", + "integrity": "sha512-Hr14410H8ajAHeUirXZtuE9drwy8e85l0CssHB/k7Y6nRkleKsGAzB/gwltUzsnIqr9Y+7ZQ+H16GYWAJH3PVg==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.3", + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^0.3.1", + "kind-of": "^3.2.2", + "lazy-cache": "^2.0.2", + "set-value": "^0.4.3", + "to-object-path": "^0.3.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/option-cache/node_modules/set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha512-2Z0LRUUvYeF7gIFFep48ksPq0NR09e5oKoFXznaMGNcu+EZAfGnyL0K6xno2gCqX6dZYEZRjrcn04/gvZzcKhQ==", + "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ordered-read-streams": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", + "integrity": "sha512-xQvd8qvx9U1iYY9aVqPpoF5V9uaWJKV6ZGljkh/jkiNX0DiQsjbWvRumbh10QTMDE8DheaOEU8xi0szbrgjzcw==", + "license": "MIT", + "dependencies": { + "is-stream": "^1.0.1", + "readable-stream": "^2.0.1" + } + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pad-right": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/pad-right/-/pad-right-0.2.2.tgz", + "integrity": "sha512-4cy8M95ioIGolCoMmm2cMntGR1lPLEbOMzOKu8bzjuJP6JpzEMQcDHmh7hHLYGgob+nKe1YHFMaG4V59HQa89g==", + "license": "MIT", + "dependencies": { + "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/paginationator": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/paginationator/-/paginationator-0.1.4.tgz", + "integrity": "sha512-o46P8Z9DK0blcmY7F95SnsBWZ6bow3HAcLKXlgIc/SZE8og21qrxL14nAi6Wy8E0Iw06wA0yS5icSayXw8BU8A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-author": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-author/-/parse-author-1.0.0.tgz", + "integrity": "sha512-OrNKo0jTFjJNCT0UKOPtnUctvGJvKdfB5ild+r3xwg/TgU5k2CCZW4fU9uJdKJ3njVFw5InP/2gd+n2vEXKgLQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-git-config": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-git-config/-/parse-git-config-1.1.1.tgz", + "integrity": "sha512-S3LGXJZVSy/hswvbSkfdbKBRVsnqKrVu6j8fcvdtJ4TxosSELyQDsJPuGPXuZ+EyuYuJd3O4uAF8gcISR0OFrQ==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "fs-exists-sync": "^0.1.0", + "git-config-path": "^1.0.1", + "ini": "^1.3.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-github-url": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-0.3.2.tgz", + "integrity": "sha512-vawkgsrRR8wm/nqFTVQIl9G/VkRJK2VVo0ECPni20WRV+NOmHXGilnWwC/EjVqRqQ4oSIKwRKP1jW8CjlxlJ2Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==", + "license": "MIT", + "dependencies": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parser-front-matter": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/parser-front-matter/-/parser-front-matter-1.6.4.tgz", + "integrity": "sha512-eqtUnI5+COkf1CQOYo8FmykN5Zs+5Yr60f/7GcPgQDZEEjdE/VZ4WMaMo9g37foof8h64t/TH2Uvk2Sq0fDy/g==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "file-is-binary": "^1.0.0", + "gray-matter": "^3.0.2", + "isobject": "^3.0.1", + "lazy-cache": "^2.0.2", + "mixin-deep": "^1.2.0", + "trim-leading-lines": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parser-front-matter/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parseurl": { + "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" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/periscopic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", + "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^3.0.0", + "is-reference": "^3.0.0" + } + }, + "node_modules/pkce-challenge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/pkg-store": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/pkg-store/-/pkg-store-0.2.2.tgz", + "integrity": "sha512-1JZVLbIRN6Dgsfk918EMZyL/T4NvJduSaT7n6ssHO3FV1FCrg6zjHJmuj3+Fb/Y5nBe3IBDoMYsY6Jf2IoRH0A==", + "license": "MIT", + "dependencies": { + "cache-base": "^0.8.2", + "kind-of": "^3.0.2", + "lazy-cache": "^1.0.3", + "union-value": "^0.2.3", + "write-json": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-store/node_modules/cache-base": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-0.8.5.tgz", + "integrity": "sha512-19t0n7xdoVr5Q08+6sF85YZ9VuvbpVFq5JLm0gcsRmCvTO1Y3duTJGMaOQYf14Ras4o6dEnvoqvjdrUK1tNtgg==", + "license": "MIT", + "dependencies": { + "collection-visit": "^0.2.1", + "component-emitter": "^1.2.1", + "get-value": "^2.0.5", + "has-value": "^0.3.1", + "isobject": "^3.0.0", + "lazy-cache": "^2.0.1", + "set-value": "^0.4.2", + "to-object-path": "^0.3.0", + "union-value": "^0.2.3", + "unset-value": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-store/node_modules/cache-base/node_modules/lazy-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", + "integrity": "sha512-7vp2Acd2+Kz4XkzxGxaB1FWOi8KjWIWsgdfD5MCb86DWvlLqhRPM+d6Pro3iNEL5VT9mstz5hKAlcd+QR6H3aA==", + "license": "MIT", + "dependencies": { + "set-getter": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-store/node_modules/collection-visit": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-0.2.3.tgz", + "integrity": "sha512-V88PJOCqJfsZS45YBELDgmhQkECokQAAr9XR4hT6eFkFsAPsCsk3EoDHSuBPYzygjquGM/0KF4vdwTiQO6lbdw==", + "license": "MIT", + "dependencies": { + "lazy-cache": "^2.0.1", + "map-visit": "^0.1.5", + "object-visit": "^0.3.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-store/node_modules/collection-visit/node_modules/lazy-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", + "integrity": "sha512-7vp2Acd2+Kz4XkzxGxaB1FWOi8KjWIWsgdfD5MCb86DWvlLqhRPM+d6Pro3iNEL5VT9mstz5hKAlcd+QR6H3aA==", + "license": "MIT", + "dependencies": { + "set-getter": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-store/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-store/node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-store/node_modules/map-visit": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-0.1.5.tgz", + "integrity": "sha512-zdmJBFvvVR/H5wCfsCP7XxSLp+346yAZ30Wy2OsQLcH19OVGMWa3Ms9quO00lj9ybsySu3gKOINNgICb4Zqauw==", + "license": "MIT", + "dependencies": { + "lazy-cache": "^2.0.1", + "object-visit": "^0.3.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-store/node_modules/map-visit/node_modules/lazy-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", + "integrity": "sha512-7vp2Acd2+Kz4XkzxGxaB1FWOi8KjWIWsgdfD5MCb86DWvlLqhRPM+d6Pro3iNEL5VT9mstz5hKAlcd+QR6H3aA==", + "license": "MIT", + "dependencies": { + "set-getter": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-store/node_modules/object-visit": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-0.3.4.tgz", + "integrity": "sha512-6QNyX7uTuwqxP7pmDBqgBDKdmZws1rXriUyXM5KG6+7J0aYRuuAGoc636IGdLzgOL77WUwL+EpoTJrEHwWsyOA==", + "license": "MIT", + "dependencies": { + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-store/node_modules/object-visit/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "license": "MIT", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-store/node_modules/set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha512-2Z0LRUUvYeF7gIFFep48ksPq0NR09e5oKoFXznaMGNcu+EZAfGnyL0K6xno2gCqX6dZYEZRjrcn04/gvZzcKhQ==", + "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-store/node_modules/union-value": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-0.2.4.tgz", + "integrity": "sha512-Tv3cqdyY8yjW9ZcJ9WP7JdHS34natzylD0oNRLlYbWOfUdC4EQ0sf3fubnqrK2IErtlmobFmuS1pWvv88VghpA==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-store/node_modules/unset-value": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-0.1.2.tgz", + "integrity": "sha512-yhv5I4TsldLdE3UcVQn0hD2T5sNCPv4+qm/CTUpRKIpwthYRIipsAPdsrNpOI79hPQa0rTTeW22Fq6JWRcTgNg==", + "license": "MIT", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha512-s/46sYeylUfHNjI+sA/78FAHlmIuKqI9wNnzEOGehAlUUYeObv5C2mOinXBjyUyWmJ2SfcS2/ydApH4hTF4WXQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pretty-time": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-0.2.0.tgz", + "integrity": "sha512-BwYVCPtnSq3nIGDK2rgwZTN2ClhBQmnG8pudrXIfGBwuMutIBj/W7wm/jz1WCHl/Kk2Q5i1Am1uD2Q74oPyBCw==", + "license": "MIT", + "dependencies": { + "is-number": "^2.0.2", + "nanoseconds": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/project-name": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/project-name/-/project-name-0.2.6.tgz", + "integrity": "sha512-ZOxqunIi7fnAX+E0tE+FLHv2pSEa7IgEbnVG2s4wPxWL+p2cUk9KRDZV4lNkpfyrVR6rfOUBxIbctbJDo/qOTA==", + "license": "MIT", + "dependencies": { + "find-pkg": "^0.1.2", + "git-repo-name": "^0.6.0", + "minimist": "^1.2.0" + }, + "bin": { + "project-name": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.15.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", + "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", + "license": "BSD-3-Clause", + "dependencies": { + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/question-cache": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/question-cache/-/question-cache-0.4.0.tgz", + "integrity": "sha512-QgX1mI/ZNBbG8M5gYfZQG/qxZRggP2Fk+WOqE/FKylmNwi5aWy6o1JSaojYrHT5JUtRdyG+wwVJSlTfW7UBmog==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "arr-union": "^3.1.0", + "async": "1.5.2", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "get-value": "^2.0.5", + "has-value": "^0.3.1", + "inquirer2": "^0.1.1", + "is-answer": "^0.1.0", + "isobject": "^2.0.0", + "lazy-cache": "^1.0.3", + "mixin-deep": "^1.1.3", + "omit-empty": "^0.3.6", + "option-cache": "^3.3.5", + "os-homedir": "^1.0.1", + "project-name": "^0.2.4", + "set-value": "^0.3.3", + "to-choices": "^0.2.0", + "use": "^1.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/question-cache/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/question-cache/node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/question-cache/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/question-cache/node_modules/omit-empty": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/omit-empty/-/omit-empty-0.3.6.tgz", + "integrity": "sha512-P5zl3TYREgcRAjjyj9kYHNhVtOOXMlCyYh/KNm53oUZNKpGOBbS0WLdRcThDPWbuFleXlbCd1KTBRZD86nj3RA==", + "license": "MIT", + "dependencies": { + "has-values": "^0.1.4", + "is-date-object": "^1.0.1", + "isobject": "^2.0.0", + "reduce-object": "^0.1.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/question-cache/node_modules/set-value": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.3.3.tgz", + "integrity": "sha512-aJPTd11HzK47w8xJMpyY4tBmFC6EidC8EG2fENxCJvPwLYzXLnNaesgo796y1fhSISSYAuah4Het+wDoPXK2tg==", + "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "isobject": "^2.0.0", + "to-object-path": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/question-cache/node_modules/to-object-path": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.2.0.tgz", + "integrity": "sha512-6oMu4CTicplxUMOXBoS1W9YNjIclUzmWpWf02v+JnYMEGVX24rTCsYMHay85WA7Wq+9wZa2iJ+HAAX0yGOcxCQ==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "is-arguments": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/question-store": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/question-store/-/question-store-0.11.1.tgz", + "integrity": "sha512-rvyFpqLYQCO7FOnX+3qZ7b8K7omWkn9MWyj/7dknf7BaGZHo//fzBS2/0atmcvZfjT2mu1q64oiZIrsB7OqqGg==", + "license": "MIT", + "dependencies": { + "common-config": "^0.1.0", + "data-store": "^0.16.1", + "debug": "^2.2.0", + "is-answer": "^0.1.0", + "lazy-cache": "^2.0.1", + "project-name": "^0.2.6", + "question-cache": "^0.5.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/question-store/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/question-store/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/question-store/node_modules/question-cache": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/question-cache/-/question-cache-0.5.1.tgz", + "integrity": "sha512-v9F1LnlSQIUEAGFtrfVX/76lH4u4zyV34t94o6EkguPTKKfbvV6SLH8h3pn7LXGZLmAgD1PbmVOuKMY8ZWnuPg==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "arr-union": "^3.1.0", + "async-each-series": "^1.1.0", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "get-value": "^2.0.6", + "has-value": "^0.3.1", + "inquirer2": "^0.1.1", + "is-answer": "^0.1.0", + "isobject": "^2.1.0", + "lazy-cache": "^2.0.1", + "mixin-deep": "^1.1.3", + "omit-empty": "^0.4.1", + "option-cache": "^3.4.0", + "os-homedir": "^1.0.1", + "project-name": "^0.2.5", + "set-value": "^0.3.3", + "to-choices": "^0.2.0", + "use": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/question-store/node_modules/set-value": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.3.3.tgz", + "integrity": "sha512-aJPTd11HzK47w8xJMpyY4tBmFC6EidC8EG2fENxCJvPwLYzXLnNaesgo796y1fhSISSYAuah4Het+wDoPXK2tg==", + "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "isobject": "^2.0.0", + "to-object-path": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/question-store/node_modules/to-object-path": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.2.0.tgz", + "integrity": "sha512-6oMu4CTicplxUMOXBoS1W9YNjIclUzmWpWf02v+JnYMEGVX24rTCsYMHay85WA7Wq+9wZa2iJ+HAAX0yGOcxCQ==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "is-arguments": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/question-store/node_modules/use": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz", + "integrity": "sha512-RrhWfFWkNCz3djfSFZh7uSwu491QRhwNaHyAgB2sGl4kmmznb5ZUuuHpiWLVEsXOdpDakYK/x5+9o4lgg41UMw==", + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "lazy-cache": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/question-store/node_modules/use/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "license": "MIT", + "dependencies": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/randomatic/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/randomatic/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/range-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/raw-body": { + "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.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/read-file": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/read-file/-/read-file-0.2.0.tgz", + "integrity": "sha512-na/zgd5KplGlR+io+ygXQMIoDfX/Y0bNS5+P2TOXOTk5plquOVd0snudCd30hZJAsnVK2rxuxUP2z0CN+Aw1lQ==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readline2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", + "integrity": "sha512-8/td4MmwUB6PkZUbV25uKz7dfrmjYWxsW8DVfibWdlHRk/l/DfHKn4pU+dfcoGLFgWOdyGCzINRQD7jn+Bv+/g==", + "license": "MIT", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "mute-stream": "0.0.5" + } + }, + "node_modules/reduce-object": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/reduce-object/-/reduce-object-0.1.3.tgz", + "integrity": "sha512-7js/WmWoI5NRe/mfxUimt0rmj04lfhJIa8SDyt+OKasagu+KjffnVxElTKuZs1fRjytlN46BrDoVK+IsBVovtw==", + "dependencies": { + "for-own": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "license": "MIT", + "dependencies": { + "is-equal-shallow": "^0.1.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/relative": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/relative/-/relative-3.0.2.tgz", + "integrity": "sha512-Q5W2qeYtY9GbiR8z1yHNZ1DGhyjb4AnLEjt8iE6XfcC1QIu+FAtj3HQaO0wH28H1mX6cqNLvAqWhP402dxJGyA==", + "license": "MIT", + "dependencies": { + "isobject": "^2.0.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/remote-origin-url": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/remote-origin-url/-/remote-origin-url-0.5.3.tgz", + "integrity": "sha512-crQ7Xk1m/F2IiwBx5oTqk/c0hjoumrEz+a36+ZoVupskQRE/q7pAwHKsTNeiZ31sbSTELvVlVv4h1W0Xo5szKg==", + "license": "MIT", + "dependencies": { + "parse-git-config": "^1.1.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "license": "ISC" + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/repo-utils": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/repo-utils/-/repo-utils-0.3.7.tgz", + "integrity": "sha512-NQmnug1GX04LoNb2bXGsCV3FzLDqmwf3qMmjToibrxI1CFV2uyE2XDdo9SYW8epfBK7wmw0ANhkmDtbGlrkyWQ==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "get-value": "^2.0.6", + "git-config-path": "^1.0.1", + "is-absolute": "^0.2.6", + "kind-of": "^3.0.4", + "lazy-cache": "^2.0.1", + "mixin-deep": "^1.1.3", + "omit-empty": "^0.4.1", + "parse-author": "^1.0.0", + "parse-git-config": "^1.0.2", + "parse-github-url": "^0.3.2", + "project-name": "^0.2.6" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reputation-system": { + "version": "0.0.1", + "resolved": "git+ssh://git@github.com/agenticaihome/reputation-system.git#7e4ed7116b87a4c6e57b9e18b18f0cd46eba25cd", + "dependencies": { + "@dagrejs/dagre": "^1.0.4", + "@fleet-sdk/compiler": "^0.12.0", + "@fleet-sdk/core": "^0.12.0", + "@fleet-sdk/wallet": "^0.12.0", + "@scure/base": "^1.1.3", + "@scure/bip32": "^1.4.0", + "@scure/bip39": "^1.3.0", + "@types/three": "^0.161.2", + "@xyflow/svelte": "^0.1.3", + "update": "^0.7.4", + "uuid": "^11.0.4" + }, + "peerDependencies": { + "svelte": "^4" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", + "integrity": "sha512-QxMPqI6le2u0dCLyiGzgy92kjkkL6zO0XyvHzjdTNH3zM6e5Hz3BwG6+aEyNgiQ5Xz6PwTwgQEj3U50dByPKIA==", + "license": "MIT", + "dependencies": { + "expand-tilde": "^1.2.2", + "global-modules": "^0.2.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-file": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/resolve-file/-/resolve-file-0.2.2.tgz", + "integrity": "sha512-3t2k4iUeMlX3PbjgZPcKzILg8HEtl0VW/lS8G+k4FCgj3kNn1uTOv6YJtm192rYMFpq9abzfJ2xd5W6ibOwVag==", + "license": "MIT", + "dependencies": { + "cwd": "^0.10.0", + "expand-tilde": "^2.0.1", + "extend-shallow": "^2.0.1", + "fs-exists-sync": "^0.1.0", + "global-modules": "^0.2.3", + "homedir-polyfill": "^1.0.0", + "lazy-cache": "^2.0.1", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-file/node_modules/cwd": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/cwd/-/cwd-0.10.0.tgz", + "integrity": "sha512-YGZxdTTL9lmLkCUTpg4j0zQ7IhRB5ZmqNBbGCl3Tg6MP/d5/6sY7L5mmTjzbc6JKgVZYiqTQTNhPFsbXNGlRaA==", + "license": "MIT", + "dependencies": { + "find-pkg": "^0.1.2", + "fs-exists-sync": "^0.1.0" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/resolve-file/node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "license": "MIT", + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-glob/-/resolve-glob-1.0.0.tgz", + "integrity": "sha512-wSW9pVGJRs89k0wEXhM7C6+va9998NsDhgc0Y+6Nv8hrHsu0hUS7Ug10J1EiVtU6N2tKlSNvx9wLihL8Ao22Lg==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-valid-glob": "^1.0.0", + "matched": "^1.0.2", + "relative": "^3.0.2", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-glob/node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "license": "MIT", + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-glob/node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "license": "MIT", + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-glob/node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "license": "MIT", + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-glob/node_modules/has-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", + "integrity": "sha512-D+8A457fBShSEI3tFCj65PAbT++5sKiFtdCdOam0gnfBgw9D277OERk+HM9qYJXmdVLZ/znez10SqHN0BBQ50g==", + "license": "MIT", + "dependencies": { + "is-glob": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-glob/node_modules/is-extglob": { + "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" + } + }, + "node_modules/resolve-glob/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-glob/node_modules/is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-glob/node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-glob/node_modules/matched": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/matched/-/matched-1.0.2.tgz", + "integrity": "sha512-7ivM1jFZVTOOS77QsR+TtYHH0ecdLclMkqbf5qiJdX2RorqfhsL65QHySPZgDE0ZjHoh+mQUNHTanNXIlzXd0Q==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "async-array-reduce": "^0.2.1", + "glob": "^7.1.2", + "has-glob": "^1.0.0", + "is-valid-glob": "^1.0.0", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/resolve-glob/node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "license": "MIT", + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-glob/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha512-reSjH4HuiFlxlaBaFCiS6O76ZGG2ygKoSlCsipKdaZuKSPx/+bt9mULkn4l0asVzbEfQQmXRg6Wp6gv6m0wElw==", + "license": "MIT", + "dependencies": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rethrow": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/rethrow/-/rethrow-0.2.3.tgz", + "integrity": "sha512-vtB0AIP/FlRbR4stc8szvHXe+N4158/K1hRMZbFHljIiQAHru54M9LylbxNjBGHl9biuwQNVUdvRzVxv1QWAiA==", + "license": "MIT", + "dependencies": { + "ansi-bgred": "^0.1.1", + "ansi-red": "^0.1.1", + "ansi-yellow": "^0.1.1", + "extend-shallow": "^1.1.4", + "lazy-cache": "^0.2.3", + "right-align": "^0.1.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rethrow/node_modules/extend-shallow": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", + "license": "MIT", + "dependencies": { + "kind-of": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rethrow/node_modules/kind-of": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rethrow/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha512-yqINtL/G7vs2v+dFIZmFUDbnVyFUJFKd6gK22Kgo6R4jfJGFtisKyncWDDULgjfqf4ASQuIQyjJ7XZ+3aWpsAg==", + "license": "MIT", + "dependencies": { + "align-text": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/run-async": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "integrity": "sha512-qOX+w+IxFgpUpJfkv2oGN0+ExPs68F4sZHfaRRx4dDexAQkG83atugKVEylyT5ARees3HBbfmuvnjbrd8j9Wjw==", + "license": "MIT", + "dependencies": { + "once": "^1.3.0" + } + }, + "node_modules/rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha512-Cun9QucwK6MIrp3mry/Y7hqD1oFqTYLQ4pGxaHTjIdaFDWRGGLikqp6u8LcWJnzpoALg9hap+JGk8sFIUuEGNA==" + }, + "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/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC" + }, + "node_modules/set-getter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.1.tgz", + "integrity": "sha512-9sVWOy+gthr+0G9DzqqLaYNA7+5OKkSmcqjL9cBpDEaZrr3ShQlyX2cZ/O/ozE41oxn/Tt0LGEM/w4Rub3A3gw==", + "license": "MIT", + "dependencies": { + "to-object-path": "^0.3.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", + "integrity": "sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw==", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.1", + "kind-of": "^2.0.1", + "lazy-cache": "^0.2.3", + "mixin-object": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shallow-clone/node_modules/kind-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", + "integrity": "sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shallow-clone/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sigmajs-crypto-facade": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/sigmajs-crypto-facade/-/sigmajs-crypto-facade-0.0.7.tgz", + "integrity": "sha512-4XK8ZS9NKAbo8aGnU6o5GkBW6Upl8+OK8A1KreVDMAamfvZ0iq4LoVH8rHaeEPf9moVtaC4QZY5RYI+0OwiydA==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.1.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sigmastate-js": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/sigmastate-js/-/sigmastate-js-0.4.6.tgz", + "integrity": "sha512-Vo/TSFbkKrG28eiWn7EmoaBNgyabC6En6B7cKjb3z2ivBpFBMCGxUZgmKu83GgJboRvCikZ3/vvWFfbxpbloig==", + "license": "MIT", + "dependencies": { + "@fleet-sdk/common": "0.1.3", + "@noble/hashes": "1.1.4", + "sigmajs-crypto-facade": "0.0.7" + } + }, + "node_modules/sigmastate-js/node_modules/@fleet-sdk/common": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@fleet-sdk/common/-/common-0.1.3.tgz", + "integrity": "sha512-gYEkHhgGpgIcmCL3nCw8E9zHkT2WLmR+mPdxFlUE6fwcwISURbJrP6W9mF7D5Y0ShAP5Is2w3edh7AyIc7ctIQ==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/sigmastate-js/node_modules/@noble/hashes": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.4.tgz", + "integrity": "sha512-+PYsVPrTSqtVjatKt2A/Proukn2Yrz61OBThOCKErc5w2/r1Fh37vbDv0Eah7pyNltrmacjwTvdw3JoR+WE4TA==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/sort-object-arrays": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/sort-object-arrays/-/sort-object-arrays-0.1.1.tgz", + "integrity": "sha512-yqoVMBF2wzCdE4f2zeYKq2dQHe1WjGIdAV1dYSkXOFB+M3Bo+Bp0u+NdZCOETM3OC1VXerlruTD6Ckgus1NsnA==", + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/src-stream": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/src-stream/-/src-stream-0.1.1.tgz", + "integrity": "sha512-fczCn/BzNcH27V7unPzgCl+owTuC/Uv3UG9BQxGemRs6Fy1M2GFmYu1ZHQ2UjeYlGQqAmkModp949g235kYzcw==", + "license": "MIT", + "dependencies": { + "duplexify": "^3.4.2", + "merge-stream": "^0.1.8", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "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" + } + }, + "node_modules/stream-combiner": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", + "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", + "license": "MIT", + "dependencies": { + "duplexer": "~0.1.1", + "through": "~2.3.4" + } + }, + "node_modules/stream-exhaust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", + "license": "MIT" + }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "license": "MIT" + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/stringify-author": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/stringify-author/-/stringify-author-0.1.3.tgz", + "integrity": "sha512-OxmcAnr4DESGl/ics9lAv30DdOBC2bdqswEAzTiOZSQRqVpWfnmlr3cpfxTmExf7phS5WxBJ1flD1e3ResNTBA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "license": "MIT", + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-bom-buffer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/strip-bom-buffer/-/strip-bom-buffer-0.1.1.tgz", + "integrity": "sha512-dbIOX/cOLFgLH/2ofd7n78uPD3uPkXyt3P1IgaVoGiPYEdOnb7D1mawyhOTXyYWva1kCuRxJY5FkMsVKYlZRRg==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.0", + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-bom-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", + "integrity": "sha512-7jfJB9YpI2Z0aH3wu10ZqitvYJaE0s5IzFuWE+0pbb4Q/armTloEUShymkDO47YSLnjAW52mlXT//hs9wXNNJQ==", + "license": "MIT", + "dependencies": { + "first-chunk-stream": "^1.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-color": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/strip-color/-/strip-color-0.1.0.tgz", + "integrity": "sha512-p9LsUieSjWNNAxVCXLeilaDlmuUOrDS5/dF9znM1nZc7EGX5+zEFC0bEevsNIaldjlks+2jns5Siz6F9iK6jwA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/success-symbol": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/success-symbol/-/success-symbol-0.1.0.tgz", + "integrity": "sha512-7S6uOTxPklNGxOSbDIg4KlVLBQw1UiGVyfCUYgYxrZUKRblUkmGj7r8xlfQoFudvqLv6Ap5gd76/IIFfI9JG2A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svelte": { + "version": "4.2.20", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.20.tgz", + "integrity": "sha512-eeEgGc2DtiUil5ANdtd8vPwt9AgaMdnuUFnPft9F5oMvU/FHu5IHFic+p1dR/UOB7XU2mX2yHW+NcTch4DCh5Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "@jridgewell/sourcemap-codec": "^1.4.15", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/estree": "^1.0.1", + "acorn": "^8.9.0", + "aria-query": "^5.3.0", + "axobject-query": "^4.0.0", + "code-red": "^1.0.3", + "css-tree": "^2.3.1", + "estree-walker": "^3.0.3", + "is-reference": "^3.0.1", + "locate-character": "^3.0.0", + "magic-string": "^0.30.4", + "periscopic": "^3.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tableize-object": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/tableize-object/-/tableize-object-0.1.0.tgz", + "integrity": "sha512-seDB76zNqvGXG0W8gxUteRuq1fk1dvSxcRVbeYQ1a1QqMkbtqrGwvqTubfN6VCizzlb7NxOPM/j3z9JeBrbxYg==", + "license": "MIT", + "dependencies": { + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/template-error": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/template-error/-/template-error-0.1.2.tgz", + "integrity": "sha512-soS5m+iT4k/okmMyydvMjPlmyz3CowvMcOxfgoAqccmkyF81W3D+zMi4lhqbSIhTgLhKE/Bh8wUlXzr6F+ERCw==", + "license": "MIT", + "dependencies": { + "engine": "^0.1.5", + "kind-of": "^2.0.1", + "lazy-cache": "^0.2.3", + "rethrow": "^0.2.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/template-error/node_modules/kind-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", + "integrity": "sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/template-error/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/templates": { + "version": "0.24.3", + "resolved": "https://registry.npmjs.org/templates/-/templates-0.24.3.tgz", + "integrity": "sha512-R5CUlz3atppbifPePB5Z2KGXCsB0Y87lQ/+ziizq/d3kyydDlNk40yX98RWLprNnKjTiwqeiuGjLJlPPJPYshg==", + "license": "MIT", + "dependencies": { + "array-sort": "^0.1.2", + "async-each": "^1.0.0", + "base": "^0.11.1", + "base-data": "^0.6.0", + "base-engines": "^0.2.0", + "base-helpers": "^0.1.1", + "base-option": "^0.8.3", + "base-plugins": "^0.4.13", + "base-routes": "^0.2.1", + "debug": "^2.2.0", + "deep-bind": "^0.3.0", + "define-property": "^0.2.5", + "engine-base": "^0.1.2", + "export-files": "^2.1.1", + "extend-shallow": "^2.0.1", + "falsey": "^0.3.0", + "get-value": "^2.0.6", + "get-view": "^0.1.1", + "group-array": "^0.3.0", + "has-glob": "^0.1.1", + "has-value": "^0.3.1", + "inflection": "^1.10.0", + "is-valid-app": "^0.2.0", + "layouts": "^0.11.0", + "lazy-cache": "^2.0.1", + "match-file": "^0.2.0", + "mixin-deep": "^1.1.3", + "paginationator": "^0.1.3", + "pascalcase": "^0.1.1", + "set-value": "^0.3.3", + "template-error": "^0.1.2", + "vinyl-item": "^0.1.0", + "vinyl-view": "^0.1.2" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/templates/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/templates/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/templates/node_modules/set-value": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.3.3.tgz", + "integrity": "sha512-aJPTd11HzK47w8xJMpyY4tBmFC6EidC8EG2fENxCJvPwLYzXLnNaesgo796y1fhSISSYAuah4Het+wDoPXK2tg==", + "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "isobject": "^2.0.0", + "to-object-path": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/templates/node_modules/to-object-path": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.2.0.tgz", + "integrity": "sha512-6oMu4CTicplxUMOXBoS1W9YNjIclUzmWpWf02v+JnYMEGVX24rTCsYMHay85WA7Wq+9wZa2iJ+HAAX0yGOcxCQ==", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "is-arguments": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2-filter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", + "integrity": "sha512-miwWajb1B80NvIVKXFPN/o7+vJc4jYUvnZCwvhicRAoTxdD9wbcjri70j+BenCrN/JXEPKDjhpw4iY7yiNsCGg==", + "license": "MIT", + "dependencies": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "node_modules/time-diff": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/time-diff/-/time-diff-0.3.1.tgz", + "integrity": "sha512-8/LJTO3zKbhj6sQFeN3aoAA04GGjUgwKEquQVnKXkziHjEHadpIVIQ1rAjQgSVMnBRubJ/q5gMjK9WqXTzSykA==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^2.1.0", + "log-utils": "^0.1.0", + "pretty-time": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/time-diff/node_modules/ansi-colors": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-0.1.0.tgz", + "integrity": "sha512-nUNbMZLDr1YQaPdMC2lREJXKttoaHwICajt9x40Js/POX7gNv7OK/VbC9ciJaIFshg9Xol+1GclqfY14UW+0ZA==", + "license": "MIT", + "dependencies": { + "ansi-bgblack": "^0.1.1", + "ansi-bgblue": "^0.1.1", + "ansi-bgcyan": "^0.1.1", + "ansi-bggreen": "^0.1.1", + "ansi-bgmagenta": "^0.1.1", + "ansi-bgred": "^0.1.1", + "ansi-bgwhite": "^0.1.1", + "ansi-bgyellow": "^0.1.1", + "ansi-black": "^0.1.1", + "ansi-blue": "^0.1.1", + "ansi-bold": "^0.1.1", + "ansi-cyan": "^0.1.1", + "ansi-dim": "^0.1.1", + "ansi-gray": "^0.1.1", + "ansi-green": "^0.1.1", + "ansi-grey": "^0.1.1", + "ansi-hidden": "^0.1.1", + "ansi-inverse": "^0.1.1", + "ansi-italic": "^0.1.1", + "ansi-magenta": "^0.1.1", + "ansi-red": "^0.1.1", + "ansi-reset": "^0.1.1", + "ansi-strikethrough": "^0.1.1", + "ansi-underline": "^0.1.1", + "ansi-white": "^0.1.1", + "ansi-yellow": "^0.1.1", + "lazy-cache": "^0.2.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/time-diff/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/time-diff/node_modules/log-utils": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/log-utils/-/log-utils-0.1.5.tgz", + "integrity": "sha512-5jLIj9RWWYxQbBhHDvNZTZE3J/oSTbw/fuPmsXJg8/vbY/4XiJ4YAiEPrwo3dLbcB/n9k1qTznOVr6IigiaF7A==", + "license": "MIT", + "dependencies": { + "ansi-colors": "^0.1.0", + "error-symbol": "^0.1.0", + "info-symbol": "^0.1.0", + "log-ok": "^0.1.1", + "success-symbol": "^0.1.0", + "time-stamp": "^1.0.1", + "warning-symbol": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-absolute-glob": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", + "integrity": "sha512-Vvl5x6zNf9iVG1QTWeknmWrKzZxaeKfIDRibrZCR3b2V/2NlFJuD2HV7P7AVjaKLZNqLPHqyr0jGrW0fTcxCPQ==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-choices": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/to-choices/-/to-choices-0.2.0.tgz", + "integrity": "sha512-oPVwP4jpJZM4R3Yvfcod8/OjddMoi33amdFzwZktcHAjddmIEAzQ9DQsdPKUr/Q4hLxNMWPys4Pn1qJdLiR4Kg==", + "license": "MIT", + "dependencies": { + "ansi-gray": "^0.1.1", + "mixin-deep": "^1.1.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-file": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/to-file/-/to-file-0.2.0.tgz", + "integrity": "sha512-xLyYVRKJQTwy2tKMOLD0M0yL+YSZVgMAzkaY9hh7GhzgBBHSIWARDkgPx8krPPm0mW5CgoIFsQEdKRFOyIRdqg==", + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "file-contents": "^0.2.4", + "glob-parent": "^2.0.0", + "is-valid-glob": "^0.3.0", + "isobject": "^2.1.0", + "lazy-cache": "^2.0.1", + "vinyl": "^1.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/toidentifier": { + "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" + } + }, + "node_modules/trim-leading-lines": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/trim-leading-lines/-/trim-leading-lines-0.1.1.tgz", + "integrity": "sha512-ViFS8blDWJN4Jg10fyZ+sIAfkSSAn5NiTVywc3kKtMWK3DZjaV7FV86oX3i9KY6/gqYkdka/UNeM2/NMGttiyA==", + "license": "MIT", + "dependencies": { + "is-whitespace": "^0.3.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/type-is": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", + "license": "MIT", + "dependencies": { + "content-type": "^2.0.0", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/type-is/node_modules/content-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", + "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unique-stream": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.4.0.tgz", + "integrity": "sha512-V6QarSfeSgDipGA9EZdoIzu03ZDlOFkk+FbEP5cwgrZXN3iIkYR91IjU2EnM6rB835kGQsqHX8qncObTXV+6KA==", + "license": "MIT", + "dependencies": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "3.0.0" + } + }, + "node_modules/unique-stream/node_modules/through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "license": "MIT", + "dependencies": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "node_modules/unpipe": { + "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/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "license": "MIT", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/update": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/update/-/update-0.7.4.tgz", + "integrity": "sha512-B7HArWh4T6TSmMffmxlbD9gZM0QdboQ8N/p5aHcyhGCuuVRHSk37pvuQlAvi1XBrQMrEX5WJUQyQR8+jy/x4iQ==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "assemble-core": "^0.25.0", + "assemble-loader": "^0.6.1", + "base-cli-process": "^0.1.18", + "base-config-process": "^0.1.9", + "base-generators": "^0.4.5", + "base-questions": "^0.7.3", + "base-runtimes": "^0.2.0", + "base-store": "^0.4.4", + "common-config": "^0.1.0", + "data-store": "^0.16.1", + "export-files": "^2.1.1", + "extend-shallow": "^2.0.1", + "find-pkg": "^0.1.2", + "fs-exists-sync": "^0.1.0", + "global-modules": "^0.2.2", + "gulp-choose-files": "^0.1.3", + "is-valid-app": "^0.2.0", + "isobject": "^2.1.0", + "lazy-cache": "^2.0.1", + "log-utils": "^0.2.1", + "parser-front-matter": "^1.4.1", + "resolve-dir": "^0.1.0", + "resolve-file": "^0.2.0", + "set-blocking": "^2.0.0", + "strip-color": "^0.1.0", + "text-table": "^0.2.0", + "through2": "^2.0.1", + "yargs-parser": "^2.4.1" + }, + "bin": { + "update": "bin/update.js" + }, + "engines": { + "node": ">=5.0" + } + }, + "node_modules/upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", + "license": "MIT" + }, + "node_modules/use": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use/-/use-1.1.2.tgz", + "integrity": "sha512-25Uw2xiVk0m2ySqmnu2GjOIROlImdXMRcpI6Cq7sZeG/zFZgFkSeo2+QwKNWJncfZOVS55eACoinvJ3EtprOBw==", + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/uuid": { + "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/esm/bin/uuid" + } + }, + "node_modules/vali-date": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", + "integrity": "sha512-sgECfZthyaCKW10N0fm27cg8HYTFK5qMWgypqkXMQ4Wbl/zZKx7xZICgcoxIIE+WFAP/MBL2EFwC/YvLxw3Zeg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vary": { + "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" + } + }, + "node_modules/vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha512-Ci3wnR2uuSAWFMSglZuB8Z2apBdtOyz8CV7dC6/U1XbltXBC+IuutUkXQISz01P+US2ouBuesSbV6zILZ6BuzQ==", + "license": "MIT", + "dependencies": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + }, + "engines": { + "node": ">= 0.9" + } + }, + "node_modules/vinyl-fs": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", + "integrity": "sha512-lxMlQW/Wxk/pwhooY3Ut0Q11OH5ZvZfV0Gg1c306fBNWznQ6ZeQaCdE7XX0O/PpGSqgAsHMBxwFgcGxiYW3hZg==", + "license": "MIT", + "dependencies": { + "duplexify": "^3.2.0", + "glob-stream": "^5.3.2", + "graceful-fs": "^4.0.0", + "gulp-sourcemaps": "1.6.0", + "is-valid-glob": "^0.3.0", + "lazystream": "^1.0.0", + "lodash.isequal": "^4.0.0", + "merge-stream": "^1.0.0", + "mkdirp": "^0.5.0", + "object-assign": "^4.0.0", + "readable-stream": "^2.0.4", + "strip-bom": "^2.0.0", + "strip-bom-stream": "^1.0.0", + "through2": "^2.0.0", + "through2-filter": "^2.0.0", + "vali-date": "^1.0.0", + "vinyl": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/vinyl-fs/node_modules/merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha512-e6RM36aegd4f+r8BZCcYXlO2P3H6xbUM6ktL2Xmf45GAOit9bI4z6/3VU7JwllVO1L7u0UDSg/EhzQ5lmMLolA==", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/vinyl-item": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/vinyl-item/-/vinyl-item-0.1.0.tgz", + "integrity": "sha512-9L2HEcbtuTdKCLWDucRPObPoAxnUUCdAXg0QDf3aDPM3oFpb6C+yct/R31PA9EhLGeilNl8TF/inc3OwFSSEMg==", + "license": "MIT", + "dependencies": { + "base": "^0.8.1", + "base-option": "^0.8.2", + "base-plugins": "^0.4.12", + "clone": "^1.0.2", + "clone-stats": "^1.0.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "isobject": "^2.1.0", + "lazy-cache": "^2.0.1", + "vinyl": "^1.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-item/node_modules/base": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/base/-/base-0.8.1.tgz", + "integrity": "sha512-hCEtSWF9Xin1mVIrgCAwJhIJxURWOu3odjKsv+9TXofdJly0vO9Di87hnkChwi44v0+LPzHtNOjoCUYb36fBhg==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "cache-base": "^0.8.2", + "class-utils": "^0.3.2", + "component-emitter": "^1.2.0", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "lazy-cache": "^1.0.3", + "mixin-deep": "^1.1.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-item/node_modules/base/node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-item/node_modules/cache-base": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-0.8.5.tgz", + "integrity": "sha512-19t0n7xdoVr5Q08+6sF85YZ9VuvbpVFq5JLm0gcsRmCvTO1Y3duTJGMaOQYf14Ras4o6dEnvoqvjdrUK1tNtgg==", + "license": "MIT", + "dependencies": { + "collection-visit": "^0.2.1", + "component-emitter": "^1.2.1", + "get-value": "^2.0.5", + "has-value": "^0.3.1", + "isobject": "^3.0.0", + "lazy-cache": "^2.0.1", + "set-value": "^0.4.2", + "to-object-path": "^0.3.0", + "union-value": "^0.2.3", + "unset-value": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-item/node_modules/cache-base/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-item/node_modules/clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", + "license": "MIT" + }, + "node_modules/vinyl-item/node_modules/collection-visit": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-0.2.3.tgz", + "integrity": "sha512-V88PJOCqJfsZS45YBELDgmhQkECokQAAr9XR4hT6eFkFsAPsCsk3EoDHSuBPYzygjquGM/0KF4vdwTiQO6lbdw==", + "license": "MIT", + "dependencies": { + "lazy-cache": "^2.0.1", + "map-visit": "^0.1.5", + "object-visit": "^0.3.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-item/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/vinyl-item/node_modules/map-visit": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-0.1.5.tgz", + "integrity": "sha512-zdmJBFvvVR/H5wCfsCP7XxSLp+346yAZ30Wy2OsQLcH19OVGMWa3Ms9quO00lj9ybsySu3gKOINNgICb4Zqauw==", + "license": "MIT", + "dependencies": { + "lazy-cache": "^2.0.1", + "object-visit": "^0.3.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-item/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/vinyl-item/node_modules/object-visit": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-0.3.4.tgz", + "integrity": "sha512-6QNyX7uTuwqxP7pmDBqgBDKdmZws1rXriUyXM5KG6+7J0aYRuuAGoc636IGdLzgOL77WUwL+EpoTJrEHwWsyOA==", + "license": "MIT", + "dependencies": { + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-item/node_modules/set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha512-2Z0LRUUvYeF7gIFFep48ksPq0NR09e5oKoFXznaMGNcu+EZAfGnyL0K6xno2gCqX6dZYEZRjrcn04/gvZzcKhQ==", + "deprecated": "Critical bug fixed in v3.0.1, please upgrade to the latest version.", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-item/node_modules/union-value": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-0.2.4.tgz", + "integrity": "sha512-Tv3cqdyY8yjW9ZcJ9WP7JdHS34natzylD0oNRLlYbWOfUdC4EQ0sf3fubnqrK2IErtlmobFmuS1pWvv88VghpA==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-item/node_modules/unset-value": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-0.1.2.tgz", + "integrity": "sha512-yhv5I4TsldLdE3UcVQn0hD2T5sNCPv4+qm/CTUpRKIpwthYRIipsAPdsrNpOI79hPQa0rTTeW22Fq6JWRcTgNg==", + "license": "MIT", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-item/node_modules/unset-value/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-view": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/vinyl-view/-/vinyl-view-0.1.2.tgz", + "integrity": "sha512-qIc2qnXgOXZrT1Q1ViR1VMTjuylAi3Y/LSYSYfwJ6ZG7Ar5miUfioSIBu30bsHTo5dSz4ReDNSUw3lelCtc5Jw==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "engine-base": "^0.1.2", + "isobject": "^2.1.0", + "lazy-cache": "^2.0.1", + "mixin-deep": "^1.1.3", + "vinyl-item": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/warning-symbol": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/warning-symbol/-/warning-symbol-0.1.0.tgz", + "integrity": "sha512-1S0lwbHo3kNUKA4VomBAhqn4DPjQkIKSdbOin5K7EFUQNwyIKx+wZMGXKI53RUjla8V2B8ouQduUlgtx8LoSMw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/which": { + "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" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 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==", + "license": "ISC" + }, + "node_modules/write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha512-CJ17OoULEKXpA5pef3qLj5AxTJ6mSt7g84he2WIskKwqFO4T97d5V7Tadl0DYDk7qyUOQD5WlUlOMChaYrhxeA==", + "license": "MIT", + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/write-json": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/write-json/-/write-json-0.2.2.tgz", + "integrity": "sha512-3HOXDnA8CgyaObzkxKPTHBw0feFlYMn9Mi8ZIrnoNJTTMABn+XOhmTsVlX/P/WeZuXEV9ApvQvR1fpZOOQ5FOg==", + "license": "MIT", + "dependencies": { + "write": "^0.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yargs-parser": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", + "integrity": "sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA==", + "license": "ISC", + "dependencies": { + "camelcase": "^3.0.0", + "lodash.assign": "^4.0.6" + } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", + "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.25.28 || ^4" + } + } + } +} diff --git a/mcp/package.json b/mcp/package.json new file mode 100644 index 0000000..ba970c6 --- /dev/null +++ b/mcp/package.json @@ -0,0 +1,20 @@ +{ + "name": "source-application-mcp", + "version": "0.1.0", + "private": true, + "type": "module", + "description": "Full-surface MCP server (stdio) for the Source Application on-chain file-source registry — reads, pure helpers, and signer-backed writes.", + "main": "server.mjs", + "scripts": { + "mcp": "node server.mjs", + "start": "node server.mjs" + }, + "engines": { + "node": ">=20" + }, + "dependencies": { + "@modelcontextprotocol/sdk": "^1.29.0", + "@noble/hashes": "^1.4.0", + "reputation-system": "github:agenticaihome/reputation-system#fix/seed-signer-derivation" + } +} diff --git a/mcp/server.mjs b/mcp/server.mjs new file mode 100644 index 0000000..869dddf --- /dev/null +++ b/mcp/server.mjs @@ -0,0 +1,52 @@ +#!/usr/bin/env node +/** + * Source Application MCP server — stdio transport, full surface. + * + * Exposes the ENTIRE operational surface of the Source Application library over + * MCP stdio, so any MCP-aware client (Claude, IDEs, agents) can read the + * on-chain file-source registry AND publish to it. Reads + pure helpers come + * from core.mjs; writes go through writes.mjs with the env-configured Signer + * (SOURCE_SIGNER_MODE=seed|unsigned — see lib.mjs). The tool registry is shared + * with the HTTP `.service` via tools.mjs, so the two transports never drift. + * + * Run: `npm run mcp` (from the mcp/ folder, after `npm install`). + */ +import { Server } from '@modelcontextprotocol/sdk/server/index.js'; +import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; +import { + CallToolRequestSchema, + ListToolsRequestSchema +} from '@modelcontextprotocol/sdk/types.js'; + +import { TOOLS, HANDLERS } from './tools.mjs'; + +// The reputation library logs verbosely via console.log; on stdio that stream +// IS the JSON-RPC channel, so route all console output to stderr to keep the +// protocol clean. (Harmless for the HTTP service, which doesn't do this.) +console.log = (...a) => process.stderr.write(a.map(String).join(' ') + '\n'); +console.info = console.log; +console.warn = console.log; + +const server = new Server( + { name: 'source-application', version: '0.1.0' }, + { capabilities: { tools: {} } } +); + +server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: TOOLS })); + +server.setRequestHandler(CallToolRequestSchema, async (req) => { + const { name, arguments: args = {} } = req.params; + const handler = HANDLERS[name]; + if (!handler) { + return { isError: true, content: [{ type: 'text', text: `Unknown tool: ${name}` }] }; + } + try { + const data = await handler(args); + return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] }; + } catch (err) { + return { isError: true, content: [{ type: 'text', text: `Error in ${name}: ${err?.message || String(err)}` }] }; + } +}); + +const transport = new StdioServerTransport(); +await server.connect(transport); diff --git a/mcp/tools.mjs b/mcp/tools.mjs new file mode 100644 index 0000000..4305291 --- /dev/null +++ b/mcp/tools.mjs @@ -0,0 +1,302 @@ +/** + * Shared MCP tool registry for the Source Application. + * + * A single TOOLS array + HANDLERS map, consumed by BOTH transports: + * - mcp/server.mjs (stdio, local agents/IDEs) + * - .service/server-http.mjs (Streamable HTTP, the Celaut microVM) + * + * so the two never drift. Reads + pure helpers come from core.mjs; writes from + * writes.mjs (env-configured signer, see lib.mjs). Write tools are no-ops on + * keys in unsigned mode — they return an unsigned tx for an external wallet. + */ +import * as core from './core.mjs'; +import * as writes from './writes.mjs'; +import { signerMode, EXPLORER_API } from './lib.mjs'; + +const sourceEntrySchema = { + type: 'object', + description: 'A single source entry (the R9 payload of a FILE_SOURCE box).', + properties: { + hashFunctionId: { type: 'string', description: 'Hash function identifier, HASH(EMPTY_INPUT).' }, + contentFormat: { type: 'string', description: 'Content file format (e.g. ".tar.gz") or a format box id.' }, + contentHash: { type: 'string', description: 'Hash of the content at the URL.' }, + rawFormat: { type: 'string', description: 'Raw (uncompressed) file format or a format box id.' }, + urlLink: { type: 'string', description: 'The download URL.' }, + isChunked: { type: 'boolean', description: 'If true, urlLink points to a manifest of chunk URLs.' } + }, + required: ['urlLink'], + additionalProperties: false +}; + +export const TOOLS = [ + // ── Info ────────────────────────────────────────────────────────────────── + { + name: 'get_source_config', + description: 'Return the Source Application Type NFT ids, the configured Explorer, and the active signer mode (seed|unsigned).', + inputSchema: { type: 'object', properties: {}, additionalProperties: false } + }, + + // ── Reads ───────────────────────────────────────────────────────────────── + { + name: 'fetch_file_sources_by_hash', + description: 'All FILE_SOURCE boxes (download sources) for a specific raw file hash.', + inputSchema: { type: 'object', properties: { fileHash: { type: 'string' } }, required: ['fileHash'], additionalProperties: false } + }, + { + name: 'fetch_invalid_file_sources', + description: 'All INVALID_FILE_SOURCE opinions targeting a specific FILE_SOURCE box id.', + inputSchema: { type: 'object', properties: { sourceBoxId: { type: 'string' } }, required: ['sourceBoxId'], additionalProperties: false } + }, + { + name: 'fetch_unavailable_sources', + description: 'All UNAVAILABLE_SOURCE opinions for a specific source URL.', + inputSchema: { type: 'object', properties: { sourceUrl: { type: 'string' } }, required: ['sourceUrl'], additionalProperties: false } + }, + { + name: 'fetch_profile_opinions', + description: 'All PROFILE_OPINION (trust/distrust) boxes targeting a specific profile token id.', + inputSchema: { type: 'object', properties: { profileTokenId: { type: 'string' } }, required: ['profileTokenId'], additionalProperties: false } + }, + { + name: 'fetch_file_sources_by_profile', + description: 'FILE_SOURCE boxes created by a specific profile token id.', + inputSchema: { type: 'object', properties: { profileTokenId: { type: 'string' }, limit: { type: 'number' } }, required: ['profileTokenId'], additionalProperties: false } + }, + { + name: 'fetch_invalid_file_sources_by_profile', + description: 'INVALID_FILE_SOURCE opinions created by a specific profile token id.', + inputSchema: { type: 'object', properties: { profileTokenId: { type: 'string' }, limit: { type: 'number' } }, required: ['profileTokenId'], additionalProperties: false } + }, + { + name: 'fetch_unavailable_sources_by_profile', + description: 'UNAVAILABLE_SOURCE opinions created by a specific profile token id.', + inputSchema: { type: 'object', properties: { profileTokenId: { type: 'string' }, limit: { type: 'number' } }, required: ['profileTokenId'], additionalProperties: false } + }, + { + name: 'fetch_profile_opinions_by_author', + description: 'PROFILE_OPINION boxes created BY a specific author token id (opinions given).', + inputSchema: { type: 'object', properties: { authorTokenId: { type: 'string' } }, required: ['authorTokenId'], additionalProperties: false } + }, + { + name: 'search_by_hash', + description: 'Full search by file hash: sources plus their invalidations and per-URL unavailabilities.', + inputSchema: { type: 'object', properties: { fileHash: { type: 'string' } }, required: ['fileHash'], additionalProperties: false } + }, + { + name: 'load_profile_data', + description: 'All data for a profile: its sources, invalidations, unavailabilities, opinions received and opinions given.', + inputSchema: { type: 'object', properties: { profileTokenId: { type: 'string' } }, required: ['profileTokenId'], additionalProperties: false } + }, + + // ── Pure helpers ────────────────────────────────────────────────────────-- + { + name: 'group_by_download_source', + description: 'Group FILE_SOURCE entries by their download URL (pure; operates on provided arrays/maps, no chain access).', + inputSchema: { + type: 'object', + properties: { + sources: { type: 'array', items: { type: 'object' } }, + invalidationsMap: { type: 'object' }, + unavailabilitiesMap: { type: 'object' } + }, + required: ['sources'], + additionalProperties: false + } + }, + { + name: 'group_by_profile', + description: 'Group FILE_SOURCE entries by the profile that submitted them (pure).', + inputSchema: { type: 'object', properties: { sources: { type: 'array', items: { type: 'object' } } }, required: ['sources'], additionalProperties: false } + }, + { + name: 'calculate_profile_trust', + description: 'Net trust score (trust − distrust reputation) for a profile, from provided PROFILE_OPINION boxes (pure).', + inputSchema: { + type: 'object', + properties: { profileTokenId: { type: 'string' }, opinions: { type: 'array', items: { type: 'object' } } }, + required: ['profileTokenId', 'opinions'], + additionalProperties: false + } + }, + { + name: 'aggregate_source_score', + description: 'Aggregate confirmations/invalidations/unavailabilities + owner trust into a scored FileSourceWithScore (pure).', + inputSchema: { + type: 'object', + properties: { + source: { type: 'object' }, + allSources: { type: 'array', items: { type: 'object' } }, + invalidations: { type: 'array', items: { type: 'object' } }, + unavailabilities: { type: 'array', items: { type: 'object' } }, + profileOpinions: { type: 'array', items: { type: 'object' } } + }, + required: ['source', 'allSources', 'invalidations', 'unavailabilities'], + additionalProperties: false + } + }, + { + name: 'get_primary_url', + description: 'Primary download URL of a FileSource (pure).', + inputSchema: { type: 'object', properties: { source: { type: 'object' } }, required: ['source'], additionalProperties: false } + }, + { + name: 'get_all_urls', + description: 'All download URLs of a FileSource (pure).', + inputSchema: { type: 'object', properties: { source: { type: 'object' } }, required: ['source'], additionalProperties: false } + }, + { + name: 'list_hash_algorithms', + description: 'Supported hash algorithm ids/labels (HASH_OPTIONS and the search subset).', + inputSchema: { type: 'object', properties: {}, additionalProperties: false } + }, + { + name: 'validate_hash', + description: 'Validate a hex hash for an algorithm id. Returns { valid, error } (pure).', + inputSchema: { type: 'object', properties: { hash: { type: 'string' }, algorithmId: { type: 'string' } }, required: ['hash', 'algorithmId'], additionalProperties: false } + }, + { + name: 'compute_hash', + description: 'Compute the hex hash of UTF-8 text or base64 bytes with a known algorithm id (sha256|sha3_256|keccak256|blake2b).', + inputSchema: { + type: 'object', + properties: { + text: { type: 'string', description: 'UTF-8 text to hash (use this OR base64).' }, + base64: { type: 'string', description: 'Base64-encoded bytes to hash (use this OR text).' }, + algorithmId: { type: 'string' } + }, + required: ['algorithmId'], + additionalProperties: false + } + }, + + // ── Writes (signer per SOURCE_SIGNER_MODE) ────────────────────────────────── + { + name: 'create_profile_box', + description: 'Mint a reputation PROFILE box (author identity holding rep tokens). Signing per SOURCE_SIGNER_MODE (seed submits; unsigned returns the tx).', + inputSchema: { type: 'object', properties: { content: { description: 'Optional profile content (string or JSON object).' } }, additionalProperties: false } + }, + { + name: 'add_file_source', + description: 'Publish a FILE_SOURCE opinion (R5=fileHash, R9=source entry) spending from the author PROFILE box mainBoxId. Signing per SOURCE_SIGNER_MODE.', + inputSchema: { + type: 'object', + properties: { mainBoxId: { type: 'string' }, fileHash: { type: 'string' }, sourceEntry: sourceEntrySchema }, + required: ['mainBoxId', 'fileHash', 'sourceEntry'], + additionalProperties: false + } + }, + { + name: 'confirm_source', + description: 'Confirm a source — same on-chain shape as add_file_source (a confirming FILE_SOURCE opinion). Signing per SOURCE_SIGNER_MODE.', + inputSchema: { + type: 'object', + properties: { mainBoxId: { type: 'string' }, fileHash: { type: 'string' }, sourceEntry: sourceEntrySchema }, + required: ['mainBoxId', 'fileHash', 'sourceEntry'], + additionalProperties: false + } + }, + { + name: 'update_file_source', + description: 'Update a file source. NOTE: the Node signer surface has no update_opinion; this publishes a NEW FILE_SOURCE opinion with the new content for the same hash. Signing per SOURCE_SIGNER_MODE.', + inputSchema: { + type: 'object', + properties: { mainBoxId: { type: 'string' }, fileHash: { type: 'string' }, sourceEntry: sourceEntrySchema }, + required: ['mainBoxId', 'fileHash', 'sourceEntry'], + additionalProperties: false + } + }, + { + name: 'mark_invalid_source', + description: 'Mark a FILE_SOURCE box invalid (negative opinion against INVALID_FILE_SOURCE_TYPE_NFT_ID, R5=sourceBoxId). Signing per SOURCE_SIGNER_MODE.', + inputSchema: { + type: 'object', + properties: { mainBoxId: { type: 'string' }, sourceBoxId: { type: 'string' } }, + required: ['mainBoxId', 'sourceBoxId'], + additionalProperties: false + } + }, + { + name: 'mark_unavailable_source', + description: 'Mark a URL unavailable (negative opinion against UNAVAILABLE_SOURCE_TYPE_NFT_ID, R5=sourceUrl). Signing per SOURCE_SIGNER_MODE.', + inputSchema: { + type: 'object', + properties: { mainBoxId: { type: 'string' }, sourceUrl: { type: 'string' } }, + required: ['mainBoxId', 'sourceUrl'], + additionalProperties: false + } + }, + { + name: 'trust_profile', + description: 'Trust or distrust a profile (PROFILE_OPINION, R5=profileTokenId, R8=isTrusted). Signing per SOURCE_SIGNER_MODE.', + inputSchema: { + type: 'object', + properties: { mainBoxId: { type: 'string' }, profileTokenId: { type: 'string' }, isTrusted: { type: 'boolean' } }, + required: ['mainBoxId', 'profileTokenId', 'isTrusted'], + additionalProperties: false + } + } +]; + +export const HANDLERS = { + // info + get_source_config: async () => ({ + explorerUri: EXPLORER_API, + signerMode: signerMode(), + typeNfts: { + PROFILE_TYPE_NFT_ID: core.PROFILE_TYPE_NFT_ID, + FILE_SOURCE_TYPE_NFT_ID: core.FILE_SOURCE_TYPE_NFT_ID, + INVALID_FILE_SOURCE_TYPE_NFT_ID: core.INVALID_FILE_SOURCE_TYPE_NFT_ID, + UNAVAILABLE_SOURCE_TYPE_NFT_ID: core.UNAVAILABLE_SOURCE_TYPE_NFT_ID, + PROFILE_OPINION_TYPE_NFT_ID: core.PROFILE_OPINION_TYPE_NFT_ID + }, + profileTotalSupply: core.PROFILE_TOTAL_SUPPLY + }), + + // reads + fetch_file_sources_by_hash: async ({ fileHash }) => core.fetchFileSourcesByHash(fileHash), + fetch_invalid_file_sources: async ({ sourceBoxId }) => core.fetchInvalidFileSources(sourceBoxId), + fetch_unavailable_sources: async ({ sourceUrl }) => core.fetchUnavailableSources(sourceUrl), + fetch_profile_opinions: async ({ profileTokenId }) => core.fetchProfileOpinions(profileTokenId), + fetch_file_sources_by_profile: async ({ profileTokenId, limit = 50 }) => core.fetchFileSourcesByProfile(profileTokenId, limit), + fetch_invalid_file_sources_by_profile: async ({ profileTokenId, limit = 50 }) => core.fetchInvalidFileSourcesByProfile(profileTokenId, limit), + fetch_unavailable_sources_by_profile: async ({ profileTokenId, limit = 50 }) => core.fetchUnavailableSourcesByProfile(profileTokenId, limit), + fetch_profile_opinions_by_author: async ({ authorTokenId }) => core.fetchProfileOpinionsByAuthor(authorTokenId), + search_by_hash: async ({ fileHash }) => core.searchByHash(fileHash), + load_profile_data: async ({ profileTokenId }) => core.loadProfileData(profileTokenId), + + // pure helpers + group_by_download_source: async ({ sources, invalidationsMap = {}, unavailabilitiesMap = {} }) => + core.groupByDownloadSource(sources, invalidationsMap, unavailabilitiesMap), + group_by_profile: async ({ sources }) => core.groupByProfile(sources), + calculate_profile_trust: async ({ profileTokenId, opinions }) => ({ + profileTokenId, + trustScore: core.calculateProfileTrust(profileTokenId, opinions) + }), + aggregate_source_score: async ({ source, allSources, invalidations, unavailabilities, profileOpinions = [] }) => + core.aggregateSourceScore(source, allSources, invalidations, unavailabilities, profileOpinions), + get_primary_url: async ({ source }) => ({ url: core.getPrimaryUrl(source) }), + get_all_urls: async ({ source }) => ({ urls: core.getAllUrls(source) }), + list_hash_algorithms: async () => ({ options: core.HASH_OPTIONS, search: core.SEARCH_HASH_ALGORITHMS }), + validate_hash: async ({ hash, algorithmId }) => { + const error = core.validateHash(hash, algorithmId); + return { valid: error === null, error }; + }, + compute_hash: async ({ text, base64, algorithmId }) => { + let data; + if (typeof base64 === 'string') data = new Uint8Array(Buffer.from(base64, 'base64')); + else if (typeof text === 'string') data = new TextEncoder().encode(text); + else throw new Error('compute_hash requires either `text` or `base64`.'); + const hash = await core.computeHash(data, algorithmId); + if (hash === null) throw new Error(`Unsupported hash algorithm: ${algorithmId}`); + return { algorithmId, hash }; + }, + + // writes + create_profile_box: async ({ content } = {}) => writes.createProfileBox(content ?? { name: 'Anon' }), + add_file_source: async ({ mainBoxId, fileHash, sourceEntry }) => writes.addFileSource(mainBoxId, fileHash, sourceEntry), + confirm_source: async ({ mainBoxId, fileHash, sourceEntry }) => writes.confirmSource(mainBoxId, fileHash, sourceEntry), + update_file_source: async ({ mainBoxId, fileHash, sourceEntry }) => writes.updateFileSource(mainBoxId, fileHash, sourceEntry), + mark_invalid_source: async ({ mainBoxId, sourceBoxId }) => writes.markInvalidSource(mainBoxId, sourceBoxId), + mark_unavailable_source: async ({ mainBoxId, sourceUrl }) => writes.markUnavailableSource(mainBoxId, sourceUrl), + trust_profile: async ({ mainBoxId, profileTokenId, isTrusted }) => writes.trustProfile(mainBoxId, profileTokenId, isTrusted) +}; diff --git a/mcp/writes.mjs b/mcp/writes.mjs new file mode 100644 index 0000000..24b5f8c --- /dev/null +++ b/mcp/writes.mjs @@ -0,0 +1,144 @@ +/** + * Source Application write surface — a faithful port of + * `src/lib/ergo/sourceStore.ts` to the headless Node signer path. + * + * The browser store calls the reputation library through the Nautilus `ergo` + * dApp connector; here every write goes through `create_*_with_signer` from + * `reputation-system/node` with the env-configured Signer (see lib.mjs). Each + * write maps to an opinion against the matching Type NFT: + * + * createProfileBox → create_profile (PROFILE_TYPE_NFT_ID) + * addFileSource → opinion(FILE_SOURCE_TYPE_NFT_ID, R5=fileHash, R8=true, R9=sourceEntry) + * confirmSource → addFileSource (a re-publish / confirming opinion) + * updateFileSource → opinion(FILE_SOURCE_TYPE_NFT_ID, ...) — see note below + * markInvalidSource → opinion(INVALID_FILE_SOURCE_TYPE_NFT_ID, R5=sourceBoxId, R8=false) + * markUnavailableSource → opinion(UNAVAILABLE_SOURCE_TYPE_NFT_ID, R5=sourceUrl, R8=false) + * trustProfile → opinion(PROFILE_OPINION_TYPE_NFT_ID, R5=profileTokenId, R8=isTrusted) + * + * Every opinion spends from the author's PROFILE box, addressed by `mainBoxId` + * and resolved on-chain via `fetchMainBox`. Results are normalized by + * `describeResult`: in seed mode a submitted txId; in unsigned mode the unsigned + * EIP-12 transaction for an external wallet to sign. + * + * NOTE on updateFileSource: the original spends the previous FILE_SOURCE box via + * `update_opinion` (a Nautilus-only flow). The Node entry exposes + * `create_*_with_signer` but NOT `update_opinion_with_signer`, so here + * updateFileSource publishes a NEW FILE_SOURCE opinion carrying the new content + * for the same hash. The previous box is left in place (it can be invalidated + * separately). This is called out in `.service/README.md` and the tool text. + */ +import { + create_profile_with_signer, + create_opinion_with_signer +} from 'reputation-system/node'; + +import { + PROFILE_TYPE_NFT_ID, + PROFILE_TOTAL_SUPPLY, + FILE_SOURCE_TYPE_NFT_ID, + INVALID_FILE_SOURCE_TYPE_NFT_ID, + UNAVAILABLE_SOURCE_TYPE_NFT_ID, + PROFILE_OPINION_TYPE_NFT_ID, + serializeSourceEntry +} from './core.mjs'; + +import { EXPLORER_API, makeSigner, fetchMainBox, describeResult } from './lib.mjs'; + +/** Mint a new reputation PROFILE box (the author identity that holds rep tokens). */ +export async function createProfileBox(content = { name: 'Anon' }) { + const signer = makeSigner(); + const result = await create_profile_with_signer( + signer, + EXPLORER_API, + PROFILE_TOTAL_SUPPLY, + PROFILE_TYPE_NFT_ID, + content, + 0n + ); + return describeResult(result); +} + +/** Add a FILE_SOURCE opinion: R5=fileHash, R8=positive, R9=serialized source entry. */ +export async function addFileSource(mainBoxId, fileHash, sourceEntry) { + const signer = makeSigner(); + const main_box = await fetchMainBox(mainBoxId); + const result = await create_opinion_with_signer( + signer, + EXPLORER_API, + 1, + FILE_SOURCE_TYPE_NFT_ID, + fileHash, + true, + serializeSourceEntry(sourceEntry), + false, + main_box + ); + return describeResult(result); +} + +/** Confirm a source — same on-chain shape as addFileSource (a confirming opinion). */ +export async function confirmSource(mainBoxId, fileHash, sourceEntry) { + return addFileSource(mainBoxId, fileHash, sourceEntry); +} + +/** + * Update a FILE_SOURCE — publishes a fresh FILE_SOURCE opinion with new content + * for the same hash (Node signer surface has no `update_opinion_with_signer`). + */ +export async function updateFileSource(mainBoxId, fileHash, sourceEntry) { + return addFileSource(mainBoxId, fileHash, sourceEntry); +} + +/** Mark a FILE_SOURCE box as invalid: opinion against INVALID_FILE_SOURCE_TYPE_NFT_ID, R5=sourceBoxId. */ +export async function markInvalidSource(mainBoxId, sourceBoxId) { + const signer = makeSigner(); + const main_box = await fetchMainBox(mainBoxId); + const result = await create_opinion_with_signer( + signer, + EXPLORER_API, + 1, + INVALID_FILE_SOURCE_TYPE_NFT_ID, + sourceBoxId, + false, + null, + false, + main_box + ); + return describeResult(result); +} + +/** Mark a URL unavailable: opinion against UNAVAILABLE_SOURCE_TYPE_NFT_ID, R5=sourceUrl. */ +export async function markUnavailableSource(mainBoxId, sourceUrl) { + const signer = makeSigner(); + const main_box = await fetchMainBox(mainBoxId); + const result = await create_opinion_with_signer( + signer, + EXPLORER_API, + 1, + UNAVAILABLE_SOURCE_TYPE_NFT_ID, + sourceUrl, + false, + null, + false, + main_box + ); + return describeResult(result); +} + +/** Trust / distrust a profile: opinion against PROFILE_OPINION_TYPE_NFT_ID, R5=profileTokenId, R8=isTrusted. */ +export async function trustProfile(mainBoxId, profileTokenId, isTrusted) { + const signer = makeSigner(); + const main_box = await fetchMainBox(mainBoxId); + const result = await create_opinion_with_signer( + signer, + EXPLORER_API, + 1, + PROFILE_OPINION_TYPE_NFT_ID, + profileTokenId, + Boolean(isTrusted), + null, + false, + main_box + ); + return describeResult(result); +} From 8c78ab7744b1603185abdf26e737b09f5f4f6925 Mon Sep 17 00:00:00 2001 From: Captain Efficiency Date: Sat, 27 Jun 2026 08:22:25 -0400 Subject: [PATCH 22/23] deps: pin reputation-system to upstream master instead of agenticaihome fork branch MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The .service pinned reputation-system to github:agenticaihome/reputation-system#fix/seed-signer-derivation — a feature branch on a fork that could be deleted, breaking installs. Upstream reputation-systems/reputation-system:master already carries the full /node export (NautilusSigner/SeedSigner/UnsignedSigner + create_*_with_signer) and the @scure BIP-39/32 Nautilus-compatible derivation, with dist/ committed. Re-point both root and .service to github:reputation-systems/reputation-system (canonical, undeletable). Verified: install exposes reputation-system/node and dist/signer.js contains the @scure derivation. Co-Authored-By: Claude Opus 4.8 --- .service/package.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.service/package.json b/.service/package.json index 51d3384..e5ac5ce 100644 --- a/.service/package.json +++ b/.service/package.json @@ -14,6 +14,6 @@ "dependencies": { "@modelcontextprotocol/sdk": "^1.29.0", "@noble/hashes": "^1.4.0", - "reputation-system": "github:agenticaihome/reputation-system#fix/seed-signer-derivation" + "reputation-system": "github:reputation-systems/reputation-system" } } diff --git a/package.json b/package.json index 99224a8..91cc39c 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,6 @@ "marked": "^16.4.1", "mode-watcher": "^0.5.0", "update": "^0.7.4", - "reputation-system": "reputation-systems/reputation-system" + "reputation-system": "github:reputation-systems/reputation-system" } } From e0ec9dda9ef90f2655a5541e3f646541bbd260b3 Mon Sep 17 00:00:00 2001 From: Captain Efficiency Date: Sat, 27 Jun 2026 15:02:46 -0400 Subject: [PATCH 23/23] refactor(mcp): reuse src for reads via esbuild bundle; dedup mcp/.service (DRY) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Addresses the review on #13: the ~470-line mcp/core.mjs and its byte-for-byte copy under .service/ hand-ported logic that already lives in src/lib/ergo/*, so the two would drift. Reads now reuse src — no re-implementation: - mcp/_entry.mjs re-exports the read surface straight from src/lib/ergo/ {sourceFetch,sourceObject,envs,hashUtils,utils}.ts. - mcp/build.mjs (esbuild, `npm run build:mcp`) compiles it into one Node-loadable ESM module, mcp/_generated/lib.bundle.mjs (committed so the sealed VM needs no build toolchain). Browser-only edges are rewritten: reputation-system → reputation-system/node (external, same package writes.mjs uses → no drift), $app/environment → stub (browser=false), dompurify → passthrough stub (read-only data, only JSON.parsed). - mcp/core.mjs is now an 84-line thin adapter (was 470) that re-exports the bundle and defaults explorerUri. Writes keep the necessary thin Node signer adapter (writes.mjs/lib.mjs) — that's glue, not duplication (sourceStore.ts is browser-ergo-bound). Dedup mcp/ ↔ .service/: removed the four copied modules from .service/; server-http.mjs now imports ../mcp/{core,lib,writes,tools}.mjs. The Dockerfile preserves the sibling layout in the VM (/app/service + /app/mcp) so ../mcp resolves identically. One source of truth, no committed duplicate logic. deps: align mcp/ reputation-system to upstream github:reputation-systems/ reputation-system (matching root + .service; the fork pin was missed in 8c78ab7); add esbuild devDependency + build:mcp script. Net: ~1,250 lines of hand-maintained/duplicated read logic removed; ~150 lines of build glue + an 84-line adapter added (plus the generated bundle artifact). Verified: npm install; build:mcp; node --check all .mjs; core.mjs loads with no svelte/$app/dompurify errors; stdio + HTTP tools/list both return the same 27 tools; REST read returns a clean []; unsigned-mode write returns an unsigned EIP-12 tx. No on-chain submit, no secrets. Co-Authored-By: Claude Opus 4.8 --- .service/Dockerfile | 34 +- .service/README.md | 18 +- .service/core.mjs | 470 --------- .service/lib.mjs | 109 --- .service/server-http.mjs | 11 +- .service/start.sh | 2 +- .service/tools.mjs | 302 ------ .service/writes.mjs | 144 --- mcp/README.md | 38 +- mcp/_entry.mjs | 62 ++ mcp/_generated/lib.bundle.mjs | 1661 ++++++++++++++++++++++++++++++++ mcp/_stubs/app-environment.mjs | 7 + mcp/_stubs/dompurify.mjs | 13 + mcp/build.mjs | 70 ++ mcp/core.mjs | 534 ++-------- mcp/package-lock.json | 474 ++++++++- mcp/package.json | 8 +- 17 files changed, 2444 insertions(+), 1513 deletions(-) delete mode 100644 .service/core.mjs delete mode 100644 .service/lib.mjs delete mode 100644 .service/tools.mjs delete mode 100644 .service/writes.mjs create mode 100644 mcp/_entry.mjs create mode 100644 mcp/_generated/lib.bundle.mjs create mode 100644 mcp/_stubs/app-environment.mjs create mode 100644 mcp/_stubs/dompurify.mjs create mode 100644 mcp/build.mjs diff --git a/.service/Dockerfile b/.service/Dockerfile index a4c6245..524fdea 100644 --- a/.service/Dockerfile +++ b/.service/Dockerfile @@ -1,8 +1,18 @@ # Celaut builds this image only to export its filesystem (docker buildx # --output type=tar); the container is never run directly. CMD/ENTRYPOINT, # EXPOSE and runtime ENV are intentionally omitted — the entrypoint, ports and -# envs are declared in service.json. Relative ./ COPY paths are auto-adjusted -# to service/... by the packer when this Dockerfile is moved into .service/. +# envs are declared in service.json. +# +# Build context is the repository root (the packer moves this Dockerfile into +# .service/ and rewrites `./` COPY paths to `service/...`). Non-`./` paths such +# as `mcp` are left as-is and resolve against the repo root, so the sealed VM can +# bundle the SINGLE shared registry that lives in mcp/ — no duplicated copies. +# +# Image layout mirrors the repo so `../mcp` imports in service/server-http.mjs +# resolve the same way inside the VM as in local dev: +# /app/service/server-http.mjs (this .service) +# /app/mcp/... (shared core/lib/writes/tools + prebuilt bundle) +# /app/node_modules (production deps from .service/package.json) FROM node:20-slim WORKDIR /app @@ -11,11 +21,17 @@ WORKDIR /app COPY ./package.json /app/package.json RUN npm install --omit=dev --no-audit --no-fund -# Application: HTTP+REST MCP server + shared registry core/lib/writes/tools + init wrapper. -COPY ./server-http.mjs /app/server-http.mjs -COPY ./core.mjs /app/core.mjs -COPY ./lib.mjs /app/lib.mjs -COPY ./writes.mjs /app/writes.mjs -COPY ./tools.mjs /app/tools.mjs -COPY ./start.sh /app/start.sh +# The shared MCP registry (reads bundled from src/, writes, tools) — single source +# of truth. The prebuilt _generated/lib.bundle.mjs is committed, so the VM needs no +# build toolchain. Copy node-only files; the mcp/node_modules + package*.json are +# intentionally excluded (deps come from /app/node_modules above). +COPY mcp/core.mjs /app/mcp/core.mjs +COPY mcp/lib.mjs /app/mcp/lib.mjs +COPY mcp/writes.mjs /app/mcp/writes.mjs +COPY mcp/tools.mjs /app/mcp/tools.mjs +COPY mcp/_generated /app/mcp/_generated + +# This service: HTTP+REST server + init wrapper. +COPY ./server-http.mjs /app/service/server-http.mjs +COPY ./start.sh /app/start.sh RUN chmod +x /app/start.sh diff --git a/.service/README.md b/.service/README.md index 5908336..6f89bbb 100644 --- a/.service/README.md +++ b/.service/README.md @@ -9,16 +9,24 @@ file-source registry surface over plain HTTP on `0.0.0.0:8080`: - `* /api/*` — a clean JSON REST mirror of every method (reads via `GET`, writes via `POST`). -Reads + pure helpers live in `core.mjs`; writes in `writes.mjs` (env-configured -signer in `lib.mjs`); the shared MCP tool registry is `tools.mjs`. The MCP and -REST layers call the same functions, so they never diverge. These four modules -are byte-for-byte copies of the ones under `../mcp/`. +Reads + pure helpers, writes, the env-configured signer, and the shared MCP tool +registry all live **once** under [`../mcp/`](../mcp); `server-http.mjs` imports +them directly (`../mcp/core.mjs`, `lib.mjs`, `writes.mjs`, `tools.mjs`) — there +are no duplicated copies in `.service/`. The MCP and REST layers call the same +functions, so they never diverge, and the on-chain read logic itself is bundled +from `src/` (see [`../mcp/README.md`](../mcp/README.md)). + +The `Dockerfile` preserves this sibling layout inside the sealed microVM +(`/app/service/server-http.mjs` + `/app/mcp/...`) so `../mcp` resolves the same +way in the VM as in local dev. The prebuilt `../mcp/_generated/lib.bundle.mjs` is +copied in, so the VM needs no build toolchain. ## Run locally ```bash +# from ../mcp first: npm install && npm run build:mcp (provides node_modules + bundle) npm install -npm start # binds 0.0.0.0:8080 +npm start # binds 0.0.0.0:8080, imports ../mcp/* curl localhost:8080/health ``` diff --git a/.service/core.mjs b/.service/core.mjs deleted file mode 100644 index a4f8253..0000000 --- a/.service/core.mjs +++ /dev/null @@ -1,470 +0,0 @@ -// @ts-nocheck — plain-ESM runtime module shared by the stdio MCP server, the -// HTTP/REST `.service`, and any bare-Node script. It mirrors the read surface of -// `src/lib/ergo/sourceFetch.ts` + the pure helpers of `src/lib/ergo/sourceObject.ts`, -// but is NOT TypeScript-checked and carries NO Svelte/Vite dependency. -/** - * Source Application registry — framework-agnostic data core. - * - * This is the SINGLE source of truth for the on-chain Source Application read - * layer outside the browser: the Type NFT ids, the box queries, the R9 - * (source-entry) parsers, the `fetch*` reads, and the pure aggregation helpers. - * - * The Explorer box search + block-timestamp lookup are imported from - * `reputation-system/node` — the headless, Node-safe entry of the reputation - * library (no `.svelte` imports in its graph). This is the SAME `searchBoxes` - * the Svelte app uses via `reputation-system`, so the reads never drift from the - * app, and they include the required reputation-proof `ergoTreeTemplateHash` - * filter that the Explorer's `/boxes/unspent/search` endpoint demands. - * - * Type NFT ids are copied verbatim from `src/lib/ergo/envs.ts`. Several are - * PLACEHOLDER values (all-zero hex); they are preserved as-is. Queries against a - * non-real Type NFT simply match no boxes and return a clean empty array, so the - * read tools degrade gracefully rather than throwing. - */ -import { searchBoxes, getTimestampFromBlockId } from 'reputation-system/node'; - -// ── Type NFT ids (verbatim from src/lib/ergo/envs.ts) ─────────────────────── -export const PROFILE_TYPE_NFT_ID = '1820fd428a0b92d61ce3f86cd98240fdeeee8a392900f0b19a2e017d66f79926'; -export const PROFILE_TOTAL_SUPPLY = 99999999; -export const FILE_SOURCE_TYPE_NFT_ID = '8299d98e15ebee7fa39ad716de7c8bb191790a1bf4b7c3f91af35a0e36187706'; -export const INVALID_FILE_SOURCE_TYPE_NFT_ID = '0000000000000000000000000000000000000000000000000000000000000002'; -export const UNAVAILABLE_SOURCE_TYPE_NFT_ID = '0000000000000000000000000000000000000000000000000000000000000003'; -export const PROFILE_OPINION_TYPE_NFT_ID = '0000000000000000000000000000000000000000000000000000000000000004'; - -export const DEFAULT_EXPLORER_API = - (typeof process !== 'undefined' && process.env && process.env.SOURCE_EXPLORER_API) || - 'https://api.ergoplatform.com'; - -export const isHexId = (v) => typeof v === 'string' && /^[0-9a-fA-F]{4,}$/.test(v); - -/** Decode a hex string (Explorer Coll[Byte] renderedValue) to UTF-8 text. */ -export function hexToUtf8(hexString) { - if (!hexString || typeof hexString !== 'string' || hexString.length % 2 !== 0) return null; - try { - const bytes = new Uint8Array(hexString.match(/.{1,2}/g).map((b) => parseInt(b, 16))); - return new TextDecoder('utf-8').decode(bytes); - } catch { - return null; - } -} - -// ── Source-entry (R9) serialization — verbatim from sourceObject.ts ───────── - -/** - * Serialize a SourceEntry to the R9 JSON string (Coll[Coll[Byte]] shape): - * [[hashFunctionId, contentFormat, contentHash, rawFormat, urlLink, isChunked]] - */ -export function serializeSourceEntry(entry) { - const tuple = [ - entry.hashFunctionId || '', - entry.contentFormat || '', - entry.contentHash || '', - entry.rawFormat || '', - entry.urlLink || '', - entry.isChunked ?? false - ]; - return JSON.stringify([tuple]); -} - -/** Deserialize an R9 content string into a SourceEntry (tuple/object/legacy-url). */ -export function deserializeSourceEntry(content) { - const empty = { hashFunctionId: '', contentFormat: '', contentHash: '', rawFormat: '', urlLink: '' }; - if (!content || content.trim() === '') return empty; - try { - const parsed = JSON.parse(content); - if (Array.isArray(parsed) && parsed.length > 0) { - const tuple = parsed[0]; - if (Array.isArray(tuple) && tuple.length >= 5) { - return { - hashFunctionId: tuple[0] || '', - contentFormat: tuple[1] || '', - contentHash: tuple[2] || '', - rawFormat: tuple[3] || '', - urlLink: tuple[4] || '', - isChunked: tuple[5] === true - }; - } - if (typeof tuple === 'object' && tuple !== null && !Array.isArray(tuple)) { - return { - hashFunctionId: tuple.hashFunctionId || '', - contentFormat: tuple.contentFormat || tuple.contentFormatNftId || '', - contentHash: tuple.contentHash || '', - rawFormat: tuple.rawFormat || tuple.rawFormatNftId || '', - urlLink: tuple.urlLink || '', - isChunked: tuple.isChunked === true - }; - } - } - } catch { - // not JSON — legacy plain URL string - } - return { hashFunctionId: '', contentFormat: '', contentHash: '', rawFormat: '', urlLink: content, isChunked: false }; -} - -// ── Internal helpers ──────────────────────────────────────────────────────── - -async function collectBoxes(generator) { - const boxes = []; - for await (const batch of generator) boxes.push(...batch); - return boxes; -} - -/** Block timestamp for a box; non-critical, so failures degrade to 0. */ -async function boxTimestamp(explorerUri, box) { - if (!box || !box.blockId) return 0; - try { - return await getTimestampFromBlockId(explorerUri, box.blockId); - } catch { - return 0; - } -} - -function parseR9SourceEntry(box) { - const rendered = box?.additionalRegisters?.R9?.renderedValue; - const raw = rendered ? hexToUtf8(rendered) : ''; - return deserializeSourceEntry(raw || ''); -} - -// ── Reads (port of src/lib/ergo/sourceFetch.ts, Svelte-free) ──────────────── -// Positional searchBoxes args (from reputation-system/node): -// (explorerUri, tokenId, typeNftId, objectPointer, isLocked, polarization, -// content, ownerAddress, limit, offset) - -/** All FILE_SOURCE boxes for a specific file hash. */ -export async function fetchFileSourcesByHash(fileHash, explorerUri = DEFAULT_EXPLORER_API) { - if (!isHexId(FILE_SOURCE_TYPE_NFT_ID)) return []; - const boxes = await collectBoxes( - searchBoxes(explorerUri, undefined, FILE_SOURCE_TYPE_NFT_ID, fileHash, undefined, undefined, undefined, undefined, undefined, undefined) - ); - const sources = []; - for (const box of boxes) { - if (!box.assets?.length) continue; - if (box.additionalRegisters.R6?.renderedValue !== 'false') continue; - if (!box.additionalRegisters.R9?.renderedValue) continue; - const sourceEntry = parseR9SourceEntry(box); - sources.push({ - id: box.boxId, - fileHash, - hashFunctionId: sourceEntry.hashFunctionId || '', - source: sourceEntry, - ownerTokenId: box.assets[0].tokenId, - reputationAmount: Number(box.assets[0].amount), - timestamp: await boxTimestamp(explorerUri, box), - isLocked: false, - transactionId: box.transactionId - }); - } - sources.sort((a, b) => b.timestamp - a.timestamp); - return sources; -} - -/** All INVALID_FILE_SOURCE boxes targeting a specific source box id. */ -export async function fetchInvalidFileSources(sourceBoxId, explorerUri = DEFAULT_EXPLORER_API) { - if (!isHexId(INVALID_FILE_SOURCE_TYPE_NFT_ID)) return []; - const boxes = await collectBoxes( - searchBoxes(explorerUri, undefined, INVALID_FILE_SOURCE_TYPE_NFT_ID, sourceBoxId, undefined, undefined, undefined, undefined, undefined, undefined) - ); - const out = []; - for (const box of boxes) { - if (!box.assets?.length) continue; - out.push({ - id: box.boxId, - targetBoxId: sourceBoxId, - authorTokenId: box.assets[0].tokenId, - reputationAmount: Number(box.assets[0].amount), - timestamp: await boxTimestamp(explorerUri, box), - transactionId: box.transactionId - }); - } - return out; -} - -/** All UNAVAILABLE_SOURCE boxes for a specific URL. */ -export async function fetchUnavailableSources(sourceUrl, explorerUri = DEFAULT_EXPLORER_API) { - if (!isHexId(UNAVAILABLE_SOURCE_TYPE_NFT_ID)) return []; - const boxes = await collectBoxes( - searchBoxes(explorerUri, undefined, UNAVAILABLE_SOURCE_TYPE_NFT_ID, sourceUrl, undefined, undefined, undefined, undefined, undefined, undefined) - ); - const out = []; - for (const box of boxes) { - if (!box.assets?.length) continue; - out.push({ - id: box.boxId, - sourceUrl, - authorTokenId: box.assets[0].tokenId, - reputationAmount: Number(box.assets[0].amount), - timestamp: await boxTimestamp(explorerUri, box), - transactionId: box.transactionId - }); - } - return out; -} - -/** All PROFILE_OPINION boxes targeting a specific profile token id. */ -export async function fetchProfileOpinions(profileTokenId, explorerUri = DEFAULT_EXPLORER_API) { - if (!isHexId(PROFILE_OPINION_TYPE_NFT_ID)) return []; - const boxes = await collectBoxes( - searchBoxes(explorerUri, undefined, PROFILE_OPINION_TYPE_NFT_ID, profileTokenId, undefined, undefined, undefined, undefined, undefined, undefined) - ); - const out = []; - for (const box of boxes) { - if (!box.assets?.length) continue; - if (box.additionalRegisters.R6?.renderedValue === 'false') continue; - out.push({ - id: box.boxId, - targetProfileTokenId: profileTokenId, - isTrusted: box.additionalRegisters.R8?.renderedValue === 'true', - authorTokenId: box.assets[0].tokenId, - reputationAmount: Number(box.assets[0].amount), - timestamp: await boxTimestamp(explorerUri, box), - transactionId: box.transactionId - }); - } - return out; -} - -/** FILE_SOURCE boxes created by a specific profile token id. */ -export async function fetchFileSourcesByProfile(profileTokenId, limit = 50, explorerUri = DEFAULT_EXPLORER_API) { - if (!isHexId(FILE_SOURCE_TYPE_NFT_ID)) return []; - const boxes = await collectBoxes( - searchBoxes(explorerUri, profileTokenId, FILE_SOURCE_TYPE_NFT_ID, undefined, undefined, undefined, undefined, undefined, limit, undefined) - ); - const sources = []; - for (const box of boxes) { - if (!box.assets?.length) continue; - if (box.additionalRegisters.R6?.renderedValue !== 'false') continue; - if (!box.additionalRegisters.R9?.renderedValue) continue; - const fileHash = box.additionalRegisters.R5?.renderedValue || '[Unknown]'; - const sourceEntry = parseR9SourceEntry(box); - sources.push({ - id: box.boxId, - fileHash, - hashFunctionId: sourceEntry.hashFunctionId || '', - source: sourceEntry, - ownerTokenId: box.assets[0].tokenId, - reputationAmount: Number(box.assets[0].amount), - timestamp: await boxTimestamp(explorerUri, box), - isLocked: false, - transactionId: box.transactionId - }); - } - sources.sort((a, b) => b.timestamp - a.timestamp); - return sources; -} - -/** INVALID_FILE_SOURCE boxes created by a specific profile. */ -export async function fetchInvalidFileSourcesByProfile(profileTokenId, limit = 50, explorerUri = DEFAULT_EXPLORER_API) { - if (!isHexId(INVALID_FILE_SOURCE_TYPE_NFT_ID)) return []; - const boxes = await collectBoxes( - searchBoxes(explorerUri, profileTokenId, INVALID_FILE_SOURCE_TYPE_NFT_ID, undefined, undefined, undefined, undefined, undefined, limit, undefined) - ); - const out = []; - for (const box of boxes) { - if (!box.assets?.length) continue; - out.push({ - id: box.boxId, - targetBoxId: hexToUtf8(box.additionalRegisters.R5?.renderedValue || '') || '', - authorTokenId: box.assets[0].tokenId, - reputationAmount: Number(box.assets[0].amount), - timestamp: await boxTimestamp(explorerUri, box), - transactionId: box.transactionId - }); - } - return out; -} - -/** UNAVAILABLE_SOURCE boxes created by a specific profile. */ -export async function fetchUnavailableSourcesByProfile(profileTokenId, limit = 50, explorerUri = DEFAULT_EXPLORER_API) { - if (!isHexId(UNAVAILABLE_SOURCE_TYPE_NFT_ID)) return []; - const boxes = await collectBoxes( - searchBoxes(explorerUri, profileTokenId, UNAVAILABLE_SOURCE_TYPE_NFT_ID, undefined, undefined, undefined, undefined, undefined, limit, undefined) - ); - const out = []; - for (const box of boxes) { - if (!box.assets?.length) continue; - out.push({ - id: box.boxId, - sourceUrl: hexToUtf8(box.additionalRegisters.R5?.renderedValue || '') || '', - authorTokenId: box.assets[0].tokenId, - reputationAmount: Number(box.assets[0].amount), - timestamp: await boxTimestamp(explorerUri, box), - transactionId: box.transactionId - }); - } - return out; -} - -/** PROFILE_OPINION boxes created by a specific author token id. */ -export async function fetchProfileOpinionsByAuthor(authorTokenId, explorerUri = DEFAULT_EXPLORER_API) { - if (!isHexId(PROFILE_OPINION_TYPE_NFT_ID)) return []; - const boxes = await collectBoxes( - searchBoxes(explorerUri, authorTokenId, PROFILE_OPINION_TYPE_NFT_ID, undefined, undefined, undefined, undefined, undefined, undefined, undefined) - ); - const out = []; - for (const box of boxes) { - if (!box.assets?.length) continue; - out.push({ - id: box.boxId, - targetProfileTokenId: hexToUtf8(box.additionalRegisters.R5?.renderedValue || '') || '', - isTrusted: box.additionalRegisters.R8?.renderedValue === 'true', - authorTokenId: box.assets[0].tokenId, - reputationAmount: Number(box.assets[0].amount), - timestamp: await boxTimestamp(explorerUri, box), - transactionId: box.transactionId - }); - } - return out; -} - -/** Full search by file hash: sources + their invalidations + URL unavailabilities. */ -export async function searchByHash(fileHash, explorerUri = DEFAULT_EXPLORER_API) { - const sources = await fetchFileSourcesByHash(fileHash, explorerUri); - const invalidations = {}; - const unavailabilities = {}; - for (const source of sources) { - const invs = await fetchInvalidFileSources(source.id, explorerUri); - if (invs.length > 0) invalidations[source.id] = invs; - const url = source.source?.urlLink; - if (url && !unavailabilities[url]) { - const unavs = await fetchUnavailableSources(url, explorerUri); - if (unavs.length > 0) unavailabilities[url] = unavs; - } - } - return { sources, invalidations, unavailabilities }; -} - -/** All data related to a profile: its sources, invalidations, unavailabilities, opinions received + given. */ -export async function loadProfileData(profileTokenId, explorerUri = DEFAULT_EXPLORER_API) { - const sources = await fetchFileSourcesByProfile(profileTokenId, 50, explorerUri); - const invalidations = await fetchInvalidFileSourcesByProfile(profileTokenId, 50, explorerUri); - const unavailabilities = await fetchUnavailableSourcesByProfile(profileTokenId, 50, explorerUri); - const opinions = await fetchProfileOpinions(profileTokenId, explorerUri); - const opinionsGiven = await fetchProfileOpinionsByAuthor(profileTokenId, explorerUri); - return { sources, invalidations, unavailabilities, opinions, opinionsGiven }; -} - -// ── Pure helpers (verbatim from sourceObject.ts) ──────────────────────────── - -export function getPrimaryUrl(source) { - return source?.source?.urlLink || ''; -} - -export function getAllUrls(source) { - return source?.source?.urlLink ? [source.source.urlLink] : []; -} - -export function groupByDownloadSource(sources, invalidationsMap = {}, unavailabilitiesMap = {}) { - const groups = {}; - for (const source of sources) { - const url = source.source?.urlLink; - if (!url) continue; - if (!groups[url]) { - groups[url] = { - sourceUrl: url, - sources: [], - owners: [], - invalidations: [], - unavailabilities: unavailabilitiesMap[url]?.data || [] - }; - } - if (!groups[url].sources.some((s) => s.id === source.id)) groups[url].sources.push(source); - if (!groups[url].owners.includes(source.ownerTokenId)) groups[url].owners.push(source.ownerTokenId); - const boxInvalidations = invalidationsMap[source.id]?.data || []; - groups[url].invalidations.push(...boxInvalidations); - } - return Object.values(groups).sort((a, b) => b.sources.length - a.sources.length); -} - -export function groupByProfile(sources) { - const groups = {}; - for (const source of sources) { - if (!groups[source.ownerTokenId]) { - groups[source.ownerTokenId] = { profileTokenId: source.ownerTokenId, sources: [] }; - } - groups[source.ownerTokenId].sources.push(source); - } - return Object.values(groups).sort((a, b) => b.sources.length - a.sources.length); -} - -export function calculateProfileTrust(profileTokenId, opinions) { - const trust = opinions.filter((o) => o.isTrusted).reduce((s, o) => s + o.reputationAmount, 0); - const distrust = opinions.filter((o) => !o.isTrusted).reduce((s, o) => s + o.reputationAmount, 0); - return trust - distrust; -} - -export function aggregateSourceScore(source, allSources, invalidations, unavailabilities, profileOpinions = []) { - const sourceUrl = source.source?.urlLink || ''; - const confirmations = allSources.filter( - (s) => s.id !== source.id && s.fileHash === source.fileHash && s.source?.urlLink === sourceUrl - ); - const filteredInvalidations = invalidations.filter((inv) => inv.targetBoxId === source.id); - const filteredUnavailabilities = unavailabilities.filter((un) => un.sourceUrl === sourceUrl); - const confirmationScore = confirmations.reduce((s, x) => s + x.reputationAmount, 0); - const invalidationScore = filteredInvalidations.reduce((s, x) => s + x.reputationAmount, 0); - const unavailabilityScore = filteredUnavailabilities.reduce((s, x) => s + x.reputationAmount, 0); - const ownerTrustScore = calculateProfileTrust(source.ownerTokenId, profileOpinions); - return { - ...source, - confirmations, - invalidations: filteredInvalidations, - unavailabilities: filteredUnavailabilities, - confirmationScore, - invalidationScore, - unavailabilityScore, - ownerTrustScore - }; -} - -// ── Hash helpers (from src/lib/ergo/hashUtils.ts) ─────────────────────────── - -export const HASH_ALGORITHMS = [ - { label: 'SHA3-256', value: 'sha3_256' }, - { label: 'Blake2b', value: 'blake2b' }, - { label: 'SHA-256', value: 'sha256' }, - { label: 'Keccak-256', value: 'keccak256' } -]; -export const HASH_OPTIONS = [...HASH_ALGORITHMS, { label: 'Custom', value: '__custom__' }]; -export const SEARCH_HASH_ALGORITHMS = HASH_ALGORITHMS; - -function uint8ArrayToHex(array) { - return [...array].map((x) => x.toString(16).padStart(2, '0')).join(''); -} - -/** Compute the hex hash of bytes with a known algorithm id, or null if unknown/custom. */ -export async function computeHash(data, algorithmId) { - const { sha256 } = await import('@noble/hashes/sha256'); - const { sha3_256, keccak_256 } = await import('@noble/hashes/sha3'); - const { blake2b } = await import('@noble/hashes/blake2b'); - switch (algorithmId) { - case 'sha256': - return uint8ArrayToHex(sha256(data)); - case 'sha3_256': - return uint8ArrayToHex(sha3_256(data)); - case 'keccak256': - return uint8ArrayToHex(keccak_256(data)); - case 'blake2b': - return uint8ArrayToHex(blake2b(data, { dkLen: 32 })); - default: - return null; - } -} - -/** Validate a hex hash for an algorithm. Returns null if valid, else an error string. */ -export function validateHash(hash, algorithmId) { - if (!hash || hash.trim() === '') return 'Hash cannot be empty'; - const trimmed = hash.trim(); - if (!/^[0-9a-fA-F]+$/.test(trimmed)) return 'Hash must contain only hexadecimal characters (0-9, a-f)'; - switch (algorithmId) { - case 'sha3_256': - case 'sha256': - case 'keccak256': - if (trimmed.length !== 64) return `${algorithmId} hash must be exactly 64 hex characters (256-bit). Got ${trimmed.length}.`; - break; - case 'blake2b': - if (trimmed.length !== 64 && trimmed.length !== 128) return `Blake2b hash must be 64 or 128 hex characters. Got ${trimmed.length}.`; - break; - default: - break; - } - return null; -} diff --git a/.service/lib.mjs b/.service/lib.mjs deleted file mode 100644 index 5eb24f4..0000000 --- a/.service/lib.mjs +++ /dev/null @@ -1,109 +0,0 @@ -/** - * Signer + main-box helpers for the Source Application MCP / `.service`. - * - * Source Application writes ARE reputation opinions (a FILE_SOURCE is a positive - * opinion against the FILE_SOURCE Type NFT; an invalidation/unavailability/trust - * are opinions against their respective Type NFTs). So publishing reuses the - * reputation library's headless Node entry exactly like - * `reputation-system/mcp/lib.mjs`: a Signer is built from the environment and - * passed to `create_profile_with_signer` / `create_opinion_with_signer`. - */ -import { SeedSigner, UnsignedSigner } from 'reputation-system/node'; - -export const EXPLORER_API = process.env.SOURCE_EXPLORER_API || 'https://api.ergoplatform.com'; - -/** - * Build the configured Signer from environment. - * - * SOURCE_SIGNER_MODE=seed – sign + submit autonomously with a mnemonic. - * SOURCE_MNEMONIC (required) BIP-39 mnemonic of the publishing wallet. - * SOURCE_MNEMONIC_PASSWORD optional BIP-39 passphrase. - * SOURCE_NODE_URI Ergo node for submission (default :9053). - * SOURCE_ADDRESS_INDEX change-path index (default 0). - * - * SOURCE_SIGNER_MODE=unsigned – build only; return the unsigned EIP-12 tx for - * an external wallet to sign. No key in the - * agent. (default) - * SOURCE_ADDRESS (required) the P2PK address whose UTXOs fund the tx. - */ -export function makeSigner() { - const mode = (process.env.SOURCE_SIGNER_MODE || 'unsigned').toLowerCase(); - if (mode === 'seed') { - const mnemonic = process.env.SOURCE_MNEMONIC; - if (!mnemonic) throw new Error('SOURCE_SIGNER_MODE=seed requires SOURCE_MNEMONIC.'); - return new SeedSigner({ - mnemonic, - password: process.env.SOURCE_MNEMONIC_PASSWORD, - addressIndex: process.env.SOURCE_ADDRESS_INDEX ? Number(process.env.SOURCE_ADDRESS_INDEX) : 0, - explorerUri: EXPLORER_API, - nodeUri: process.env.SOURCE_NODE_URI - }); - } - if (mode === 'unsigned') { - const address = process.env.SOURCE_ADDRESS; - if (!address) throw new Error('SOURCE_SIGNER_MODE=unsigned requires SOURCE_ADDRESS.'); - return new UnsignedSigner({ address, explorerUri: EXPLORER_API }); - } - throw new Error(`Unknown SOURCE_SIGNER_MODE: ${mode} (expected 'seed' or 'unsigned').`); -} - -/** Return the active signer mode (without constructing a signer / requiring keys). */ -export function signerMode() { - return (process.env.SOURCE_SIGNER_MODE || 'unsigned').toLowerCase(); -} - -/** - * Fetch a reputation-proof box by id and shape it into the RPBox `main_box` that - * `create_opinion_with_signer` consumes. R4 (rendered) is its Type NFT id, which - * the contract requires as a data input. For Source Application writes this is - * the author's PROFILE box (the box that holds their reputation token). - */ -export async function fetchMainBox(mainBoxId) { - if (!/^[0-9a-fA-F]{64}$/.test(mainBoxId || '')) { - throw new Error(`mainBoxId must be a 64-char hex box id (got: ${mainBoxId}).`); - } - const res = await fetch(`${EXPLORER_API}/api/v1/boxes/${mainBoxId}`); - if (!res.ok) throw new Error(`Failed to fetch main box ${mainBoxId}: HTTP ${res.status}`); - const box = await res.json(); - - const reputationTokenId = box?.assets?.[0]?.tokenId; - if (!reputationTokenId) { - throw new Error(`Box ${mainBoxId} holds no reputation token; not a valid main box.`); - } - - return { - box: { - boxId: box.boxId, - value: box.value.toString(), - assets: (box.assets ?? []).map((a) => ({ tokenId: a.tokenId, amount: a.amount.toString() })), - ergoTree: box.ergoTree, - creationHeight: box.creationHeight, - additionalRegisters: Object.entries(box.additionalRegisters ?? {}).reduce((acc, [k, v]) => { - acc[k] = v.serializedValue; - return acc; - }, {}), - index: box.index ?? 0, - transactionId: box.transactionId - }, - box_id: box.boxId, - type: { tokenId: box?.additionalRegisters?.R4?.renderedValue || '' }, - token_id: reputationTokenId, - token_amount: Number(box.assets[0].amount), - object_pointer: box?.additionalRegisters?.R5?.renderedValue || '', - is_locked: box?.additionalRegisters?.R6?.renderedValue === 'true', - polarization: box?.additionalRegisters?.R8?.renderedValue === 'true', - content: {} - }; -} - -/** Normalize a SignerResult into an MCP/REST-friendly payload. */ -export function describeResult(result) { - if (result.kind === 'submitted') { - return { submitted: true, txId: result.txId }; - } - return { - submitted: false, - unsignedTransaction: result.transaction, - note: 'Transaction built but not signed. Sign + submit with an external wallet (Nautilus/ErgoPay).' - }; -} diff --git a/.service/server-http.mjs b/.service/server-http.mjs index 9cc1092..4e9026e 100644 --- a/.service/server-http.mjs +++ b/.service/server-http.mjs @@ -26,10 +26,13 @@ import { ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js'; -import { TOOLS, HANDLERS } from './tools.mjs'; -import * as core from './core.mjs'; -import * as writes from './writes.mjs'; -import { signerMode, EXPLORER_API } from './lib.mjs'; +// Shared registry lives ONCE in ../mcp (no duplicated copies in .service). The +// Dockerfile preserves this sibling layout under /app (/app/service + /app/mcp) +// so `../mcp` resolves identically in local dev and in the sealed microVM. +import { TOOLS, HANDLERS } from '../mcp/tools.mjs'; +import * as core from '../mcp/core.mjs'; +import * as writes from '../mcp/writes.mjs'; +import { signerMode, EXPLORER_API } from '../mcp/lib.mjs'; // ── MCP server factory (stateless: one per request) ───────────────────────── diff --git a/.service/start.sh b/.service/start.sh index 1c079d1..1ca6575 100644 --- a/.service/start.sh +++ b/.service/start.sh @@ -4,4 +4,4 @@ # packer. Bind the MCP (Streamable HTTP) + REST server on 0.0.0.0:8080 (PORT # defaults to 8080 inside server-http.mjs). SOURCE_EXPLORER_API defaults to Ergo # mainnet; SOURCE_SIGNER_MODE defaults to 'unsigned' (no key in the VM). -exec node /app/server-http.mjs +exec node /app/service/server-http.mjs diff --git a/.service/tools.mjs b/.service/tools.mjs deleted file mode 100644 index 4305291..0000000 --- a/.service/tools.mjs +++ /dev/null @@ -1,302 +0,0 @@ -/** - * Shared MCP tool registry for the Source Application. - * - * A single TOOLS array + HANDLERS map, consumed by BOTH transports: - * - mcp/server.mjs (stdio, local agents/IDEs) - * - .service/server-http.mjs (Streamable HTTP, the Celaut microVM) - * - * so the two never drift. Reads + pure helpers come from core.mjs; writes from - * writes.mjs (env-configured signer, see lib.mjs). Write tools are no-ops on - * keys in unsigned mode — they return an unsigned tx for an external wallet. - */ -import * as core from './core.mjs'; -import * as writes from './writes.mjs'; -import { signerMode, EXPLORER_API } from './lib.mjs'; - -const sourceEntrySchema = { - type: 'object', - description: 'A single source entry (the R9 payload of a FILE_SOURCE box).', - properties: { - hashFunctionId: { type: 'string', description: 'Hash function identifier, HASH(EMPTY_INPUT).' }, - contentFormat: { type: 'string', description: 'Content file format (e.g. ".tar.gz") or a format box id.' }, - contentHash: { type: 'string', description: 'Hash of the content at the URL.' }, - rawFormat: { type: 'string', description: 'Raw (uncompressed) file format or a format box id.' }, - urlLink: { type: 'string', description: 'The download URL.' }, - isChunked: { type: 'boolean', description: 'If true, urlLink points to a manifest of chunk URLs.' } - }, - required: ['urlLink'], - additionalProperties: false -}; - -export const TOOLS = [ - // ── Info ────────────────────────────────────────────────────────────────── - { - name: 'get_source_config', - description: 'Return the Source Application Type NFT ids, the configured Explorer, and the active signer mode (seed|unsigned).', - inputSchema: { type: 'object', properties: {}, additionalProperties: false } - }, - - // ── Reads ───────────────────────────────────────────────────────────────── - { - name: 'fetch_file_sources_by_hash', - description: 'All FILE_SOURCE boxes (download sources) for a specific raw file hash.', - inputSchema: { type: 'object', properties: { fileHash: { type: 'string' } }, required: ['fileHash'], additionalProperties: false } - }, - { - name: 'fetch_invalid_file_sources', - description: 'All INVALID_FILE_SOURCE opinions targeting a specific FILE_SOURCE box id.', - inputSchema: { type: 'object', properties: { sourceBoxId: { type: 'string' } }, required: ['sourceBoxId'], additionalProperties: false } - }, - { - name: 'fetch_unavailable_sources', - description: 'All UNAVAILABLE_SOURCE opinions for a specific source URL.', - inputSchema: { type: 'object', properties: { sourceUrl: { type: 'string' } }, required: ['sourceUrl'], additionalProperties: false } - }, - { - name: 'fetch_profile_opinions', - description: 'All PROFILE_OPINION (trust/distrust) boxes targeting a specific profile token id.', - inputSchema: { type: 'object', properties: { profileTokenId: { type: 'string' } }, required: ['profileTokenId'], additionalProperties: false } - }, - { - name: 'fetch_file_sources_by_profile', - description: 'FILE_SOURCE boxes created by a specific profile token id.', - inputSchema: { type: 'object', properties: { profileTokenId: { type: 'string' }, limit: { type: 'number' } }, required: ['profileTokenId'], additionalProperties: false } - }, - { - name: 'fetch_invalid_file_sources_by_profile', - description: 'INVALID_FILE_SOURCE opinions created by a specific profile token id.', - inputSchema: { type: 'object', properties: { profileTokenId: { type: 'string' }, limit: { type: 'number' } }, required: ['profileTokenId'], additionalProperties: false } - }, - { - name: 'fetch_unavailable_sources_by_profile', - description: 'UNAVAILABLE_SOURCE opinions created by a specific profile token id.', - inputSchema: { type: 'object', properties: { profileTokenId: { type: 'string' }, limit: { type: 'number' } }, required: ['profileTokenId'], additionalProperties: false } - }, - { - name: 'fetch_profile_opinions_by_author', - description: 'PROFILE_OPINION boxes created BY a specific author token id (opinions given).', - inputSchema: { type: 'object', properties: { authorTokenId: { type: 'string' } }, required: ['authorTokenId'], additionalProperties: false } - }, - { - name: 'search_by_hash', - description: 'Full search by file hash: sources plus their invalidations and per-URL unavailabilities.', - inputSchema: { type: 'object', properties: { fileHash: { type: 'string' } }, required: ['fileHash'], additionalProperties: false } - }, - { - name: 'load_profile_data', - description: 'All data for a profile: its sources, invalidations, unavailabilities, opinions received and opinions given.', - inputSchema: { type: 'object', properties: { profileTokenId: { type: 'string' } }, required: ['profileTokenId'], additionalProperties: false } - }, - - // ── Pure helpers ────────────────────────────────────────────────────────-- - { - name: 'group_by_download_source', - description: 'Group FILE_SOURCE entries by their download URL (pure; operates on provided arrays/maps, no chain access).', - inputSchema: { - type: 'object', - properties: { - sources: { type: 'array', items: { type: 'object' } }, - invalidationsMap: { type: 'object' }, - unavailabilitiesMap: { type: 'object' } - }, - required: ['sources'], - additionalProperties: false - } - }, - { - name: 'group_by_profile', - description: 'Group FILE_SOURCE entries by the profile that submitted them (pure).', - inputSchema: { type: 'object', properties: { sources: { type: 'array', items: { type: 'object' } } }, required: ['sources'], additionalProperties: false } - }, - { - name: 'calculate_profile_trust', - description: 'Net trust score (trust − distrust reputation) for a profile, from provided PROFILE_OPINION boxes (pure).', - inputSchema: { - type: 'object', - properties: { profileTokenId: { type: 'string' }, opinions: { type: 'array', items: { type: 'object' } } }, - required: ['profileTokenId', 'opinions'], - additionalProperties: false - } - }, - { - name: 'aggregate_source_score', - description: 'Aggregate confirmations/invalidations/unavailabilities + owner trust into a scored FileSourceWithScore (pure).', - inputSchema: { - type: 'object', - properties: { - source: { type: 'object' }, - allSources: { type: 'array', items: { type: 'object' } }, - invalidations: { type: 'array', items: { type: 'object' } }, - unavailabilities: { type: 'array', items: { type: 'object' } }, - profileOpinions: { type: 'array', items: { type: 'object' } } - }, - required: ['source', 'allSources', 'invalidations', 'unavailabilities'], - additionalProperties: false - } - }, - { - name: 'get_primary_url', - description: 'Primary download URL of a FileSource (pure).', - inputSchema: { type: 'object', properties: { source: { type: 'object' } }, required: ['source'], additionalProperties: false } - }, - { - name: 'get_all_urls', - description: 'All download URLs of a FileSource (pure).', - inputSchema: { type: 'object', properties: { source: { type: 'object' } }, required: ['source'], additionalProperties: false } - }, - { - name: 'list_hash_algorithms', - description: 'Supported hash algorithm ids/labels (HASH_OPTIONS and the search subset).', - inputSchema: { type: 'object', properties: {}, additionalProperties: false } - }, - { - name: 'validate_hash', - description: 'Validate a hex hash for an algorithm id. Returns { valid, error } (pure).', - inputSchema: { type: 'object', properties: { hash: { type: 'string' }, algorithmId: { type: 'string' } }, required: ['hash', 'algorithmId'], additionalProperties: false } - }, - { - name: 'compute_hash', - description: 'Compute the hex hash of UTF-8 text or base64 bytes with a known algorithm id (sha256|sha3_256|keccak256|blake2b).', - inputSchema: { - type: 'object', - properties: { - text: { type: 'string', description: 'UTF-8 text to hash (use this OR base64).' }, - base64: { type: 'string', description: 'Base64-encoded bytes to hash (use this OR text).' }, - algorithmId: { type: 'string' } - }, - required: ['algorithmId'], - additionalProperties: false - } - }, - - // ── Writes (signer per SOURCE_SIGNER_MODE) ────────────────────────────────── - { - name: 'create_profile_box', - description: 'Mint a reputation PROFILE box (author identity holding rep tokens). Signing per SOURCE_SIGNER_MODE (seed submits; unsigned returns the tx).', - inputSchema: { type: 'object', properties: { content: { description: 'Optional profile content (string or JSON object).' } }, additionalProperties: false } - }, - { - name: 'add_file_source', - description: 'Publish a FILE_SOURCE opinion (R5=fileHash, R9=source entry) spending from the author PROFILE box mainBoxId. Signing per SOURCE_SIGNER_MODE.', - inputSchema: { - type: 'object', - properties: { mainBoxId: { type: 'string' }, fileHash: { type: 'string' }, sourceEntry: sourceEntrySchema }, - required: ['mainBoxId', 'fileHash', 'sourceEntry'], - additionalProperties: false - } - }, - { - name: 'confirm_source', - description: 'Confirm a source — same on-chain shape as add_file_source (a confirming FILE_SOURCE opinion). Signing per SOURCE_SIGNER_MODE.', - inputSchema: { - type: 'object', - properties: { mainBoxId: { type: 'string' }, fileHash: { type: 'string' }, sourceEntry: sourceEntrySchema }, - required: ['mainBoxId', 'fileHash', 'sourceEntry'], - additionalProperties: false - } - }, - { - name: 'update_file_source', - description: 'Update a file source. NOTE: the Node signer surface has no update_opinion; this publishes a NEW FILE_SOURCE opinion with the new content for the same hash. Signing per SOURCE_SIGNER_MODE.', - inputSchema: { - type: 'object', - properties: { mainBoxId: { type: 'string' }, fileHash: { type: 'string' }, sourceEntry: sourceEntrySchema }, - required: ['mainBoxId', 'fileHash', 'sourceEntry'], - additionalProperties: false - } - }, - { - name: 'mark_invalid_source', - description: 'Mark a FILE_SOURCE box invalid (negative opinion against INVALID_FILE_SOURCE_TYPE_NFT_ID, R5=sourceBoxId). Signing per SOURCE_SIGNER_MODE.', - inputSchema: { - type: 'object', - properties: { mainBoxId: { type: 'string' }, sourceBoxId: { type: 'string' } }, - required: ['mainBoxId', 'sourceBoxId'], - additionalProperties: false - } - }, - { - name: 'mark_unavailable_source', - description: 'Mark a URL unavailable (negative opinion against UNAVAILABLE_SOURCE_TYPE_NFT_ID, R5=sourceUrl). Signing per SOURCE_SIGNER_MODE.', - inputSchema: { - type: 'object', - properties: { mainBoxId: { type: 'string' }, sourceUrl: { type: 'string' } }, - required: ['mainBoxId', 'sourceUrl'], - additionalProperties: false - } - }, - { - name: 'trust_profile', - description: 'Trust or distrust a profile (PROFILE_OPINION, R5=profileTokenId, R8=isTrusted). Signing per SOURCE_SIGNER_MODE.', - inputSchema: { - type: 'object', - properties: { mainBoxId: { type: 'string' }, profileTokenId: { type: 'string' }, isTrusted: { type: 'boolean' } }, - required: ['mainBoxId', 'profileTokenId', 'isTrusted'], - additionalProperties: false - } - } -]; - -export const HANDLERS = { - // info - get_source_config: async () => ({ - explorerUri: EXPLORER_API, - signerMode: signerMode(), - typeNfts: { - PROFILE_TYPE_NFT_ID: core.PROFILE_TYPE_NFT_ID, - FILE_SOURCE_TYPE_NFT_ID: core.FILE_SOURCE_TYPE_NFT_ID, - INVALID_FILE_SOURCE_TYPE_NFT_ID: core.INVALID_FILE_SOURCE_TYPE_NFT_ID, - UNAVAILABLE_SOURCE_TYPE_NFT_ID: core.UNAVAILABLE_SOURCE_TYPE_NFT_ID, - PROFILE_OPINION_TYPE_NFT_ID: core.PROFILE_OPINION_TYPE_NFT_ID - }, - profileTotalSupply: core.PROFILE_TOTAL_SUPPLY - }), - - // reads - fetch_file_sources_by_hash: async ({ fileHash }) => core.fetchFileSourcesByHash(fileHash), - fetch_invalid_file_sources: async ({ sourceBoxId }) => core.fetchInvalidFileSources(sourceBoxId), - fetch_unavailable_sources: async ({ sourceUrl }) => core.fetchUnavailableSources(sourceUrl), - fetch_profile_opinions: async ({ profileTokenId }) => core.fetchProfileOpinions(profileTokenId), - fetch_file_sources_by_profile: async ({ profileTokenId, limit = 50 }) => core.fetchFileSourcesByProfile(profileTokenId, limit), - fetch_invalid_file_sources_by_profile: async ({ profileTokenId, limit = 50 }) => core.fetchInvalidFileSourcesByProfile(profileTokenId, limit), - fetch_unavailable_sources_by_profile: async ({ profileTokenId, limit = 50 }) => core.fetchUnavailableSourcesByProfile(profileTokenId, limit), - fetch_profile_opinions_by_author: async ({ authorTokenId }) => core.fetchProfileOpinionsByAuthor(authorTokenId), - search_by_hash: async ({ fileHash }) => core.searchByHash(fileHash), - load_profile_data: async ({ profileTokenId }) => core.loadProfileData(profileTokenId), - - // pure helpers - group_by_download_source: async ({ sources, invalidationsMap = {}, unavailabilitiesMap = {} }) => - core.groupByDownloadSource(sources, invalidationsMap, unavailabilitiesMap), - group_by_profile: async ({ sources }) => core.groupByProfile(sources), - calculate_profile_trust: async ({ profileTokenId, opinions }) => ({ - profileTokenId, - trustScore: core.calculateProfileTrust(profileTokenId, opinions) - }), - aggregate_source_score: async ({ source, allSources, invalidations, unavailabilities, profileOpinions = [] }) => - core.aggregateSourceScore(source, allSources, invalidations, unavailabilities, profileOpinions), - get_primary_url: async ({ source }) => ({ url: core.getPrimaryUrl(source) }), - get_all_urls: async ({ source }) => ({ urls: core.getAllUrls(source) }), - list_hash_algorithms: async () => ({ options: core.HASH_OPTIONS, search: core.SEARCH_HASH_ALGORITHMS }), - validate_hash: async ({ hash, algorithmId }) => { - const error = core.validateHash(hash, algorithmId); - return { valid: error === null, error }; - }, - compute_hash: async ({ text, base64, algorithmId }) => { - let data; - if (typeof base64 === 'string') data = new Uint8Array(Buffer.from(base64, 'base64')); - else if (typeof text === 'string') data = new TextEncoder().encode(text); - else throw new Error('compute_hash requires either `text` or `base64`.'); - const hash = await core.computeHash(data, algorithmId); - if (hash === null) throw new Error(`Unsupported hash algorithm: ${algorithmId}`); - return { algorithmId, hash }; - }, - - // writes - create_profile_box: async ({ content } = {}) => writes.createProfileBox(content ?? { name: 'Anon' }), - add_file_source: async ({ mainBoxId, fileHash, sourceEntry }) => writes.addFileSource(mainBoxId, fileHash, sourceEntry), - confirm_source: async ({ mainBoxId, fileHash, sourceEntry }) => writes.confirmSource(mainBoxId, fileHash, sourceEntry), - update_file_source: async ({ mainBoxId, fileHash, sourceEntry }) => writes.updateFileSource(mainBoxId, fileHash, sourceEntry), - mark_invalid_source: async ({ mainBoxId, sourceBoxId }) => writes.markInvalidSource(mainBoxId, sourceBoxId), - mark_unavailable_source: async ({ mainBoxId, sourceUrl }) => writes.markUnavailableSource(mainBoxId, sourceUrl), - trust_profile: async ({ mainBoxId, profileTokenId, isTrusted }) => writes.trustProfile(mainBoxId, profileTokenId, isTrusted) -}; diff --git a/.service/writes.mjs b/.service/writes.mjs deleted file mode 100644 index 24b5f8c..0000000 --- a/.service/writes.mjs +++ /dev/null @@ -1,144 +0,0 @@ -/** - * Source Application write surface — a faithful port of - * `src/lib/ergo/sourceStore.ts` to the headless Node signer path. - * - * The browser store calls the reputation library through the Nautilus `ergo` - * dApp connector; here every write goes through `create_*_with_signer` from - * `reputation-system/node` with the env-configured Signer (see lib.mjs). Each - * write maps to an opinion against the matching Type NFT: - * - * createProfileBox → create_profile (PROFILE_TYPE_NFT_ID) - * addFileSource → opinion(FILE_SOURCE_TYPE_NFT_ID, R5=fileHash, R8=true, R9=sourceEntry) - * confirmSource → addFileSource (a re-publish / confirming opinion) - * updateFileSource → opinion(FILE_SOURCE_TYPE_NFT_ID, ...) — see note below - * markInvalidSource → opinion(INVALID_FILE_SOURCE_TYPE_NFT_ID, R5=sourceBoxId, R8=false) - * markUnavailableSource → opinion(UNAVAILABLE_SOURCE_TYPE_NFT_ID, R5=sourceUrl, R8=false) - * trustProfile → opinion(PROFILE_OPINION_TYPE_NFT_ID, R5=profileTokenId, R8=isTrusted) - * - * Every opinion spends from the author's PROFILE box, addressed by `mainBoxId` - * and resolved on-chain via `fetchMainBox`. Results are normalized by - * `describeResult`: in seed mode a submitted txId; in unsigned mode the unsigned - * EIP-12 transaction for an external wallet to sign. - * - * NOTE on updateFileSource: the original spends the previous FILE_SOURCE box via - * `update_opinion` (a Nautilus-only flow). The Node entry exposes - * `create_*_with_signer` but NOT `update_opinion_with_signer`, so here - * updateFileSource publishes a NEW FILE_SOURCE opinion carrying the new content - * for the same hash. The previous box is left in place (it can be invalidated - * separately). This is called out in `.service/README.md` and the tool text. - */ -import { - create_profile_with_signer, - create_opinion_with_signer -} from 'reputation-system/node'; - -import { - PROFILE_TYPE_NFT_ID, - PROFILE_TOTAL_SUPPLY, - FILE_SOURCE_TYPE_NFT_ID, - INVALID_FILE_SOURCE_TYPE_NFT_ID, - UNAVAILABLE_SOURCE_TYPE_NFT_ID, - PROFILE_OPINION_TYPE_NFT_ID, - serializeSourceEntry -} from './core.mjs'; - -import { EXPLORER_API, makeSigner, fetchMainBox, describeResult } from './lib.mjs'; - -/** Mint a new reputation PROFILE box (the author identity that holds rep tokens). */ -export async function createProfileBox(content = { name: 'Anon' }) { - const signer = makeSigner(); - const result = await create_profile_with_signer( - signer, - EXPLORER_API, - PROFILE_TOTAL_SUPPLY, - PROFILE_TYPE_NFT_ID, - content, - 0n - ); - return describeResult(result); -} - -/** Add a FILE_SOURCE opinion: R5=fileHash, R8=positive, R9=serialized source entry. */ -export async function addFileSource(mainBoxId, fileHash, sourceEntry) { - const signer = makeSigner(); - const main_box = await fetchMainBox(mainBoxId); - const result = await create_opinion_with_signer( - signer, - EXPLORER_API, - 1, - FILE_SOURCE_TYPE_NFT_ID, - fileHash, - true, - serializeSourceEntry(sourceEntry), - false, - main_box - ); - return describeResult(result); -} - -/** Confirm a source — same on-chain shape as addFileSource (a confirming opinion). */ -export async function confirmSource(mainBoxId, fileHash, sourceEntry) { - return addFileSource(mainBoxId, fileHash, sourceEntry); -} - -/** - * Update a FILE_SOURCE — publishes a fresh FILE_SOURCE opinion with new content - * for the same hash (Node signer surface has no `update_opinion_with_signer`). - */ -export async function updateFileSource(mainBoxId, fileHash, sourceEntry) { - return addFileSource(mainBoxId, fileHash, sourceEntry); -} - -/** Mark a FILE_SOURCE box as invalid: opinion against INVALID_FILE_SOURCE_TYPE_NFT_ID, R5=sourceBoxId. */ -export async function markInvalidSource(mainBoxId, sourceBoxId) { - const signer = makeSigner(); - const main_box = await fetchMainBox(mainBoxId); - const result = await create_opinion_with_signer( - signer, - EXPLORER_API, - 1, - INVALID_FILE_SOURCE_TYPE_NFT_ID, - sourceBoxId, - false, - null, - false, - main_box - ); - return describeResult(result); -} - -/** Mark a URL unavailable: opinion against UNAVAILABLE_SOURCE_TYPE_NFT_ID, R5=sourceUrl. */ -export async function markUnavailableSource(mainBoxId, sourceUrl) { - const signer = makeSigner(); - const main_box = await fetchMainBox(mainBoxId); - const result = await create_opinion_with_signer( - signer, - EXPLORER_API, - 1, - UNAVAILABLE_SOURCE_TYPE_NFT_ID, - sourceUrl, - false, - null, - false, - main_box - ); - return describeResult(result); -} - -/** Trust / distrust a profile: opinion against PROFILE_OPINION_TYPE_NFT_ID, R5=profileTokenId, R8=isTrusted. */ -export async function trustProfile(mainBoxId, profileTokenId, isTrusted) { - const signer = makeSigner(); - const main_box = await fetchMainBox(mainBoxId); - const result = await create_opinion_with_signer( - signer, - EXPLORER_API, - 1, - PROFILE_OPINION_TYPE_NFT_ID, - profileTokenId, - Boolean(isTrusted), - null, - false, - main_box - ); - return describeResult(result); -} diff --git a/mcp/README.md b/mcp/README.md index a69d282..4cda28f 100644 --- a/mcp/README.md +++ b/mcp/README.md @@ -6,21 +6,51 @@ the Source Application on-chain file-source registry. Any MCP-aware client ```bash npm install +npm run build:mcp # bundle the read surface from src/ (regenerate the bundle) npm run mcp # speaks MCP over stdio ``` +## Reads reuse `src/` — they are not re-implemented + +The read layer (Explorer box queries, R9 parsing, the `fetch*` reads, the pure +aggregation helpers, the hash helpers, and the Type NFT ids) lives **once**, in +`src/lib/ergo/*`. `npm run build:mcp` runs [esbuild](https://esbuild.github.io) +over `_entry.mjs` to compile that TypeScript into a single Node-loadable ESM +module, `_generated/lib.bundle.mjs`. `core.mjs` is then a thin adapter that +re-exports the bundle and defaults `explorerUri`. Change a read in `src/`, rerun +`build:mcp`, and it flows through here, the stdio server, and the `.service` +alike — no second copy to drift. + +The published `dist/` is not bare-Node loadable (extensionless relative imports, +the `reputation-system` Svelte entry, a `dompurify` DOM dep), so the build +rewrites those browser-only edges: + +| Import | Resolved to | Why | +|--------|-------------|-----| +| `reputation-system` | `reputation-system/node` (kept **external**) | the headless entry exporting `searchBoxes` / `getTimestampFromBlockId`; external so reads resolve the SAME installed package that `writes.mjs` uses at runtime (no drift, no tx-builder graph inlined) | +| `$app/environment` | `_stubs/app-environment.mjs` (`browser = false`) | SvelteKit virtual module, absent in Node | +| `dompurify` | `_stubs/dompurify.mjs` (passthrough) | only used for display-safety before `JSON.parse`; the MCP/REST consumer is an agent, not a DOM — see the stub comment | + +Everything else (our `src`, plus the pure `@scure`/`@noble` helpers actually +reached) is inlined, so the bundle is self-contained apart from +`reputation-system/node`. + ## Layout | File | Role | |------|------| -| `core.mjs` | framework-agnostic reads + pure helpers + Type NFT ids (no Svelte). Port of `src/lib/ergo/sourceFetch.ts` + `sourceObject.ts`. | +| `_entry.mjs` | esbuild entry — re-exports the read surface straight from `../src/lib/ergo/*`. | +| `build.mjs` | esbuild build (`npm run build:mcp`) → `_generated/lib.bundle.mjs`. | +| `_generated/lib.bundle.mjs` | **generated** (committed) Node bundle of the `src/` read logic. | +| `_stubs/` | Node-safe aliases for `$app/environment` and `dompurify`. | +| `core.mjs` | thin adapter over the bundle: re-exports helpers/constants, defaults `explorerUri`. | | `lib.mjs` | `makeSigner()` (seed/unsigned from env), `fetchMainBox()`, `describeResult()`. | -| `writes.mjs` | write surface (port of `src/lib/ergo/sourceStore.ts`) via `reputation-system/node`'s `create_*_with_signer`. | +| `writes.mjs` | write surface via `reputation-system/node`'s `create_*_with_signer` (necessary Node signer glue — `sourceStore.ts` is browser-`ergo`-bound and can't be reused). | | `tools.mjs` | shared MCP tool registry (TOOLS + HANDLERS), also used by `../.service`. | | `server.mjs` | stdio bootstrap. | -The Streamable-HTTP + REST twin lives in [`../.service`](../.service) and reuses -the same `core/lib/writes/tools` modules. +The Streamable-HTTP + REST twin lives in [`../.service`](../.service) and imports +these same `core/lib/writes/tools` modules directly (no copies). ## Signer modes (env) diff --git a/mcp/_entry.mjs b/mcp/_entry.mjs new file mode 100644 index 0000000..7d6d06c --- /dev/null +++ b/mcp/_entry.mjs @@ -0,0 +1,62 @@ +/** + * Bundle ENTRY for the Source Application MCP read surface. + * + * This file re-exports the library's OWN TypeScript logic straight from + * `src/lib/ergo/*`. `mcp/build.mjs` runs esbuild over this entry to emit a single + * Node-loadable ESM module (`mcp/_generated/lib.bundle.mjs`) with the browser-only + * bits aliased away (`$app/environment`, `dompurify`) and `reputation-system` + * redirected to its Node entry (`reputation-system/node`, kept external). + * + * The point: the read business logic lives ONCE, in `src/`. Nothing here is a + * re-implementation — every symbol below is the real `src` function/constant. + */ + +// Reads (Explorer box queries + R9 parsing) — src/lib/ergo/sourceFetch.ts +export { + fetchFileSourcesByHash, + fetchInvalidFileSources, + fetchUnavailableSources, + fetchProfileOpinions, + fetchFileSourcesByProfile, + fetchInvalidFileSourcesByProfile, + fetchUnavailableSourcesByProfile, + fetchProfileOpinionsByAuthor, + searchByHash, + loadProfileData +} from '../src/lib/ergo/sourceFetch.ts'; + +// Pure helpers + R9 (de)serialization + types — src/lib/ergo/sourceObject.ts +export { + serializeSourceEntry, + deserializeSourceEntry, + getPrimaryUrl, + getAllUrls, + groupByDownloadSource, + groupByProfile, + calculateProfileTrust, + aggregateSourceScore +} from '../src/lib/ergo/sourceObject.ts'; + +// Type NFT ids + supply — src/lib/ergo/envs.ts +export { + PROFILE_TYPE_NFT_ID, + PROFILE_TOTAL_SUPPLY, + FILE_SOURCE_TYPE_NFT_ID, + INVALID_FILE_SOURCE_TYPE_NFT_ID, + UNAVAILABLE_SOURCE_TYPE_NFT_ID, + PROFILE_OPINION_TYPE_NFT_ID +} from '../src/lib/ergo/envs.ts'; + +// Hash helpers — src/lib/ergo/hashUtils.ts +export { + HASH_ALGORITHMS, + HASH_OPTIONS, + SEARCH_HASH_ALGORITHMS, + computeHash, + validateHash, + normalizeHashAlgorithmId, + getAlgorithmLabel +} from '../src/lib/ergo/hashUtils.ts'; + +// Byte/hex helper — src/lib/ergo/utils.ts +export { hexToUtf8 } from '../src/lib/ergo/utils.ts'; diff --git a/mcp/_generated/lib.bundle.mjs b/mcp/_generated/lib.bundle.mjs new file mode 100644 index 0000000..f177975 --- /dev/null +++ b/mcp/_generated/lib.bundle.mjs @@ -0,0 +1,1661 @@ +// AUTO-GENERATED by mcp/build.mjs from src/lib/ergo/*. Do not edit by hand. +// Regenerate with: npm run build:mcp + +// ../src/lib/ergo/sourceObject.ts +function getPrimaryUrl(source) { + return source.source?.urlLink || ""; +} +function getAllUrls(source) { + return source.source?.urlLink ? [source.source.urlLink] : []; +} +function groupByDownloadSource(sources, invalidationsMap, unavailabilitiesMap) { + const groups = {}; + for (const source of sources) { + const url = source.source?.urlLink; + if (!url) + continue; + if (!groups[url]) { + groups[url] = { + sourceUrl: url, + sources: [], + owners: [], + invalidations: [], + unavailabilities: unavailabilitiesMap[url]?.data || [] + }; + } + if (!groups[url].sources.some((s) => s.id === source.id)) { + groups[url].sources.push(source); + } + if (!groups[url].owners.includes(source.ownerTokenId)) { + groups[url].owners.push(source.ownerTokenId); + } + const boxInvalidations = invalidationsMap[source.id]?.data || []; + groups[url].invalidations.push(...boxInvalidations); + } + return Object.values(groups).sort((a, b) => b.sources.length - a.sources.length); +} +function groupByProfile(sources) { + const groups = {}; + for (const source of sources) { + if (!groups[source.ownerTokenId]) { + groups[source.ownerTokenId] = { + profileTokenId: source.ownerTokenId, + sources: [] + }; + } + groups[source.ownerTokenId].sources.push(source); + } + return Object.values(groups).sort((a, b) => b.sources.length - a.sources.length); +} +function calculateProfileTrust(profileTokenId, opinions) { + const trust = opinions.filter((op) => op.isTrusted).reduce((sum, op) => sum + op.reputationAmount, 0); + const distrust = opinions.filter((op) => !op.isTrusted).reduce((sum, op) => sum + op.reputationAmount, 0); + return trust - distrust; +} +function aggregateSourceScore(source, allSources, invalidations, unavailabilities, profileOpinions = []) { + const sourceUrl = source.source?.urlLink || ""; + const confirmations = allSources.filter( + (s) => s.id !== source.id && s.fileHash === source.fileHash && s.source?.urlLink === sourceUrl + ); + const filteredInvalidations = invalidations.filter((inv) => inv.targetBoxId === source.id); + const filteredUnavailabilities = unavailabilities.filter((un) => un.sourceUrl === sourceUrl); + const confirmationScore = confirmations.reduce((sum, s) => sum + s.reputationAmount, 0); + const invalidationScore = filteredInvalidations.reduce((sum, inv) => sum + inv.reputationAmount, 0); + const unavailabilityScore = filteredUnavailabilities.reduce((sum, un) => sum + un.reputationAmount, 0); + const ownerTrustScore = calculateProfileTrust(source.ownerTokenId, profileOpinions); + return { + ...source, + confirmations, + invalidations: filteredInvalidations, + unavailabilities: filteredUnavailabilities, + confirmationScore, + invalidationScore, + unavailabilityScore, + ownerTrustScore + }; +} +function serializeSourceEntry(entry) { + const tuple = [ + entry.hashFunctionId, + entry.contentFormat, + entry.contentHash, + entry.rawFormat, + entry.urlLink, + entry.isChunked ?? false + ]; + return JSON.stringify([tuple]); +} +function deserializeSourceEntry(content) { + const empty = { + hashFunctionId: "", + contentFormat: "", + contentHash: "", + rawFormat: "", + urlLink: "" + }; + if (!content || content.trim() === "") + return empty; + try { + const parsed = JSON.parse(content); + if (Array.isArray(parsed) && parsed.length > 0) { + const tuple = parsed[0]; + if (Array.isArray(tuple) && tuple.length >= 5) { + return { + hashFunctionId: tuple[0] || "", + contentFormat: tuple[1] || "", + contentHash: tuple[2] || "", + rawFormat: tuple[3] || "", + urlLink: tuple[4] || "", + isChunked: tuple[5] === true + }; + } + if (typeof tuple === "object" && tuple !== null && !Array.isArray(tuple)) { + return { + hashFunctionId: tuple.hashFunctionId || "", + contentFormat: tuple.contentFormat || tuple.contentFormatNftId || "", + contentHash: tuple.contentHash || "", + rawFormat: tuple.rawFormat || tuple.rawFormatNftId || "", + urlLink: tuple.urlLink || "", + isChunked: tuple.isChunked === true + }; + } + } + } catch { + } + return { + hashFunctionId: "", + contentFormat: "", + contentHash: "", + rawFormat: "", + urlLink: content, + isChunked: false + }; +} + +// ../node_modules/@noble/hashes/esm/utils.js +function isBytes(a) { + return a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === "Uint8Array"; +} +function anumber(n) { + if (!Number.isSafeInteger(n) || n < 0) + throw new Error("positive integer expected, got " + n); +} +function abytes(b, ...lengths) { + if (!isBytes(b)) + throw new Error("Uint8Array expected"); + if (lengths.length > 0 && !lengths.includes(b.length)) + throw new Error("Uint8Array expected of length " + lengths + ", got length=" + b.length); +} +function aexists(instance, checkFinished = true) { + if (instance.destroyed) + throw new Error("Hash instance has been destroyed"); + if (checkFinished && instance.finished) + throw new Error("Hash#digest() has already been called"); +} +function aoutput(out, instance) { + abytes(out); + const min = instance.outputLen; + if (out.length < min) { + throw new Error("digestInto() expects output buffer of length at least " + min); + } +} +function u32(arr) { + return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4)); +} +function clean(...arrays) { + for (let i = 0; i < arrays.length; i++) { + arrays[i].fill(0); + } +} +function createView(arr) { + return new DataView(arr.buffer, arr.byteOffset, arr.byteLength); +} +function rotr(word, shift) { + return word << 32 - shift | word >>> shift; +} +var isLE = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([287454020]).buffer)[0] === 68)(); +function byteSwap(word) { + return word << 24 & 4278190080 | word << 8 & 16711680 | word >>> 8 & 65280 | word >>> 24 & 255; +} +var swap8IfBE = isLE ? (n) => n : (n) => byteSwap(n); +function byteSwap32(arr) { + for (let i = 0; i < arr.length; i++) { + arr[i] = byteSwap(arr[i]); + } + return arr; +} +var swap32IfBE = isLE ? (u) => u : byteSwap32; +function utf8ToBytes(str) { + if (typeof str !== "string") + throw new Error("string expected"); + return new Uint8Array(new TextEncoder().encode(str)); +} +function toBytes(data) { + if (typeof data === "string") + data = utf8ToBytes(data); + abytes(data); + return data; +} +var Hash = class { +}; +function createHasher(hashCons) { + const hashC = (msg) => hashCons().update(toBytes(msg)).digest(); + const tmp = hashCons(); + hashC.outputLen = tmp.outputLen; + hashC.blockLen = tmp.blockLen; + hashC.create = () => hashCons(); + return hashC; +} +function createOptHasher(hashCons) { + const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest(); + const tmp = hashCons({}); + hashC.outputLen = tmp.outputLen; + hashC.blockLen = tmp.blockLen; + hashC.create = (opts) => hashCons(opts); + return hashC; +} + +// ../node_modules/@noble/hashes/esm/_blake.js +var BSIGMA = /* @__PURE__ */ Uint8Array.from([ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 14, + 10, + 4, + 8, + 9, + 15, + 13, + 6, + 1, + 12, + 0, + 2, + 11, + 7, + 5, + 3, + 11, + 8, + 12, + 0, + 5, + 2, + 15, + 13, + 10, + 14, + 3, + 6, + 7, + 1, + 9, + 4, + 7, + 9, + 3, + 1, + 13, + 12, + 11, + 14, + 2, + 6, + 5, + 10, + 4, + 0, + 15, + 8, + 9, + 0, + 5, + 7, + 2, + 4, + 10, + 15, + 14, + 1, + 11, + 12, + 6, + 8, + 3, + 13, + 2, + 12, + 6, + 10, + 0, + 11, + 8, + 3, + 4, + 13, + 7, + 5, + 15, + 14, + 1, + 9, + 12, + 5, + 1, + 15, + 14, + 13, + 4, + 10, + 0, + 7, + 6, + 3, + 9, + 2, + 8, + 11, + 13, + 11, + 7, + 14, + 12, + 1, + 3, + 9, + 5, + 0, + 15, + 4, + 8, + 6, + 2, + 10, + 6, + 15, + 14, + 9, + 11, + 3, + 0, + 8, + 12, + 2, + 13, + 7, + 1, + 4, + 10, + 5, + 10, + 2, + 8, + 4, + 7, + 6, + 1, + 5, + 15, + 11, + 9, + 14, + 3, + 12, + 13, + 0, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 14, + 10, + 4, + 8, + 9, + 15, + 13, + 6, + 1, + 12, + 0, + 2, + 11, + 7, + 5, + 3, + // Blake1, unused in others + 11, + 8, + 12, + 0, + 5, + 2, + 15, + 13, + 10, + 14, + 3, + 6, + 7, + 1, + 9, + 4, + 7, + 9, + 3, + 1, + 13, + 12, + 11, + 14, + 2, + 6, + 5, + 10, + 4, + 0, + 15, + 8, + 9, + 0, + 5, + 7, + 2, + 4, + 10, + 15, + 14, + 1, + 11, + 12, + 6, + 8, + 3, + 13, + 2, + 12, + 6, + 10, + 0, + 11, + 8, + 3, + 4, + 13, + 7, + 5, + 15, + 14, + 1, + 9 +]); + +// ../node_modules/@noble/hashes/esm/_md.js +function setBigUint64(view, byteOffset, value, isLE2) { + if (typeof view.setBigUint64 === "function") + return view.setBigUint64(byteOffset, value, isLE2); + const _32n2 = BigInt(32); + const _u32_max = BigInt(4294967295); + const wh = Number(value >> _32n2 & _u32_max); + const wl = Number(value & _u32_max); + const h = isLE2 ? 4 : 0; + const l = isLE2 ? 0 : 4; + view.setUint32(byteOffset + h, wh, isLE2); + view.setUint32(byteOffset + l, wl, isLE2); +} +function Chi(a, b, c) { + return a & b ^ ~a & c; +} +function Maj(a, b, c) { + return a & b ^ a & c ^ b & c; +} +var HashMD = class extends Hash { + constructor(blockLen, outputLen, padOffset, isLE2) { + super(); + this.finished = false; + this.length = 0; + this.pos = 0; + this.destroyed = false; + this.blockLen = blockLen; + this.outputLen = outputLen; + this.padOffset = padOffset; + this.isLE = isLE2; + this.buffer = new Uint8Array(blockLen); + this.view = createView(this.buffer); + } + update(data) { + aexists(this); + data = toBytes(data); + abytes(data); + const { view, buffer, blockLen } = this; + const len = data.length; + for (let pos = 0; pos < len; ) { + const take = Math.min(blockLen - this.pos, len - pos); + if (take === blockLen) { + const dataView = createView(data); + for (; blockLen <= len - pos; pos += blockLen) + this.process(dataView, pos); + continue; + } + buffer.set(data.subarray(pos, pos + take), this.pos); + this.pos += take; + pos += take; + if (this.pos === blockLen) { + this.process(view, 0); + this.pos = 0; + } + } + this.length += data.length; + this.roundClean(); + return this; + } + digestInto(out) { + aexists(this); + aoutput(out, this); + this.finished = true; + const { buffer, view, blockLen, isLE: isLE2 } = this; + let { pos } = this; + buffer[pos++] = 128; + clean(this.buffer.subarray(pos)); + if (this.padOffset > blockLen - pos) { + this.process(view, 0); + pos = 0; + } + for (let i = pos; i < blockLen; i++) + buffer[i] = 0; + setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE2); + this.process(view, 0); + const oview = createView(out); + const len = this.outputLen; + if (len % 4) + throw new Error("_sha2: outputLen should be aligned to 32bit"); + const outLen = len / 4; + const state = this.get(); + if (outLen > state.length) + throw new Error("_sha2: outputLen bigger than state"); + for (let i = 0; i < outLen; i++) + oview.setUint32(4 * i, state[i], isLE2); + } + digest() { + const { buffer, outputLen } = this; + this.digestInto(buffer); + const res = buffer.slice(0, outputLen); + this.destroy(); + return res; + } + _cloneInto(to) { + to || (to = new this.constructor()); + to.set(...this.get()); + const { blockLen, buffer, length, finished, destroyed, pos } = this; + to.destroyed = destroyed; + to.finished = finished; + to.length = length; + to.pos = pos; + if (length % blockLen) + to.buffer.set(buffer); + return to; + } + clone() { + return this._cloneInto(); + } +}; +var SHA256_IV = /* @__PURE__ */ Uint32Array.from([ + 1779033703, + 3144134277, + 1013904242, + 2773480762, + 1359893119, + 2600822924, + 528734635, + 1541459225 +]); + +// ../node_modules/@noble/hashes/esm/_u64.js +var U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1); +var _32n = /* @__PURE__ */ BigInt(32); +function fromBig(n, le = false) { + if (le) + return { h: Number(n & U32_MASK64), l: Number(n >> _32n & U32_MASK64) }; + return { h: Number(n >> _32n & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 }; +} +function split(lst, le = false) { + const len = lst.length; + let Ah = new Uint32Array(len); + let Al = new Uint32Array(len); + for (let i = 0; i < len; i++) { + const { h, l } = fromBig(lst[i], le); + [Ah[i], Al[i]] = [h, l]; + } + return [Ah, Al]; +} +var rotrSH = (h, l, s) => h >>> s | l << 32 - s; +var rotrSL = (h, l, s) => h << 32 - s | l >>> s; +var rotrBH = (h, l, s) => h << 64 - s | l >>> s - 32; +var rotrBL = (h, l, s) => h >>> s - 32 | l << 64 - s; +var rotr32H = (_h, l) => l; +var rotr32L = (h, _l) => h; +var rotlSH = (h, l, s) => h << s | l >>> 32 - s; +var rotlSL = (h, l, s) => l << s | h >>> 32 - s; +var rotlBH = (h, l, s) => l << s - 32 | h >>> 64 - s; +var rotlBL = (h, l, s) => h << s - 32 | l >>> 64 - s; +function add(Ah, Al, Bh, Bl) { + const l = (Al >>> 0) + (Bl >>> 0); + return { h: Ah + Bh + (l / 2 ** 32 | 0) | 0, l: l | 0 }; +} +var add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0); +var add3H = (low, Ah, Bh, Ch) => Ah + Bh + Ch + (low / 2 ** 32 | 0) | 0; + +// ../node_modules/@noble/hashes/esm/blake2.js +var B2B_IV = /* @__PURE__ */ Uint32Array.from([ + 4089235720, + 1779033703, + 2227873595, + 3144134277, + 4271175723, + 1013904242, + 1595750129, + 2773480762, + 2917565137, + 1359893119, + 725511199, + 2600822924, + 4215389547, + 528734635, + 327033209, + 1541459225 +]); +var BBUF = /* @__PURE__ */ new Uint32Array(32); +function G1b(a, b, c, d, msg, x) { + const Xl = msg[x], Xh = msg[x + 1]; + let Al = BBUF[2 * a], Ah = BBUF[2 * a + 1]; + let Bl = BBUF[2 * b], Bh = BBUF[2 * b + 1]; + let Cl = BBUF[2 * c], Ch = BBUF[2 * c + 1]; + let Dl = BBUF[2 * d], Dh = BBUF[2 * d + 1]; + let ll = add3L(Al, Bl, Xl); + Ah = add3H(ll, Ah, Bh, Xh); + Al = ll | 0; + ({ Dh, Dl } = { Dh: Dh ^ Ah, Dl: Dl ^ Al }); + ({ Dh, Dl } = { Dh: rotr32H(Dh, Dl), Dl: rotr32L(Dh, Dl) }); + ({ h: Ch, l: Cl } = add(Ch, Cl, Dh, Dl)); + ({ Bh, Bl } = { Bh: Bh ^ Ch, Bl: Bl ^ Cl }); + ({ Bh, Bl } = { Bh: rotrSH(Bh, Bl, 24), Bl: rotrSL(Bh, Bl, 24) }); + BBUF[2 * a] = Al, BBUF[2 * a + 1] = Ah; + BBUF[2 * b] = Bl, BBUF[2 * b + 1] = Bh; + BBUF[2 * c] = Cl, BBUF[2 * c + 1] = Ch; + BBUF[2 * d] = Dl, BBUF[2 * d + 1] = Dh; +} +function G2b(a, b, c, d, msg, x) { + const Xl = msg[x], Xh = msg[x + 1]; + let Al = BBUF[2 * a], Ah = BBUF[2 * a + 1]; + let Bl = BBUF[2 * b], Bh = BBUF[2 * b + 1]; + let Cl = BBUF[2 * c], Ch = BBUF[2 * c + 1]; + let Dl = BBUF[2 * d], Dh = BBUF[2 * d + 1]; + let ll = add3L(Al, Bl, Xl); + Ah = add3H(ll, Ah, Bh, Xh); + Al = ll | 0; + ({ Dh, Dl } = { Dh: Dh ^ Ah, Dl: Dl ^ Al }); + ({ Dh, Dl } = { Dh: rotrSH(Dh, Dl, 16), Dl: rotrSL(Dh, Dl, 16) }); + ({ h: Ch, l: Cl } = add(Ch, Cl, Dh, Dl)); + ({ Bh, Bl } = { Bh: Bh ^ Ch, Bl: Bl ^ Cl }); + ({ Bh, Bl } = { Bh: rotrBH(Bh, Bl, 63), Bl: rotrBL(Bh, Bl, 63) }); + BBUF[2 * a] = Al, BBUF[2 * a + 1] = Ah; + BBUF[2 * b] = Bl, BBUF[2 * b + 1] = Bh; + BBUF[2 * c] = Cl, BBUF[2 * c + 1] = Ch; + BBUF[2 * d] = Dl, BBUF[2 * d + 1] = Dh; +} +function checkBlake2Opts(outputLen, opts = {}, keyLen, saltLen, persLen) { + anumber(keyLen); + if (outputLen < 0 || outputLen > keyLen) + throw new Error("outputLen bigger than keyLen"); + const { key, salt, personalization } = opts; + if (key !== void 0 && (key.length < 1 || key.length > keyLen)) + throw new Error("key length must be undefined or 1.." + keyLen); + if (salt !== void 0 && salt.length !== saltLen) + throw new Error("salt must be undefined or " + saltLen); + if (personalization !== void 0 && personalization.length !== persLen) + throw new Error("personalization must be undefined or " + persLen); +} +var BLAKE2 = class extends Hash { + constructor(blockLen, outputLen) { + super(); + this.finished = false; + this.destroyed = false; + this.length = 0; + this.pos = 0; + anumber(blockLen); + anumber(outputLen); + this.blockLen = blockLen; + this.outputLen = outputLen; + this.buffer = new Uint8Array(blockLen); + this.buffer32 = u32(this.buffer); + } + update(data) { + aexists(this); + data = toBytes(data); + abytes(data); + const { blockLen, buffer, buffer32 } = this; + const len = data.length; + const offset = data.byteOffset; + const buf = data.buffer; + for (let pos = 0; pos < len; ) { + if (this.pos === blockLen) { + swap32IfBE(buffer32); + this.compress(buffer32, 0, false); + swap32IfBE(buffer32); + this.pos = 0; + } + const take = Math.min(blockLen - this.pos, len - pos); + const dataOffset = offset + pos; + if (take === blockLen && !(dataOffset % 4) && pos + take < len) { + const data32 = new Uint32Array(buf, dataOffset, Math.floor((len - pos) / 4)); + swap32IfBE(data32); + for (let pos32 = 0; pos + blockLen < len; pos32 += buffer32.length, pos += blockLen) { + this.length += blockLen; + this.compress(data32, pos32, false); + } + swap32IfBE(data32); + continue; + } + buffer.set(data.subarray(pos, pos + take), this.pos); + this.pos += take; + this.length += take; + pos += take; + } + return this; + } + digestInto(out) { + aexists(this); + aoutput(out, this); + const { pos, buffer32 } = this; + this.finished = true; + clean(this.buffer.subarray(pos)); + swap32IfBE(buffer32); + this.compress(buffer32, 0, true); + swap32IfBE(buffer32); + const out32 = u32(out); + this.get().forEach((v, i) => out32[i] = swap8IfBE(v)); + } + digest() { + const { buffer, outputLen } = this; + this.digestInto(buffer); + const res = buffer.slice(0, outputLen); + this.destroy(); + return res; + } + _cloneInto(to) { + const { buffer, length, finished, destroyed, outputLen, pos } = this; + to || (to = new this.constructor({ dkLen: outputLen })); + to.set(...this.get()); + to.buffer.set(buffer); + to.destroyed = destroyed; + to.finished = finished; + to.length = length; + to.pos = pos; + to.outputLen = outputLen; + return to; + } + clone() { + return this._cloneInto(); + } +}; +var BLAKE2b = class extends BLAKE2 { + constructor(opts = {}) { + const olen = opts.dkLen === void 0 ? 64 : opts.dkLen; + super(128, olen); + this.v0l = B2B_IV[0] | 0; + this.v0h = B2B_IV[1] | 0; + this.v1l = B2B_IV[2] | 0; + this.v1h = B2B_IV[3] | 0; + this.v2l = B2B_IV[4] | 0; + this.v2h = B2B_IV[5] | 0; + this.v3l = B2B_IV[6] | 0; + this.v3h = B2B_IV[7] | 0; + this.v4l = B2B_IV[8] | 0; + this.v4h = B2B_IV[9] | 0; + this.v5l = B2B_IV[10] | 0; + this.v5h = B2B_IV[11] | 0; + this.v6l = B2B_IV[12] | 0; + this.v6h = B2B_IV[13] | 0; + this.v7l = B2B_IV[14] | 0; + this.v7h = B2B_IV[15] | 0; + checkBlake2Opts(olen, opts, 64, 16, 16); + let { key, personalization, salt } = opts; + let keyLength = 0; + if (key !== void 0) { + key = toBytes(key); + keyLength = key.length; + } + this.v0l ^= this.outputLen | keyLength << 8 | 1 << 16 | 1 << 24; + if (salt !== void 0) { + salt = toBytes(salt); + const slt = u32(salt); + this.v4l ^= swap8IfBE(slt[0]); + this.v4h ^= swap8IfBE(slt[1]); + this.v5l ^= swap8IfBE(slt[2]); + this.v5h ^= swap8IfBE(slt[3]); + } + if (personalization !== void 0) { + personalization = toBytes(personalization); + const pers = u32(personalization); + this.v6l ^= swap8IfBE(pers[0]); + this.v6h ^= swap8IfBE(pers[1]); + this.v7l ^= swap8IfBE(pers[2]); + this.v7h ^= swap8IfBE(pers[3]); + } + if (key !== void 0) { + const tmp = new Uint8Array(this.blockLen); + tmp.set(key); + this.update(tmp); + } + } + // prettier-ignore + get() { + let { v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h } = this; + return [v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h]; + } + // prettier-ignore + set(v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h) { + this.v0l = v0l | 0; + this.v0h = v0h | 0; + this.v1l = v1l | 0; + this.v1h = v1h | 0; + this.v2l = v2l | 0; + this.v2h = v2h | 0; + this.v3l = v3l | 0; + this.v3h = v3h | 0; + this.v4l = v4l | 0; + this.v4h = v4h | 0; + this.v5l = v5l | 0; + this.v5h = v5h | 0; + this.v6l = v6l | 0; + this.v6h = v6h | 0; + this.v7l = v7l | 0; + this.v7h = v7h | 0; + } + compress(msg, offset, isLast) { + this.get().forEach((v, i) => BBUF[i] = v); + BBUF.set(B2B_IV, 16); + let { h, l } = fromBig(BigInt(this.length)); + BBUF[24] = B2B_IV[8] ^ l; + BBUF[25] = B2B_IV[9] ^ h; + if (isLast) { + BBUF[28] = ~BBUF[28]; + BBUF[29] = ~BBUF[29]; + } + let j = 0; + const s = BSIGMA; + for (let i = 0; i < 12; i++) { + G1b(0, 4, 8, 12, msg, offset + 2 * s[j++]); + G2b(0, 4, 8, 12, msg, offset + 2 * s[j++]); + G1b(1, 5, 9, 13, msg, offset + 2 * s[j++]); + G2b(1, 5, 9, 13, msg, offset + 2 * s[j++]); + G1b(2, 6, 10, 14, msg, offset + 2 * s[j++]); + G2b(2, 6, 10, 14, msg, offset + 2 * s[j++]); + G1b(3, 7, 11, 15, msg, offset + 2 * s[j++]); + G2b(3, 7, 11, 15, msg, offset + 2 * s[j++]); + G1b(0, 5, 10, 15, msg, offset + 2 * s[j++]); + G2b(0, 5, 10, 15, msg, offset + 2 * s[j++]); + G1b(1, 6, 11, 12, msg, offset + 2 * s[j++]); + G2b(1, 6, 11, 12, msg, offset + 2 * s[j++]); + G1b(2, 7, 8, 13, msg, offset + 2 * s[j++]); + G2b(2, 7, 8, 13, msg, offset + 2 * s[j++]); + G1b(3, 4, 9, 14, msg, offset + 2 * s[j++]); + G2b(3, 4, 9, 14, msg, offset + 2 * s[j++]); + } + this.v0l ^= BBUF[0] ^ BBUF[16]; + this.v0h ^= BBUF[1] ^ BBUF[17]; + this.v1l ^= BBUF[2] ^ BBUF[18]; + this.v1h ^= BBUF[3] ^ BBUF[19]; + this.v2l ^= BBUF[4] ^ BBUF[20]; + this.v2h ^= BBUF[5] ^ BBUF[21]; + this.v3l ^= BBUF[6] ^ BBUF[22]; + this.v3h ^= BBUF[7] ^ BBUF[23]; + this.v4l ^= BBUF[8] ^ BBUF[24]; + this.v4h ^= BBUF[9] ^ BBUF[25]; + this.v5l ^= BBUF[10] ^ BBUF[26]; + this.v5h ^= BBUF[11] ^ BBUF[27]; + this.v6l ^= BBUF[12] ^ BBUF[28]; + this.v6h ^= BBUF[13] ^ BBUF[29]; + this.v7l ^= BBUF[14] ^ BBUF[30]; + this.v7h ^= BBUF[15] ^ BBUF[31]; + clean(BBUF); + } + destroy() { + this.destroyed = true; + clean(this.buffer32); + this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + } +}; +var blake2b = /* @__PURE__ */ createOptHasher((opts) => new BLAKE2b(opts)); + +// ../node_modules/@noble/hashes/esm/blake2b.js +var blake2b2 = blake2b; + +// ../node_modules/@noble/hashes/esm/sha2.js +var SHA256_K = /* @__PURE__ */ Uint32Array.from([ + 1116352408, + 1899447441, + 3049323471, + 3921009573, + 961987163, + 1508970993, + 2453635748, + 2870763221, + 3624381080, + 310598401, + 607225278, + 1426881987, + 1925078388, + 2162078206, + 2614888103, + 3248222580, + 3835390401, + 4022224774, + 264347078, + 604807628, + 770255983, + 1249150122, + 1555081692, + 1996064986, + 2554220882, + 2821834349, + 2952996808, + 3210313671, + 3336571891, + 3584528711, + 113926993, + 338241895, + 666307205, + 773529912, + 1294757372, + 1396182291, + 1695183700, + 1986661051, + 2177026350, + 2456956037, + 2730485921, + 2820302411, + 3259730800, + 3345764771, + 3516065817, + 3600352804, + 4094571909, + 275423344, + 430227734, + 506948616, + 659060556, + 883997877, + 958139571, + 1322822218, + 1537002063, + 1747873779, + 1955562222, + 2024104815, + 2227730452, + 2361852424, + 2428436474, + 2756734187, + 3204031479, + 3329325298 +]); +var SHA256_W = /* @__PURE__ */ new Uint32Array(64); +var SHA256 = class extends HashMD { + constructor(outputLen = 32) { + super(64, outputLen, 8, false); + this.A = SHA256_IV[0] | 0; + this.B = SHA256_IV[1] | 0; + this.C = SHA256_IV[2] | 0; + this.D = SHA256_IV[3] | 0; + this.E = SHA256_IV[4] | 0; + this.F = SHA256_IV[5] | 0; + this.G = SHA256_IV[6] | 0; + this.H = SHA256_IV[7] | 0; + } + get() { + const { A, B, C, D, E, F, G, H } = this; + return [A, B, C, D, E, F, G, H]; + } + // prettier-ignore + set(A, B, C, D, E, F, G, H) { + this.A = A | 0; + this.B = B | 0; + this.C = C | 0; + this.D = D | 0; + this.E = E | 0; + this.F = F | 0; + this.G = G | 0; + this.H = H | 0; + } + process(view, offset) { + for (let i = 0; i < 16; i++, offset += 4) + SHA256_W[i] = view.getUint32(offset, false); + for (let i = 16; i < 64; i++) { + const W15 = SHA256_W[i - 15]; + const W2 = SHA256_W[i - 2]; + const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ W15 >>> 3; + const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ W2 >>> 10; + SHA256_W[i] = s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16] | 0; + } + let { A, B, C, D, E, F, G, H } = this; + for (let i = 0; i < 64; i++) { + const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25); + const T1 = H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i] | 0; + const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22); + const T2 = sigma0 + Maj(A, B, C) | 0; + H = G; + G = F; + F = E; + E = D + T1 | 0; + D = C; + C = B; + B = A; + A = T1 + T2 | 0; + } + A = A + this.A | 0; + B = B + this.B | 0; + C = C + this.C | 0; + D = D + this.D | 0; + E = E + this.E | 0; + F = F + this.F | 0; + G = G + this.G | 0; + H = H + this.H | 0; + this.set(A, B, C, D, E, F, G, H); + } + roundClean() { + clean(SHA256_W); + } + destroy() { + this.set(0, 0, 0, 0, 0, 0, 0, 0); + clean(this.buffer); + } +}; +var sha256 = /* @__PURE__ */ createHasher(() => new SHA256()); + +// ../node_modules/@noble/hashes/esm/sha256.js +var sha2562 = sha256; + +// ../src/lib/ergo/utils.ts +function hexToUtf8(hexString) { + try { + if (hexString.length % 2 !== 0) { + return null; + } + const byteArray = new Uint8Array(hexString.match(/.{1,2}/g).map((byte) => parseInt(byte, 16))); + const decoder = new TextDecoder("utf-8"); + const utf8String = decoder.decode(byteArray); + return utf8String; + } catch { + return null; + } +} + +// ../src/lib/ergo/envs.ts +var network_id = "mainnet"; +var default_explorer_uri = network_id == "mainnet" ? "https://api.ergoplatform.com" : "https://api-testnet.ergoplatform.com"; +var default_web_tx = network_id == "mainnet" ? "https://sigmaspace.io/en/transaction/" : "https://testnet.ergoplatform.com/transactions/"; +var default_web_addr = network_id == "mainnet" ? "https://sigmaspace.io/en/address/" : "https://testnet.ergoplatform.com/addresses/"; +var default_web_tkn = network_id == "mainnet" ? "https://sigmaspace.io/en/token/" : "https://testnet.ergoplatform.com/tokens/"; +var PROFILE_TYPE_NFT_ID = "1820fd428a0b92d61ce3f86cd98240fdeeee8a392900f0b19a2e017d66f79926"; +var PROFILE_TOTAL_SUPPLY = 99999999; +var FILE_SOURCE_TYPE_NFT_ID = "8299d98e15ebee7fa39ad716de7c8bb191790a1bf4b7c3f91af35a0e36187706"; +var INVALID_FILE_SOURCE_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000002"; +var UNAVAILABLE_SOURCE_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000003"; +var PROFILE_OPINION_TYPE_NFT_ID = "0000000000000000000000000000000000000000000000000000000000000004"; + +// _stubs/dompurify.mjs +var DOMPurify = { sanitize: (input) => input }; +var dompurify_default = DOMPurify; +var sanitize = DOMPurify.sanitize; + +// ../src/lib/ergo/object.ts +import "reputation-system/node"; + +// ../src/lib/ergo/sourceFetch.ts +import { getTimestampFromBlockId, searchBoxes } from "reputation-system/node"; +function parseR9Content(box) { + let rawContent = "[Unreadable Content]"; + try { + const rawValue = box.additionalRegisters.R9?.renderedValue; + if (rawValue) { + rawContent = hexToUtf8(rawValue) ?? "[Empty Content]"; + rawContent = dompurify_default.sanitize(rawContent); + } + } catch (e) { + console.warn(`Error decoding R9 for box ${box.boxId}`, e); + rawContent = ""; + } + return { source: deserializeSourceEntry(rawContent) }; +} +async function fetchFileSourcesByHash(fileHash, explorerUri) { + console.log("Fetching file sources for hash:", fileHash); + const generator = searchBoxes(explorerUri, void 0, FILE_SOURCE_TYPE_NFT_ID, fileHash, void 0, void 0, void 0, void 0, void 0, void 0); + const boxes = await collectBoxes(generator); + const sources = []; + console.log(`Found ${boxes.length} boxes for file hash ${fileHash}`); + for (const box of boxes) { + if (!box.assets?.length) + continue; + if (box.additionalRegisters.R6?.renderedValue !== "false") + continue; + if (!box.additionalRegisters.R9?.renderedValue) + continue; + const { source: sourceEntry } = parseR9Content(box); + const hashFunctionId = sourceEntry.hashFunctionId || ""; + const source = { + id: box.boxId, + fileHash, + hashFunctionId, + source: sourceEntry, + ownerTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await getTimestampFromBlockId(explorerUri, box.blockId), + isLocked: false, + transactionId: box.transactionId + }; + sources.push(source); + } + sources.sort((a, b) => b.timestamp - a.timestamp); + console.log(`Returning ${sources.length} valid sources for file hash ${fileHash}`); + return sources; +} +async function fetchInvalidFileSources(sourceBoxId, explorerUri) { + console.log("Fetching invalidations for source:", sourceBoxId); + const generator = searchBoxes(explorerUri, void 0, INVALID_FILE_SOURCE_TYPE_NFT_ID, sourceBoxId, void 0, void 0, void 0, void 0, void 0, void 0); + const boxes = await collectBoxes(generator); + const invalidations = []; + for (const box of boxes) { + if (!box.assets?.length) + continue; + const invalidation = { + id: box.boxId, + targetBoxId: sourceBoxId, + authorTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await getTimestampFromBlockId(explorerUri, box.blockId), + transactionId: box.transactionId + }; + invalidations.push(invalidation); + } + return invalidations; +} +async function fetchUnavailableSources(sourceUrl, explorerUri) { + console.log("Fetching unavailabilities for URL:", sourceUrl); + const generator = searchBoxes(explorerUri, void 0, UNAVAILABLE_SOURCE_TYPE_NFT_ID, sourceUrl, void 0, void 0, void 0, void 0, void 0, void 0); + const boxes = await collectBoxes(generator); + const unavailabilities = []; + for (const box of boxes) { + if (!box.assets?.length) + continue; + const unavailability = { + id: box.boxId, + sourceUrl, + authorTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await getTimestampFromBlockId(explorerUri, box.blockId), + transactionId: box.transactionId + }; + unavailabilities.push(unavailability); + } + return unavailabilities; +} +async function fetchProfileOpinions(profileTokenId, explorerUri) { + console.log("Fetching profile opinions for:", profileTokenId); + const generator = searchBoxes(explorerUri, void 0, PROFILE_OPINION_TYPE_NFT_ID, profileTokenId, void 0, void 0, void 0, void 0, void 0, void 0); + const boxes = await collectBoxes(generator); + const opinions = []; + for (const box of boxes) { + if (!box.assets?.length) + continue; + if (box.additionalRegisters.R6?.renderedValue === "false") + continue; + const opinion = { + id: box.boxId, + targetProfileTokenId: profileTokenId, + isTrusted: box.additionalRegisters.R8?.renderedValue === "true", + authorTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await getTimestampFromBlockId(explorerUri, box.blockId), + transactionId: box.transactionId + }; + opinions.push(opinion); + } + return opinions; +} +async function fetchFileSourcesByProfile(profileTokenId, limit = 50, explorerUri) { + console.log("Fetching file sources for profile:", profileTokenId); + const generator = searchBoxes(explorerUri, profileTokenId, FILE_SOURCE_TYPE_NFT_ID, void 0, void 0, void 0, void 0, void 0, limit, void 0); + const boxes = await collectBoxes(generator); + const sources = []; + for (const box of boxes) { + if (!box.assets?.length) + continue; + if (box.additionalRegisters.R6?.renderedValue !== "false") + continue; + if (!box.additionalRegisters.R9?.renderedValue) + continue; + let fileHash = "[Unknown]"; + try { + const rawR5 = box.additionalRegisters.R5?.renderedValue; + if (rawR5) { + fileHash = rawR5; + } + } catch (e) { + console.warn(`Error decoding R5 for box ${box.boxId}`, e); + } + const { source: sourceEntry } = parseR9Content(box); + const hashFunctionId = sourceEntry.hashFunctionId || ""; + const source = { + id: box.boxId, + fileHash, + hashFunctionId, + source: sourceEntry, + ownerTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await getTimestampFromBlockId(explorerUri, box.blockId), + isLocked: false, + transactionId: box.transactionId + }; + sources.push(source); + } + sources.sort((a, b) => b.timestamp - a.timestamp); + return sources; +} +async function fetchInvalidFileSourcesByProfile(profileTokenId, limit = 50, explorerUri) { + console.log("Fetching invalidations by profile:", profileTokenId); + const generator = searchBoxes(explorerUri, profileTokenId, INVALID_FILE_SOURCE_TYPE_NFT_ID, void 0, void 0, void 0, void 0, void 0, limit, void 0); + const boxes = await collectBoxes(generator); + const invalidations = []; + for (const box of boxes) { + if (!box.assets?.length) + continue; + invalidations.push({ + id: box.boxId, + targetBoxId: hexToUtf8(box.additionalRegisters.R5?.renderedValue || "") || "", + authorTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await getTimestampFromBlockId(explorerUri, box.blockId), + transactionId: box.transactionId + }); + } + return invalidations; +} +async function fetchUnavailableSourcesByProfile(profileTokenId, limit = 50, explorerUri) { + console.log("Fetching unavailabilities by profile:", profileTokenId); + const generator = searchBoxes(explorerUri, profileTokenId, UNAVAILABLE_SOURCE_TYPE_NFT_ID, void 0, void 0, void 0, void 0, void 0, limit, void 0); + const boxes = await collectBoxes(generator); + const unavailabilities = []; + for (const box of boxes) { + if (!box.assets?.length) + continue; + unavailabilities.push({ + id: box.boxId, + sourceUrl: hexToUtf8(box.additionalRegisters.R5?.renderedValue || "") || "", + authorTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await getTimestampFromBlockId(explorerUri, box.blockId), + transactionId: box.transactionId + }); + } + return unavailabilities; +} +async function fetchProfileOpinionsByAuthor(authorTokenId, explorerUri) { + console.log("Fetching profile opinions by author:", authorTokenId); + const generator = searchBoxes(explorerUri, authorTokenId, PROFILE_OPINION_TYPE_NFT_ID, void 0, void 0, void 0, void 0, void 0, void 0, void 0); + const boxes = await collectBoxes(generator); + const opinions = []; + for (const box of boxes) { + if (!box.assets?.length) + continue; + opinions.push({ + id: box.boxId, + targetProfileTokenId: hexToUtf8(box.additionalRegisters.R5?.renderedValue || "") || "", + isTrusted: box.additionalRegisters.R8?.renderedValue === "true", + authorTokenId: box.assets[0].tokenId, + reputationAmount: Number(box.assets[0].amount), + timestamp: await getTimestampFromBlockId(explorerUri, box.blockId), + transactionId: box.transactionId + }); + } + return opinions; +} +async function searchByHash(fileHash, explorerUri) { + const sources = await fetchFileSourcesByHash(fileHash, explorerUri); + const invalidations = {}; + const unavailabilities = {}; + for (const source of sources) { + const invs = await fetchInvalidFileSources(source.id, explorerUri); + if (invs.length > 0) + invalidations[source.id] = invs; + const url = source.source?.urlLink; + if (url && !unavailabilities[url]) { + const unavs = await fetchUnavailableSources(url, explorerUri); + if (unavs.length > 0) + unavailabilities[url] = unavs; + } + } + return { sources, invalidations, unavailabilities }; +} +async function loadProfileData(profileTokenId, explorerUri) { + const sources = await fetchFileSourcesByProfile(profileTokenId, 50, explorerUri); + const invalidations = await fetchInvalidFileSourcesByProfile(profileTokenId, 50, explorerUri); + const unavailabilities = await fetchUnavailableSourcesByProfile(profileTokenId, 50, explorerUri); + const opinions = await fetchProfileOpinions(profileTokenId, explorerUri); + const opinionsGiven = await fetchProfileOpinionsByAuthor(profileTokenId, explorerUri); + return { + sources, + invalidations, + unavailabilities, + opinions, + opinionsGiven + }; +} +async function collectBoxes(generator) { + const boxes = []; + for await (const batch of generator) { + boxes.push(...batch); + } + return boxes; +} + +// ../node_modules/@noble/hashes/esm/sha3.js +var _0n = BigInt(0); +var _1n = BigInt(1); +var _2n = BigInt(2); +var _7n = BigInt(7); +var _256n = BigInt(256); +var _0x71n = BigInt(113); +var SHA3_PI = []; +var SHA3_ROTL = []; +var _SHA3_IOTA = []; +for (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) { + [x, y] = [y, (2 * x + 3 * y) % 5]; + SHA3_PI.push(2 * (5 * y + x)); + SHA3_ROTL.push((round + 1) * (round + 2) / 2 % 64); + let t = _0n; + for (let j = 0; j < 7; j++) { + R = (R << _1n ^ (R >> _7n) * _0x71n) % _256n; + if (R & _2n) + t ^= _1n << (_1n << /* @__PURE__ */ BigInt(j)) - _1n; + } + _SHA3_IOTA.push(t); +} +var IOTAS = split(_SHA3_IOTA, true); +var SHA3_IOTA_H = IOTAS[0]; +var SHA3_IOTA_L = IOTAS[1]; +var rotlH = (h, l, s) => s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s); +var rotlL = (h, l, s) => s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s); +function keccakP(s, rounds = 24) { + const B = new Uint32Array(5 * 2); + for (let round = 24 - rounds; round < 24; round++) { + for (let x = 0; x < 10; x++) + B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40]; + for (let x = 0; x < 10; x += 2) { + const idx1 = (x + 8) % 10; + const idx0 = (x + 2) % 10; + const B0 = B[idx0]; + const B1 = B[idx0 + 1]; + const Th = rotlH(B0, B1, 1) ^ B[idx1]; + const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1]; + for (let y = 0; y < 50; y += 10) { + s[x + y] ^= Th; + s[x + y + 1] ^= Tl; + } + } + let curH = s[2]; + let curL = s[3]; + for (let t = 0; t < 24; t++) { + const shift = SHA3_ROTL[t]; + const Th = rotlH(curH, curL, shift); + const Tl = rotlL(curH, curL, shift); + const PI = SHA3_PI[t]; + curH = s[PI]; + curL = s[PI + 1]; + s[PI] = Th; + s[PI + 1] = Tl; + } + for (let y = 0; y < 50; y += 10) { + for (let x = 0; x < 10; x++) + B[x] = s[y + x]; + for (let x = 0; x < 10; x++) + s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10]; + } + s[0] ^= SHA3_IOTA_H[round]; + s[1] ^= SHA3_IOTA_L[round]; + } + clean(B); +} +var Keccak = class _Keccak extends Hash { + // NOTE: we accept arguments in bytes instead of bits here. + constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) { + super(); + this.pos = 0; + this.posOut = 0; + this.finished = false; + this.destroyed = false; + this.enableXOF = false; + this.blockLen = blockLen; + this.suffix = suffix; + this.outputLen = outputLen; + this.enableXOF = enableXOF; + this.rounds = rounds; + anumber(outputLen); + if (!(0 < blockLen && blockLen < 200)) + throw new Error("only keccak-f1600 function is supported"); + this.state = new Uint8Array(200); + this.state32 = u32(this.state); + } + clone() { + return this._cloneInto(); + } + keccak() { + swap32IfBE(this.state32); + keccakP(this.state32, this.rounds); + swap32IfBE(this.state32); + this.posOut = 0; + this.pos = 0; + } + update(data) { + aexists(this); + data = toBytes(data); + abytes(data); + const { blockLen, state } = this; + const len = data.length; + for (let pos = 0; pos < len; ) { + const take = Math.min(blockLen - this.pos, len - pos); + for (let i = 0; i < take; i++) + state[this.pos++] ^= data[pos++]; + if (this.pos === blockLen) + this.keccak(); + } + return this; + } + finish() { + if (this.finished) + return; + this.finished = true; + const { state, suffix, pos, blockLen } = this; + state[pos] ^= suffix; + if ((suffix & 128) !== 0 && pos === blockLen - 1) + this.keccak(); + state[blockLen - 1] ^= 128; + this.keccak(); + } + writeInto(out) { + aexists(this, false); + abytes(out); + this.finish(); + const bufferOut = this.state; + const { blockLen } = this; + for (let pos = 0, len = out.length; pos < len; ) { + if (this.posOut >= blockLen) + this.keccak(); + const take = Math.min(blockLen - this.posOut, len - pos); + out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos); + this.posOut += take; + pos += take; + } + return out; + } + xofInto(out) { + if (!this.enableXOF) + throw new Error("XOF is not possible for this instance"); + return this.writeInto(out); + } + xof(bytes) { + anumber(bytes); + return this.xofInto(new Uint8Array(bytes)); + } + digestInto(out) { + aoutput(out, this); + if (this.finished) + throw new Error("digest() was already called"); + this.writeInto(out); + this.destroy(); + return out; + } + digest() { + return this.digestInto(new Uint8Array(this.outputLen)); + } + destroy() { + this.destroyed = true; + clean(this.state); + } + _cloneInto(to) { + const { blockLen, suffix, outputLen, rounds, enableXOF } = this; + to || (to = new _Keccak(blockLen, suffix, outputLen, enableXOF, rounds)); + to.state32.set(this.state32); + to.pos = this.pos; + to.posOut = this.posOut; + to.finished = this.finished; + to.rounds = rounds; + to.suffix = suffix; + to.outputLen = outputLen; + to.enableXOF = enableXOF; + to.destroyed = this.destroyed; + return to; + } +}; +var gen = (suffix, blockLen, outputLen) => createHasher(() => new Keccak(blockLen, suffix, outputLen)); +var sha3_256 = /* @__PURE__ */ (() => gen(6, 136, 256 / 8))(); +var keccak_256 = /* @__PURE__ */ (() => gen(1, 136, 256 / 8))(); + +// ../src/lib/ergo/hashUtils.ts +var HASH_ALGORITHM_IDS = { + sha3_256: "a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a", + blake2b256: "0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8", + sha256: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + keccak256: "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" +}; +var HASH_ALGORITHM_DEFINITIONS = [ + { + key: "sha3_256", + label: "SHA3-256", + value: HASH_ALGORITHM_IDS.sha3_256, + aliases: ["sha3_256"] + }, + { + key: "blake2b256", + label: "Blake2b-256", + value: HASH_ALGORITHM_IDS.blake2b256, + aliases: ["blake2b", "blake2b256"] + }, + { + key: "sha256", + label: "SHA-256", + value: HASH_ALGORITHM_IDS.sha256, + aliases: ["sha256"] + }, + { + key: "keccak256", + label: "Keccak-256", + value: HASH_ALGORITHM_IDS.keccak256, + aliases: ["keccak256"] + } +]; +var HASH_ALGORITHMS = HASH_ALGORITHM_DEFINITIONS.map(({ label, value }) => ({ label, value })); +var HASH_OPTIONS = [ + ...HASH_ALGORITHMS, + { label: "Custom", value: "__custom__" } +]; +var SEARCH_HASH_ALGORITHMS = HASH_ALGORITHMS; +function uint8ArrayToHex(array) { + return [...array].map((x) => x.toString(16).padStart(2, "0")).join(""); +} +function getHashAlgorithmDefinition(algorithmId) { + const trimmed = algorithmId.trim(); + const normalized = trimmed.toLowerCase(); + return HASH_ALGORITHM_DEFINITIONS.find( + ({ value, aliases }) => value === trimmed || value === normalized || aliases.includes(normalized) + ); +} +function normalizeHashAlgorithmId(algorithmId) { + const trimmed = algorithmId.trim(); + return getHashAlgorithmDefinition(trimmed)?.value || trimmed; +} +function computeHash(data, algorithmId) { + const definition = getHashAlgorithmDefinition(algorithmId); + switch (definition?.key) { + case "sha256": + return uint8ArrayToHex(sha2562(data)); + case "sha3_256": + return uint8ArrayToHex(sha3_256(data)); + case "keccak256": + return uint8ArrayToHex(keccak_256(data)); + case "blake2b256": + return uint8ArrayToHex(blake2b2(data, { dkLen: 32 })); + default: + return null; + } +} +function validateHash(hash, algorithmId) { + if (!hash || hash.trim() === "") { + return "Hash cannot be empty"; + } + const trimmed = hash.trim(); + if (!/^[0-9a-fA-F]+$/.test(trimmed)) { + return "Hash must contain only hexadecimal characters (0-9, a-f)"; + } + switch (getHashAlgorithmDefinition(algorithmId)?.key) { + case "sha3_256": + case "sha256": + case "keccak256": + if (trimmed.length !== 64) { + return `${getAlgorithmLabel(algorithmId)} hash must be exactly 64 hex characters (256-bit). Got ${trimmed.length}.`; + } + break; + case "blake2b256": + if (trimmed.length !== 64 && trimmed.length !== 128) { + return `Blake2b-256 hash must be 64 hex characters (256-bit) or 128 hex characters (512-bit). Got ${trimmed.length}.`; + } + break; + case "__custom__": + break; + default: + break; + } + return null; +} +function getAlgorithmLabel(algorithmId) { + const found = getHashAlgorithmDefinition(algorithmId); + return found ? found.label : algorithmId; +} +export { + FILE_SOURCE_TYPE_NFT_ID, + HASH_ALGORITHMS, + HASH_OPTIONS, + INVALID_FILE_SOURCE_TYPE_NFT_ID, + PROFILE_OPINION_TYPE_NFT_ID, + PROFILE_TOTAL_SUPPLY, + PROFILE_TYPE_NFT_ID, + SEARCH_HASH_ALGORITHMS, + UNAVAILABLE_SOURCE_TYPE_NFT_ID, + aggregateSourceScore, + calculateProfileTrust, + computeHash, + deserializeSourceEntry, + fetchFileSourcesByHash, + fetchFileSourcesByProfile, + fetchInvalidFileSources, + fetchInvalidFileSourcesByProfile, + fetchProfileOpinions, + fetchProfileOpinionsByAuthor, + fetchUnavailableSources, + fetchUnavailableSourcesByProfile, + getAlgorithmLabel, + getAllUrls, + getPrimaryUrl, + groupByDownloadSource, + groupByProfile, + hexToUtf8, + loadProfileData, + normalizeHashAlgorithmId, + searchByHash, + serializeSourceEntry, + validateHash +}; diff --git a/mcp/_stubs/app-environment.mjs b/mcp/_stubs/app-environment.mjs new file mode 100644 index 0000000..963aa9e --- /dev/null +++ b/mcp/_stubs/app-environment.mjs @@ -0,0 +1,7 @@ +// Node-safe stub for SvelteKit's `$app/environment`, aliased in by mcp/build.mjs. +// The library's `src/lib/ergo/envs.ts` imports `{ browser }` from this virtual +// SvelteKit module; outside the browser we are never in a browser context. +export const browser = false; +export const dev = false; +export const building = false; +export const version = '0.0.0'; diff --git a/mcp/_stubs/dompurify.mjs b/mcp/_stubs/dompurify.mjs new file mode 100644 index 0000000..7105584 --- /dev/null +++ b/mcp/_stubs/dompurify.mjs @@ -0,0 +1,13 @@ +// Node-safe stub for `dompurify`, aliased in by mcp/build.mjs. +// +// `src/lib/ergo/sourceFetch.ts` calls `DOMPurify.sanitize(rawContent)` purely as +// a DISPLAY-safety measure before the R9 string is JSON-parsed into a SourceEntry. +// The MCP/REST consumer is an agent, not a DOM — there is no XSS surface here, and +// the sanitized string is only ever passed to `JSON.parse`, never rendered. So a +// passthrough is correct and avoids dragging a DOM polyfill (jsdom) into the VM. +// +// If a future read path emits HTML to a browser, swap this alias for +// `isomorphic-dompurify` instead. +const DOMPurify = { sanitize: (input) => input }; +export default DOMPurify; +export const sanitize = DOMPurify.sanitize; diff --git a/mcp/build.mjs b/mcp/build.mjs new file mode 100644 index 0000000..fa85178 --- /dev/null +++ b/mcp/build.mjs @@ -0,0 +1,70 @@ +#!/usr/bin/env node +/** + * Bundle the Source Application READ surface from the library's own TypeScript + * source (`src/lib/ergo/*`) into ONE Node-loadable ESM module: + * + * mcp/_generated/lib.bundle.mjs + * + * Run: `npm run build:mcp` (or `node mcp/build.mjs`). + * + * Why a build step instead of a hand-port: the published `dist/` is not bare-Node + * loadable (extensionless relative imports, the `reputation-system` Svelte entry, + * a `dompurify` DOM dep). esbuild compiles the TS, inlines our pure deps, and + * rewrites the browser-only edges so the SAME `src` logic runs headless — no + * second copy of the read logic to drift. + * + * Aliases / externals: + * - `reputation-system` → `reputation-system/node` (the headless entry that + * exports searchBoxes / getTimestampFromBlockId), kept + * EXTERNAL so reads resolve the SAME installed package + * that writes.mjs uses at runtime (no drift, no giant + * tx-builder graph inlined). + * - `$app/environment` → _stubs/app-environment.mjs (`browser = false`). + * - `dompurify` → _stubs/dompurify.mjs (passthrough; data is read-only + * and only JSON.parsed, never rendered — see the stub). + * Everything else (our src, @fleet-sdk/core, @scure/base, @noble/hashes) is + * inlined, so the bundle is self-contained apart from `reputation-system/node`. + */ +import { build } from 'esbuild'; +import { fileURLToPath } from 'node:url'; +import { dirname, resolve } from 'node:path'; + +const here = dirname(fileURLToPath(import.meta.url)); +const r = (p) => resolve(here, p); + +// Redirect the bare `reputation-system` import to its Node entry AND mark it +// external, so the emitted bundle keeps `import ... from "reputation-system/node"` +// and Node resolves it from node_modules at runtime (same package as writes.mjs). +const reputationNodeExternal = { + name: 'reputation-system-node-external', + setup(b) { + b.onResolve({ filter: /^reputation-system$/ }, () => ({ + path: 'reputation-system/node', + external: true + })); + b.onResolve({ filter: /^reputation-system\/node$/ }, () => ({ + path: 'reputation-system/node', + external: true + })); + } +}; + +await build({ + entryPoints: [r('_entry.mjs')], + outfile: r('_generated/lib.bundle.mjs'), + bundle: true, + format: 'esm', + platform: 'node', + target: 'node20', + legalComments: 'none', + banner: { + js: '// AUTO-GENERATED by mcp/build.mjs from src/lib/ergo/*. Do not edit by hand.\n// Regenerate with: npm run build:mcp' + }, + alias: { + '$app/environment': r('_stubs/app-environment.mjs'), + dompurify: r('_stubs/dompurify.mjs') + }, + plugins: [reputationNodeExternal] +}); + +console.log('Built mcp/_generated/lib.bundle.mjs'); diff --git a/mcp/core.mjs b/mcp/core.mjs index a4f8253..a65eccb 100644 --- a/mcp/core.mjs +++ b/mcp/core.mjs @@ -1,470 +1,84 @@ -// @ts-nocheck — plain-ESM runtime module shared by the stdio MCP server, the -// HTTP/REST `.service`, and any bare-Node script. It mirrors the read surface of -// `src/lib/ergo/sourceFetch.ts` + the pure helpers of `src/lib/ergo/sourceObject.ts`, -// but is NOT TypeScript-checked and carries NO Svelte/Vite dependency. /** - * Source Application registry — framework-agnostic data core. + * Source Application registry — THIN Node adapter over the library's own logic. * - * This is the SINGLE source of truth for the on-chain Source Application read - * layer outside the browser: the Type NFT ids, the box queries, the R9 - * (source-entry) parsers, the `fetch*` reads, and the pure aggregation helpers. + * There is NO re-implementation here. The read layer (Explorer box queries, R9 + * parsing, the `fetch*` reads, the pure aggregation helpers, the hash helpers and + * the Type NFT ids) lives ONCE in `src/lib/ergo/*` and is compiled to a single + * Node-loadable ESM module — `_generated/lib.bundle.mjs` — by `mcp/build.mjs` + * (run `npm run build:mcp`). This file only: * - * The Explorer box search + block-timestamp lookup are imported from - * `reputation-system/node` — the headless, Node-safe entry of the reputation - * library (no `.svelte` imports in its graph). This is the SAME `searchBoxes` - * the Svelte app uses via `reputation-system`, so the reads never drift from the - * app, and they include the required reputation-proof `ergoTreeTemplateHash` - * filter that the Explorer's `/boxes/unspent/search` endpoint demands. + * 1. re-exports the pure helpers + constants verbatim from that bundle, and + * 2. wraps the chain reads to default `explorerUri` to SOURCE_EXPLORER_API, + * since the library functions take `explorerUri` as a required argument. * - * Type NFT ids are copied verbatim from `src/lib/ergo/envs.ts`. Several are - * PLACEHOLDER values (all-zero hex); they are preserved as-is. Queries against a - * non-real Type NFT simply match no boxes and return a clean empty array, so the - * read tools degrade gracefully rather than throwing. + * Reuse instead of duplication is the whole point: change a read in `src/` and a + * rebuild flows it through here, the stdio server and the HTTP `.service` alike. */ -import { searchBoxes, getTimestampFromBlockId } from 'reputation-system/node'; - -// ── Type NFT ids (verbatim from src/lib/ergo/envs.ts) ─────────────────────── -export const PROFILE_TYPE_NFT_ID = '1820fd428a0b92d61ce3f86cd98240fdeeee8a392900f0b19a2e017d66f79926'; -export const PROFILE_TOTAL_SUPPLY = 99999999; -export const FILE_SOURCE_TYPE_NFT_ID = '8299d98e15ebee7fa39ad716de7c8bb191790a1bf4b7c3f91af35a0e36187706'; -export const INVALID_FILE_SOURCE_TYPE_NFT_ID = '0000000000000000000000000000000000000000000000000000000000000002'; -export const UNAVAILABLE_SOURCE_TYPE_NFT_ID = '0000000000000000000000000000000000000000000000000000000000000003'; -export const PROFILE_OPINION_TYPE_NFT_ID = '0000000000000000000000000000000000000000000000000000000000000004'; +import * as lib from './_generated/lib.bundle.mjs'; export const DEFAULT_EXPLORER_API = (typeof process !== 'undefined' && process.env && process.env.SOURCE_EXPLORER_API) || 'https://api.ergoplatform.com'; -export const isHexId = (v) => typeof v === 'string' && /^[0-9a-fA-F]{4,}$/.test(v); - -/** Decode a hex string (Explorer Coll[Byte] renderedValue) to UTF-8 text. */ -export function hexToUtf8(hexString) { - if (!hexString || typeof hexString !== 'string' || hexString.length % 2 !== 0) return null; - try { - const bytes = new Uint8Array(hexString.match(/.{1,2}/g).map((b) => parseInt(b, 16))); - return new TextDecoder('utf-8').decode(bytes); - } catch { - return null; - } -} - -// ── Source-entry (R9) serialization — verbatim from sourceObject.ts ───────── - -/** - * Serialize a SourceEntry to the R9 JSON string (Coll[Coll[Byte]] shape): - * [[hashFunctionId, contentFormat, contentHash, rawFormat, urlLink, isChunked]] - */ -export function serializeSourceEntry(entry) { - const tuple = [ - entry.hashFunctionId || '', - entry.contentFormat || '', - entry.contentHash || '', - entry.rawFormat || '', - entry.urlLink || '', - entry.isChunked ?? false - ]; - return JSON.stringify([tuple]); -} - -/** Deserialize an R9 content string into a SourceEntry (tuple/object/legacy-url). */ -export function deserializeSourceEntry(content) { - const empty = { hashFunctionId: '', contentFormat: '', contentHash: '', rawFormat: '', urlLink: '' }; - if (!content || content.trim() === '') return empty; - try { - const parsed = JSON.parse(content); - if (Array.isArray(parsed) && parsed.length > 0) { - const tuple = parsed[0]; - if (Array.isArray(tuple) && tuple.length >= 5) { - return { - hashFunctionId: tuple[0] || '', - contentFormat: tuple[1] || '', - contentHash: tuple[2] || '', - rawFormat: tuple[3] || '', - urlLink: tuple[4] || '', - isChunked: tuple[5] === true - }; - } - if (typeof tuple === 'object' && tuple !== null && !Array.isArray(tuple)) { - return { - hashFunctionId: tuple.hashFunctionId || '', - contentFormat: tuple.contentFormat || tuple.contentFormatNftId || '', - contentHash: tuple.contentHash || '', - rawFormat: tuple.rawFormat || tuple.rawFormatNftId || '', - urlLink: tuple.urlLink || '', - isChunked: tuple.isChunked === true - }; - } - } - } catch { - // not JSON — legacy plain URL string - } - return { hashFunctionId: '', contentFormat: '', contentHash: '', rawFormat: '', urlLink: content, isChunked: false }; -} - -// ── Internal helpers ──────────────────────────────────────────────────────── - -async function collectBoxes(generator) { - const boxes = []; - for await (const batch of generator) boxes.push(...batch); - return boxes; -} - -/** Block timestamp for a box; non-critical, so failures degrade to 0. */ -async function boxTimestamp(explorerUri, box) { - if (!box || !box.blockId) return 0; - try { - return await getTimestampFromBlockId(explorerUri, box.blockId); - } catch { - return 0; - } -} - -function parseR9SourceEntry(box) { - const rendered = box?.additionalRegisters?.R9?.renderedValue; - const raw = rendered ? hexToUtf8(rendered) : ''; - return deserializeSourceEntry(raw || ''); -} - -// ── Reads (port of src/lib/ergo/sourceFetch.ts, Svelte-free) ──────────────── -// Positional searchBoxes args (from reputation-system/node): -// (explorerUri, tokenId, typeNftId, objectPointer, isLocked, polarization, -// content, ownerAddress, limit, offset) - -/** All FILE_SOURCE boxes for a specific file hash. */ -export async function fetchFileSourcesByHash(fileHash, explorerUri = DEFAULT_EXPLORER_API) { - if (!isHexId(FILE_SOURCE_TYPE_NFT_ID)) return []; - const boxes = await collectBoxes( - searchBoxes(explorerUri, undefined, FILE_SOURCE_TYPE_NFT_ID, fileHash, undefined, undefined, undefined, undefined, undefined, undefined) - ); - const sources = []; - for (const box of boxes) { - if (!box.assets?.length) continue; - if (box.additionalRegisters.R6?.renderedValue !== 'false') continue; - if (!box.additionalRegisters.R9?.renderedValue) continue; - const sourceEntry = parseR9SourceEntry(box); - sources.push({ - id: box.boxId, - fileHash, - hashFunctionId: sourceEntry.hashFunctionId || '', - source: sourceEntry, - ownerTokenId: box.assets[0].tokenId, - reputationAmount: Number(box.assets[0].amount), - timestamp: await boxTimestamp(explorerUri, box), - isLocked: false, - transactionId: box.transactionId - }); - } - sources.sort((a, b) => b.timestamp - a.timestamp); - return sources; -} - -/** All INVALID_FILE_SOURCE boxes targeting a specific source box id. */ -export async function fetchInvalidFileSources(sourceBoxId, explorerUri = DEFAULT_EXPLORER_API) { - if (!isHexId(INVALID_FILE_SOURCE_TYPE_NFT_ID)) return []; - const boxes = await collectBoxes( - searchBoxes(explorerUri, undefined, INVALID_FILE_SOURCE_TYPE_NFT_ID, sourceBoxId, undefined, undefined, undefined, undefined, undefined, undefined) - ); - const out = []; - for (const box of boxes) { - if (!box.assets?.length) continue; - out.push({ - id: box.boxId, - targetBoxId: sourceBoxId, - authorTokenId: box.assets[0].tokenId, - reputationAmount: Number(box.assets[0].amount), - timestamp: await boxTimestamp(explorerUri, box), - transactionId: box.transactionId - }); - } - return out; -} - -/** All UNAVAILABLE_SOURCE boxes for a specific URL. */ -export async function fetchUnavailableSources(sourceUrl, explorerUri = DEFAULT_EXPLORER_API) { - if (!isHexId(UNAVAILABLE_SOURCE_TYPE_NFT_ID)) return []; - const boxes = await collectBoxes( - searchBoxes(explorerUri, undefined, UNAVAILABLE_SOURCE_TYPE_NFT_ID, sourceUrl, undefined, undefined, undefined, undefined, undefined, undefined) - ); - const out = []; - for (const box of boxes) { - if (!box.assets?.length) continue; - out.push({ - id: box.boxId, - sourceUrl, - authorTokenId: box.assets[0].tokenId, - reputationAmount: Number(box.assets[0].amount), - timestamp: await boxTimestamp(explorerUri, box), - transactionId: box.transactionId - }); - } - return out; -} - -/** All PROFILE_OPINION boxes targeting a specific profile token id. */ -export async function fetchProfileOpinions(profileTokenId, explorerUri = DEFAULT_EXPLORER_API) { - if (!isHexId(PROFILE_OPINION_TYPE_NFT_ID)) return []; - const boxes = await collectBoxes( - searchBoxes(explorerUri, undefined, PROFILE_OPINION_TYPE_NFT_ID, profileTokenId, undefined, undefined, undefined, undefined, undefined, undefined) - ); - const out = []; - for (const box of boxes) { - if (!box.assets?.length) continue; - if (box.additionalRegisters.R6?.renderedValue === 'false') continue; - out.push({ - id: box.boxId, - targetProfileTokenId: profileTokenId, - isTrusted: box.additionalRegisters.R8?.renderedValue === 'true', - authorTokenId: box.assets[0].tokenId, - reputationAmount: Number(box.assets[0].amount), - timestamp: await boxTimestamp(explorerUri, box), - transactionId: box.transactionId - }); - } - return out; -} - -/** FILE_SOURCE boxes created by a specific profile token id. */ -export async function fetchFileSourcesByProfile(profileTokenId, limit = 50, explorerUri = DEFAULT_EXPLORER_API) { - if (!isHexId(FILE_SOURCE_TYPE_NFT_ID)) return []; - const boxes = await collectBoxes( - searchBoxes(explorerUri, profileTokenId, FILE_SOURCE_TYPE_NFT_ID, undefined, undefined, undefined, undefined, undefined, limit, undefined) - ); - const sources = []; - for (const box of boxes) { - if (!box.assets?.length) continue; - if (box.additionalRegisters.R6?.renderedValue !== 'false') continue; - if (!box.additionalRegisters.R9?.renderedValue) continue; - const fileHash = box.additionalRegisters.R5?.renderedValue || '[Unknown]'; - const sourceEntry = parseR9SourceEntry(box); - sources.push({ - id: box.boxId, - fileHash, - hashFunctionId: sourceEntry.hashFunctionId || '', - source: sourceEntry, - ownerTokenId: box.assets[0].tokenId, - reputationAmount: Number(box.assets[0].amount), - timestamp: await boxTimestamp(explorerUri, box), - isLocked: false, - transactionId: box.transactionId - }); - } - sources.sort((a, b) => b.timestamp - a.timestamp); - return sources; -} - -/** INVALID_FILE_SOURCE boxes created by a specific profile. */ -export async function fetchInvalidFileSourcesByProfile(profileTokenId, limit = 50, explorerUri = DEFAULT_EXPLORER_API) { - if (!isHexId(INVALID_FILE_SOURCE_TYPE_NFT_ID)) return []; - const boxes = await collectBoxes( - searchBoxes(explorerUri, profileTokenId, INVALID_FILE_SOURCE_TYPE_NFT_ID, undefined, undefined, undefined, undefined, undefined, limit, undefined) - ); - const out = []; - for (const box of boxes) { - if (!box.assets?.length) continue; - out.push({ - id: box.boxId, - targetBoxId: hexToUtf8(box.additionalRegisters.R5?.renderedValue || '') || '', - authorTokenId: box.assets[0].tokenId, - reputationAmount: Number(box.assets[0].amount), - timestamp: await boxTimestamp(explorerUri, box), - transactionId: box.transactionId - }); - } - return out; -} - -/** UNAVAILABLE_SOURCE boxes created by a specific profile. */ -export async function fetchUnavailableSourcesByProfile(profileTokenId, limit = 50, explorerUri = DEFAULT_EXPLORER_API) { - if (!isHexId(UNAVAILABLE_SOURCE_TYPE_NFT_ID)) return []; - const boxes = await collectBoxes( - searchBoxes(explorerUri, profileTokenId, UNAVAILABLE_SOURCE_TYPE_NFT_ID, undefined, undefined, undefined, undefined, undefined, limit, undefined) - ); - const out = []; - for (const box of boxes) { - if (!box.assets?.length) continue; - out.push({ - id: box.boxId, - sourceUrl: hexToUtf8(box.additionalRegisters.R5?.renderedValue || '') || '', - authorTokenId: box.assets[0].tokenId, - reputationAmount: Number(box.assets[0].amount), - timestamp: await boxTimestamp(explorerUri, box), - transactionId: box.transactionId - }); - } - return out; -} - -/** PROFILE_OPINION boxes created by a specific author token id. */ -export async function fetchProfileOpinionsByAuthor(authorTokenId, explorerUri = DEFAULT_EXPLORER_API) { - if (!isHexId(PROFILE_OPINION_TYPE_NFT_ID)) return []; - const boxes = await collectBoxes( - searchBoxes(explorerUri, authorTokenId, PROFILE_OPINION_TYPE_NFT_ID, undefined, undefined, undefined, undefined, undefined, undefined, undefined) - ); - const out = []; - for (const box of boxes) { - if (!box.assets?.length) continue; - out.push({ - id: box.boxId, - targetProfileTokenId: hexToUtf8(box.additionalRegisters.R5?.renderedValue || '') || '', - isTrusted: box.additionalRegisters.R8?.renderedValue === 'true', - authorTokenId: box.assets[0].tokenId, - reputationAmount: Number(box.assets[0].amount), - timestamp: await boxTimestamp(explorerUri, box), - transactionId: box.transactionId - }); - } - return out; -} - -/** Full search by file hash: sources + their invalidations + URL unavailabilities. */ -export async function searchByHash(fileHash, explorerUri = DEFAULT_EXPLORER_API) { - const sources = await fetchFileSourcesByHash(fileHash, explorerUri); - const invalidations = {}; - const unavailabilities = {}; - for (const source of sources) { - const invs = await fetchInvalidFileSources(source.id, explorerUri); - if (invs.length > 0) invalidations[source.id] = invs; - const url = source.source?.urlLink; - if (url && !unavailabilities[url]) { - const unavs = await fetchUnavailableSources(url, explorerUri); - if (unavs.length > 0) unavailabilities[url] = unavs; - } - } - return { sources, invalidations, unavailabilities }; -} - -/** All data related to a profile: its sources, invalidations, unavailabilities, opinions received + given. */ -export async function loadProfileData(profileTokenId, explorerUri = DEFAULT_EXPLORER_API) { - const sources = await fetchFileSourcesByProfile(profileTokenId, 50, explorerUri); - const invalidations = await fetchInvalidFileSourcesByProfile(profileTokenId, 50, explorerUri); - const unavailabilities = await fetchUnavailableSourcesByProfile(profileTokenId, 50, explorerUri); - const opinions = await fetchProfileOpinions(profileTokenId, explorerUri); - const opinionsGiven = await fetchProfileOpinionsByAuthor(profileTokenId, explorerUri); - return { sources, invalidations, unavailabilities, opinions, opinionsGiven }; -} - -// ── Pure helpers (verbatim from sourceObject.ts) ──────────────────────────── - -export function getPrimaryUrl(source) { - return source?.source?.urlLink || ''; -} - -export function getAllUrls(source) { - return source?.source?.urlLink ? [source.source.urlLink] : []; -} - -export function groupByDownloadSource(sources, invalidationsMap = {}, unavailabilitiesMap = {}) { - const groups = {}; - for (const source of sources) { - const url = source.source?.urlLink; - if (!url) continue; - if (!groups[url]) { - groups[url] = { - sourceUrl: url, - sources: [], - owners: [], - invalidations: [], - unavailabilities: unavailabilitiesMap[url]?.data || [] - }; - } - if (!groups[url].sources.some((s) => s.id === source.id)) groups[url].sources.push(source); - if (!groups[url].owners.includes(source.ownerTokenId)) groups[url].owners.push(source.ownerTokenId); - const boxInvalidations = invalidationsMap[source.id]?.data || []; - groups[url].invalidations.push(...boxInvalidations); - } - return Object.values(groups).sort((a, b) => b.sources.length - a.sources.length); -} - -export function groupByProfile(sources) { - const groups = {}; - for (const source of sources) { - if (!groups[source.ownerTokenId]) { - groups[source.ownerTokenId] = { profileTokenId: source.ownerTokenId, sources: [] }; - } - groups[source.ownerTokenId].sources.push(source); - } - return Object.values(groups).sort((a, b) => b.sources.length - a.sources.length); -} - -export function calculateProfileTrust(profileTokenId, opinions) { - const trust = opinions.filter((o) => o.isTrusted).reduce((s, o) => s + o.reputationAmount, 0); - const distrust = opinions.filter((o) => !o.isTrusted).reduce((s, o) => s + o.reputationAmount, 0); - return trust - distrust; -} - -export function aggregateSourceScore(source, allSources, invalidations, unavailabilities, profileOpinions = []) { - const sourceUrl = source.source?.urlLink || ''; - const confirmations = allSources.filter( - (s) => s.id !== source.id && s.fileHash === source.fileHash && s.source?.urlLink === sourceUrl - ); - const filteredInvalidations = invalidations.filter((inv) => inv.targetBoxId === source.id); - const filteredUnavailabilities = unavailabilities.filter((un) => un.sourceUrl === sourceUrl); - const confirmationScore = confirmations.reduce((s, x) => s + x.reputationAmount, 0); - const invalidationScore = filteredInvalidations.reduce((s, x) => s + x.reputationAmount, 0); - const unavailabilityScore = filteredUnavailabilities.reduce((s, x) => s + x.reputationAmount, 0); - const ownerTrustScore = calculateProfileTrust(source.ownerTokenId, profileOpinions); - return { - ...source, - confirmations, - invalidations: filteredInvalidations, - unavailabilities: filteredUnavailabilities, - confirmationScore, - invalidationScore, - unavailabilityScore, - ownerTrustScore - }; -} - -// ── Hash helpers (from src/lib/ergo/hashUtils.ts) ─────────────────────────── - -export const HASH_ALGORITHMS = [ - { label: 'SHA3-256', value: 'sha3_256' }, - { label: 'Blake2b', value: 'blake2b' }, - { label: 'SHA-256', value: 'sha256' }, - { label: 'Keccak-256', value: 'keccak256' } -]; -export const HASH_OPTIONS = [...HASH_ALGORITHMS, { label: 'Custom', value: '__custom__' }]; -export const SEARCH_HASH_ALGORITHMS = HASH_ALGORITHMS; - -function uint8ArrayToHex(array) { - return [...array].map((x) => x.toString(16).padStart(2, '0')).join(''); -} - -/** Compute the hex hash of bytes with a known algorithm id, or null if unknown/custom. */ -export async function computeHash(data, algorithmId) { - const { sha256 } = await import('@noble/hashes/sha256'); - const { sha3_256, keccak_256 } = await import('@noble/hashes/sha3'); - const { blake2b } = await import('@noble/hashes/blake2b'); - switch (algorithmId) { - case 'sha256': - return uint8ArrayToHex(sha256(data)); - case 'sha3_256': - return uint8ArrayToHex(sha3_256(data)); - case 'keccak256': - return uint8ArrayToHex(keccak_256(data)); - case 'blake2b': - return uint8ArrayToHex(blake2b(data, { dkLen: 32 })); - default: - return null; - } -} - -/** Validate a hex hash for an algorithm. Returns null if valid, else an error string. */ -export function validateHash(hash, algorithmId) { - if (!hash || hash.trim() === '') return 'Hash cannot be empty'; - const trimmed = hash.trim(); - if (!/^[0-9a-fA-F]+$/.test(trimmed)) return 'Hash must contain only hexadecimal characters (0-9, a-f)'; - switch (algorithmId) { - case 'sha3_256': - case 'sha256': - case 'keccak256': - if (trimmed.length !== 64) return `${algorithmId} hash must be exactly 64 hex characters (256-bit). Got ${trimmed.length}.`; - break; - case 'blake2b': - if (trimmed.length !== 64 && trimmed.length !== 128) return `Blake2b hash must be 64 or 128 hex characters. Got ${trimmed.length}.`; - break; - default: - break; - } - return null; -} +// ── Type NFT ids + supply (from src/lib/ergo/envs.ts) ─────────────────────── +export const PROFILE_TYPE_NFT_ID = lib.PROFILE_TYPE_NFT_ID; +export const PROFILE_TOTAL_SUPPLY = lib.PROFILE_TOTAL_SUPPLY; +export const FILE_SOURCE_TYPE_NFT_ID = lib.FILE_SOURCE_TYPE_NFT_ID; +export const INVALID_FILE_SOURCE_TYPE_NFT_ID = lib.INVALID_FILE_SOURCE_TYPE_NFT_ID; +export const UNAVAILABLE_SOURCE_TYPE_NFT_ID = lib.UNAVAILABLE_SOURCE_TYPE_NFT_ID; +export const PROFILE_OPINION_TYPE_NFT_ID = lib.PROFILE_OPINION_TYPE_NFT_ID; + +// ── R9 (de)serialization + byte helper (src/lib/ergo/{sourceObject,utils}.ts) ─ +export const serializeSourceEntry = lib.serializeSourceEntry; +export const deserializeSourceEntry = lib.deserializeSourceEntry; +export const hexToUtf8 = lib.hexToUtf8; + +// ── Pure aggregation helpers (verbatim, src/lib/ergo/sourceObject.ts) ──────── +export const getPrimaryUrl = lib.getPrimaryUrl; +export const getAllUrls = lib.getAllUrls; +export const groupByDownloadSource = lib.groupByDownloadSource; +export const groupByProfile = lib.groupByProfile; +export const calculateProfileTrust = lib.calculateProfileTrust; +export const aggregateSourceScore = lib.aggregateSourceScore; + +// ── Hash helpers (verbatim, src/lib/ergo/hashUtils.ts) ─────────────────────── +export const HASH_ALGORITHMS = lib.HASH_ALGORITHMS; +export const HASH_OPTIONS = lib.HASH_OPTIONS; +export const SEARCH_HASH_ALGORITHMS = lib.SEARCH_HASH_ALGORITHMS; +export const computeHash = lib.computeHash; +export const validateHash = lib.validateHash; +export const normalizeHashAlgorithmId = lib.normalizeHashAlgorithmId; +export const getAlgorithmLabel = lib.getAlgorithmLabel; + +// ── Reads (src/lib/ergo/sourceFetch.ts) — explorerUri defaulted ────────────── +// The library functions require `explorerUri`; these thin wrappers inject the +// configured default while preserving the exact positional signatures. +export const fetchFileSourcesByHash = (fileHash, explorerUri = DEFAULT_EXPLORER_API) => + lib.fetchFileSourcesByHash(fileHash, explorerUri); + +export const fetchInvalidFileSources = (sourceBoxId, explorerUri = DEFAULT_EXPLORER_API) => + lib.fetchInvalidFileSources(sourceBoxId, explorerUri); + +export const fetchUnavailableSources = (sourceUrl, explorerUri = DEFAULT_EXPLORER_API) => + lib.fetchUnavailableSources(sourceUrl, explorerUri); + +export const fetchProfileOpinions = (profileTokenId, explorerUri = DEFAULT_EXPLORER_API) => + lib.fetchProfileOpinions(profileTokenId, explorerUri); + +export const fetchFileSourcesByProfile = (profileTokenId, limit = 50, explorerUri = DEFAULT_EXPLORER_API) => + lib.fetchFileSourcesByProfile(profileTokenId, limit, explorerUri); + +export const fetchInvalidFileSourcesByProfile = (profileTokenId, limit = 50, explorerUri = DEFAULT_EXPLORER_API) => + lib.fetchInvalidFileSourcesByProfile(profileTokenId, limit, explorerUri); + +export const fetchUnavailableSourcesByProfile = (profileTokenId, limit = 50, explorerUri = DEFAULT_EXPLORER_API) => + lib.fetchUnavailableSourcesByProfile(profileTokenId, limit, explorerUri); + +export const fetchProfileOpinionsByAuthor = (authorTokenId, explorerUri = DEFAULT_EXPLORER_API) => + lib.fetchProfileOpinionsByAuthor(authorTokenId, explorerUri); + +export const searchByHash = (fileHash, explorerUri = DEFAULT_EXPLORER_API) => + lib.searchByHash(fileHash, explorerUri); + +export const loadProfileData = (profileTokenId, explorerUri = DEFAULT_EXPLORER_API) => + lib.loadProfileData(profileTokenId, explorerUri); diff --git a/mcp/package-lock.json b/mcp/package-lock.json index ef5e5c9..1d332ed 100644 --- a/mcp/package-lock.json +++ b/mcp/package-lock.json @@ -10,7 +10,10 @@ "dependencies": { "@modelcontextprotocol/sdk": "^1.29.0", "@noble/hashes": "^1.4.0", - "reputation-system": "github:agenticaihome/reputation-system#fix/seed-signer-derivation" + "reputation-system": "github:reputation-systems/reputation-system" + }, + "devDependencies": { + "esbuild": "^0.18.20" }, "engines": { "node": ">=20" @@ -48,6 +51,380 @@ "node": ">17.0.0" } }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@fleet-sdk/common": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/@fleet-sdk/common/-/common-0.10.0.tgz", @@ -2985,6 +3362,15 @@ "readable-stream": "^2.3.5" } }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -3997,6 +4383,44 @@ "node": ">= 0.4" } }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -6276,6 +6700,16 @@ "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", "license": "MIT" }, + "node_modules/lucide-svelte": { + "version": "0.294.0", + "resolved": "https://registry.npmjs.org/lucide-svelte/-/lucide-svelte-0.294.0.tgz", + "integrity": "sha512-jqQDL9bfZm3DzEhulRdPWWw88qQpS/w/fDAdgTsYXjij5I81HYFFxbDHpnSHes2oH9Eri5M3QQDgqV9xtqkyig==", + "deprecated": "Package deprecated. Please use @lucide/svelte instead.", + "license": "ISC", + "peerDependencies": { + "svelte": ">=3 <5" + } + }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", @@ -6774,6 +7208,15 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/mode-watcher": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mode-watcher/-/mode-watcher-0.5.1.tgz", + "integrity": "sha512-adEC6T7TMX/kzQlaO/MtiQOSFekZfQu4MC+lXyoceQG+U5sKpJWZ4yKXqw846ExIuWJgedkOIPqAYYRk/xHm+w==", + "license": "MIT", + "peerDependencies": { + "svelte": "^4.0.0 || ^5.0.0-next.1" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -7945,7 +8388,7 @@ }, "node_modules/reputation-system": { "version": "0.0.1", - "resolved": "git+ssh://git@github.com/agenticaihome/reputation-system.git#7e4ed7116b87a4c6e57b9e18b18f0cd46eba25cd", + "resolved": "git+ssh://git@github.com/reputation-systems/reputation-system.git#c82c0dde6fa59df14bb6fcdb70ab72a63744cf4e", "dependencies": { "@dagrejs/dagre": "^1.0.4", "@fleet-sdk/compiler": "^0.12.0", @@ -7956,8 +8399,10 @@ "@scure/bip39": "^1.3.0", "@types/three": "^0.161.2", "@xyflow/svelte": "^0.1.3", + "mode-watcher": "^0.5.0", "update": "^0.7.4", - "uuid": "^11.0.4" + "uuid": "^11.0.4", + "wallet-svelte-component": "github:ergo-basics/wallet-svelte-component" }, "peerDependencies": { "svelte": "^4" @@ -8880,6 +9325,16 @@ "node": ">=0.10.0" } }, + "node_modules/tailwind-merge": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.1.tgz", + "integrity": "sha512-Oo6tHdpZsGpkKG88HJ8RR1rg/RdnEkQEfMoEk2x1XRI3F1AxeU+ijRXpiVUF4UbLfcxxRGw6TbUINKYdWVsQTQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, "node_modules/template-error": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/template-error/-/template-error-0.1.2.tgz", @@ -9667,6 +10122,19 @@ "node": ">=0.10.0" } }, + "node_modules/wallet-svelte-component": { + "version": "0.0.1", + "resolved": "git+ssh://git@github.com/ergo-basics/wallet-svelte-component.git#b69e108c4fc6990bb7475cc5b4477891a7d35b65", + "dependencies": { + "@fleet-sdk/core": "^0.12.0", + "clsx": "^2.0.0", + "lucide-svelte": "^0.294.0", + "tailwind-merge": "^2.0.0" + }, + "peerDependencies": { + "svelte": "^4.0.0" + } + }, "node_modules/warning-symbol": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/warning-symbol/-/warning-symbol-0.1.0.tgz", diff --git a/mcp/package.json b/mcp/package.json index ba970c6..e37c773 100644 --- a/mcp/package.json +++ b/mcp/package.json @@ -3,9 +3,10 @@ "version": "0.1.0", "private": true, "type": "module", - "description": "Full-surface MCP server (stdio) for the Source Application on-chain file-source registry — reads, pure helpers, and signer-backed writes.", + "description": "Full-surface MCP server (stdio) for the Source Application on-chain file-source registry — reads bundled from the library's own src/, plus signer-backed writes.", "main": "server.mjs", "scripts": { + "build:mcp": "node build.mjs", "mcp": "node server.mjs", "start": "node server.mjs" }, @@ -15,6 +16,9 @@ "dependencies": { "@modelcontextprotocol/sdk": "^1.29.0", "@noble/hashes": "^1.4.0", - "reputation-system": "github:agenticaihome/reputation-system#fix/seed-signer-derivation" + "reputation-system": "github:reputation-systems/reputation-system" + }, + "devDependencies": { + "esbuild": "^0.18.20" } }