From c3f7d92f04b3f1cd024f56c43a364c5c259c411c Mon Sep 17 00:00:00 2001 From: Crystal-RainSlide <16851802+Crystal-RainSlide@users.noreply.github.com> Date: Tue, 21 Jan 2025 01:23:53 +0800 Subject: [PATCH] feat(gui): egui color, sidebar, flat layout --- tapa-visualizer/.editorconfig | 4 + tapa-visualizer/css/button.css | 50 +- tapa-visualizer/css/style.css | 128 +- tapa-visualizer/index.html | 127 +- tapa-visualizer/js/graph.js | 117 +- tapa-visualizer/js/praser.js | 48 +- tapa-visualizer/js/sidebar.js | 76 ++ tapa-visualizer/package-lock.json | 1166 +++++++++++++++-- tapa-visualizer/package.json | 17 +- tapa-visualizer/patches/@antv+g6+5.0.42.patch | 33 + 10 files changed, 1543 insertions(+), 223 deletions(-) create mode 100644 tapa-visualizer/js/sidebar.js create mode 100644 tapa-visualizer/patches/@antv+g6+5.0.42.patch diff --git a/tapa-visualizer/.editorconfig b/tapa-visualizer/.editorconfig index 2404364a..dc0e8256 100644 --- a/tapa-visualizer/.editorconfig +++ b/tapa-visualizer/.editorconfig @@ -16,3 +16,7 @@ insert_final_newline = true [*.{js,jsx,ts,tsx,mjs,cjs}] indent_style = space indent_size = 2 + +[*.json] +indent_style = space +indent_size = 4 diff --git a/tapa-visualizer/css/button.css b/tapa-visualizer/css/button.css index 8553c52a..b6daba48 100644 --- a/tapa-visualizer/css/button.css +++ b/tapa-visualizer/css/button.css @@ -5,11 +5,36 @@ */ .btn { + /* https://github.com/emilk/egui/blob/cf965aaa/crates/egui/src/style.rs#L1453 */ + --btn-txt: #3C3C3C; /* rgb(60, 60, 60) */ + --btn-bg: #E6E6E6; /* rgb(230, 230, 230) */ + --btn-bg-hover: #DCDCDC; /* rgb(220, 220, 220) */ + --btn-bg-active: #A5A5A5; /* rgb(165, 165, 165) */ + --btn-bg-select: #90D1FF; /* rgb(144, 209, 255) */ + position: relative; + box-sizing: border-box; padding: 2px; - border: 1px solid #CCC; - border-radius: 2px; + border: none; + border-radius: 3px; + color: var(--btn-txt); + background-color: var(--btn-bg); font-size: smaller; /* for non-
- + +
- - - +
- +
-
- + diff --git a/tapa-visualizer/js/graph.js b/tapa-visualizer/js/graph.js index ddd9bc9c..de0a7bf3 100644 --- a/tapa-visualizer/js/graph.js +++ b/tapa-visualizer/js/graph.js @@ -6,26 +6,72 @@ "use strict"; +import { getDetailsFromNode } from "./sidebar.js"; import { getGraphData } from "./praser.js"; -/** @type {(graph: import("@antv/g6").Graph) => void} */ -const setupFileInput = (graph) => { +/** @type {(tagName: string, ...props: Record[] ) => T} */ +// eslint-disable-next-line @typescript-eslint/no-unsafe-return +export const $ = (tagName, ...props) => Object.assign( + document.createElement(tagName), ...props +); - /** @type {HTMLInputElement & { files: FileList } | null} */ - const fileInput = document.querySelector("input.fileInput"); - if (fileInput === null) { - throw new TypeError("fileInput is null!"); - } +/** @type {(comboId: string) => string} */ +export const getComboName = comboId => comboId.replace(/^combo:/, ""); + + +/** @type {GraphJSON} */ +let graphJson; + +/** Data for G6.Graph() + * @type {Required} */ +let graphData = { + nodes: [], + edges: [], + combos: [], +}; + +// Grouping radios in header + +/** @type { HTMLFormElement & { elements: { grouping: { value: string; } } } | null } } */ +const grouping = document.querySelector(".grouping"); + +// Details sidebar + +/** @type {HTMLLIElement | null} */ +const details = document.querySelector(".instance-content"); +if (details === null) { + throw new TypeError("Element .instance-content not found!"); +} + +const resetDetails = () => details.replaceChildren( + $("p", { textContent: "Please select a node." }) +); + +// File Input + +/** @type {HTMLInputElement & { files: FileList } | null} */ +const fileInput = document.querySelector("input.fileInput"); +if (fileInput === null) { + throw new TypeError("Element input.fileInput not found!"); +} +/** @type {(graph: import("@antv/g6").Graph) => void} */ +const setupFileInput = (graph) => { const reader = new FileReader(); reader.addEventListener("load", e => { const result = e.target?.result; if (typeof result !== "string") return; - /** @type {GraphJSON} */ + const flat = grouping?.elements.grouping.value === "flat"; + + /** @satisfies {GraphJSON} */ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - const json = JSON.parse(result); - const graphData = getGraphData(json); + graphJson = JSON.parse(result); + graphData = getGraphData(graphJson, flat); + + console.debug("graph.json\n", graphJson); + console.debug("graphData\n", graphData); + graph.setData(graphData); void graph.render(); }); @@ -38,13 +84,15 @@ const setupFileInput = (graph) => { fileInput.addEventListener("change", readFile); }; +// Buttons + /** @type {(graph: import("@antv/g6").Graph) => void} */ const setupGraphButtons = (graph) => { /** * @typedef {EventListenerOrEventListenerObject} Listener * @type {(selector: string, listener: Listener) => void} */ const setButton = (selector, callback) => { - /** @type { HTMLButtonElement | null } */ + /** @satisfies { HTMLButtonElement | null } */ const button = document.querySelector(selector); if (button) { button.addEventListener("click", callback); @@ -83,14 +131,14 @@ const setupGraphButtons = (graph) => { edge: { style: { endArrow: true, - labelText: ({id}) => id, + labelText: ({id}) => id?.split("/").at(-1), labelFontFamily: "monospace", } }, combo: { // type: "rect", style: { - labelText: combo => combo.id, + labelText: ({id}) => getComboName(id), labelFill: "gray", labelFontSize: 10, labelPlacement: "top", @@ -101,7 +149,28 @@ const setupGraphButtons = (graph) => { layout: { type: "force", }, - behaviors: ["drag-canvas", "zoom-canvas", "drag-element"], + behaviors: [ + "drag-canvas", + "zoom-canvas", + "drag-element", + /** @type {import("@antv/g6").ClickSelectOptions} */ + ({ + type: "click-select", + onClick: ({ target }) => { + if (target.type !== "node") { + resetDetails(); + return; + } + + const node = graph.getNodeData(target.id); + details.replaceChildren( + node + ? getDetailsFromNode(node) + : $("p", { textContent: `node ${target.id} not found!` }) + ); + } + }) + ], transforms: ["process-parallel-edges"], plugins: [ /** @type {import("@antv/g6").TooltipOptions} */ @@ -116,7 +185,25 @@ const setupGraphButtons = (graph) => { ], }); + if (grouping) { + for (let i = 0; i < grouping.elements.length; i++) { + grouping.elements[i].addEventListener("change", ({target}) => { + if (!(target instanceof HTMLInputElement)) return; + if (graphJson) { + const flat = target.value === "flat"; + graphData = getGraphData(graphJson, flat); + graph.setData(graphData); + void graph.render(); + } + }) + } + } + + // Override the default "Loading..." + resetDetails(); + setupFileInput(graph); setupGraphButtons(graph); - console.debug(graph); + + console.debug("graph object\n", graph); })(); diff --git a/tapa-visualizer/js/praser.js b/tapa-visualizer/js/praser.js index e5b08d67..94dc73c1 100644 --- a/tapa-visualizer/js/praser.js +++ b/tapa-visualizer/js/praser.js @@ -4,14 +4,16 @@ * RapidStream Contributor License Agreement. */ +import { getComboName } from "./graph.js"; + /** @type {(map: Map>, key: K, value: V) => void} */ const addToMappedSet = (map, key, value) => { const set = map.get(key); set ? set.add(value) : map.set(key, new Set([value])); }; -/** @type {(json: GraphJSON) => Required} */ -export const getGraphData = (json) => { +/** @type {(json: GraphJSON, flat: boolean) => Required} */ +export const getGraphData = (json, flat = false) => { /** @type {Required} */ const graphData = { @@ -28,8 +30,9 @@ export const getGraphData = (json) => { if (task.level !== "upper") continue; // Add upper task as combo + const combo = `combo:${taskName}`; graphData.combos.push({ - id: taskName, + id: combo, data: task, type: taskName === json.top ? "rect" : "circle" }); @@ -37,13 +40,21 @@ export const getGraphData = (json) => { // Add sub task as node for (const subTaskName in task.tasks) { const subTasks = task.tasks[subTaskName]; - subTasks.forEach( - (subTask, i) => graphData.nodes.push({ - id: `${subTaskName}/${i}`, - combo: taskName, - data: subTask - }) - ); + if (flat) { + subTasks.forEach( + (subTask, i) => graphData.nodes.push({ + id: `${subTaskName}/${i}`, + combo, + data: subTask, + }) + ); + } else { + graphData.nodes.push({ + id: subTaskName, + combo, + data: { subTasks }, + }); + } } /** fifo groups for fifos like fifo_x_xx[0], fifo_x_xx[1]... @@ -60,8 +71,15 @@ export const getGraphData = (json) => { continue; } - const source = fifo.produced_by.join("/"); - const target = fifo.consumed_by.join("/"); + /** @type {(by: [string, number]) => string} */ + const getSubTask = ( + flat + ? by => by.join("/") + : by => by[0] + ); + + const source = getSubTask(fifo.produced_by); + const target = getSubTask(fifo.consumed_by); // console.log(taskName, fifoName, source, target); @@ -100,9 +118,11 @@ export const getGraphData = (json) => { graphData.combos.forEach(combo => { if (combo.type === "circle") { const node = graphData.nodes.find( - ({id}) => id.split("/")[0] === combo.id + ({id}) => id.split("/")[0] === getComboName(combo.id) + ); + if (node) graphData.edges.push( + { source: combo.id, target: node.id, id: `combo-to-node/${node.id}` } ); - if (node) graphData.edges.push({ source: combo.id, target: node.id }); } }) diff --git a/tapa-visualizer/js/sidebar.js b/tapa-visualizer/js/sidebar.js new file mode 100644 index 00000000..cfaea0ce --- /dev/null +++ b/tapa-visualizer/js/sidebar.js @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2024 RapidStream Design Automation, Inc. and contributors. + * All rights reserved. The contributor(s) of this file has/have agreed to the + * RapidStream Contributor License Agreement. + */ + +import { $, getComboName } from "./graph.js"; + +/** @type {(parent: T, ...children: (Node | string)[] ) => T} */ +const append = (parent, ...children) => { + parent.append(...children); + return parent; +} + +/** @type {(args: [string, { arg: string, cat: string }][]) => HTMLElement} */ +const parseArgs = args => append( + $("dd"), append( + $("ul"), ...args.map( + ([name, { arg, cat }]) => + $("li", { textContent: `${name}: ${arg} (${cat})` }) + ) + ) +); + +/** @type {(node: import("@antv/g6").NodeData ) => HTMLDListElement} */ +export const getDetailsFromNode = node => { + + /** @satisfies {HTMLDListElement} */ + const dl = append( + $("dl"), + $("dt", { textContent: "Instance Name" }), + $("dd", { textContent: node.id }), + $("dt", { textContent: "Upper Task" }), + $("dd", { textContent: getComboName(node.combo ?? "") }), + ); + + /** @type {(dl: HTMLDListElement, subTask: SubTask, i?: number) => void} */ + const appendNodeData = (dl, { args, step }, i) => { + const argsArr = Object.entries(args); + if (typeof i === "number") { + dl.append($("dt", { + textContent: `Sub-Task ${i}`, + style: "padding: .25rem 0 .1rem; border-top: 1px solid var(--border);", + })); + } + dl.append( + $("dt", { textContent: `Arguments` }), + argsArr.length > 0 + ? parseArgs(argsArr) + : $("dd", { textContent: "" }), + $("dt", { textContent: `Step` }), + $("dd", { textContent: step }), + ); + } + + if (node.data?.subTasks) { + /** + * @type {SubTask[]} + * @ts-expect-error unknown */ + const subTasks = node.data?.subTasks; + subTasks.forEach( + (subTask, i) => appendNodeData(dl, subTask, i) + ); + } else if (node.data?.args) { + /** + * @type {SubTask} + * @ts-expect-error unknown */ + const subTask = node.data; + appendNodeData(dl, subTask); + } else { + console.warn("Selected node is missing data!", node) + } + + return dl; + +}; diff --git a/tapa-visualizer/package-lock.json b/tapa-visualizer/package-lock.json index 31f2e441..61e2c11b 100644 --- a/tapa-visualizer/package-lock.json +++ b/tapa-visualizer/package-lock.json @@ -4,13 +4,14 @@ "packages": { "": { "devDependencies": { - "@antv/g6": "^5.0.39", - "eslint": "^9.17.0", + "@antv/g6": "^5.0.42", + "eslint": "^9.18.0", "globals": "^15.14.0", - "typescript": "^5.7.2", - "typescript-eslint": "^8.19.0" + "patch-package": "^8.0.0", + "typescript": "^5.7.3", + "typescript-eslint": "^8.20.0" }, - "name": "tapa-visualizer", + "hasInstallScript": true, "version": "0.1.0" }, "node_modules/@antv/algorithm": { @@ -272,10 +273,10 @@ "hull.js": "^1.0.6" }, "dev": true, - "integrity": "sha512-2uhI2Kf6n4xdgRdTx5BFTQ8I5Pg4xPwdU6qleqRyXhrx3Q3lE0GTgWlqFzUlnbJvtH/DUU4qd/3XyYqVL62S9g==", + "integrity": "sha512-JGYSeicGIX5C1EGN7DZOYbFm6k18eFlHSdJLQOq5l9bJmWD3Zq7mpRPK8PVsb8YlmFdqajJrCPKnw0zp22kACg==", "license": "MIT", - "resolved": "https://registry.npmmirror.com/@antv/g6/-/g6-5.0.39.tgz", - "version": "5.0.39" + "resolved": "https://registry.npmmirror.com/@antv/g6/-/g6-5.0.42.tgz", + "version": "5.0.42" }, "node_modules/@antv/graphlib": { "dependencies": { @@ -417,10 +418,10 @@ "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "integrity": "sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==", + "integrity": "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==", "license": "Apache-2.0", - "resolved": "https://registry.npmmirror.com/@eslint/core/-/core-0.9.1.tgz", - "version": "0.9.1" + "resolved": "https://registry.npmmirror.com/@eslint/core/-/core-0.10.0.tgz", + "version": "0.10.0" }, "node_modules/@eslint/eslintrc": { "dependencies": { @@ -464,10 +465,10 @@ "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "integrity": "sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==", + "integrity": "sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==", "license": "MIT", - "resolved": "https://registry.npmmirror.com/@eslint/js/-/js-9.17.0.tgz", - "version": "9.17.0" + "resolved": "https://registry.npmmirror.com/@eslint/js/-/js-9.18.0.tgz", + "version": "9.18.0" }, "node_modules/@eslint/object-schema": { "dev": true, @@ -481,16 +482,17 @@ }, "node_modules/@eslint/plugin-kit": { "dependencies": { + "@eslint/core": "^0.10.0", "levn": "^0.4.1" }, "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "integrity": "sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==", + "integrity": "sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==", "license": "Apache-2.0", - "resolved": "https://registry.npmmirror.com/@eslint/plugin-kit/-/plugin-kit-0.2.4.tgz", - "version": "0.2.4" + "resolved": "https://registry.npmmirror.com/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz", + "version": "0.2.5" }, "node_modules/@humanfs/core": { "dev": true, @@ -558,6 +560,24 @@ "resolved": "https://registry.npmmirror.com/@humanwhocodes/retry/-/retry-0.4.1.tgz", "version": "0.4.1" }, + "node_modules/@isaacs/cliui": { + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dev": true, + "engines": { + "node": ">=12" + }, + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "resolved": "https://registry.npmmirror.com/@isaacs/cliui/-/cliui-8.0.2.tgz", + "version": "8.0.2" + }, "node_modules/@jridgewell/gen-mapping": { "dependencies": { "@jridgewell/set-array": "^1.2.1", @@ -719,23 +739,23 @@ "undici-types": "~6.20.0" }, "dev": true, - "integrity": "sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==", + "integrity": "sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==", "license": "MIT", "peer": true, - "resolved": "https://registry.npmmirror.com/@types/node/-/node-22.10.5.tgz", - "version": "22.10.5" + "resolved": "https://registry.npmmirror.com/@types/node/-/node-22.10.7.tgz", + "version": "22.10.7" }, "node_modules/@typescript-eslint/eslint-plugin": { "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.19.0", - "@typescript-eslint/type-utils": "8.19.0", - "@typescript-eslint/utils": "8.19.0", - "@typescript-eslint/visitor-keys": "8.19.0", + "@typescript-eslint/scope-manager": "8.20.0", + "@typescript-eslint/type-utils": "8.20.0", + "@typescript-eslint/utils": "8.20.0", + "@typescript-eslint/visitor-keys": "8.20.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.0.0" }, "dev": true, "engines": { @@ -745,22 +765,22 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "integrity": "sha512-NggSaEZCdSrFddbctrVjkVZvFC6KGfKfNK0CU7mNK/iKHGKbzT4Wmgm08dKpcZECBu9f5FypndoMyRHkdqfT1Q==", + "integrity": "sha512-naduuphVw5StFfqp4Gq4WhIBE2gN1GEmMUExpJYknZJdRnc+2gDzB8Z3+5+/Kv33hPQRDGzQO/0opHE72lZZ6A==", "license": "MIT", "peerDependencies": { "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.8.0" }, - "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.19.0.tgz", - "version": "8.19.0" + "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.20.0.tgz", + "version": "8.20.0" }, "node_modules/@typescript-eslint/parser": { "dependencies": { - "@typescript-eslint/scope-manager": "8.19.0", - "@typescript-eslint/types": "8.19.0", - "@typescript-eslint/typescript-estree": "8.19.0", - "@typescript-eslint/visitor-keys": "8.19.0", + "@typescript-eslint/scope-manager": "8.20.0", + "@typescript-eslint/types": "8.20.0", + "@typescript-eslint/typescript-estree": "8.20.0", + "@typescript-eslint/visitor-keys": "8.20.0", "debug": "^4.3.4" }, "dev": true, @@ -771,19 +791,19 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "integrity": "sha512-6M8taKyOETY1TKHp0x8ndycipTVgmp4xtg5QpEZzXxDhNvvHOJi5rLRkLr8SK3jTgD5l4fTlvBiRdfsuWydxBw==", + "integrity": "sha512-gKXG7A5HMyjDIedBi6bUrDcun8GIjnI8qOwVLiY3rx6T/sHP/19XLJOnIq/FgQvWLHja5JN/LSE7eklNBr612g==", "license": "MIT", "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.8.0" }, - "resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-8.19.0.tgz", - "version": "8.19.0" + "resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-8.20.0.tgz", + "version": "8.20.0" }, "node_modules/@typescript-eslint/scope-manager": { "dependencies": { - "@typescript-eslint/types": "8.19.0", - "@typescript-eslint/visitor-keys": "8.19.0" + "@typescript-eslint/types": "8.20.0", + "@typescript-eslint/visitor-keys": "8.20.0" }, "dev": true, "engines": { @@ -793,17 +813,17 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "integrity": "sha512-hkoJiKQS3GQ13TSMEiuNmSCvhz7ujyqD1x3ShbaETATHrck+9RaDdUbt+osXaUuns9OFwrDTTrjtwsU8gJyyRA==", + "integrity": "sha512-J7+VkpeGzhOt3FeG1+SzhiMj9NzGD/M6KoGn9f4dbz3YzK9hvbhVTmLj/HiTp9DazIzJ8B4XcM80LrR9Dm1rJw==", "license": "MIT", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-8.19.0.tgz", - "version": "8.19.0" + "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-8.20.0.tgz", + "version": "8.20.0" }, "node_modules/@typescript-eslint/type-utils": { "dependencies": { - "@typescript-eslint/typescript-estree": "8.19.0", - "@typescript-eslint/utils": "8.19.0", + "@typescript-eslint/typescript-estree": "8.20.0", + "@typescript-eslint/utils": "8.20.0", "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.0.0" }, "dev": true, "engines": { @@ -813,14 +833,14 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "integrity": "sha512-TZs0I0OSbd5Aza4qAMpp1cdCYVnER94IziudE3JU328YUHgWu9gwiwhag+fuLeJ2LkWLXI+F/182TbG+JaBdTg==", + "integrity": "sha512-bPC+j71GGvA7rVNAHAtOjbVXbLN5PkwqMvy1cwGeaxUoRQXVuKCebRoLzm+IPW/NtFFpstn1ummSIasD5t60GA==", "license": "MIT", "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.8.0" }, - "resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-8.19.0.tgz", - "version": "8.19.0" + "resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-8.20.0.tgz", + "version": "8.20.0" }, "node_modules/@typescript-eslint/types": { "dev": true, @@ -831,21 +851,21 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "integrity": "sha512-8XQ4Ss7G9WX8oaYvD4OOLCjIQYgRQxO+qCiR2V2s2GxI9AUpo7riNwo6jDhKtTcaJjT8PY54j2Yb33kWtSJsmA==", + "integrity": "sha512-cqaMiY72CkP+2xZRrFt3ExRBu0WmVitN/rYPZErA80mHjHx/Svgp8yfbzkJmDoQ/whcytOPO9/IZXnOc+wigRA==", "license": "MIT", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-8.19.0.tgz", - "version": "8.19.0" + "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-8.20.0.tgz", + "version": "8.20.0" }, "node_modules/@typescript-eslint/typescript-estree": { "dependencies": { - "@typescript-eslint/types": "8.19.0", - "@typescript-eslint/visitor-keys": "8.19.0", + "@typescript-eslint/types": "8.20.0", + "@typescript-eslint/visitor-keys": "8.20.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.0.0" }, "dev": true, "engines": { @@ -855,13 +875,13 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "integrity": "sha512-WW9PpDaLIFW9LCbucMSdYUuGeFUz1OkWYS/5fwZwTA+l2RwlWFdJvReQqMUMBw4yJWJOfqd7An9uwut2Oj8sLw==", + "integrity": "sha512-Y7ncuy78bJqHI35NwzWol8E0X7XkRVS4K4P4TCyzWkOJih5NDvtoRDW4Ba9YJJoB2igm9yXDdYI/+fkiiAxPzA==", "license": "MIT", "peerDependencies": { "typescript": ">=4.8.4 <5.8.0" }, - "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.19.0.tgz", - "version": "8.19.0" + "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.20.0.tgz", + "version": "8.20.0" }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { "dependencies": { @@ -892,9 +912,9 @@ "node_modules/@typescript-eslint/utils": { "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.19.0", - "@typescript-eslint/types": "8.19.0", - "@typescript-eslint/typescript-estree": "8.19.0" + "@typescript-eslint/scope-manager": "8.20.0", + "@typescript-eslint/types": "8.20.0", + "@typescript-eslint/typescript-estree": "8.20.0" }, "dev": true, "engines": { @@ -904,18 +924,18 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "integrity": "sha512-PTBG+0oEMPH9jCZlfg07LCB2nYI0I317yyvXGfxnvGvw4SHIOuRnQ3kadyyXY6tGdChusIHIbM5zfIbp4M6tCg==", + "integrity": "sha512-dq70RUw6UK9ei7vxc4KQtBRk7qkHZv447OUZ6RPQMQl71I3NZxQJX/f32Smr+iqWrB02pHKn2yAdHBb0KNrRMA==", "license": "MIT", "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.8.0" }, - "resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-8.19.0.tgz", - "version": "8.19.0" + "resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-8.20.0.tgz", + "version": "8.20.0" }, "node_modules/@typescript-eslint/visitor-keys": { "dependencies": { - "@typescript-eslint/types": "8.19.0", + "@typescript-eslint/types": "8.20.0", "eslint-visitor-keys": "^4.2.0" }, "dev": true, @@ -926,10 +946,10 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "integrity": "sha512-mCFtBbFBJDCNCWUl5y6sZSCHXw1DEFEk3c/M3nRK2a4XUB8StGFtmcEMizdjKuBzB6e/smJAAWYug3VrdLMr1w==", + "integrity": "sha512-v/BpkeeYAsPkKCkR8BDwcno0llhzWVqPOamQrAEMdpZav2Y9OVjd9dwJyBLJWwf335B5DmlifECIkZRJCaGaHA==", "license": "MIT", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.19.0.tgz", - "version": "8.19.0" + "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.20.0.tgz", + "version": "8.20.0" }, "node_modules/@webassemblyjs/ast": { "dependencies": { @@ -1123,6 +1143,13 @@ "resolved": "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz", "version": "4.2.2" }, + "node_modules/@yarnpkg/lockfile": { + "dev": true, + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "license": "BSD-2-Clause", + "resolved": "https://registry.npmmirror.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "version": "1.1.0" + }, "node_modules/acorn": { "bin": { "acorn": "bin/acorn" @@ -1219,6 +1246,19 @@ "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "version": "3.5.2" }, + "node_modules/ansi-regex": { + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + }, + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.1.0.tgz", + "version": "6.1.0" + }, "node_modules/ansi-styles": { "dependencies": { "color-convert": "^2.0.1" @@ -1242,6 +1282,16 @@ "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", "version": "2.0.1" }, + "node_modules/at-least-node": { + "dev": true, + "engines": { + "node": ">= 4.0.0" + }, + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "license": "ISC", + "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz", + "version": "1.0.0" + }, "node_modules/balanced-match": { "dev": true, "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", @@ -1312,11 +1362,11 @@ "url": "https://github.com/sponsors/ai" } ], - "integrity": "sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", "license": "MIT", "peer": true, - "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.24.3.tgz", - "version": "4.24.3" + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.24.4.tgz", + "version": "4.24.4" }, "node_modules/bubblesets-js": { "dev": true, @@ -1333,6 +1383,56 @@ "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", "version": "1.1.2" }, + "node_modules/call-bind": { + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.8.tgz", + "version": "1.0.8" + }, + "node_modules/call-bind-apply-helpers": { + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "version": "1.0.1" + }, + "node_modules/call-bound": { + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" + }, + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/call-bound/-/call-bound-1.0.3.tgz", + "version": "1.0.3" + }, "node_modules/callsites": { "dev": true, "engines": { @@ -1359,11 +1459,11 @@ "url": "https://github.com/sponsors/ai" } ], - "integrity": "sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==", + "integrity": "sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==", "license": "CC-BY-4.0", "peer": true, - "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz", - "version": "1.0.30001690" + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz", + "version": "1.0.30001692" }, "node_modules/chalk": { "dependencies": { @@ -1393,6 +1493,22 @@ "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", "version": "1.0.4" }, + "node_modules/ci-info": { + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/ci-info/-/ci-info-3.9.0.tgz", + "version": "3.9.0" + }, "node_modules/color-convert": { "dependencies": { "color-name": "~1.1.4" @@ -1590,13 +1706,60 @@ "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz", "version": "0.1.4" }, + "node_modules/define-data-property": { + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz", + "version": "1.1.4" + }, + "node_modules/dunder-proto": { + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", + "version": "1.0.1" + }, + "node_modules/eastasianwidth": { + "dev": true, + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "version": "0.2.0" + }, "node_modules/electron-to-chromium": { "dev": true, - "integrity": "sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ==", + "integrity": "sha512-LcUDPqSt+V0QmI47XLzZrz5OqILSMGsPFkDYus22rIbgorSvBYEFqq854ltTmUdHkY92FSdAAvsh4jWEULMdfQ==", "license": "ISC", "peer": true, - "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.76.tgz", - "version": "1.5.76" + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.83.tgz", + "version": "1.5.83" + }, + "node_modules/emoji-regex": { + "dev": true, + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz", + "version": "9.2.2" }, "node_modules/emojis-list": { "dev": true, @@ -1624,6 +1787,26 @@ "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz", "version": "5.18.0" }, + "node_modules/es-define-property": { + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", + "version": "1.0.1" + }, + "node_modules/es-errors": { + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", + "version": "1.3.0" + }, "node_modules/es-module-lexer": { "dev": true, "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", @@ -1632,6 +1815,19 @@ "resolved": "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.6.0.tgz", "version": "1.6.0" }, + "node_modules/es-object-atoms": { + "dependencies": { + "es-errors": "^1.3.0" + }, + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "version": "1.1.1" + }, "node_modules/escalade": { "dev": true, "engines": { @@ -1664,10 +1860,10 @@ "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.19.0", - "@eslint/core": "^0.9.0", + "@eslint/core": "^0.10.0", "@eslint/eslintrc": "^3.2.0", - "@eslint/js": "9.17.0", - "@eslint/plugin-kit": "^0.2.3", + "@eslint/js": "9.18.0", + "@eslint/plugin-kit": "^0.2.5", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.1", @@ -1703,7 +1899,7 @@ "funding": { "url": "https://eslint.org/donate" }, - "integrity": "sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==", + "integrity": "sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==", "license": "MIT", "peerDependencies": { "jiti": "*" @@ -1713,8 +1909,8 @@ "optional": true } }, - "resolved": "https://registry.npmmirror.com/eslint/-/eslint-9.17.0.tgz", - "version": "9.17.0" + "resolved": "https://registry.npmmirror.com/eslint/-/eslint-9.18.0.tgz", + "version": "9.18.0" }, "node_modules/eslint-scope": { "dependencies": { @@ -1841,16 +2037,16 @@ "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "dev": true, "engines": { "node": ">=8.6.0" }, - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "license": "MIT", - "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz", - "version": "3.3.2" + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz", + "version": "3.3.3" }, "node_modules/fast-glob/node_modules/glob-parent": { "dependencies": { @@ -1881,11 +2077,21 @@ }, "node_modules/fast-uri": { "dev": true, - "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "integrity": "sha512-5JnBCWpFlMo0a3ciDy/JckMzzv1U9coZrIhedq+HXxxUfDTAiS0LA8OKVao4G9BxmCVck/jtA5r3KAtRWEyD8Q==", "license": "BSD-3-Clause", "peer": true, - "resolved": "https://registry.npmmirror.com/fast-uri/-/fast-uri-3.0.3.tgz", - "version": "3.0.3" + "resolved": "https://registry.npmmirror.com/fast-uri/-/fast-uri-3.0.5.tgz", + "version": "3.0.5" }, "node_modules/fastq": { "dependencies": { @@ -1947,6 +2153,16 @@ "resolved": "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz", "version": "5.0.0" }, + "node_modules/find-yarn-workspace-root": { + "dependencies": { + "micromatch": "^4.0.2" + }, + "dev": true, + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "license": "Apache-2.0", + "resolved": "https://registry.npmmirror.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "version": "2.0.0" + }, "node_modules/flat-cache": { "dependencies": { "flatted": "^3.2.9", @@ -1968,6 +2184,88 @@ "resolved": "https://registry.npmmirror.com/flatted/-/flatted-3.3.2.tgz", "version": "3.3.2" }, + "node_modules/foreground-child": { + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "license": "ISC", + "resolved": "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.3.0.tgz", + "version": "3.3.0" + }, + "node_modules/fs-extra": { + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "dev": true, + "engines": { + "node": ">=10" + }, + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", + "version": "9.1.0" + }, + "node_modules/function-bind": { + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", + "version": "1.1.2" + }, + "node_modules/get-intrinsic": { + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "function-bind": "^1.1.2", + "get-proto": "^1.0.0", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.7.tgz", + "version": "1.2.7" + }, + "node_modules/get-proto": { + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", + "version": "1.0.1" + }, "node_modules/gl-matrix": { "dev": true, "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==", @@ -1975,6 +2273,30 @@ "resolved": "https://registry.npmmirror.com/gl-matrix/-/gl-matrix-3.4.3.tgz", "version": "3.4.3" }, + "node_modules/glob": { + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "dev": true, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "integrity": "sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==", + "license": "ISC", + "resolved": "https://registry.npmmirror.com/glob/-/glob-11.0.1.tgz", + "version": "11.0.1" + }, "node_modules/glob-parent": { "dependencies": { "is-glob": "^4.0.3" @@ -1996,6 +2318,32 @@ "resolved": "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "version": "0.4.1" }, + "node_modules/glob/node_modules/brace-expansion": { + "dependencies": { + "balanced-match": "^1.0.0" + }, + "dev": true, + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", + "version": "2.0.1" + }, + "node_modules/glob/node_modules/minimatch": { + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "dev": true, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "license": "ISC", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-10.0.1.tgz", + "version": "10.0.1" + }, "node_modules/globals": { "dev": true, "engines": { @@ -2009,11 +2357,23 @@ "resolved": "https://registry.npmmirror.com/globals/-/globals-15.14.0.tgz", "version": "15.14.0" }, + "node_modules/gopd": { + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", + "version": "1.2.0" + }, "node_modules/graceful-fs": { "dev": true, "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC", - "peer": true, "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", "version": "4.2.11" }, @@ -2044,8 +2404,47 @@ "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", "version": "4.0.0" }, + "node_modules/has-property-descriptors": { + "dependencies": { + "es-define-property": "^1.0.0" + }, + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "version": "1.0.2" + }, + "node_modules/has-symbols": { + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", + "version": "1.1.0" + }, + "node_modules/hasown": { + "dependencies": { + "function-bind": "^1.1.2" + }, + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz", + "version": "2.0.2" + }, "node_modules/hull.js": { - "deprecated": "This package is no longer published on npmjs.com, you are using a deprecated and vulnerable version. Do not use it! Check project homepage on GitHub (README / NPM package) to see how to fetch the latest version.", + "deprecated": "This package is no longer published on npmjs.com, you are using a deprecated and vulnerable version. Do not use it! Check project homepage on GitHub to see how to fetch the latest version: https://github.com/andriiheonia/hull?tab=readme-ov-file#npm-package", "dev": true, "integrity": "sha512-TC7e9sHYOaCVms0sn2hN7buxnaGfcl9h5EPVoVX9DTPoMpqQiS9bf3tmGDgiNaMVHBD91RAvWjCxrJ5Jx8BI5A==", "license": "BSD", @@ -2103,6 +2502,22 @@ "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.3.2.tgz", "version": "0.3.2" }, + "node_modules/is-docker": { + "bin": { + "is-docker": "cli.js" + }, + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + }, + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz", + "version": "2.2.1" + }, "node_modules/is-extglob": { "dev": true, "engines": { @@ -2113,6 +2528,16 @@ "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", "version": "2.1.1" }, + "node_modules/is-fullwidth-code-point": { + "dev": true, + "engines": { + "node": ">=8" + }, + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "version": "3.0.0" + }, "node_modules/is-glob": { "dependencies": { "is-extglob": "^2.1.1" @@ -2136,12 +2561,48 @@ "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", "version": "7.0.0" }, - "node_modules/isexe": { + "node_modules/is-wsl": { + "dependencies": { + "is-docker": "^2.0.0" + }, "dev": true, - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC", - "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", - "version": "2.0.0" + "engines": { + "node": ">=8" + }, + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz", + "version": "2.2.0" + }, + "node_modules/isarray": { + "dev": true, + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz", + "version": "2.0.5" + }, + "node_modules/isexe": { + "dev": true, + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC", + "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", + "version": "2.0.0" + }, + "node_modules/jackspeak": { + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "dev": true, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "integrity": "sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==", + "license": "BlueOak-1.0.0", + "resolved": "https://registry.npmmirror.com/jackspeak/-/jackspeak-4.0.2.tgz", + "version": "4.0.2" }, "node_modules/jest-worker": { "dependencies": { @@ -2211,6 +2672,26 @@ "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "version": "0.4.1" }, + "node_modules/json-stable-stringify": { + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "isarray": "^2.0.5", + "jsonify": "^0.0.1", + "object-keys": "^1.1.1" + }, + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "integrity": "sha512-Lp6HbbBgosLmJbjx0pBLbgvx68FaFU1sdkmBuckmhhJ88kL13OA51CDtR2yJB50eCNMH9wRqtQNNiAqQH4YXnA==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/json-stable-stringify/-/json-stable-stringify-1.2.1.tgz", + "version": "1.2.1" + }, "node_modules/json-stable-stringify-without-jsonify": { "dev": true, "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", @@ -2232,6 +2713,29 @@ "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", "version": "2.2.3" }, + "node_modules/jsonfile": { + "dependencies": { + "universalify": "^2.0.0" + }, + "dev": true, + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + }, + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "version": "6.1.0" + }, + "node_modules/jsonify": { + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "license": "Public Domain", + "resolved": "https://registry.npmmirror.com/jsonify/-/jsonify-0.0.1.tgz", + "version": "0.0.1" + }, "node_modules/keyv": { "dependencies": { "json-buffer": "3.0.1" @@ -2242,6 +2746,16 @@ "resolved": "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz", "version": "4.5.4" }, + "node_modules/klaw-sync": { + "dependencies": { + "graceful-fs": "^4.1.11" + }, + "dev": true, + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/klaw-sync/-/klaw-sync-6.0.0.tgz", + "version": "6.0.0" + }, "node_modules/levn": { "dependencies": { "prelude-ls": "^1.2.1", @@ -2313,6 +2827,26 @@ "resolved": "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz", "version": "4.6.2" }, + "node_modules/lru-cache": { + "dev": true, + "engines": { + "node": "20 || >=22" + }, + "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==", + "license": "ISC", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-11.0.2.tgz", + "version": "11.0.2" + }, + "node_modules/math-intrinsics": { + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "version": "1.1.0" + }, "node_modules/merge-stream": { "dev": true, "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", @@ -2383,6 +2917,26 @@ "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", "version": "3.1.2" }, + "node_modules/minimist": { + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz", + "version": "1.2.8" + }, + "node_modules/minipass": { + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-7.1.2.tgz", + "version": "7.1.2" + }, "node_modules/ml-array-max": { "dependencies": { "is-any-array": "^2.0.0" @@ -2456,6 +3010,33 @@ "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.19.tgz", "version": "2.0.19" }, + "node_modules/object-keys": { + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz", + "version": "1.1.1" + }, + "node_modules/open": { + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + }, + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/open/-/open-7.4.2.tgz", + "version": "7.4.2" + }, "node_modules/optionator": { "dependencies": { "deep-is": "^0.1.3", @@ -2474,6 +3055,16 @@ "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.4.tgz", "version": "0.9.4" }, + "node_modules/os-tmpdir": { + "dev": true, + "engines": { + "node": ">=0.10.0" + }, + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "version": "1.0.2" + }, "node_modules/p-limit": { "dependencies": { "yocto-queue": "^0.1.0" @@ -2506,6 +3097,13 @@ "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz", "version": "5.0.0" }, + "node_modules/package-json-from-dist": { + "dev": true, + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0", + "resolved": "https://registry.npmmirror.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "version": "1.0.1" + }, "node_modules/parent-module": { "dependencies": { "callsites": "^3.0.0" @@ -2519,6 +3117,37 @@ "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", "version": "1.0.1" }, + "node_modules/patch-package": { + "bin": { + "patch-package": "index.js" + }, + "dependencies": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^4.1.2", + "ci-info": "^3.7.0", + "cross-spawn": "^7.0.3", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^9.0.0", + "json-stable-stringify": "^1.0.2", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.6", + "open": "^7.4.2", + "rimraf": "^2.6.3", + "semver": "^7.5.3", + "slash": "^2.0.0", + "tmp": "^0.0.33", + "yaml": "^2.2.2" + }, + "dev": true, + "engines": { + "node": ">=14", + "npm": ">5" + }, + "integrity": "sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/patch-package/-/patch-package-8.0.0.tgz", + "version": "8.0.0" + }, "node_modules/path-exists": { "dev": true, "engines": { @@ -2539,6 +3168,23 @@ "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", "version": "3.1.1" }, + "node_modules/path-scurry": { + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "dev": true, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "license": "BlueOak-1.0.0", + "resolved": "https://registry.npmmirror.com/path-scurry/-/path-scurry-2.0.0.tgz", + "version": "2.0.0" + }, "node_modules/picocolors": { "dev": true, "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", @@ -2668,6 +3314,26 @@ "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", "version": "1.0.4" }, + "node_modules/rimraf": { + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "dependencies": { + "glob": "^11.0.0", + "package-json-from-dist": "^1.0.0" + }, + "dev": true, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", + "license": "ISC", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-6.0.1.tgz", + "version": "6.0.1" + }, "node_modules/run-parallel": { "dependencies": { "queue-microtask": "^1.2.2" @@ -2758,6 +3424,24 @@ "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "version": "6.0.2" }, + "node_modules/set-function-length": { + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.2.2.tgz", + "version": "1.2.2" + }, "node_modules/shebang-command": { "dependencies": { "shebang-regex": "^3.0.0" @@ -2781,6 +3465,19 @@ "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", "version": "3.0.0" }, + "node_modules/signal-exit": { + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz", + "version": "4.1.0" + }, "node_modules/simple-swizzle": { "dependencies": { "is-arrayish": "^0.3.1" @@ -2791,6 +3488,16 @@ "resolved": "https://registry.npmmirror.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "version": "0.2.2" }, + "node_modules/slash": { + "dev": true, + "engines": { + "node": ">=6" + }, + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/slash/-/slash-2.0.0.tgz", + "version": "2.0.0" + }, "node_modules/source-map": { "dev": true, "engines": { @@ -2814,6 +3521,110 @@ "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz", "version": "0.5.21" }, + "node_modules/string-width": { + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + }, + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz", + "version": "5.1.2" + }, + "node_modules/string-width-cjs": { + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dev": true, + "engines": { + "node": ">=8" + }, + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "name": "string-width", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "version": "4.2.3" + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "dev": true, + "engines": { + "node": ">=8" + }, + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "version": "5.0.1" + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "dev": true, + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", + "version": "8.0.0" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "dev": true, + "engines": { + "node": ">=8" + }, + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "version": "6.0.1" + }, + "node_modules/strip-ansi": { + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + }, + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz", + "version": "7.1.0" + }, + "node_modules/strip-ansi-cjs": { + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "dev": true, + "engines": { + "node": ">=8" + }, + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "name": "strip-ansi", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "version": "6.0.1" + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "dev": true, + "engines": { + "node": ">=8" + }, + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "version": "5.0.1" + }, "node_modules/strip-json-comments": { "dev": true, "engines": { @@ -2975,6 +3786,19 @@ "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.0.tgz", "version": "4.3.0" }, + "node_modules/tmp": { + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "dev": true, + "engines": { + "node": ">=0.6.0" + }, + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/tmp/-/tmp-0.0.33.tgz", + "version": "0.0.33" + }, "node_modules/to-regex-range": { "dependencies": { "is-number": "^7.0.0" @@ -2991,15 +3815,15 @@ "node_modules/ts-api-utils": { "dev": true, "engines": { - "node": ">=16" + "node": ">=18.12" }, - "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==", "license": "MIT", "peerDependencies": { - "typescript": ">=4.2.0" + "typescript": ">=4.8.4" }, - "resolved": "https://registry.npmmirror.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz", - "version": "1.4.3" + "resolved": "https://registry.npmmirror.com/ts-api-utils/-/ts-api-utils-2.0.0.tgz", + "version": "2.0.0" }, "node_modules/tslib": { "dev": true, @@ -3030,16 +3854,16 @@ "engines": { "node": ">=14.17" }, - "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", "license": "Apache-2.0", - "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.7.2.tgz", - "version": "5.7.2" + "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.7.3.tgz", + "version": "5.7.3" }, "node_modules/typescript-eslint": { "dependencies": { - "@typescript-eslint/eslint-plugin": "8.19.0", - "@typescript-eslint/parser": "8.19.0", - "@typescript-eslint/utils": "8.19.0" + "@typescript-eslint/eslint-plugin": "8.20.0", + "@typescript-eslint/parser": "8.20.0", + "@typescript-eslint/utils": "8.20.0" }, "dev": true, "engines": { @@ -3049,14 +3873,14 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "integrity": "sha512-Ni8sUkVWYK4KAcTtPjQ/UTiRk6jcsuDhPpxULapUDi8A/l8TSBk+t1GtJA1RsCzIJg0q6+J7bf35AwQigENWRQ==", + "integrity": "sha512-Kxz2QRFsgbWj6Xcftlw3Dd154b3cEPFqQC+qMZrMypSijPd4UanKKvoKDrJ4o8AIfZFKAF+7sMaEIR8mTElozA==", "license": "MIT", "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.8.0" }, - "resolved": "https://registry.npmmirror.com/typescript-eslint/-/typescript-eslint-8.19.0.tgz", - "version": "8.19.0" + "resolved": "https://registry.npmmirror.com/typescript-eslint/-/typescript-eslint-8.20.0.tgz", + "version": "8.20.0" }, "node_modules/undici-types": { "dev": true, @@ -3066,13 +3890,23 @@ "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-6.20.0.tgz", "version": "6.20.0" }, + "node_modules/universalify": { + "dev": true, + "engines": { + "node": ">= 10.0.0" + }, + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", + "version": "2.0.1" + }, "node_modules/update-browserslist-db": { "bin": { "update-browserslist-db": "cli.js" }, "dependencies": { "escalade": "^3.2.0", - "picocolors": "^1.1.0" + "picocolors": "^1.1.1" }, "dev": true, "funding": [ @@ -3089,14 +3923,14 @@ "url": "https://github.com/sponsors/ai" } ], - "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", "license": "MIT", "peer": true, "peerDependencies": { "browserslist": ">= 4.21.0" }, - "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", - "version": "1.1.1" + "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", + "version": "1.1.2" }, "node_modules/uri-js": { "dependencies": { @@ -3248,6 +4082,114 @@ "resolved": "https://registry.npmmirror.com/workerize-loader/-/workerize-loader-2.0.2.tgz", "version": "2.0.2" }, + "node_modules/wrap-ansi": { + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + }, + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "version": "8.1.0" + }, + "node_modules/wrap-ansi-cjs": { + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + }, + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "name": "wrap-ansi", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "version": "7.0.0" + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "dev": true, + "engines": { + "node": ">=8" + }, + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "version": "5.0.1" + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "dev": true, + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", + "version": "8.0.0" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dev": true, + "engines": { + "node": ">=8" + }, + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "version": "4.2.3" + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "dev": true, + "engines": { + "node": ">=8" + }, + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "version": "6.0.1" + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + }, + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz", + "version": "6.2.1" + }, + "node_modules/yaml": { + "bin": { + "yaml": "bin.mjs" + }, + "dev": true, + "engines": { + "node": ">= 14" + }, + "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", + "license": "ISC", + "resolved": "https://registry.npmmirror.com/yaml/-/yaml-2.7.0.tgz", + "version": "2.7.0" + }, "node_modules/yocto-queue": { "dev": true, "engines": { diff --git a/tapa-visualizer/package.json b/tapa-visualizer/package.json index 5191ea24..06d565ac 100644 --- a/tapa-visualizer/package.json +++ b/tapa-visualizer/package.json @@ -1,12 +1,21 @@ { "devDependencies": { - "@antv/g6": "^5.0.39", - "eslint": "^9.17.0", + "@antv/g6": "^5.0.42", + "eslint": "^9.18.0", "globals": "^15.14.0", - "typescript": "^5.7.2", - "typescript-eslint": "^8.19.0" + "patch-package": "^8.0.0", + "typescript": "^5.7.3", + "typescript-eslint": "^8.20.0" + }, + "overrides": { + "patch-package@^8.0.0": { + "rimraf": "6.0.1" + } }, "private": true, + "scripts": { + "postinstall": "patch-package" + }, "type": "module", "version": "0.1.0" } diff --git a/tapa-visualizer/patches/@antv+g6+5.0.42.patch b/tapa-visualizer/patches/@antv+g6+5.0.42.patch new file mode 100644 index 00000000..f8a590f1 --- /dev/null +++ b/tapa-visualizer/patches/@antv+g6+5.0.42.patch @@ -0,0 +1,33 @@ +diff --git a/node_modules/@antv/g6/lib/types/element.d.ts b/node_modules/@antv/g6/lib/types/element.d.ts +index 391930d..c26c2fa 100644 +--- a/node_modules/@antv/g6/lib/types/element.d.ts ++++ b/node_modules/@antv/g6/lib/types/element.d.ts +@@ -7,6 +7,8 @@ import type { Point, Port } from '../types'; + * Node type + */ + export interface Node extends DisplayObject, ElementHooks, ElementMethods { ++ type: ElementType, ++ id: string, + /** + * 获取连接桩 + * +@@ -39,6 +41,8 @@ export interface Node extends DisplayObject, ElementHooks, ElementMethods { + * Edge type + */ + export interface Edge extends DisplayObject, ElementHooks, ElementMethods { ++ type: "edge", ++ id: string, + } + /** + * 组合类型 +diff --git a/node_modules/@antv/g6/lib/types/event.d.ts b/node_modules/@antv/g6/lib/types/event.d.ts +index d2ee921..079085c 100644 +--- a/node_modules/@antv/g6/lib/types/event.d.ts ++++ b/node_modules/@antv/g6/lib/types/event.d.ts +@@ -51,5 +51,5 @@ type TargetedEvent = Omit