diff --git a/README.MD b/README.MD new file mode 100644 index 0000000..da53545 --- /dev/null +++ b/README.MD @@ -0,0 +1,11 @@ +# Data Structure Visualization + +> Limited Structures, Unlimited Algorithms + +Demo: https://youngwinds.github.io/data-structure-visualization/ + +## Develop + +```shell +pnpm install && pnpm dev +``` diff --git a/package.json b/package.json index a6bc00c..c1f8a2f 100644 --- a/package.json +++ b/package.json @@ -6,12 +6,16 @@ "scripts": { "dev": "concurrently \"pnpm --filter=./packages/* --parallel dev \" \"pnpm --filter dsv dev\" ", "build": "pnpm -r build", - "test": "echo \"Error: no test specified\" && exit 1" + "test": "pnpm --filter=./packages/* --parallel test", + "test:coverage": "pnpm --filter=./packages/* --parallel test:coverage" }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { - "concurrently": "^9.1.0" + "concurrently": "^9.1.0", + "jest": "^29.0.0", + "@types/jest": "^29.0.0", + "ts-jest": "^29.0.0" } } diff --git a/packages/parser/__tests__/__snapshots__/sort.test.ts.snap b/packages/parser/__tests__/__snapshots__/sort.test.ts.snap new file mode 100644 index 0000000..8f1db9e --- /dev/null +++ b/packages/parser/__tests__/__snapshots__/sort.test.ts.snap @@ -0,0 +1,5405 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`sort bubble sort 1`] = ` +{ + "SchemaBuilder": [Function], + "code": " + +Array.prototype.swap = function (i, j) { + const temp = this[i]; + this[i] = this[j]; + this[j] = temp; +}; +const bubbleSort = arr => { + for (let i = 0; i < arr.length; i++) { + for (let j = 0; j < arr.length - i - 1; j++) { + if (arr[j] > arr[j + 1]) { + arr.swap(j, j + 1); + } + } + } + console.log("res", arr); + return arr; +}; +const arr1 = new ArrayProxy([5, 3, 8, 4, 2, 1, 2, 4], __GlobalContext__); +bubbleSort(arr1);", + "schema": { + "actions": [ + { + "args": [], + "name": "appear", + "structureId": "array-792350253", + "type": "appear", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 0, + 1, + ], + "name": "call", + "structureId": "array-792350253", + "type": "swap", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 2, + 3, + ], + "name": "call", + "structureId": "array-792350253", + "type": "swap", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 3, + 4, + ], + "name": "call", + "structureId": "array-792350253", + "type": "swap", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 4, + 5, + ], + "name": "call", + "structureId": "array-792350253", + "type": "swap", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 5, + 6, + ], + "name": "call", + "structureId": "array-792350253", + "type": "swap", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 6, + 7, + ], + "name": "call", + "structureId": "array-792350253", + "type": "swap", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 1, + 2, + ], + "name": "call", + "structureId": "array-792350253", + "type": "swap", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 2, + 3, + ], + "name": "call", + "structureId": "array-792350253", + "type": "swap", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 3, + 4, + ], + "name": "call", + "structureId": "array-792350253", + "type": "swap", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 4, + 5, + ], + "name": "call", + "structureId": "array-792350253", + "type": "swap", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 5, + 6, + ], + "name": "call", + "structureId": "array-792350253", + "type": "swap", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 1, + 2, + ], + "name": "call", + "structureId": "array-792350253", + "type": "swap", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 2, + 3, + ], + "name": "call", + "structureId": "array-792350253", + "type": "swap", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 3, + 4, + ], + "name": "call", + "structureId": "array-792350253", + "type": "swap", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 0, + 1, + ], + "name": "call", + "structureId": "array-792350253", + "type": "swap", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 1, + 2, + ], + "name": "call", + "structureId": "array-792350253", + "type": "swap", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 2, + 3, + ], + "name": "call", + "structureId": "array-792350253", + "type": "swap", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 0, + 1, + ], + "name": "call", + "structureId": "array-792350253", + "type": "swap", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-792350253", + "type": "get", + }, + ], + "structures": [ + { + "array": [ + 5, + 3, + 8, + 4, + 2, + 1, + 2, + 4, + ], + "id": "array-792350253", + "type": "array", + }, + ], + }, + "snapshotSchema": [Function], + "uuid": [Function], +} +`; + +exports[`sort heap sort 1`] = ` +{ + "SchemaBuilder": [Function], + "code": " + +Array.prototype.swap = function (i, j) { + const temp = this[i]; + this[i] = this[j]; + this[j] = temp; +}; +function heapSort(arr) { + function heapify(n, i) { + let largest = i; + const l = 2 * i + 1; + const r = 2 * i + 2; + if (l < n && arr[l] > arr[largest]) largest = l; + if (r < n && arr[r] > arr[largest]) largest = r; + if (largest !== i) { + arr.swap(i, largest); // 改用 swap 方法 + heapify(n, largest); + } + } + + // 构建最大堆 + for (let i = Math.floor(arr.length / 2) - 1; i >= 0; i--) { + heapify(arr.length, i); + } + + // 逐个提取元素 + for (let i = arr.length - 1; i > 0; i--) { + arr.swap(0, i); // 改用 swap 方法 + heapify(i, 0); + } + return arr; +} +heapSort(new ArrayProxy([6, 7, 8, 1, 3, 4, 10, 3, 5, 1], __GlobalContext__));", + "schema": { + "actions": [ + { + "args": [], + "name": "appear", + "structureId": "array-367635097", + "type": "appear", + }, + { + "args": [ + 9, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 8, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 3, + 8, + ], + "name": "call", + "structureId": "array-367635097", + "type": "swap", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 2, + 6, + ], + "name": "call", + "structureId": "array-367635097", + "type": "swap", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 0, + 2, + ], + "name": "call", + "structureId": "array-367635097", + "type": "swap", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 2, + 6, + ], + "name": "call", + "structureId": "array-367635097", + "type": "swap", + }, + { + "args": [ + 0, + 9, + ], + "name": "call", + "structureId": "array-367635097", + "type": "swap", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 0, + 2, + ], + "name": "call", + "structureId": "array-367635097", + "type": "swap", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 2, + 6, + ], + "name": "call", + "structureId": "array-367635097", + "type": "swap", + }, + { + "args": [ + 0, + 8, + ], + "name": "call", + "structureId": "array-367635097", + "type": "swap", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 0, + 1, + ], + "name": "call", + "structureId": "array-367635097", + "type": "swap", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 1, + 3, + ], + "name": "call", + "structureId": "array-367635097", + "type": "swap", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 3, + 7, + ], + "name": "call", + "structureId": "array-367635097", + "type": "swap", + }, + { + "args": [ + 0, + 7, + ], + "name": "call", + "structureId": "array-367635097", + "type": "swap", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 0, + 2, + ], + "name": "call", + "structureId": "array-367635097", + "type": "swap", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 2, + 5, + ], + "name": "call", + "structureId": "array-367635097", + "type": "swap", + }, + { + "args": [ + 0, + 6, + ], + "name": "call", + "structureId": "array-367635097", + "type": "swap", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 0, + 1, + ], + "name": "call", + "structureId": "array-367635097", + "type": "swap", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 1, + 3, + ], + "name": "call", + "structureId": "array-367635097", + "type": "swap", + }, + { + "args": [ + 0, + 5, + ], + "name": "call", + "structureId": "array-367635097", + "type": "swap", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 0, + 2, + ], + "name": "call", + "structureId": "array-367635097", + "type": "swap", + }, + { + "args": [ + 0, + 4, + ], + "name": "call", + "structureId": "array-367635097", + "type": "swap", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 0, + 3, + ], + "name": "call", + "structureId": "array-367635097", + "type": "swap", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 0, + 1, + ], + "name": "call", + "structureId": "array-367635097", + "type": "swap", + }, + { + "args": [ + 0, + 2, + ], + "name": "call", + "structureId": "array-367635097", + "type": "swap", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array-367635097", + "type": "get", + }, + { + "args": [ + 0, + 1, + ], + "name": "call", + "structureId": "array-367635097", + "type": "swap", + }, + ], + "structures": [ + { + "array": [ + 6, + 7, + 8, + 1, + 3, + 4, + 10, + 3, + 5, + 1, + ], + "id": "array-367635097", + "type": "array", + }, + ], + }, + "snapshotSchema": [Function], + "uuid": [Function], +} +`; + +exports[`sort in-place merge sort 1`] = ` +{ + "SchemaBuilder": [Function], + "code": " + +Array.prototype.swap = function (i, j) { + const temp = this[i]; + this[i] = this[j]; + this[j] = temp; +}; +function mergeSort(arr, left = 0, right = arr.length - 1) { + if (left >= right) return; + let mid = Math.floor((left + right) / 2); + + // 递归分割 + mergeSort(arr, left, mid); + mergeSort(arr, mid + 1, right); + + // 双指针合并算法 + let i = left; + let j = mid + 1; + while (i <= mid && j <= right) { + if (arr[i] <= arr[j]) { + i++; + } else { + // 将右侧元素插入到i位置 + const temp = arr[j]; + for (let k = j; k > i; k--) { + arr.swap(k, k - 1); + } + arr[i] = temp; + + // 更新指针位置 + i++; + mid++; + j++; + } + } + return arr; +} +mergeSort(new ArrayProxy([5, 2, 8, 4, 7, 1, 3, 6, 9], __GlobalContext__));", + "schema": { + "actions": [ + { + "args": [], + "name": "appear", + "structureId": "array1866220999", + "type": "appear", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 1, + 0, + ], + "name": "call", + "structureId": "array1866220999", + "type": "swap", + }, + { + "args": [ + 0, + 2, + ], + "name": "set", + "structureId": "array1866220999", + "type": "set", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 3, + 2, + ], + "name": "call", + "structureId": "array1866220999", + "type": "swap", + }, + { + "args": [ + 2, + 1, + ], + "name": "call", + "structureId": "array1866220999", + "type": "swap", + }, + { + "args": [ + 1, + 4, + ], + "name": "set", + "structureId": "array1866220999", + "type": "set", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 4, + 3, + ], + "name": "call", + "structureId": "array1866220999", + "type": "swap", + }, + { + "args": [ + 3, + 7, + ], + "name": "set", + "structureId": "array1866220999", + "type": "set", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 8, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 5, + 4, + ], + "name": "call", + "structureId": "array1866220999", + "type": "swap", + }, + { + "args": [ + 4, + 3, + ], + "name": "call", + "structureId": "array1866220999", + "type": "swap", + }, + { + "args": [ + 3, + 2, + ], + "name": "call", + "structureId": "array1866220999", + "type": "swap", + }, + { + "args": [ + 2, + 1, + ], + "name": "call", + "structureId": "array1866220999", + "type": "swap", + }, + { + "args": [ + 1, + 0, + ], + "name": "call", + "structureId": "array1866220999", + "type": "swap", + }, + { + "args": [ + 0, + 1, + ], + "name": "set", + "structureId": "array1866220999", + "type": "set", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 6, + 5, + ], + "name": "call", + "structureId": "array1866220999", + "type": "swap", + }, + { + "args": [ + 5, + 4, + ], + "name": "call", + "structureId": "array1866220999", + "type": "swap", + }, + { + "args": [ + 4, + 3, + ], + "name": "call", + "structureId": "array1866220999", + "type": "swap", + }, + { + "args": [ + 3, + 2, + ], + "name": "call", + "structureId": "array1866220999", + "type": "swap", + }, + { + "args": [ + 2, + 3, + ], + "name": "set", + "structureId": "array1866220999", + "type": "set", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 7, + 6, + ], + "name": "call", + "structureId": "array1866220999", + "type": "swap", + }, + { + "args": [ + 6, + 5, + ], + "name": "call", + "structureId": "array1866220999", + "type": "swap", + }, + { + "args": [ + 5, + 6, + ], + "name": "set", + "structureId": "array1866220999", + "type": "set", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 8, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + { + "args": [ + 8, + ], + "name": "get", + "structureId": "array1866220999", + "type": "get", + }, + ], + "structures": [ + { + "array": [ + 5, + 2, + 8, + 4, + 7, + 1, + 3, + 6, + 9, + ], + "id": "array1866220999", + "type": "array", + }, + ], + }, + "snapshotSchema": [Function], + "uuid": [Function], +} +`; + +exports[`sort insert sort 1`] = ` +{ + "SchemaBuilder": [Function], + "code": " + +Array.prototype.swap = function (i, j) { + const temp = this[i]; + this[i] = this[j]; + this[j] = temp; +}; +const insertSort = arr => { + for (let i = 1; i < arr.length; i++) { + let current = arr[i]; + let j = i - 1; + while (j >= 0 && arr[j] > current) { + arr[j + 1] = arr[j]; + j--; + } + arr[j + 1] = current; + } + return arr; +}; +const testArr = new ArrayProxy([5, 2, 4, 6, 1, 3, 9, 7], __GlobalContext__); +insertSort(testArr);", + "schema": { + "actions": [ + { + "args": [], + "name": "appear", + "structureId": "array1757142481", + "type": "appear", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 1, + 5, + ], + "name": "set", + "structureId": "array1757142481", + "type": "set", + }, + { + "args": [ + 0, + 2, + ], + "name": "set", + "structureId": "array1757142481", + "type": "set", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 2, + 5, + ], + "name": "set", + "structureId": "array1757142481", + "type": "set", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 1, + 4, + ], + "name": "set", + "structureId": "array1757142481", + "type": "set", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 3, + 6, + ], + "name": "set", + "structureId": "array1757142481", + "type": "set", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 4, + 6, + ], + "name": "set", + "structureId": "array1757142481", + "type": "set", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 3, + 5, + ], + "name": "set", + "structureId": "array1757142481", + "type": "set", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 2, + 4, + ], + "name": "set", + "structureId": "array1757142481", + "type": "set", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 1, + 2, + ], + "name": "set", + "structureId": "array1757142481", + "type": "set", + }, + { + "args": [ + 0, + 1, + ], + "name": "set", + "structureId": "array1757142481", + "type": "set", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 5, + 6, + ], + "name": "set", + "structureId": "array1757142481", + "type": "set", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 4, + 5, + ], + "name": "set", + "structureId": "array1757142481", + "type": "set", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 3, + 4, + ], + "name": "set", + "structureId": "array1757142481", + "type": "set", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 2, + 3, + ], + "name": "set", + "structureId": "array1757142481", + "type": "set", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 6, + 9, + ], + "name": "set", + "structureId": "array1757142481", + "type": "set", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 7, + 9, + ], + "name": "set", + "structureId": "array1757142481", + "type": "set", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array1757142481", + "type": "get", + }, + { + "args": [ + 6, + 7, + ], + "name": "set", + "structureId": "array1757142481", + "type": "set", + }, + ], + "structures": [ + { + "array": [ + 5, + 2, + 4, + 6, + 1, + 3, + 9, + 7, + ], + "id": "array1757142481", + "type": "array", + }, + ], + }, + "snapshotSchema": [Function], + "uuid": [Function], +} +`; + +exports[`sort quick sort 1`] = ` +{ + "SchemaBuilder": [Function], + "code": " + +Array.prototype.swap = function (i, j) { + const temp = this[i]; + this[i] = this[j]; + this[j] = temp; +}; +const quickSort = arr => { + const partition = (low, high) => { + // 取中间元素作为基准值(三数取中法优化) + let mid = Math.floor((low + high) / 2); + arr.swap(mid, high); + const pivot = arr[high]; + let i = low - 1; + for (let j = low; j < high; j++) { + if (arr[j] < pivot) { + i++; + arr.swap(i, j); + } + } + arr.swap(i + 1, high); + return i + 1; + }; + const sort = (low, high) => { + if (low < high) { + const pi = partition(low, high); + sort(low, pi - 1); + sort(pi + 1, high); + } + }; + sort(0, arr.length - 1); + console.log("res", arr); + return arr; +}; + +// ... 保留原有的冒泡排序代码 ... + +const arr1 = new ArrayProxy([5, 3, 8, 4, 2, 1, 2, 9, 1, 2, 3, 3, 6, 12, 34, 23, 11, 45, 13, 52], __GlobalContext__); + +// 测试快速排序 +quickSort(arr1); // 使用扩展运算符避免修改原数组", + "schema": { + "actions": [ + { + "args": [], + "name": "appear", + "structureId": "array-2079642510", + "type": "appear", + }, + { + "args": [ + 9, + 19, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 19, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 0, + 5, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 8, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 1, + 8, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 9, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 10, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 11, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 12, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 13, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 14, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 15, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 16, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 17, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 18, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 2, + 19, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 0, + 1, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 0, + 1, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 11, + 19, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 19, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 3, + 4, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 4, + 6, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 8, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 9, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 10, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 11, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 12, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 13, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 14, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 15, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 16, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 17, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 18, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 5, + 19, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 3, + 4, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 3, + 4, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 12, + 19, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 19, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 6, + 6, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 8, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 7, + 8, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 9, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 10, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 8, + 10, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 11, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 12, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 9, + 12, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 13, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 14, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 15, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 16, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 17, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 18, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 10, + 19, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 7, + 9, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 9, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 8, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 6, + 9, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 8, + 9, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 9, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 8, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 7, + 9, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 8, + 9, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 9, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 8, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 8, + 9, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 15, + 19, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 19, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 11, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 11, + 11, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 12, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 13, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 12, + 13, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 14, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 15, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 13, + 15, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 16, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 14, + 16, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 17, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 18, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 15, + 18, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 16, + 19, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 13, + 15, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 15, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 11, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 11, + 11, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 12, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 13, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 14, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 12, + 15, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 14, + 15, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 15, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 13, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 14, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 13, + 15, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 14, + 15, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 15, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 14, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 14, + 15, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 18, + 19, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 19, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 17, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 17, + 17, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 18, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 18, + 18, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 19, + 19, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 17, + 18, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 18, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 17, + ], + "name": "get", + "structureId": "array-2079642510", + "type": "get", + }, + { + "args": [ + 17, + 17, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + { + "args": [ + 18, + 18, + ], + "name": "call", + "structureId": "array-2079642510", + "type": "swap", + }, + ], + "structures": [ + { + "array": [ + 5, + 3, + 8, + 4, + 2, + 1, + 2, + 9, + 1, + 2, + 3, + 3, + 6, + 12, + 34, + 23, + 11, + 45, + 13, + 52, + ], + "id": "array-2079642510", + "type": "array", + }, + ], + }, + "snapshotSchema": [Function], + "uuid": [Function], +} +`; + +exports[`sort selection sort 1`] = ` +{ + "SchemaBuilder": [Function], + "code": " + +Array.prototype.swap = function (i, j) { + const temp = this[i]; + this[i] = this[j]; + this[j] = temp; +}; +const selectionSort = arr => { + // 外层循环遍历每个位置 + for (let current = 0; current < arr.length - 1; current++) { + let minIndex = current; + + // 内层循环寻找最小值索引 + for (let scan = current + 1; scan < arr.length; scan++) { + if (arr[scan] < arr[minIndex]) { + minIndex = scan; + } + } + + // 仅在需要时交换(优化点) + if (minIndex !== current) { + arr.swap(current, minIndex); + } + } + console.log('Sorted array:', arr); + return arr; +}; + +// 测试包含正负数、重复值的复杂数组 +const testData = new ArrayProxy([3, 0, -2, 5, -1, 4, 1, 9, -5, 4], __GlobalContext__); +selectionSort(testData);", + "schema": { + "actions": [ + { + "args": [], + "name": "appear", + "structureId": "array-79236675", + "type": "appear", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 8, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 9, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 8, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 0, + 8, + ], + "name": "call", + "structureId": "array-79236675", + "type": "swap", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 8, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 9, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 1, + 2, + ], + "name": "call", + "structureId": "array-79236675", + "type": "swap", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 8, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 9, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 2, + 4, + ], + "name": "call", + "structureId": "array-79236675", + "type": "swap", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 8, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 9, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 3, + 4, + ], + "name": "call", + "structureId": "array-79236675", + "type": "swap", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 8, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 9, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 4, + 6, + ], + "name": "call", + "structureId": "array-79236675", + "type": "swap", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 8, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 9, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 8, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 5, + 8, + ], + "name": "call", + "structureId": "array-79236675", + "type": "swap", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 8, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 9, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 8, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 6, + 8, + ], + "name": "call", + "structureId": "array-79236675", + "type": "swap", + }, + { + "args": [ + 8, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 9, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 8, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 7, + 9, + ], + "name": "call", + "structureId": "array-79236675", + "type": "swap", + }, + { + "args": [ + 9, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + { + "args": [ + 8, + ], + "name": "get", + "structureId": "array-79236675", + "type": "get", + }, + ], + "structures": [ + { + "array": [ + 3, + 0, + -2, + 5, + -1, + 4, + 1, + 9, + -5, + 4, + ], + "id": "array-79236675", + "type": "array", + }, + ], + }, + "snapshotSchema": [Function], + "uuid": [Function], +} +`; + +exports[`sort shell sort 1`] = ` +{ + "SchemaBuilder": [Function], + "code": " + +const shellSort = arr => { + let gap = Math.floor(arr.length / 2); + while (gap > 0) { + for (let i = gap; i < arr.length; i++) { + const temp = arr[i]; + let j = i; + while (j >= gap && arr[j - gap] > temp) { + arr[j] = arr[j - gap]; + j -= gap; + } + arr[j] = temp; + } + gap = Math.floor(gap / 2); + } + return arr; +}; +shellSort(new ArrayProxy([9, 4, 2, 7, 1, 5, 3, 8, 6], __GlobalContext__));", + "schema": { + "actions": [ + { + "args": [], + "name": "appear", + "structureId": "array221689765", + "type": "appear", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 4, + 9, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 0, + 1, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 5, + 5, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 6, + 3, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 7, + 8, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 8, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 8, + 9, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 4, + 6, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 2, + 2, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 3, + 7, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 4, + 6, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 5, + 7, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 3, + 5, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 6, + 6, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 4, + 3, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 7, + 8, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 8, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 8, + 9, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 1, + 4, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 2, + 4, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 0, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 1, + 2, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 3, + 5, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 3, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 4, + 5, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 2, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 3, + 4, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 1, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 2, + 3, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 5, + 7, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 5, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 6, + 7, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 4, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 5, + 6, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 6, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 7, + 8, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + { + "args": [ + 8, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 7, + ], + "name": "get", + "structureId": "array221689765", + "type": "get", + }, + { + "args": [ + 8, + 9, + ], + "name": "set", + "structureId": "array221689765", + "type": "set", + }, + ], + "structures": [ + { + "array": [ + 9, + 4, + 2, + 7, + 1, + 5, + 3, + 8, + 6, + ], + "id": "array221689765", + "type": "array", + }, + ], + }, + "snapshotSchema": [Function], + "uuid": [Function], +} +`; diff --git a/packages/parser/__tests__/sort.test.ts b/packages/parser/__tests__/sort.test.ts new file mode 100644 index 0000000..4b58b60 --- /dev/null +++ b/packages/parser/__tests__/sort.test.ts @@ -0,0 +1,255 @@ +import { run } from "../src"; + +describe("sort", () => { + test("quick sort", () => { + const code = ` +Array.prototype.swap = function (i, j) { + const temp = this[i]; + this[i] = this[j]; + this[j] = temp; +}; + +const quickSort = (arr) => { + const partition = (low, high) => { + // 取中间元素作为基准值(三数取中法优化) + let mid = Math.floor((low + high) / 2); + arr.swap(mid, high); + const pivot = arr[high]; + + let i = low - 1; + for (let j = low; j < high; j++) { + if (arr[j] < pivot) { + i++; + arr.swap(i, j); + } + } + arr.swap(i + 1, high); + return i + 1; + }; + + const sort = (low, high) => { + if (low < high) { + const pi = partition(low, high); + sort(low, pi - 1); + sort(pi + 1, high); + } + }; + + sort(0, arr.length - 1); + console.log("res", arr); + return arr; +}; + +// ... 保留原有的冒泡排序代码 ... + +const arr1 = [ + 5, 3, 8, 4, 2, 1, 2, 9, 1, 2, 3, 3, 6, 12, 34, 23, 11, 45, 13, 52, +]; + +// 测试快速排序 +quickSort(arr1); // 使用扩展运算符避免修改原数组 +`; + const res = run(code); + expect(res).toMatchSnapshot(); + }); + + test("bubble sort", () => { + const code = ` +Array.prototype.swap = function(i, j){ + const temp = this[i] + this[i] = this[j] + this[j] = temp +} + +const bubbleSort = (arr) => { + for (let i = 0; i < arr.length; i++) { + for (let j = 0; j < arr.length - i - 1; j++) { + if (arr[j] > arr[j + 1]) { + arr.swap(j, j+1) + } + } + } + console.log("res", arr) + return arr; +} + +const arr1 = [5, 3, 8, 4, 2, 1, 2, 4]; + +bubbleSort(arr1) +`; + const res = run(code); + expect(res).toMatchSnapshot(); + }); + + test("insert sort", () => { + const code = ` +Array.prototype.swap = function(i, j) { + const temp = this[i]; + this[i] = this[j]; + this[j] = temp; +}; + +const insertSort = (arr) => { + for (let i = 1; i < arr.length; i++) { + let current = arr[i]; + let j = i - 1; + + while (j >= 0 && arr[j] > current) { + arr[j + 1] = arr[j]; + j--; + } + arr[j + 1] = current; + } + return arr; +}; + +const testArr = [5, 2, 4, 6, 1, 3, 9, 7]; +insertSort(testArr); +`; + const res = run(code); + expect(res).toMatchSnapshot(); + }); + + test("shell sort", () => { + const code = ` +const shellSort = (arr) => { + let gap = Math.floor(arr.length / 2); + while (gap > 0) { + for (let i = gap; i < arr.length; i++) { + const temp = arr[i]; + let j = i; + while (j >= gap && arr[j - gap] > temp) { + arr[j] = arr[j - gap]; + j -= gap; + } + arr[j] = temp; + } + gap = Math.floor(gap / 2); + } + return arr; +}; + +shellSort([9, 4, 2, 7, 1, 5, 3, 8, 6])`; + expect(run(code)).toMatchSnapshot(); + }); + + test("selection sort", () => { + const code = ` +Array.prototype.swap = function(i, j) { + const temp = this[i]; + this[i] = this[j]; + this[j] = temp; +}; + +const selectionSort = (arr) => { + // 外层循环遍历每个位置 + for (let current = 0; current < arr.length - 1; current++) { + let minIndex = current; + + // 内层循环寻找最小值索引 + for (let scan = current + 1; scan < arr.length; scan++) { + if (arr[scan] < arr[minIndex]) { + minIndex = scan; + } + } + + // 仅在需要时交换(优化点) + if (minIndex !== current) { + arr.swap(current, minIndex); + } + } + console.log('Sorted array:', arr); + return arr; +}; + +// 测试包含正负数、重复值的复杂数组 +const testData = [3, 0, -2, 5, -1, 4, 1, 9, -5, 4]; +selectionSort(testData)`; + expect(run(code)).toMatchSnapshot(); + }); + + test("heap sort", () => { + const code = ` + + Array.prototype.swap = function(i, j) { + const temp = this[i]; + this[i] = this[j]; + this[j] = temp; + }; + + function heapSort(arr) { + function heapify(n, i) { + let largest = i; + const l = 2 * i + 1; + const r = 2 * i + 2; + + if (l < n && arr[l] > arr[largest]) largest = l; + if (r < n && arr[r] > arr[largest]) largest = r; + if (largest !== i) { + arr.swap(i, largest); // 改用 swap 方法 + heapify(n, largest); + } + } + + // 构建最大堆 + for (let i = Math.floor(arr.length / 2) - 1; i >= 0; i--) { + heapify(arr.length, i); + } + + // 逐个提取元素 + for (let i = arr.length - 1; i > 0; i--) { + arr.swap(0, i); // 改用 swap 方法 + heapify(i, 0); + } + return arr; + } + + heapSort([6,7,8, 1, 3, 4, 10, 3, 5, 1])`; + expect(run(code)).toMatchSnapshot(); + }); + + test("in-place merge sort", () => { + const code = ` +Array.prototype.swap = function(i, j) { + const temp = this[i]; + this[i] = this[j]; + this[j] = temp; +}; + +function mergeSort(arr, left = 0, right = arr.length - 1) { + if (left >= right) return; + + let mid = Math.floor((left + right) / 2); + + // 递归分割 + mergeSort(arr, left, mid); + mergeSort(arr, mid + 1, right); + + // 双指针合并算法 + let i = left; + let j = mid + 1; + + while (i <= mid && j <= right) { + if (arr[i] <= arr[j]) { + i++; + } else { + // 将右侧元素插入到i位置 + const temp = arr[j]; + for (let k = j; k > i; k--) { + arr.swap(k, k - 1); + } + arr[i] = temp; + + // 更新指针位置 + i++; + mid++; + j++; + } + } + return arr; +} + +mergeSort([5, 2, 8, 4, 7, 1, 3, 6, 9])`; + expect(run(code)).toMatchSnapshot(); + }); +}); diff --git a/packages/parser/jest.config.ts b/packages/parser/jest.config.ts new file mode 100644 index 0000000..56068c3 --- /dev/null +++ b/packages/parser/jest.config.ts @@ -0,0 +1,6 @@ +const config = { + preset: "ts-jest", + testEnvironment: "node", +}; + +export default config; diff --git a/packages/parser/package.json b/packages/parser/package.json index bce1cf7..ba3b25b 100644 --- a/packages/parser/package.json +++ b/packages/parser/package.json @@ -6,7 +6,9 @@ "types": "dist/index.d.ts", "scripts": { "build": "tsc", - "dev": "tsc --watch" + "dev": "tsc --watch", + "test": "jest", + "test:coverage": "jest --coverage" }, "keywords": [], "author": "", @@ -20,6 +22,9 @@ "devDependencies": { "typescript": "^5.0.0", "@types/babel__core": "^7.0.0", - "@types/node": "^20.0.0" + "@types/node": "^20.0.0", + "jest": "^29.0.0", + "@types/jest": "^29.0.0", + "ts-jest": "^29.0.0" } } diff --git a/packages/parser/src/data-structures/array/array-proxy.ts b/packages/parser/src/data-structures/array/array-proxy.ts index e7d7837..e0075b5 100644 --- a/packages/parser/src/data-structures/array/array-proxy.ts +++ b/packages/parser/src/data-structures/array/array-proxy.ts @@ -3,8 +3,9 @@ import { Schema, SchemaBuilder, StructureType } from "schema"; interface ArrayProxyOptions { snapshotSchema: (schema: Schema) => void; schema: Schema; + code: string; SchemaBuilder: typeof SchemaBuilder; - uuid: (prefix: string) => string; + uuid: (prefix: string, hashSource: string) => string; } export class ArrayProxy { @@ -13,8 +14,8 @@ export class ArrayProxy { target: any[]; constructor(array: any[], options: ArrayProxyOptions) { - const { snapshotSchema, schema, SchemaBuilder, uuid } = options; - this.structureId = uuid("array"); + const { snapshotSchema, schema, SchemaBuilder, uuid, code } = options; + this.structureId = uuid("array", code); this.options = options; snapshotSchema( diff --git a/packages/parser/src/execute/executeCode.ts b/packages/parser/src/execute/executeCode.ts index 2003625..1459612 100644 --- a/packages/parser/src/execute/executeCode.ts +++ b/packages/parser/src/execute/executeCode.ts @@ -9,6 +9,7 @@ export const executeCode = withLog>((code: string) => { const __GlobalContext__: Record = { uuid, + code, schema: {}, SchemaBuilder, snapshotSchema: (schema: Schema) => { diff --git a/packages/parser/src/utils/uuid.ts b/packages/parser/src/utils/uuid.ts index f34a128..53de063 100644 --- a/packages/parser/src/utils/uuid.ts +++ b/packages/parser/src/utils/uuid.ts @@ -1,4 +1,13 @@ -export const uuid = (prefix: string) => { +export const uuid = (prefix: string, hashSource: string) => { + if (hashSource) { + let hash = 0; + for (let i = 0; i < hashSource.length; i++) { + hash = (hash << 5) - hash + hashSource.charCodeAt(i); + hash |= 0; // 转换为32位整数 + } + + return prefix + hash; + } return ( prefix + "-" + diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aede88a..d925ae4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,9 +8,18 @@ importers: .: devDependencies: + '@types/jest': + specifier: ^29.0.0 + version: 29.5.14 concurrently: specifier: ^9.1.0 version: 9.1.2 + jest: + specifier: ^29.0.0 + version: 29.7.0(@types/node@20.17.17) + ts-jest: + specifier: ^29.0.0 + version: 29.2.6(@babel/core@7.26.7)(jest@29.7.0)(typescript@5.7.3) apps/dsv: dependencies: @@ -131,9 +140,18 @@ importers: '@types/babel__core': specifier: ^7.0.0 version: 7.20.5 + '@types/jest': + specifier: ^29.0.0 + version: 29.5.14 '@types/node': specifier: ^20.0.0 version: 20.17.17 + jest: + specifier: ^29.0.0 + version: 29.7.0(@types/node@20.17.17) + ts-jest: + specifier: ^29.0.0 + version: 29.2.6(@babel/core@7.26.7)(jest@29.7.0)(typescript@5.7.3) typescript: specifier: ^5.0.0 version: 5.7.3 @@ -158,7 +176,6 @@ packages: dependencies: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - dev: false /@babel/code-frame@7.26.2: resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} @@ -167,12 +184,10 @@ packages: '@babel/helper-validator-identifier': 7.25.9 js-tokens: 4.0.0 picocolors: 1.1.1 - dev: false /@babel/compat-data@7.26.5: resolution: {integrity: sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==} engines: {node: '>=6.9.0'} - dev: false /@babel/core@7.26.7: resolution: {integrity: sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==} @@ -195,7 +210,6 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: false /@babel/generator@7.26.5: resolution: {integrity: sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==} @@ -206,7 +220,6 @@ packages: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 - dev: false /@babel/helper-compilation-targets@7.26.5: resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} @@ -217,7 +230,6 @@ packages: browserslist: 4.24.4 lru-cache: 5.1.1 semver: 6.3.1 - dev: false /@babel/helper-module-imports@7.25.9: resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} @@ -227,7 +239,6 @@ packages: '@babel/types': 7.26.7 transitivePeerDependencies: - supports-color - dev: false /@babel/helper-module-transforms@7.26.0(@babel/core@7.26.7): resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} @@ -241,7 +252,11 @@ packages: '@babel/traverse': 7.26.7 transitivePeerDependencies: - supports-color - dev: false + + /@babel/helper-plugin-utils@7.26.5: + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + engines: {node: '>=6.9.0'} + dev: true /@babel/helper-string-parser@7.25.9: resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} @@ -254,7 +269,6 @@ packages: /@babel/helper-validator-option@7.25.9: resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} - dev: false /@babel/helpers@7.26.7: resolution: {integrity: sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==} @@ -262,7 +276,6 @@ packages: dependencies: '@babel/template': 7.25.9 '@babel/types': 7.26.7 - dev: false /@babel/parser@7.26.7: resolution: {integrity: sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==} @@ -271,6 +284,165 @@ packages: dependencies: '@babel/types': 7.26.7 + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.7): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: true + + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.7): + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: true + + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.7): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: true + + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.7): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: true + + /@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.7): + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: true + + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.7): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: true + + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.7): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: true + + /@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: true + + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.7): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: true + + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.7): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: true + + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.7): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: true + + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.7): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: true + + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.7): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: true + + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.7): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: true + + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.7): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: true + + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.7): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: true + + /@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.7): + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + dev: true + /@babel/template@7.25.9: resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} @@ -278,7 +450,6 @@ packages: '@babel/code-frame': 7.26.2 '@babel/parser': 7.26.7 '@babel/types': 7.26.7 - dev: false /@babel/traverse@7.26.7: resolution: {integrity: sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==} @@ -293,7 +464,6 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: false /@babel/types@7.26.7: resolution: {integrity: sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==} @@ -302,6 +472,10 @@ packages: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 + /@bcoe/v8-coverage@0.2.3: + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + dev: true + /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} @@ -326,6 +500,236 @@ packages: wrap-ansi-cjs: /wrap-ansi@7.0.0 dev: true + /@istanbuljs/load-nyc-config@1.1.0: + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + dev: true + + /@istanbuljs/schema@0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + dev: true + + /@jest/console@29.7.0: + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.17.17 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + dev: true + + /@jest/core@29.7.0: + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.17.17 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@20.17.17) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + dev: true + + /@jest/environment@29.7.0: + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.17.17 + jest-mock: 29.7.0 + dev: true + + /@jest/expect-utils@29.7.0: + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-get-type: 29.6.3 + dev: true + + /@jest/expect@29.7.0: + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/fake-timers@29.7.0: + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 20.17.17 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + dev: true + + /@jest/globals@29.7.0: + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/reporters@29.7.0: + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + '@types/node': 20.17.17 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.8 + dev: true + + /@jest/source-map@29.6.3: + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + callsites: 3.1.0 + graceful-fs: 4.2.11 + dev: true + + /@jest/test-result@29.7.0: + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + dev: true + + /@jest/test-sequencer@29.7.0: + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + dev: true + + /@jest/transform@29.7.0: + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/core': 7.26.7 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.8 + pirates: 4.0.6 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/types@29.6.3: + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.17.17 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + dev: true + /@jridgewell/gen-mapping@0.3.8: resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} @@ -333,7 +737,6 @@ packages: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 - dev: false /@jridgewell/resolve-uri@3.1.2: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} @@ -342,7 +745,6 @@ packages: /@jridgewell/set-array@1.2.1: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - dev: false /@jridgewell/sourcemap-codec@1.5.0: resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} @@ -352,7 +754,6 @@ packages: dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - dev: false /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} @@ -749,6 +1150,22 @@ packages: react-refresh: 0.14.2 dev: true + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true + + /@sinonjs/commons@3.0.1: + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + dependencies: + type-detect: 4.0.8 + dev: true + + /@sinonjs/fake-timers@10.3.0: + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + dependencies: + '@sinonjs/commons': 3.0.1 + dev: true + /@tsconfig/node10@1.0.11: resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} dev: true @@ -897,6 +1314,12 @@ packages: '@types/serve-static': 1.15.7 dev: true + /@types/graceful-fs@4.1.9: + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + dependencies: + '@types/node': 20.17.17 + dev: true + /@types/http-errors@2.0.4: resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} dev: true @@ -907,6 +1330,29 @@ packages: '@types/node': 20.17.17 dev: true + /@types/istanbul-lib-coverage@2.0.6: + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + dev: true + + /@types/istanbul-lib-report@3.0.3: + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + dev: true + + /@types/istanbul-reports@3.0.4: + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + dependencies: + '@types/istanbul-lib-report': 3.0.3 + dev: true + + /@types/jest@29.5.14: + resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 + dev: true + /@types/json-schema@7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true @@ -997,12 +1443,26 @@ packages: '@types/node': 20.17.17 dev: true + /@types/stack-utils@2.0.3: + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + dev: true + /@types/ws@8.5.14: resolution: {integrity: sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==} dependencies: '@types/node': 20.17.17 dev: true + /@types/yargs-parser@21.0.3: + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + dev: true + + /@types/yargs@17.0.33: + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + dependencies: + '@types/yargs-parser': 21.0.3 + dev: true + /@visactor/vchart-extension@0.0.3-vstory.2: resolution: {integrity: sha512-hVEANx3T5k3qF97/TPLYl3k+Tfw0pXb8mhpJ3zYtnDhKzkuJVgioUZRPjFMesk+JYf0oVmKiwcQYN6e6zINHdQ==} dependencies: @@ -1462,6 +1922,13 @@ packages: require-from-string: 2.0.2 dev: true + /ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.21.3 + dev: true + /ansi-html-community@0.0.8: resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} engines: {'0': node >= 0.8.0} @@ -1485,6 +1952,11 @@ packages: color-convert: 2.0.1 dev: true + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true + /ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} @@ -1502,6 +1974,12 @@ packages: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: true + /array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} dev: true @@ -1520,6 +1998,10 @@ packages: util: 0.12.5 dev: false + /async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + dev: true + /available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -1527,14 +2009,89 @@ packages: possible-typed-array-names: 1.0.0 dev: false - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + /babel-jest@29.7.0(@babel/core@7.26.7): + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + dependencies: + '@babel/core': 7.26.7 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.26.7) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color dev: true - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: false - + /babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + dependencies: + '@babel/helper-plugin-utils': 7.26.5 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.7 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 + dev: true + + /babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.7): + resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.7 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.7) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.7) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.7) + dev: true + + /babel-preset-jest@29.6.3(@babel/core@7.26.7): + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.7 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.7) + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: false + /batch@0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} dev: true @@ -1575,6 +2132,13 @@ packages: multicast-dns: 7.2.5 dev: true + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + /brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: @@ -1597,11 +2161,22 @@ packages: electron-to-chromium: 1.5.92 node-releases: 2.0.19 update-browserslist-db: 1.1.2(browserslist@4.24.4) - dev: false + + /bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} + dependencies: + fast-json-stable-stringify: 2.1.0 + dev: true + + /bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + dependencies: + node-int64: 0.4.0 + dev: true /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: false /buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} @@ -1646,6 +2221,21 @@ packages: call-bind-apply-helpers: 1.0.1 get-intrinsic: 1.2.7 + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: true + + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: true + /caniuse-lite@1.0.30001697: resolution: {integrity: sha512-GwNPlWJin8E+d7Gxq96jxM6w0w+VFeyyXRsjU58emtkYqnbwHqXm5uT2uCmO0RQE9htWknOP4xtBlLmM/gWxvQ==} @@ -1657,6 +2247,11 @@ packages: supports-color: 7.2.0 dev: true + /char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + dev: true + /chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -1672,6 +2267,15 @@ packages: fsevents: 2.3.3 dev: true + /ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + dev: true + + /cjs-module-lexer@1.4.3: + resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + dev: true + /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -1681,6 +2285,15 @@ packages: wrap-ansi: 7.0.0 dev: true + /co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + dev: true + + /collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + dev: true + /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -1725,6 +2338,10 @@ packages: - supports-color dev: true + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + /concat-stream@1.4.11: resolution: {integrity: sha512-X3JMh8+4je3U1cQpG87+f9lXHDrqcb2MVLg9L7o8b1UZ0DzhRrUpdn65ttzu10PpJPPI3MQNkis+oha6TSA9Mw==} engines: {'0': node >= 0.8} @@ -1777,7 +2394,6 @@ packages: /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: false /cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} @@ -1791,6 +2407,25 @@ packages: /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + /create-jest@29.7.0(@types/node@20.17.17): + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@20.17.17) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true @@ -1869,6 +2504,20 @@ packages: dependencies: ms: 2.1.3 + /dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + dev: true + + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: true + /default-browser-id@5.0.0: resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} engines: {node: '>=18'} @@ -1927,10 +2576,20 @@ packages: engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dev: true + /detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + dev: true + /detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} dev: true + /diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} @@ -1963,9 +2622,21 @@ packages: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: true + /ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + jake: 10.9.2 + dev: true + /electron-to-chromium@1.5.92: resolution: {integrity: sha512-BeHgmNobs05N1HMmMZ7YIuHfYBGlq/UmvlsTgg+fsbFs9xVMj+xJHFg19GN04+9Q+r8Xnh9LXqaYIyEWElnNgQ==} - dev: false + + /emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + dev: true /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1985,6 +2656,12 @@ packages: engines: {node: '>= 0.8'} dev: true + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: true + /error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} dependencies: @@ -2013,6 +2690,17 @@ packages: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} dev: true + /escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + dev: true + + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: true + /etag@1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} @@ -2041,6 +2729,22 @@ packages: engines: {node: '>=18'} dev: true + /exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + dev: true + + /expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + dev: true + /express@4.21.2: resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} engines: {node: '>= 0.10.0'} @@ -2084,6 +2788,10 @@ packages: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + /fast-uri@3.0.6: resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} dev: true @@ -2095,12 +2803,24 @@ packages: websocket-driver: 0.7.4 dev: true + /fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + dependencies: + bser: 2.1.1 + dev: true + /file-source@0.6.1: resolution: {integrity: sha512-1R1KneL7eTXmXfKxC10V/9NeGOdbsAXJ+lQ//fvvcHUgtaZcZDWNJNblxAoVOyV1cj45pOtUrR3vZTBwqcW8XA==} dependencies: stream-source: 0.3.5 dev: false + /filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + dependencies: + minimatch: 5.1.6 + dev: true + /fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -2123,6 +2843,14 @@ packages: - supports-color dev: true + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + /follow-redirects@1.15.9: resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} @@ -2158,6 +2886,10 @@ packages: engines: {node: '>= 0.6'} dev: true + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -2172,7 +2904,6 @@ packages: /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} - dev: false /geobuf@3.0.2: resolution: {integrity: sha512-ASgKwEAQQRnyNFHNvpd5uAwstbVYmiTW0Caw3fBb509tNTqXyAAPMyFs5NNihsLZhLxU1j/kjFhkhLWA9djuVg==} @@ -2225,6 +2956,11 @@ packages: hasown: 2.0.2 math-intrinsics: 1.1.0 + /get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + dev: true + /get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} @@ -2267,10 +3003,21 @@ packages: path-scurry: 1.11.1 dev: true + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - dev: false /gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} @@ -2332,6 +3079,10 @@ packages: resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==} dev: true + /html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: true + /http-deceiver@1.2.7: resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} dev: true @@ -2411,6 +3162,28 @@ packages: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: false + /import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + dev: true + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /inflight@1.0.6: + resolution: {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. + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + /inherits@2.0.3: resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} dev: true @@ -2441,6 +3214,10 @@ packages: has-tostringtag: 1.0.2 dev: false + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true + /is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -2476,6 +3253,11 @@ packages: engines: {node: '>=8'} dev: true + /is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + dev: true + /is-generator-function@1.1.0: resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} engines: {node: '>= 0.4'} @@ -2524,58 +3306,538 @@ packages: engines: {node: '>=10'} dev: true - /is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} + /is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + dev: false + + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + + /is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.18 + dev: false + + /is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + dependencies: + is-inside-container: 1.0.0 + dev: true + + /isarray@0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + dev: false + + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /isomorphic-rslog@0.0.6: + resolution: {integrity: sha512-HM0q6XqQ93psDlqvuViNs/Ea3hAyGDkIdVAHlrEocjjAwGrs1fZ+EdQjS9eUPacnYB7Y8SoDdSY3H8p3ce205A==} + engines: {node: '>=14.17.6'} + dev: true + + /istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + dev: true + + /istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + dependencies: + '@babel/core': 7.26.7 + '@babel/parser': 7.26.7 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + dependencies: + '@babel/core': 7.26.7 + '@babel/parser': 7.26.7 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.7.1 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + dev: true + + /istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + dependencies: + debug: 4.4.0 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + dev: true + + /jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + dev: true + + /jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + dev: true + + /jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + dev: true + + /jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.17.17 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.5.3 + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.1.0 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + dev: true + + /jest-cli@29.7.0(@types/node@20.17.17): + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@20.17.17) + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@20.17.17) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + + /jest-config@29.7.0(@types/node@20.17.17): + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + dependencies: + '@babel/core': 7.26.7 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.17.17 + babel-jest: 29.7.0(@babel/core@7.26.7) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + dev: true + + /jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true + + /jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + detect-newline: 3.1.0 + dev: true + + /jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 + dev: true + + /jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.17.17 + jest-mock: 29.7.0 + jest-util: 29.7.0 + dev: true + + /jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + + /jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 20.17.17 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true + + /jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true + + /jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/code-frame': 7.26.2 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + dev: true + + /jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.17.17 + jest-util: 29.7.0 + dev: true + + /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + dependencies: + jest-resolve: 29.7.0 + dev: true + + /jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + + /jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.10 + resolve.exports: 2.0.3 + slash: 3.0.0 + dev: true + + /jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.17.17 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - call-bound: 1.0.3 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - dev: false - - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.17.17 + chalk: 4.1.2 + cjs-module-lexer: 1.4.3 + collect-v8-coverage: 1.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color dev: true - /is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} + /jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - which-typed-array: 1.1.18 - dev: false + '@babel/core': 7.26.7 + '@babel/generator': 7.26.5 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.7) + '@babel/types': 7.26.7 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.7) + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.11 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + natural-compare: 1.4.0 + pretty-format: 29.7.0 + semver: 7.7.1 + transitivePeerDependencies: + - supports-color + dev: true - /is-wsl@3.1.0: - resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} - engines: {node: '>=16'} + /jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - is-inside-container: 1.0.0 + '@jest/types': 29.6.3 + '@types/node': 20.17.17 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 dev: true - /isarray@0.0.1: - resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} - dev: false - - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + /jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 dev: true - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + /jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.17.17 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 dev: true - /isomorphic-rslog@0.0.6: - resolution: {integrity: sha512-HM0q6XqQ93psDlqvuViNs/Ea3hAyGDkIdVAHlrEocjjAwGrs1fZ+EdQjS9eUPacnYB7Y8SoDdSY3H8p3ce205A==} - engines: {node: '>=14.17.6'} + /jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@types/node': 20.17.17 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 dev: true - /jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + /jest@29.7.0(@types/node@20.17.17): + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 + '@jest/core': 29.7.0 + '@jest/types': 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@20.17.17) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node dev: true /js-binary-schema-parser@2.0.3: @@ -2584,13 +3846,23 @@ packages: /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: false + + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: true /jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} hasBin: true - dev: false + + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true /json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} @@ -2600,7 +3872,11 @@ packages: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true - dev: false + + /kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + dev: true /launch-editor@2.9.1: resolution: {integrity: sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==} @@ -2609,10 +3885,30 @@ packages: shell-quote: 1.8.2 dev: true + /leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + dev: true + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: true + /lodash-es@4.17.21: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} dev: false + /lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + dev: true + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true @@ -2636,12 +3932,24 @@ packages: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 - dev: false + + /make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + dependencies: + semver: 7.7.1 + dev: true /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true + /makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + dependencies: + tmpl: 1.0.5 + dev: true + /math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} @@ -2714,6 +4022,19 @@ packages: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} dev: true + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -2754,6 +4075,10 @@ packages: thunky: 1.1.0 dev: true + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + /negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -2769,9 +4094,12 @@ packages: engines: {node: '>= 6.13.0'} dev: true + /node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + dev: true + /node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} - dev: false /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} @@ -2831,6 +4159,12 @@ packages: engines: {node: '>= 0.8'} dev: true + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + /onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -2853,6 +4187,27 @@ packages: hasBin: true dev: true + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: true + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: true + /p-retry@4.6.2: resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} engines: {node: '>=8'} @@ -2870,10 +4225,25 @@ packages: retry: 0.13.1 dev: true + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + /package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} dev: true + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: true + /parse-svg-path@0.1.2: resolution: {integrity: sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==} dev: false @@ -2891,6 +4261,16 @@ packages: resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==} dev: false + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -2935,6 +4315,18 @@ packages: engines: {node: '>=8.6'} dev: true + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + dev: true + + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: true + /point-at-length@1.1.0: resolution: {integrity: sha512-nNHDk9rNEh/91o2Y8kHLzBLNpLf80RYd2gCun9ss+V0ytRSf6XhryBTx071fesktjbachRmGuUbId+JQmzhRXw==} dependencies: @@ -2965,6 +4357,15 @@ packages: hasBin: true dev: true + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + dev: true + /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true @@ -2974,6 +4375,14 @@ packages: engines: {node: '>= 0.6.0'} dev: false + /prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + dev: true + /protocol-buffers-schema@3.6.0: resolution: {integrity: sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==} dev: false @@ -2986,6 +4395,10 @@ packages: ipaddr.js: 1.9.1 dev: true + /pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + dev: true + /qs@6.13.0: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} @@ -3018,6 +4431,10 @@ packages: scheduler: 0.23.2 dev: false + /react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + dev: true + /react-refresh@0.14.2: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} @@ -3087,12 +4504,29 @@ packages: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} dev: true + /resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + dependencies: + resolve-from: 5.0.0 + dev: true + + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: true + /resolve-protobuf-schema@2.1.0: resolution: {integrity: sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==} dependencies: protocol-buffers-schema: 3.6.0 dev: false + /resolve.exports@2.0.3: + resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} + engines: {node: '>=10'} + dev: true + /resolve@1.22.10: resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} engines: {node: '>= 0.4'} @@ -3188,7 +4622,12 @@ packages: /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - dev: false + + /semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + dev: true /send@0.19.0: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} @@ -3362,6 +4801,15 @@ packages: totalist: 1.1.0 dev: true + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: true + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + /slice-source@0.4.1: resolution: {integrity: sha512-YiuPbxpCj4hD9Qs06hGAz/OZhQ0eDuALN0lRWJez0eD/RevzKqGdUx1IOMUnXgpr+sXZLq3g8ERwbAH0bCb8vg==} dev: false @@ -3374,6 +4822,18 @@ packages: websocket-driver: 0.7.4 dev: true + /source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + /spdy-transport@3.0.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} dependencies: @@ -3400,6 +4860,17 @@ packages: - supports-color dev: true + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: true + + /stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 2.0.0 + dev: true + /stackframe@1.3.4: resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} dev: true @@ -3418,6 +4889,14 @@ packages: resolution: {integrity: sha512-ZuEDP9sgjiAwUVoDModftG0JtYiLUV8K4ljYD1VyUMRWtbVf92474o4kuuul43iZ8t/hRuiDAx1dIJSvirrK/g==} dev: false + /string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + dev: true + /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -3465,11 +4944,21 @@ packages: ansi-regex: 6.1.0 dev: true + /strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + dev: true + /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} dev: true + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -3489,6 +4978,15 @@ packages: engines: {node: '>= 0.4'} dev: true + /test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + dev: true + /text-encoding@0.6.4: resolution: {integrity: sha512-hJnc6Qg3dWoOMkqP53F0dzRIgtmsAge09kxUIqGrEUS4qr5rWLckGYaQAVr+opBrIMRErGgy6f5aPnyPpyGRfg==} deprecated: no longer maintained @@ -3507,6 +5005,10 @@ packages: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} dev: true + /tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + dev: true + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -3552,6 +5054,44 @@ packages: hasBin: true dev: true + /ts-jest@29.2.6(@babel/core@7.26.7)(jest@29.7.0)(typescript@5.7.3): + resolution: {integrity: sha512-yTNZVZqc8lSixm+QGVFcPe6+yj7+TWZwIesuOWvfcn4B9bz5x4NDzVCQQjOs7Hfouu36aEqfEbo9Qpo+gq8dDg==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/transform': ^29.0.0 + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/transform': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + dependencies: + '@babel/core': 7.26.7 + bs-logger: 0.2.6 + ejs: 3.1.10 + fast-json-stable-stringify: 2.1.0 + jest: 29.7.0(@types/node@20.17.17) + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.7.1 + typescript: 5.7.3 + yargs-parser: 21.1.1 + dev: true + /ts-node@10.9.2(@types/node@20.17.17)(typescript@5.7.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true @@ -3587,6 +5127,16 @@ packages: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} dev: true + /type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: true + + /type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: true + /type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -3627,7 +5177,6 @@ packages: browserslist: 4.24.4 escalade: 3.2.0 picocolors: 1.1.1 - dev: false /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -3656,11 +5205,26 @@ packages: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true + /v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + engines: {node: '>=10.12.0'} + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + dev: true + /vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} dev: true + /walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + dependencies: + makeerror: 1.0.12 + dev: true + /wbuf@1.7.3: resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} dependencies: @@ -3805,6 +5369,18 @@ packages: strip-ansi: 7.1.0 dev: true + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + dev: true + /ws@7.5.10: resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} @@ -3838,7 +5414,6 @@ packages: /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: false /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} @@ -3876,6 +5451,11 @@ packages: engines: {node: '>=6'} dev: true + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true + /zustand@5.0.3(@types/react@18.3.18)(react@18.3.1): resolution: {integrity: sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg==} engines: {node: '>=12.20.0'}