diff --git a/package-lock.json b/package-lock.json index 75967d8..91594c4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -76,9 +76,9 @@ } }, "node_modules/@babel/cli": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.25.9.tgz", - "integrity": "sha512-I+02IfrTiSanpxJBlZQYb18qCxB6c2Ih371cVpfgIrPQrjAYkf45XxomTJOG8JBWX5GY35/+TmhCMdJ4ZPkL8Q==", + "version": "7.26.4", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.26.4.tgz", + "integrity": "sha512-+mORf3ezU3p3qr+82WvJSnQNE1GAYeoCfEv4fik6B5/2cvKZ75AX8oawWQdXtM9MmndooQj15Jr9kelRFWsuRw==", "dev": true, "license": "MIT", "dependencies": { @@ -167,9 +167,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", - "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.3.tgz", + "integrity": "sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==", "dev": true, "license": "MIT", "engines": { @@ -218,14 +218,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", - "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz", + "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.26.2", - "@babel/types": "^7.26.0", + "@babel/parser": "^7.26.3", + "@babel/types": "^7.26.3", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -247,20 +247,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz", - "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-compilation-targets": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", @@ -321,14 +307,14 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz", - "integrity": "sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", + "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", - "regexpu-core": "^6.1.1", + "regexpu-core": "^6.2.0", "semver": "^6.3.1" }, "engines": { @@ -349,9 +335,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", + "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", "dev": true, "license": "MIT", "dependencies": { @@ -470,20 +456,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", - "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", @@ -558,13 +530,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", - "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz", + "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.26.0" + "@babel/types": "^7.26.3" }, "bin": { "parser": "bin/babel-parser.js" @@ -1181,13 +1153,12 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz", - "integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", + "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { @@ -1330,15 +1301,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", - "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-simple-access": "^7.25.9" + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1746,9 +1716,9 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz", - "integrity": "sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.3.tgz", + "integrity": "sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA==", "dev": true, "license": "MIT", "dependencies": { @@ -1989,17 +1959,17 @@ } }, "node_modules/@babel/traverse": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", - "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "version": "7.26.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz", + "integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/parser": "^7.25.9", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.3", + "@babel/parser": "^7.26.3", "@babel/template": "^7.25.9", - "@babel/types": "^7.25.9", + "@babel/types": "^7.26.3", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2008,9 +1978,9 @@ } }, "node_modules/@babel/types": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", - "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", + "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", "dev": true, "license": "MIT", "dependencies": { @@ -2092,13 +2062,13 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", - "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz", + "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.4", + "@eslint/object-schema": "^2.1.5", "debug": "^4.3.1", "minimatch": "^3.1.2" }, @@ -2131,19 +2101,22 @@ } }, "node_modules/@eslint/core": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz", - "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.1.tgz", + "integrity": "sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/eslintrc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", - "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", "dev": true, "license": "MIT", "dependencies": { @@ -2222,9 +2195,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.13.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.13.0.tgz", - "integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==", + "version": "9.16.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.16.0.tgz", + "integrity": "sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==", "dev": true, "license": "MIT", "engines": { @@ -2232,9 +2205,9 @@ } }, "node_modules/@eslint/object-schema": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", - "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz", + "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2242,9 +2215,9 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.2.tgz", - "integrity": "sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.4.tgz", + "integrity": "sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2278,6 +2251,20 @@ "node": ">=18.18.0" } }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -2293,9 +2280,9 @@ } }, "node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2842,9 +2829,9 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "dev": true, "license": "MIT", "dependencies": { @@ -2923,9 +2910,9 @@ } }, "node_modules/@jsonjoy.com/json-pack": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz", - "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.1.tgz", + "integrity": "sha512-osjeBqMJ2lb/j/M8NCPjs1ylqWIcTRTycIhVB5pt6LgzgeRSb0YRZ7j9RfA8wIUrsr/medIuhVyonXRZWLyfdw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2963,9 +2950,9 @@ } }, "node_modules/@kurkle/color": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", - "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz", + "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==", "license": "MIT" }, "node_modules/@leichtgewicht/ip-codec": { @@ -3022,11 +3009,13 @@ } }, "node_modules/@parcel/watcher": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.4.1.tgz", - "integrity": "sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.0.tgz", + "integrity": "sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==", "dev": true, + "hasInstallScript": true, "license": "MIT", + "optional": true, "dependencies": { "detect-libc": "^1.0.3", "is-glob": "^4.0.3", @@ -3041,24 +3030,25 @@ "url": "https://opencollective.com/parcel" }, "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.4.1", - "@parcel/watcher-darwin-arm64": "2.4.1", - "@parcel/watcher-darwin-x64": "2.4.1", - "@parcel/watcher-freebsd-x64": "2.4.1", - "@parcel/watcher-linux-arm-glibc": "2.4.1", - "@parcel/watcher-linux-arm64-glibc": "2.4.1", - "@parcel/watcher-linux-arm64-musl": "2.4.1", - "@parcel/watcher-linux-x64-glibc": "2.4.1", - "@parcel/watcher-linux-x64-musl": "2.4.1", - "@parcel/watcher-win32-arm64": "2.4.1", - "@parcel/watcher-win32-ia32": "2.4.1", - "@parcel/watcher-win32-x64": "2.4.1" + "@parcel/watcher-android-arm64": "2.5.0", + "@parcel/watcher-darwin-arm64": "2.5.0", + "@parcel/watcher-darwin-x64": "2.5.0", + "@parcel/watcher-freebsd-x64": "2.5.0", + "@parcel/watcher-linux-arm-glibc": "2.5.0", + "@parcel/watcher-linux-arm-musl": "2.5.0", + "@parcel/watcher-linux-arm64-glibc": "2.5.0", + "@parcel/watcher-linux-arm64-musl": "2.5.0", + "@parcel/watcher-linux-x64-glibc": "2.5.0", + "@parcel/watcher-linux-x64-musl": "2.5.0", + "@parcel/watcher-win32-arm64": "2.5.0", + "@parcel/watcher-win32-ia32": "2.5.0", + "@parcel/watcher-win32-x64": "2.5.0" } }, "node_modules/@parcel/watcher-android-arm64": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.1.tgz", - "integrity": "sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.0.tgz", + "integrity": "sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==", "cpu": [ "arm64" ], @@ -3077,9 +3067,9 @@ } }, "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.1.tgz", - "integrity": "sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.0.tgz", + "integrity": "sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==", "cpu": [ "arm64" ], @@ -3098,9 +3088,9 @@ } }, "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.1.tgz", - "integrity": "sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.0.tgz", + "integrity": "sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==", "cpu": [ "x64" ], @@ -3119,9 +3109,9 @@ } }, "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.1.tgz", - "integrity": "sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.0.tgz", + "integrity": "sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==", "cpu": [ "x64" ], @@ -3140,9 +3130,30 @@ } }, "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.1.tgz", - "integrity": "sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.0.tgz", + "integrity": "sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.0.tgz", + "integrity": "sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==", "cpu": [ "arm" ], @@ -3161,9 +3172,9 @@ } }, "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.1.tgz", - "integrity": "sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.0.tgz", + "integrity": "sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==", "cpu": [ "arm64" ], @@ -3182,9 +3193,9 @@ } }, "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.1.tgz", - "integrity": "sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.0.tgz", + "integrity": "sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==", "cpu": [ "arm64" ], @@ -3203,9 +3214,9 @@ } }, "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.1.tgz", - "integrity": "sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.0.tgz", + "integrity": "sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==", "cpu": [ "x64" ], @@ -3224,9 +3235,9 @@ } }, "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.1.tgz", - "integrity": "sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.0.tgz", + "integrity": "sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==", "cpu": [ "x64" ], @@ -3245,9 +3256,9 @@ } }, "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.1.tgz", - "integrity": "sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.0.tgz", + "integrity": "sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==", "cpu": [ "arm64" ], @@ -3266,9 +3277,9 @@ } }, "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.1.tgz", - "integrity": "sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.0.tgz", + "integrity": "sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==", "cpu": [ "ia32" ], @@ -3287,9 +3298,9 @@ } }, "node_modules/@parcel/watcher-win32-x64": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.1.tgz", - "integrity": "sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.0.tgz", + "integrity": "sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==", "cpu": [ "x64" ], @@ -3935,9 +3946,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.1.tgz", - "integrity": "sha512-CRICJIl0N5cXDONAdlTv5ShATZ4HEwk6kDDIW2/w9qOWKg+NU/5F8wYRWCrONad0/UKkloNSmmyN/wX4rtpbVA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.2.tgz", + "integrity": "sha512-vluaspfvWEtE4vcSDlKRNer52DvOGrB2xv6diXy6UKyKW0lqZiWHGNApSyxOv+8DE5Z27IzVvE7hNkxg7EXIcg==", "dev": true, "license": "MIT", "dependencies": { @@ -4097,9 +4108,9 @@ "license": "MIT" }, "node_modules/@types/mocha": { - "version": "10.0.9", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.9.tgz", - "integrity": "sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q==", + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", "dev": true, "license": "MIT" }, @@ -4121,9 +4132,9 @@ } }, "node_modules/@types/qs": { - "version": "6.9.16", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.16.tgz", - "integrity": "sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==", + "version": "6.9.17", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz", + "integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==", "dev": true, "license": "MIT" }, @@ -4220,16 +4231,16 @@ "license": "MIT" }, "node_modules/@types/vscode": { - "version": "1.95.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.95.0.tgz", - "integrity": "sha512-0LBD8TEiNbet3NvWsmn59zLzOFu/txSlGxnv5yAFHCrhG9WvAnR3IvfHzMOs2aeWqgvNjq9pO99IUw8d3n+unw==", + "version": "1.96.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.96.0.tgz", + "integrity": "sha512-qvZbSZo+K4ZYmmDuaodMbAa67Pl6VDQzLKFka6rq+3WUTY4Kro7Bwoi0CuZLO/wema0ygcmpwow7zZfPJTs5jg==", "dev": true, "license": "MIT" }, "node_modules/@types/ws": { - "version": "8.5.12", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", - "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", + "version": "8.5.13", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.13.tgz", + "integrity": "sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==", "dev": true, "license": "MIT", "dependencies": { @@ -4254,17 +4265,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.12.2.tgz", - "integrity": "sha512-gQxbxM8mcxBwaEmWdtLCIGLfixBMHhQjBqR8sVWNTPpcj45WlYL2IObS/DNMLH1DBP0n8qz+aiiLTGfopPEebw==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.18.0.tgz", + "integrity": "sha512-NR2yS7qUqCL7AIxdJUQf2MKKNDVNaig/dEB0GBLU7D+ZdHgK1NoH/3wsgO3OnPVipn51tG3MAwaODEGil70WEw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.12.2", - "@typescript-eslint/type-utils": "8.12.2", - "@typescript-eslint/utils": "8.12.2", - "@typescript-eslint/visitor-keys": "8.12.2", + "@typescript-eslint/scope-manager": "8.18.0", + "@typescript-eslint/type-utils": "8.18.0", + "@typescript-eslint/utils": "8.18.0", + "@typescript-eslint/visitor-keys": "8.18.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -4279,25 +4290,21 @@ }, "peerDependencies": { "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.12.2.tgz", - "integrity": "sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.18.0.tgz", + "integrity": "sha512-hgUZ3kTEpVzKaK3uNibExUYm6SKKOmTU2BOxBSvOYwtJEPdVQ70kZJpPjstlnhCHcuc2WGfSbpKlb/69ttyN5Q==", "dev": true, - "license": "BSD-2-Clause", + "license": "MITClause", "dependencies": { - "@typescript-eslint/scope-manager": "8.12.2", - "@typescript-eslint/types": "8.12.2", - "@typescript-eslint/typescript-estree": "8.12.2", - "@typescript-eslint/visitor-keys": "8.12.2", + "@typescript-eslint/scope-manager": "8.18.0", + "@typescript-eslint/types": "8.18.0", + "@typescript-eslint/typescript-estree": "8.18.0", + "@typescript-eslint/visitor-keys": "8.18.0", "debug": "^4.3.4" }, "engines": { @@ -4308,23 +4315,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.12.2.tgz", - "integrity": "sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.18.0.tgz", + "integrity": "sha512-PNGcHop0jkK2WVYGotk/hxj+UFLhXtGPiGtiaWgVBVP1jhMoMCHlTyJA+hEj4rszoSdLTK3fN4oOatrL0Cp+Xw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.12.2", - "@typescript-eslint/visitor-keys": "8.12.2" + "@typescript-eslint/types": "8.18.0", + "@typescript-eslint/visitor-keys": "8.18.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4335,14 +4338,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.12.2.tgz", - "integrity": "sha512-bwuU4TAogPI+1q/IJSKuD4shBLc/d2vGcRT588q+jzayQyjVK2X6v/fbR4InY2U2sgf8MEvVCqEWUzYzgBNcGQ==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.18.0.tgz", + "integrity": "sha512-er224jRepVAVLnMF2Q7MZJCq5CsdH2oqjP4dT7K6ij09Kyd+R21r7UVJrF0buMVdZS5QRhDzpvzAxHxabQadow==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.12.2", - "@typescript-eslint/utils": "8.12.2", + "@typescript-eslint/typescript-estree": "8.18.0", + "@typescript-eslint/utils": "8.18.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -4353,16 +4356,15 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.12.2.tgz", - "integrity": "sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.0.tgz", + "integrity": "sha512-FNYxgyTCAnFwTrzpBGq+zrnoTO4x0c1CKYY5MuUTzpScqmY5fmsh2o3+57lqdI3NZucBDCzDgdEbIaNfAjAHQA==", "dev": true, "license": "MIT", "engines": { @@ -4374,14 +4376,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.12.2.tgz", - "integrity": "sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.0.tgz", + "integrity": "sha512-rqQgFRu6yPkauz+ms3nQpohwejS8bvgbPyIDq13cgEDbkXt4LH4OkDMT0/fN1RUtzG8e8AKJyDBoocuQh8qNeg==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.12.2", - "@typescript-eslint/visitor-keys": "8.12.2", + "@typescript-eslint/types": "8.18.0", + "@typescript-eslint/visitor-keys": "8.18.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -4396,23 +4398,21 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/utils": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.12.2.tgz", - "integrity": "sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.18.0.tgz", + "integrity": "sha512-p6GLdY383i7h5b0Qrfbix3Vc3+J2k6QWw6UMUeY5JGfm3C5LbZ4QIZzJNoNOfgyRe0uuYKjvVOsO/jD4SJO+xg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.12.2", - "@typescript-eslint/types": "8.12.2", - "@typescript-eslint/typescript-estree": "8.12.2" + "@typescript-eslint/scope-manager": "8.18.0", + "@typescript-eslint/types": "8.18.0", + "@typescript-eslint/typescript-estree": "8.18.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4422,18 +4422,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.12.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.12.2.tgz", - "integrity": "sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.0.tgz", + "integrity": "sha512-pCh/qEA8Lb1wVIqNvBke8UaRjJ6wrAWkJO5yyIbs8Yx6TNGYyfNjOo61tLv+WwLvoLPp4BQ8B7AHKijl8NGUfw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.12.2", - "eslint-visitor-keys": "^3.4.3" + "@typescript-eslint/types": "8.18.0", + "eslint-visitor-keys": "^4.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4443,6 +4444,19 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@vscode/debugadapter": { "version": "1.68.0", "resolved": "https://registry.npmjs.org/@vscode/debugadapter/-/debugadapter-1.68.0.tgz", @@ -4479,73 +4493,73 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "dev": true, "license": "MIT", "dependencies": { @@ -4553,9 +4567,9 @@ } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -4563,79 +4577,79 @@ } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" } }, @@ -4786,14 +4800,11 @@ } }, "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", "dev": true, "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, "engines": { "node": ">= 14" } @@ -5142,14 +5153,14 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "version": "0.4.12", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", + "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", + "@babel/helper-define-polyfill-provider": "^0.6.3", "semver": "^6.3.1" }, "peerDependencies": { @@ -5181,13 +5192,13 @@ } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", + "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" + "@babel/helper-define-polyfill-provider": "^0.6.3" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -5362,10 +5373,26 @@ "dev": true, "license": "MIT" }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/bonjour-service": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", - "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", "dev": true, "license": "MIT", "dependencies": { @@ -5544,16 +5571,44 @@ } }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.2.tgz", + "integrity": "sha512-0lk0PHFe/uz0vl527fG9CgdE9WdafjDbCXvBbs+LUv000TVt2Jjhqbs4Jwm8gz070w8xXyEAxrPOMullsxXeGg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "get-intrinsic": "^1.2.5" }, "engines": { "node": ">= 0.4" @@ -5583,9 +5638,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001676", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001676.tgz", - "integrity": "sha512-Qz6zwGCiPghQXGJvgQAem79esjitvJ+CxSbSQkW9H/UX5hg8XM88d4lp2W+MEQ81j+Hip58Il+jGVdazk1z9cw==", + "version": "1.0.30001688", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001688.tgz", + "integrity": "sha512-Nmqpru91cuABu/DTCXbM2NSRHzM2uVHfPnhJ/1zEAJx/ILBRVmz3pzH4N7DZqbdG0gWClsCC05Oj0mJ/1AWMbA==", "dev": true, "funding": [ { @@ -5630,9 +5685,9 @@ } }, "node_modules/chart.js": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.6.tgz", - "integrity": "sha512-8Y406zevUPbbIBA/HRk33khEmQPk5+cxeflWE/2rx1NJsjVWMPw/9mSP9rxHP5eqi6LNoPBVMfZHxbwLSgldYA==", + "version": "4.4.7", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.7.tgz", + "integrity": "sha512-pwkcKfdzTMAU/+jNosKhNL2bHtJc/sSmYgVbuGTEDhzkrhmyihmP7vUc/5ZK9WopidMDHNe3Wm7jOd/WhuHWuw==", "license": "MIT", "dependencies": { "@kurkle/color": "^0.3.0" @@ -5868,9 +5923,9 @@ "license": "ISC" }, "node_modules/complex.js": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.4.1.tgz", - "integrity": "sha512-QNaQnI+uI5mp3vm+i0M7Fkc1eCHAFzbsNJIhIeybP1ZVQquBhW6jx28jFbDCyOlykjDjtfgDMJjus0mbsukrig==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.4.2.tgz", + "integrity": "sha512-qtx7HRhPGSCBtGiST4/WGHuW+zeaND/6Ld+db6PbrulIB1i2Ev/2UPiqcmpQNPSyfBKraC0EOvOKCB5dGZKt3g==", "license": "MIT", "engines": { "node": "*" @@ -6170,9 +6225,9 @@ "license": "MIT" }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -6292,9 +6347,9 @@ } }, "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, "license": "MIT", "dependencies": { @@ -6474,6 +6529,7 @@ "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", "dev": true, "license": "Apache-2.0", + "optional": true, "bin": { "detect-libc": "bin/detect-libc.js" }, @@ -6558,6 +6614,20 @@ "node": ">=12" } }, + "node_modules/dunder-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.0.tgz", + "integrity": "sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/earcut": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", @@ -6595,9 +6665,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.50", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.50.tgz", - "integrity": "sha512-eMVObiUQ2LdgeO1F/ySTXsvqvxb6ZH2zPGaMYsWzRDdOddUa77tdmI0ltg+L16UpbWdhPmuF3wIQYyQq65WfZw==", + "version": "1.5.73", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.73.tgz", + "integrity": "sha512-8wGNxG9tAG5KhGd3eeA0o6ixhiNdgr0DcHWm85XPCphwZgD1lIEoi6t3VERayWao7SF7AAZTw6oARGJeVjH8Kg==", "dev": true, "license": "ISC" }, @@ -6702,13 +6772,10 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, "engines": { "node": ">= 0.4" } @@ -6729,6 +6796,18 @@ "dev": true, "license": "MIT" }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -6788,32 +6867,32 @@ } }, "node_modules/eslint": { - "version": "9.13.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.13.0.tgz", - "integrity": "sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==", + "version": "9.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.16.0.tgz", + "integrity": "sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.11.0", - "@eslint/config-array": "^0.18.0", - "@eslint/core": "^0.7.0", - "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "9.13.0", - "@eslint/plugin-kit": "^0.2.0", - "@humanfs/node": "^0.16.5", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.9.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.16.0", + "@eslint/plugin-kit": "^0.2.3", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.3.1", + "@humanwhocodes/retry": "^0.4.1", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.5", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.1.0", - "eslint-visitor-keys": "^4.1.0", - "espree": "^10.2.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -6827,8 +6906,7 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" @@ -7145,9 +7223,9 @@ } }, "node_modules/express": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", - "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "dev": true, "license": "MIT", "dependencies": { @@ -7170,7 +7248,7 @@ "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.10", + "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", "qs": "6.13.0", "range-parser": "~1.2.1", @@ -7185,6 +7263,10 @@ }, "engines": { "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/express/node_modules/debug": { @@ -7204,6 +7286,22 @@ "dev": true, "license": "MIT" }, + "node_modules/express/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/express/node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -7502,9 +7600,9 @@ } }, "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", "dev": true, "license": "ISC" }, @@ -7689,16 +7787,21 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", + "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -7828,12 +7931,12 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7889,22 +7992,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -7976,23 +8067,6 @@ "node": ">=12" } }, - "node_modules/html-entities": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ], - "license": "MIT" - }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -8093,13 +8167,13 @@ "license": "MIT" }, "node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -8190,9 +8264,9 @@ "license": "MIT" }, "node_modules/immutable": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", - "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz", + "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==", "dev": true, "license": "MIT" }, @@ -8304,13 +8378,13 @@ } }, "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -9701,9 +9775,9 @@ } }, "node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, "license": "MIT", "bin": { @@ -10036,14 +10110,23 @@ "integrity": "sha512-guN2+CzAwxUfdXiuVHcdogDmvhzvRYxMakKd39WmYuyTPaN73UuNC5cH4d4/JVNaLT1EMM8W/4PqHqVBye3ZiA==", "license": "Apache-2.0" }, + "node_modules/math-intrinsics": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.0.0.tgz", + "integrity": "sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/mathjs": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-13.2.0.tgz", - "integrity": "sha512-P5PZoiUX2Tkghkv3tsSqlK0B9My/ErKapv1j6wdxd0MOrYQ30cnGE4LH/kzYB2gA5rN46Njqc4cFgJjaxgijoQ==", + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-13.2.3.tgz", + "integrity": "sha512-I67Op0JU7gGykFK64bJexkSAmX498x0oybxfVXn1rroEMZTmfxppORhnk8mEUnPrbTfabDKCqvm18vJKMk2UJQ==", "license": "Apache-2.0", "dependencies": { - "@babel/runtime": "^7.25.6", - "complex.js": "^2.1.1", + "@babel/runtime": "^7.25.7", + "complex.js": "^2.2.5", "decimal.js": "^10.4.3", "escape-latex": "^1.2.0", "fraction.js": "^4.3.7", @@ -10070,9 +10153,9 @@ } }, "node_modules/memfs": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.14.0.tgz", - "integrity": "sha512-JUeY0F/fQZgIod31Ja1eJgiSxLn7BfQlCnqhwXFBzFHEw63OdLK7VJUJ7bnzNsWgCyoUP5tEp1VRY8rDaYzqOA==", + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.15.0.tgz", + "integrity": "sha512-q9MmZXd2rRWHS6GU3WEm3HyiXZyyoA1DqdOhEq0lxPBmKb5S7IAOwX0RgUCwJfqjelDCySa5h8ujOy24LqsWcw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -10466,9 +10549,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "dev": true, "funding": [ { @@ -10513,7 +10596,8 @@ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true }, "node_modules/node-forge": { "version": "1.3.1", @@ -10533,9 +10617,9 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "dev": true, "license": "MIT" }, @@ -10573,9 +10657,9 @@ } }, "node_modules/nwsapi": { - "version": "2.2.13", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.13.tgz", - "integrity": "sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==", + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz", + "integrity": "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==", "dev": true, "license": "MIT" }, @@ -10589,9 +10673,9 @@ } }, "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -10883,9 +10967,9 @@ } }, "node_modules/p-retry": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz", - "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", + "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11127,9 +11211,9 @@ } }, "node_modules/path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "dev": true, "license": "MIT" }, @@ -11361,9 +11445,9 @@ } }, "node_modules/postcss": { - "version": "8.4.47", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", - "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", "dev": true, "funding": [ { @@ -11382,7 +11466,7 @@ "license": "MIT", "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.1.0", + "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, "engines": { @@ -11435,14 +11519,14 @@ } }, "node_modules/postcss-modules-local-by-default": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", - "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", "dev": true, "license": "MIT", "dependencies": { "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", + "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.1.0" }, "engines": { @@ -11453,13 +11537,13 @@ } }, "node_modules/postcss-modules-scope": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", - "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", "dev": true, "license": "ISC", "dependencies": { - "postcss-selector-parser": "^6.0.4" + "postcss-selector-parser": "^7.0.0" }, "engines": { "node": "^10 || ^12 || >= 14" @@ -11485,9 +11569,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11604,11 +11688,17 @@ } }, "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } }, "node_modules/punycode": { "version": "2.3.1", @@ -11638,9 +11728,9 @@ "license": "MIT" }, "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", + "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" @@ -11809,16 +11899,16 @@ } }, "node_modules/regexpu-core": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", - "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", "dev": true, "license": "MIT", "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.2.0", "regjsgen": "^0.8.0", - "regjsparser": "^0.11.0", + "regjsparser": "^0.12.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" }, @@ -11834,9 +11924,9 @@ "license": "MIT" }, "node_modules/regjsparser": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.2.tgz", - "integrity": "sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -11846,6 +11936,19 @@ "regjsparser": "bin/parser" } }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -11915,9 +12018,9 @@ } }, "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, "license": "MIT", "engines": { @@ -12073,15 +12176,14 @@ "license": "MIT" }, "node_modules/sass": { - "version": "1.80.5", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.80.5.tgz", - "integrity": "sha512-TQd2aoQl/+zsxRMEDSxVdpPIqeq9UFc6pr7PzkugiTx3VYCFPUaa3P4RrBQsqok4PO200Vkz0vXQBNlg7W907g==", + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.83.0.tgz", + "integrity": "sha512-qsSxlayzoOjdvXMVLkzF84DJFc2HZEL/rFyGIKbbilYtAvlCxyuzUeff9LawTn4btVnLKg75Z8MMr1lxU1lfGw==", "dev": true, "license": "MIT", "dependencies": { - "@parcel/watcher": "^2.4.1", "chokidar": "^4.0.0", - "immutable": "^4.0.0", + "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" }, "bin": { @@ -12089,12 +12191,15 @@ }, "engines": { "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" } }, "node_modules/sass-loader": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.3.tgz", - "integrity": "sha512-gosNorT1RCkuCMyihv6FBRR7BMV06oKRAs+l4UMp1mlcVg9rWN6KMmUj3igjQwmYys4mDP3etEYJgiHRbgHCHA==", + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.4.tgz", + "integrity": "sha512-LavLbgbBGUt3wCiYzhuLLu65+fWXaXLmq7YxivLhEqmiupCFZ5sKUAipK3do6V80YSU0jvSxNhEdT13IXNr3rg==", "dev": true, "license": "MIT", "dependencies": { @@ -12176,9 +12281,9 @@ } }, "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", "dev": true, "license": "MIT", "dependencies": { @@ -12188,7 +12293,7 @@ "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", @@ -12501,25 +12606,82 @@ } }, "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -12944,9 +13106,9 @@ } }, "node_modules/terser": { - "version": "5.36.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", - "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.37.0.tgz", + "integrity": "sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -13126,13 +13288,6 @@ "node": "*" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, "node_modules/thingies": { "version": "1.21.0", "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", @@ -13257,9 +13412,9 @@ } }, "node_modules/ts-api-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz", - "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", "dev": true, "license": "MIT", "engines": { @@ -13480,9 +13635,9 @@ } }, "node_modules/typescript": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", - "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -13759,17 +13914,17 @@ } }, "node_modules/webpack": { - "version": "5.96.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz", - "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==", + "version": "5.97.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz", + "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==", "dev": true, "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.14.0", "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", @@ -13892,9 +14047,9 @@ } }, "node_modules/webpack-dev-server": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.1.0.tgz", - "integrity": "sha512-aQpaN81X6tXie1FoOB7xlMfCsN19pSvRAeYUHOdFWOlhpQ/LlbfTqYwwmEDFV0h8GGuqmCmKmT+pxcUV/Nt2gQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.0.tgz", + "integrity": "sha512-90SqqYXA2SK36KcT6o1bvwvZfJFcmoamqeJY7+boioffX9g9C0wjjJRGUrQIuh43pb0ttX7+ssavmj/WN2RHtA==", "dev": true, "license": "MIT", "dependencies": { @@ -13911,10 +14066,9 @@ "colorette": "^2.0.10", "compression": "^1.7.4", "connect-history-api-fallback": "^2.0.0", - "express": "^4.19.2", + "express": "^4.21.2", "graceful-fs": "^4.2.6", - "html-entities": "^2.4.0", - "http-proxy-middleware": "^2.0.3", + "http-proxy-middleware": "^2.0.7", "ipaddr.js": "^2.1.0", "launch-editor": "^2.6.1", "open": "^10.0.3", @@ -14143,9 +14297,9 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.16.tgz", + "integrity": "sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==", "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", @@ -14343,9 +14497,9 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz", - "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", + "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", "license": "ISC", "bin": { "yaml": "bin.mjs" @@ -14544,6 +14698,13 @@ "node": ">=20.17.0" } }, + "packages/sdfv/node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true, + "license": "MIT" + }, "packages/sdfv/node_modules/sass": { "version": "1.77.6", "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", diff --git a/packages/sdfv b/packages/sdfv index 4f16a1a..3362a0a 160000 --- a/packages/sdfv +++ b/packages/sdfv @@ -1 +1 @@ -Subproject commit 4f16a1afe18d8dd53716ca6ef85c69220bd5db8f +Subproject commit 3362a0a48bc5ea132ebb817a2f08d0b79e9c9f87 diff --git a/src/utils/sdfg_meta_dict.json b/src/utils/sdfg_meta_dict.json index 440edf1..474b464 100644 --- a/src/utils/sdfg_meta_dict.json +++ b/src/utils/sdfg_meta_dict.json @@ -207,7 +207,7 @@ "DataInstrumentationType": { "metatype": "DataInstrumentationType", "desc": "Instrument data contents at this access", - "category": "General", + "category": "Instrumentation", "default": "No_Instrumentation", "choices": [ "No_Instrumentation", @@ -218,7 +218,7 @@ "CodeBlock": { "metatype": "CodeBlock", "desc": "Condition under which to trigger the instrumentation", - "category": "General", + "category": "Instrumentation", "default": { "string_data": "1", "language": "CPP" @@ -3126,7 +3126,7 @@ "instrument": { "metatype": "DataInstrumentationType", "desc": "Instrument data contents at this access", - "category": "General", + "category": "Instrumentation", "default": "No_Instrumentation", "choices": [ "No_Instrumentation", @@ -3137,7 +3137,7 @@ "instrument_condition": { "metatype": "CodeBlock", "desc": "Condition under which to trigger the instrumentation", - "category": "General", + "category": "Instrumentation", "default": { "string_data": "1", "language": "CPP" @@ -3479,6 +3479,12 @@ "category": "General", "default": null }, + "ext_sdfg_path": { + "metatype": "str", + "desc": "Path to a file containing the SDFG for this nested SDFG", + "category": "General", + "default": null + }, "schedule": { "metatype": "ScheduleType", "desc": "SDFG schedule", @@ -3751,6 +3757,13 @@ "default": "0", "indirected": true }, + "gpu_force_syncthreads": { + "metatype": "bool", + "desc": "Force a call to the __syncthreads for the map", + "category": "General", + "default": false, + "indirected": true + }, "in_connectors": { "metatype": "dict", "desc": "A set of input connectors for this node.", @@ -3933,6 +3946,12 @@ "desc": "GPU kernel launch bounds. A value of -1 disables the statement, 0 (default) enables the statement if block size is not symbolic, and any other value (including tuples) sets it explicitly.", "category": "General", "default": "0" + }, + "gpu_force_syncthreads": { + "metatype": "bool", + "desc": "Force a call to the __syncthreads for the map", + "category": "General", + "default": false } }, "ConsumeEntry": { @@ -4356,6 +4375,13 @@ "default": "0", "indirected": true }, + "gpu_force_syncthreads": { + "metatype": "bool", + "desc": "Force a call to the __syncthreads for the map", + "category": "General", + "default": false, + "indirected": true + }, "in_connectors": { "metatype": "dict", "desc": "A set of input connectors for this node.", @@ -4568,6 +4594,12 @@ "desc": "GPU kernel launch bounds. A value of -1 disables the statement, 0 (default) enables the statement if block size is not symbolic, and any other value (including tuples) sets it explicitly.", "category": "General", "default": "0" + }, + "gpu_force_syncthreads": { + "metatype": "bool", + "desc": "Force a call to the __syncthreads for the map", + "category": "General", + "default": false } }, "LibraryNode": { @@ -4701,6 +4733,58 @@ "default": {}, "key_type": "str", "value_type": "list" + }, + "ranges": { + "metatype": "dict", + "desc": "Variable ranges across this block, typically within loops", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Range" + }, + "executions": { + "metatype": "SymbolicProperty", + "desc": "The number of times this block gets executed (0 stands for unbounded)", + "category": "General", + "default": 0 + }, + "dynamic_executions": { + "metatype": "bool", + "desc": "The number of executions of this block is dynamic", + "category": "General", + "default": true + }, + "certain_reads": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "possible_reads": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "certain_writes": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "possible_writes": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" } }, "SDFGState": { @@ -4745,34 +4829,104 @@ "language": "CPP" } }, + "location": { + "metatype": "dict", + "desc": "Full storage location identifier (e.g., rank, GPU ID)", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "pystr_to_symbolic" + }, + "guid": { + "metatype": "str", + "desc": "", + "category": "General", + "default": "" + }, + "is_collapsed": { + "metatype": "bool", + "desc": "Show this block as collapsed", + "category": "General", + "default": false + }, + "pre_conditions": { + "metatype": "dict", + "desc": "Pre-conditions for this block", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "list" + }, + "post_conditions": { + "metatype": "dict", + "desc": "Post-conditions for this block", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "list" + }, + "invariant_conditions": { + "metatype": "dict", + "desc": "Invariant conditions for this block", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "list" + }, + "ranges": { + "metatype": "dict", + "desc": "Variable ranges across this block, typically within loops", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Range" + }, "executions": { "metatype": "SymbolicProperty", - "desc": "The number of times this state gets executed (0 stands for unbounded)", + "desc": "The number of times this block gets executed (0 stands for unbounded)", "category": "General", "default": 0 }, "dynamic_executions": { "metatype": "bool", - "desc": "The number of executions of this state is dynamic", + "desc": "The number of executions of this block is dynamic", "category": "General", "default": true }, - "ranges": { + "certain_reads": { "metatype": "dict", - "desc": "Variable ranges, typically within loops", + "desc": "", "category": "General", "default": {}, - "key_type": "symbol", - "value_type": "Range" + "key_type": "str", + "value_type": "Memlet" }, - "location": { + "possible_reads": { "metatype": "dict", - "desc": "Full storage location identifier (e.g., rank, GPU ID)", + "desc": "", "category": "General", "default": {}, "key_type": "str", - "value_type": "pystr_to_symbolic" + "value_type": "Memlet" + }, + "certain_writes": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" }, + "possible_writes": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + } + }, + "ContinueBlock": { "guid": { "metatype": "str", "desc": "", @@ -4808,9 +4962,61 @@ "default": {}, "key_type": "str", "value_type": "list" + }, + "ranges": { + "metatype": "dict", + "desc": "Variable ranges across this block, typically within loops", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Range" + }, + "executions": { + "metatype": "SymbolicProperty", + "desc": "The number of times this block gets executed (0 stands for unbounded)", + "category": "General", + "default": 0 + }, + "dynamic_executions": { + "metatype": "bool", + "desc": "The number of executions of this block is dynamic", + "category": "General", + "default": true + }, + "certain_reads": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "possible_reads": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "certain_writes": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "possible_writes": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" } }, - "ContinueBlock": { + "BreakBlock": { "guid": { "metatype": "str", "desc": "", @@ -4846,9 +5052,61 @@ "default": {}, "key_type": "str", "value_type": "list" + }, + "ranges": { + "metatype": "dict", + "desc": "Variable ranges across this block, typically within loops", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Range" + }, + "executions": { + "metatype": "SymbolicProperty", + "desc": "The number of times this block gets executed (0 stands for unbounded)", + "category": "General", + "default": 0 + }, + "dynamic_executions": { + "metatype": "bool", + "desc": "The number of executions of this block is dynamic", + "category": "General", + "default": true + }, + "certain_reads": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "possible_reads": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "certain_writes": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "possible_writes": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" } }, - "BreakBlock": { + "ReturnBlock": { "guid": { "metatype": "str", "desc": "", @@ -4884,9 +5142,61 @@ "default": {}, "key_type": "str", "value_type": "list" + }, + "ranges": { + "metatype": "dict", + "desc": "Variable ranges across this block, typically within loops", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Range" + }, + "executions": { + "metatype": "SymbolicProperty", + "desc": "The number of times this block gets executed (0 stands for unbounded)", + "category": "General", + "default": 0 + }, + "dynamic_executions": { + "metatype": "bool", + "desc": "The number of executions of this block is dynamic", + "category": "General", + "default": true + }, + "certain_reads": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "possible_reads": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "certain_writes": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "possible_writes": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" } }, - "ReturnBlock": { + "AbstractControlFlowRegion": { "guid": { "metatype": "str", "desc": "", @@ -4922,6 +5232,58 @@ "default": {}, "key_type": "str", "value_type": "list" + }, + "ranges": { + "metatype": "dict", + "desc": "Variable ranges across this block, typically within loops", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Range" + }, + "executions": { + "metatype": "SymbolicProperty", + "desc": "The number of times this block gets executed (0 stands for unbounded)", + "category": "General", + "default": 0 + }, + "dynamic_executions": { + "metatype": "bool", + "desc": "The number of executions of this block is dynamic", + "category": "General", + "default": true + }, + "certain_reads": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "possible_reads": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "certain_writes": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "possible_writes": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" } }, "ControlFlowRegion": { @@ -4960,6 +5322,58 @@ "default": {}, "key_type": "str", "value_type": "list" + }, + "ranges": { + "metatype": "dict", + "desc": "Variable ranges across this block, typically within loops", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Range" + }, + "executions": { + "metatype": "SymbolicProperty", + "desc": "The number of times this block gets executed (0 stands for unbounded)", + "category": "General", + "default": 0 + }, + "dynamic_executions": { + "metatype": "bool", + "desc": "The number of executions of this block is dynamic", + "category": "General", + "default": true + }, + "certain_reads": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "possible_reads": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "certain_writes": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "possible_writes": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" } }, "LoopRegion": { @@ -5034,6 +5448,58 @@ "default": {}, "key_type": "str", "value_type": "list" + }, + "ranges": { + "metatype": "dict", + "desc": "Variable ranges across this block, typically within loops", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Range" + }, + "executions": { + "metatype": "SymbolicProperty", + "desc": "The number of times this block gets executed (0 stands for unbounded)", + "category": "General", + "default": 0 + }, + "dynamic_executions": { + "metatype": "bool", + "desc": "The number of executions of this block is dynamic", + "category": "General", + "default": true + }, + "certain_reads": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "possible_reads": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "certain_writes": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "possible_writes": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" } }, "ConditionalBlock": { @@ -5072,6 +5538,58 @@ "default": {}, "key_type": "str", "value_type": "list" + }, + "ranges": { + "metatype": "dict", + "desc": "Variable ranges across this block, typically within loops", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Range" + }, + "executions": { + "metatype": "SymbolicProperty", + "desc": "The number of times this block gets executed (0 stands for unbounded)", + "category": "General", + "default": 0 + }, + "dynamic_executions": { + "metatype": "bool", + "desc": "The number of executions of this block is dynamic", + "category": "General", + "default": true + }, + "certain_reads": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "possible_reads": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "certain_writes": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "possible_writes": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" } }, "NamedRegion": { @@ -5123,6 +5641,58 @@ "default": {}, "key_type": "str", "value_type": "list" + }, + "ranges": { + "metatype": "dict", + "desc": "Variable ranges across this block, typically within loops", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Range" + }, + "executions": { + "metatype": "SymbolicProperty", + "desc": "The number of times this block gets executed (0 stands for unbounded)", + "category": "General", + "default": 0 + }, + "dynamic_executions": { + "metatype": "bool", + "desc": "The number of executions of this block is dynamic", + "category": "General", + "default": true + }, + "certain_reads": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "possible_reads": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "certain_writes": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "possible_writes": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" } }, "FunctionCallRegion": { @@ -5151,37 +5721,89 @@ "metatype": "str", "desc": "", "category": "General", - "default": "" + "default": "" + }, + "is_collapsed": { + "metatype": "bool", + "desc": "Show this block as collapsed", + "category": "General", + "default": false + }, + "pre_conditions": { + "metatype": "dict", + "desc": "Pre-conditions for this block", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "list" + }, + "post_conditions": { + "metatype": "dict", + "desc": "Post-conditions for this block", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "list" + }, + "invariant_conditions": { + "metatype": "dict", + "desc": "Invariant conditions for this block", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "list" + }, + "ranges": { + "metatype": "dict", + "desc": "Variable ranges across this block, typically within loops", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Range" + }, + "executions": { + "metatype": "SymbolicProperty", + "desc": "The number of times this block gets executed (0 stands for unbounded)", + "category": "General", + "default": 0 }, - "is_collapsed": { + "dynamic_executions": { "metatype": "bool", - "desc": "Show this block as collapsed", + "desc": "The number of executions of this block is dynamic", "category": "General", - "default": false + "default": true }, - "pre_conditions": { + "certain_reads": { "metatype": "dict", - "desc": "Pre-conditions for this block", + "desc": "", "category": "General", "default": {}, "key_type": "str", - "value_type": "list" + "value_type": "Memlet" }, - "post_conditions": { + "possible_reads": { "metatype": "dict", - "desc": "Post-conditions for this block", + "desc": "", "category": "General", "default": {}, "key_type": "str", - "value_type": "list" + "value_type": "Memlet" }, - "invariant_conditions": { + "certain_writes": { "metatype": "dict", - "desc": "Invariant conditions for this block", + "desc": "", "category": "General", "default": {}, "key_type": "str", - "value_type": "list" + "value_type": "Memlet" + }, + "possible_writes": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" } }, "ProcessGrid": { @@ -5555,9 +6177,9 @@ "key_type": "str", "value_type": "str" }, - "using_experimental_blocks": { + "using_explicit_control_flow": { "metatype": "bool", - "desc": "Whether the SDFG contains experimental control flow blocks", + "desc": "Whether the SDFG contains explicit control flow constructs", "category": "General", "default": false }, @@ -5596,11 +6218,84 @@ "default": {}, "key_type": "str", "value_type": "list" + }, + "ranges": { + "metatype": "dict", + "desc": "Variable ranges across this block, typically within loops", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Range" + }, + "executions": { + "metatype": "SymbolicProperty", + "desc": "The number of times this block gets executed (0 stands for unbounded)", + "category": "General", + "default": 0 + }, + "dynamic_executions": { + "metatype": "bool", + "desc": "The number of executions of this block is dynamic", + "category": "General", + "default": true + }, + "certain_reads": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "possible_reads": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "certain_writes": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" + }, + "possible_writes": { + "metatype": "dict", + "desc": "", + "category": "General", + "default": {}, + "key_type": "str", + "value_type": "Memlet" } }, "Pass": {}, "VisitorPass": {}, - "StatePass": {}, + "StatePass": { + "top_down": { + "metatype": "bool", + "desc": "Whether or not to apply top down (i.e., parents before children)", + "category": "General", + "default": false + } + }, + "ControlFlowRegionPass": { + "apply_to_conditionals": { + "metatype": "bool", + "desc": "Whether or not to apply to conditional blocks. If false, do not apply to conditional blocks, but only their children.", + "category": "General", + "default": false + }, + "top_down": { + "metatype": "bool", + "desc": "Whether or not to apply top down (i.e., parents before children)", + "category": "General", + "default": false + } + }, "ScopePass": {}, "Pipeline": { "passes": { @@ -8822,14 +9517,53 @@ "default": false } }, - "SymbolAccessSets": {}, + "SymbolAccessSets": { + "apply_to_conditionals": { + "metatype": "bool", + "desc": "Whether or not to apply to conditional blocks. If false, do not apply to conditional blocks, but only their children.", + "category": "General", + "default": false + }, + "top_down": { + "metatype": "bool", + "desc": "Whether or not to apply top down (i.e., parents before children)", + "category": "General", + "default": false + } + }, "AccessSets": {}, "FindAccessStates": {}, "FindAccessNodes": {}, - "SymbolWriteScopes": {}, + "SymbolWriteScopes": { + "apply_to_conditionals": { + "metatype": "bool", + "desc": "Whether or not to apply to conditional blocks. If false, do not apply to conditional blocks, but only their children.", + "category": "General", + "default": false + }, + "top_down": { + "metatype": "bool", + "desc": "Whether or not to apply top down (i.e., parents before children)", + "category": "General", + "default": false + } + }, "ScalarWriteShadowScopes": {}, "AccessRanges": {}, - "FindReferenceSources": {}, + "FindReferenceSources": { + "trace_through_code": { + "metatype": "bool", + "desc": "Trace inputs through tasklets.", + "category": "General", + "default": false + }, + "recursive": { + "metatype": "bool", + "desc": "Add reference of reference dependencies.", + "category": "General", + "default": false + } + }, "DeriveSDFGConstraints": { "assume_max_data_size": { "metatype": "int", @@ -9395,6 +10129,12 @@ "category": "General", "default": false }, + "skew": { + "metatype": "bool", + "desc": "If True, offsets inner tile back such that it starts with zero", + "category": "General", + "default": false + }, "cfg_id": { "metatype": "int", "desc": "", @@ -9475,6 +10215,12 @@ "category": "General", "default": false }, + "skew": { + "metatype": "bool", + "desc": "If True, offsets inner tile back such that it starts with zero", + "category": "General", + "default": false + }, "cfg_id": { "metatype": "int", "desc": "", @@ -9884,6 +10630,40 @@ "default": 0 } }, + "TaskletFusion": { + "new_name": { + "metatype": "str", + "desc": "New name to give tasklet. If None, fuses tasklet names", + "category": "General", + "default": null + }, + "cfg_id": { + "metatype": "int", + "desc": "", + "category": "(Debug)", + "default": 0 + }, + "state_id": { + "metatype": "int", + "desc": "", + "category": "(Debug)", + "default": 0 + }, + "_subgraph": { + "metatype": "dict", + "desc": "", + "category": "(Debug)", + "default": {}, + "key_type": "int", + "value_type": "int" + }, + "expr_index": { + "metatype": "int", + "desc": "", + "category": "(Debug)", + "default": 0 + } + }, "TrivialTaskletElimination": { "cfg_id": { "metatype": "int", @@ -10546,6 +11326,20 @@ "category": "General", "default": "" }, + "host_maps": { + "metatype": "list", + "desc": "List of map GUIDs, the passed maps are not offloaded to the GPU", + "category": "General", + "default": null, + "element_type": "str" + }, + "host_data": { + "metatype": "list", + "desc": "List of data names, the passed data are not offloaded to the GPU", + "category": "General", + "default": null, + "element_type": "str" + }, "cfg_id": { "metatype": "int", "desc": "", @@ -10698,6 +11492,12 @@ "category": "General", "default": 0 }, + "inline_iterations": { + "metatype": "bool", + "desc": "Whether or not to inline individual iterations' CFGs after unrolling", + "category": "General", + "default": true + }, "cfg_id": { "metatype": "int", "desc": "", @@ -10738,6 +11538,12 @@ "category": "General", "default": 0 }, + "inline_iterations": { + "metatype": "bool", + "desc": "Whether or not to inline individual iterations' CFGs after unrolling", + "category": "General", + "default": true + }, "cfg_id": { "metatype": "int", "desc": "", @@ -10766,12 +11572,6 @@ } }, "LoopToMap": { - "itervar": { - "metatype": "str", - "desc": "The name of the iteration variable (optional).", - "category": "General", - "default": null - }, "cfg_id": { "metatype": "int", "desc": "", @@ -11026,6 +11826,18 @@ "desc": "If True, marks code with Persistent allocation lifetime as dead", "category": "General", "default": false + }, + "apply_to_conditionals": { + "metatype": "bool", + "desc": "Whether or not to apply to conditional blocks. If false, do not apply to conditional blocks, but only their children.", + "category": "General", + "default": false + }, + "top_down": { + "metatype": "bool", + "desc": "Whether or not to apply top down (i.e., parents before children)", + "category": "General", + "default": false } }, "DeadStateElimination": {}, @@ -11063,6 +11875,38 @@ "default": true } }, + "InlineControlFlowRegions": { + "progress": { + "metatype": "bool", + "desc": "Whether to print progress, or None for default (print after 5 seconds).", + "category": "General", + "default": null + }, + "no_inline_loops": { + "metatype": "bool", + "desc": "Whether to prevent inlining loops.", + "category": "General", + "default": true + }, + "no_inline_conditional": { + "metatype": "bool", + "desc": "Whether to prevent inlining conditional blocks.", + "category": "General", + "default": true + }, + "no_inline_function_call_regions": { + "metatype": "bool", + "desc": "Whether to prevent inlining function call regions.", + "category": "General", + "default": true + }, + "no_inline_named_regions": { + "metatype": "bool", + "desc": "Whether to prevent inlining named control flow regions.", + "category": "General", + "default": true + } + }, "FixNestedSDFGReferences": {}, "OptionalArrayInference": {}, "PatternMatchAndApply": { @@ -11250,6 +12094,56 @@ } }, "ReferenceToView": {}, + "LoopLifting": { + "cfg_id": { + "metatype": "int", + "desc": "", + "category": "(Debug)", + "default": 0 + }, + "state_id": { + "metatype": "int", + "desc": "", + "category": "(Debug)", + "default": 0 + }, + "_subgraph": { + "metatype": "dict", + "desc": "", + "category": "(Debug)", + "default": {}, + "key_type": "int", + "value_type": "int" + }, + "expr_index": { + "metatype": "int", + "desc": "", + "category": "(Debug)", + "default": 0 + } + }, + "ControlFlowRaising": { + "raise_sink_node_returns": { + "metatype": "bool", + "desc": "Whether or not to lift sink nodes in an SDFG context to explicit return blocks.", + "category": "General", + "default": false + } + }, + "PruneEmptyConditionalBranches": { + "apply_to_conditionals": { + "metatype": "bool", + "desc": "Whether or not to apply to conditional blocks. If false, do not apply to conditional blocks, but only their children.", + "category": "General", + "default": false + }, + "top_down": { + "metatype": "bool", + "desc": "Whether or not to apply top down (i.e., parents before children)", + "category": "General", + "default": false + } + }, "SimplifyPass": { "validate": { "metatype": "bool", @@ -11275,6 +12169,18 @@ "category": "General", "default": false }, + "no_inline_function_call_regions": { + "metatype": "bool", + "desc": "Whether to prevent inlining function call regions.", + "category": "General", + "default": false + }, + "no_inline_named_regions": { + "metatype": "bool", + "desc": "Whether to prevent inlining named control flow regions.", + "category": "General", + "default": false + }, "passes": { "metatype": "list", "desc": "List of passes that this pipeline contains", diff --git a/src/utils/utils.ts b/src/utils/utils.ts index d49ab7b..1ca07a2 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -6,8 +6,10 @@ import { FileType, Position, Range, + TabInputText, TextDocument, Uri, + ViewColumn, env, window, workspace @@ -28,19 +30,37 @@ export function goToFileLocation( endCol: number ): void { // Load the file and show it in a new editor, highlighting the - // indicated range. - workspace.openTextDocument(fileUri).then( - (doc: TextDocument) => { - const startPos = new Position(startLine - 1, startCol); - const endPos = new Position(endLine, endCol); - const range = new Range(startPos, endPos); - window.showTextDocument(doc, { preview: false, selection: range }); - }, (reason) => { - window.showInformationMessage( - 'Could not open file ' + fileUri.fsPath + ', ' + reason - ); - } - ); + // indicated range. If the file is open already, open the opened editor + // instead of loading the file. + const _goToFileLoc = (doc: TextDocument) => { + const startPos = new Position(startLine - 1, startCol); + const endPos = new Position(endLine, endCol); + const range = new Range(startPos, endPos); + window.showTextDocument(doc, { + viewColumn: ViewColumn.Beside, + preview: false, + selection: range, + }); + } + + let document = null; + for (const doc of workspace.textDocuments) { + if (doc.uri.fsPath === fileUri.fsPath) + document = doc; + } + if (document) { + _goToFileLoc(document); + } else { + workspace.openTextDocument(fileUri).then( + (doc: TextDocument) => { + _goToFileLoc(doc); + }, (reason) => { + window.showInformationMessage( + 'Could not open file ' + fileUri.fsPath + ', ' + reason + ); + } + ); + } } export async function goToSource( diff --git a/src/webclients/components/sdfv/attributes_table.scss b/src/webclients/components/sdfv/attributes_table.scss new file mode 100644 index 0000000..e0db989 --- /dev/null +++ b/src/webclients/components/sdfv/attributes_table.scss @@ -0,0 +1,81 @@ +/* Copyright 2020-2024 ETH Zurich and the DaCe-VSCode authors. + * All rights reserved. */ + +.sdfv { + .attr-table-base-container { + .attr-table { + border: 1px solid var(--vscode-list-inactiveSelectionBackground); + padding-left: 0; + padding-right: 0; + } + } + + .attr-table { + .attr-table-row { + padding: .5rem 0; + border-bottom: 1px solid var(--vscode-list-inactiveSelectionBackground); + margin-left: 0; + margin-right: 0; + + .attr-table-cell { + text-align: left; + display: flex; + align-items: center; + overflow: hidden; + padding-left: 0; + flex: 0 0 auto; + + .attr-table-value { + flex-grow: 1; + } + + .value-edit-control { + display: flex; + } + + &.attr-cell-s { + width: 25%; + } + + &.attr-cell-m { + width: 50%; + } + + &.attr-cell-l { + width: 75%; + } + } + } + + .sdfv-property-input { + width: 100%; + } + + .popup-editable-property-container { + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + } + + .data-container-summary { + word-break: break-all; + word-wrap: break-word; + } + + .data-container-editing-container { + display: flex; + } + + .sdfv-dict-value-container { + pre.code { + code { + overflow: auto; + max-height: 15rem; + word-break: break-all; + word-wrap: break-word; + } + } + } + } +} diff --git a/src/webclients/components/sdfv/properties/properties.ts b/src/webclients/components/sdfv/properties/properties.ts index d3180c1..caeaaf4 100644 --- a/src/webclients/components/sdfv/properties/properties.ts +++ b/src/webclients/components/sdfv/properties/properties.ts @@ -423,7 +423,7 @@ export class TypeclassProperty extends ComboboxProperty { }).appendTo(rowbox); attributeTablePutEntry( key, val, valMeta, this.compoundValues, undefined, - undefined, row, false, false, false + undefined, row, false, false, false, false ).then(attrProp => { if (attrProp) this.compoundProp?.getProperties().push(attrProp); diff --git a/src/webclients/components/sdfv/utils/attributes_table.ts b/src/webclients/components/sdfv/utils/attributes_table.ts index b039d4a..12c4aae 100644 --- a/src/webclients/components/sdfv/utils/attributes_table.ts +++ b/src/webclients/components/sdfv/utils/attributes_table.ts @@ -65,13 +65,13 @@ function getMonacoThemeName() { } } -export function attrTablePutBool( +function attrTablePutBool( key: string, subkey: string | undefined, val: boolean, elem: any | undefined, xform: any | undefined, target: any, cell: JQuery, dtype: string ): ValueProperty { const boolInputContainer = $('
', { - 'class': 'form-check form-switch sdfv-property-bool', + 'class': 'form-check form-switch sdfv-property-input sdfv-property-bool', }).appendTo(cell); const input = $('', { 'type': 'checkbox', @@ -87,19 +87,19 @@ export function attrTablePutBool( return new ValueProperty(elem, xform, target, key, subkey, dtype, input); } -export function attrTablePutText( +function attrTablePutText( key: string, subkey: string | undefined, val: string, elem: any | undefined, xform: any | undefined, target: any, cell: JQuery, dtype: string ): ValueProperty { const input = $('', { 'type': 'text', - 'class': 'sdfv-property-text', + 'class': 'sdfv-property-input sdfv-property-text', 'value': val, }).appendTo(cell); return new ValueProperty(elem, xform, target, key, subkey, dtype, input); } -export function attrTablePutCode( +function attrTablePutCode( key: string, subkey: string | undefined, val: string, elem: any | undefined, xform: any | undefined, target: any, cell: JQuery, dtype: string ): CodeProperty { @@ -156,10 +156,10 @@ export function attrTablePutCode( ); } -export function attrTablePutData( +function attrTablePutData( key: string, subkey: string | undefined, val: any, elem: any | undefined, xform: any | undefined, target: any, cell: JQuery, dtype: string, - meta: any, editableKeys: boolean = false + meta: any ): DictProperty { const dataCellContainer = $('
', { 'class': 'popup-editable-property-container', @@ -174,7 +174,7 @@ export function attrTablePutData( elem, xform, target, key, subkey, dtype, [], val ); - dataEditBtn.on('click', () => { + dataEditBtn.on('click', async () => { prop.setProperties([]); const modal = createSingleUseModal( @@ -182,33 +182,14 @@ export function attrTablePutData( ); const rowbox = $('
', { - 'class': 'container-fluid', + 'class': 'container-fluid attr-table', }).appendTo(modal.body); - Object.keys(val.attributes).forEach(async k => { - let v = val.attributes[k]; - - let valMeta = undefined; - if (k in meta) - valMeta = meta[k]; - - const row = $('
', { - class: 'row attr-table-row', - }).appendTo(rowbox); - const attrProp = await attributeTablePutEntry( - k, v, valMeta, val.attributes, elem, xform, row, - editableKeys, false, editableKeys - ); - - if (attrProp.deleteBtn) - attrProp.deleteBtn.on('click', () => { - attrProp.keyProp?.getInput().val(''); - attrProp.keyProp?.markDeleted(); - attrProp.row.hide(); - }); - - if (attrProp) - prop.getProperties().push(attrProp); - }); + const allProps = await setTableFromAttributes( + val.attributes, meta, '', rowbox, false, false, false, false, + elem, xform + ); + for (const nProp of allProps) + prop.getProperties().push(nProp); // If code editors (monaco editors) are part of this dictionary, they // need to be resized again as soon as the modal is shown in order to @@ -222,40 +203,6 @@ export function attrTablePutData( } }); - if (editableKeys) { - const addItemContainer = $('
', { - 'class': 'container-fluid', - }).appendTo(modal.body); - const addItemButtonRow = $('
', { - 'class': 'row', - }).appendTo(addItemContainer); - $('', { - 'class': 'material-symbols-outlined property-add-row-btn', - 'text': 'playlist_add', - 'title': 'Add item', - 'click': async () => { - const row = $('
', { - class: 'row attr-table-row', - }).appendTo(rowbox); - const newProp = await attributeTablePutEntry( - '', '', { metatype: 'str' }, val.attributes, elem, - xform, row, true, false, true - ); - if (newProp) { - prop.getProperties().push(newProp); - - if (newProp.deleteBtn) - newProp.deleteBtn.on('click', () => { - newProp.keyProp?.getInput().val(''); - newProp.row.hide(); - }); - } - }, - }).appendTo($('
', { - 'class': 'col-2', - }).appendTo(addItemButtonRow)); - } - if (modal.confirmBtn) modal.confirmBtn.on('click', () => { const sdfg = VSCodeRenderer.getInstance()?.get_sdfg(); @@ -272,25 +219,25 @@ export function attrTablePutData( return prop; } -export function attrTablePutNumber( +function attrTablePutNumber( key: string, subkey: string | undefined, val: number, elem: any | undefined, xform: any | undefined, target: any, cell: JQuery, dtype: string ): ValueProperty { const input = $('', { 'type': 'number', - 'class': 'sdfv-property-number', + 'class': 'sdfv-property-input sdfv-property-number', 'value': val, }).appendTo(cell); return new ValueProperty(elem, xform, target, key, subkey, dtype, input); } -export function attrTablePutSelect( +function attrTablePutSelect( key: string, subkey: string | undefined, val: string, elem: any | undefined, xform: any | undefined, target: any, cell: JQuery, dtype: string, choices: string[] ): ValueProperty { const input = $('', { 'id': key + '-' + r + '-typeclass-dropdown', - 'class': 'sdfv-property-dropdown', + 'class': 'sdfv-property-input sdfv-property-dropdown', }).appendTo(cell); const choices = baseTypes.concat(Object.keys(compoundTypes)); @@ -391,7 +338,7 @@ export function attrTablePutTypeclass( ); } -export function attrTablePutDict( +function attrTablePutDict( key: string, subkey: string | undefined, val: any, elem: any | undefined, xform: any | undefined, target: any, cell: JQuery, dtype: string, valMeta: any, allowAdding: boolean = true @@ -400,6 +347,7 @@ export function attrTablePutDict( 'class': 'popup-editable-property-container', }).appendTo(cell); $('
', { + class: 'sdfv-dict-value-container', 'html': sdfg_property_to_string( val, VSCodeRenderer.getInstance()?.view_settings() ), @@ -422,7 +370,7 @@ export function attrTablePutDict( ); const rowbox = $('
', { - 'class': 'container-fluid', + 'class': 'container-fluid attr-table', }).appendTo(modal.body); Object.keys(val).forEach(async k => { let v = val[k]; @@ -430,7 +378,7 @@ export function attrTablePutDict( class: 'row attr-table-row', }).appendTo(rowbox); const attrProp = await attributeTablePutEntry( - k, v, valMeta, val, elem, xform, row, true, false, true + k, v, valMeta, val, elem, xform, row, true, false, false, true ); if (attrProp.deleteBtn) @@ -456,46 +404,48 @@ export function attrTablePutDict( } }); - const addItemContainer = $('
', { - 'class': 'container-fluid', - }).appendTo(modal.body); - const addItemButtonRow = $('
', { - 'class': 'row', - }).appendTo(addItemContainer); - $('', { - 'class': 'material-symbols-outlined property-add-row-btn', - 'text': 'playlist_add', - 'title': 'Add item', - 'click': () => { - const row = $('
', { - class: 'row attr-table-row', - }).appendTo(rowbox); - let newPropRet: Promise; - if (valMeta) - newPropRet = attributeTablePutEntry( - '', '', valMeta, val, elem, xform, row, true, false, - true - ); - else - newPropRet = attributeTablePutEntry( - '', '', { metatype: 'str' }, val, elem, xform, row, - true, false, true - ); - newPropRet.then(newProp => { - if (newProp) { - prop.getProperties().push(newProp); + if (allowAdding) { + const addItemContainer = $('
', { + 'class': 'container-fluid', + }).appendTo(modal.body); + const addItemButtonRow = $('
', { + 'class': 'row', + }).appendTo(addItemContainer); + $('', { + 'class': 'material-symbols-outlined property-add-row-btn', + 'text': 'playlist_add', + 'title': 'Add item', + 'click': () => { + const row = $('
', { + class: 'row attr-table-row', + }).appendTo(rowbox); + let newPropRet: Promise; + if (valMeta) + newPropRet = attributeTablePutEntry( + '', '', valMeta, val, elem, xform, row, true, false, + false, true + ); + else + newPropRet = attributeTablePutEntry( + '', '', { metatype: 'str' }, val, elem, xform, row, + true, false, false, true + ); + newPropRet.then(newProp => { + if (newProp) { + prop.getProperties().push(newProp); - if (newProp.deleteBtn) - newProp.deleteBtn.on('click', () => { - newProp.keyProp?.getInput().val(''); - newProp.row.hide(); - }); - } - }); - }, - }).appendTo($('
', { - 'class': 'col-2', - }).appendTo(addItemButtonRow)); + if (newProp.deleteBtn) + newProp.deleteBtn.on('click', () => { + newProp.keyProp?.getInput().val(''); + newProp.row.hide(); + }); + } + }); + }, + }).appendTo($('
', { + 'class': 'col-2', + }).appendTo(addItemButtonRow)); + } if (modal.confirmBtn) modal.confirmBtn.on('click', () => { @@ -513,7 +463,7 @@ export function attrTablePutDict( return prop; } -export function attrTablePutList( +function attrTablePutList( key: string, subkey: string | undefined, val: any[], elem: any | undefined, xform: any | undefined, target: any, cell: JQuery, dtype: string, elemMeta: any @@ -551,7 +501,7 @@ export function attrTablePutList( ); const rowbox = $('
', { - 'class': 'container-fluid', + 'class': 'container-fluid attr-table', }).appendTo(modal.body); if (val) { for (let i = 0; i < val.length; i++) { @@ -561,7 +511,7 @@ export function attrTablePutList( }).appendTo(rowbox); const attrProp = await attributeTablePutEntry( i.toString(), v, elemMeta, val, elem, xform, row, false, - false, true + false, false, true ); if (attrProp.deleteBtn) { @@ -605,7 +555,7 @@ export function attrTablePutList( }).appendTo(rowbox); attributeTablePutEntry( i.toString(), '', elemMeta, val, elem, xform, row, false, - false, true + false, false, true ).then(newProp => { if (newProp && newProp.valProp) { prop.getPropertiesList().push(...newProp.valProp); @@ -641,7 +591,7 @@ export function attrTablePutList( return prop; } -export function attrTablePutRange( +function attrTablePutRange( key: string, subkey: string | undefined, val: any, elem: any | undefined, xform: any | undefined, target: any, cell: JQuery, dtype: string ): RangeProperty { @@ -671,7 +621,7 @@ export function attrTablePutRange( ); const rowbox = $('
', { - 'class': 'container-fluid', + 'class': 'container-fluid attr-table', }).appendTo(modal.body); if (val && val.ranges) val.ranges.forEach((range: Range) => { @@ -855,7 +805,7 @@ export function attrTablePutRange( return prop; } -export function attrTablePutLogicalGroup( +function attrTablePutLogicalGroup( key: string, subkey: string | undefined, val: LogicalGroup, elem: any | undefined, xform: any | undefined, target: any, cell: JQuery, dtype: string @@ -878,7 +828,7 @@ export function attrTablePutLogicalGroup( export async function attributeTablePutEntry( key: string, val: any, meta: any, target: any, elem: any | undefined, xform: any | undefined, row: JQuery, editableKey: boolean, - updateOnChange: boolean, addDeleteButton: boolean, + updateOnChange: boolean, delayedEdit: boolean, addDeleteButton: boolean, isNonDefault: boolean = false, keyChangeHandlerOverride?: (prop: KeyProperty) => void, valueChangeHandlerOverride?: (prop: Property) => void, @@ -928,7 +878,7 @@ export async function attributeTablePutEntry( }; let keyCell = undefined; - if (editableKey) { + if (editableKey && !delayedEdit) { keyCell = $('
', { 'class': 'attr-table-cell ' + ( invertedSpacing ? 'attr-cell-l' : 'attr-cell-s' @@ -976,38 +926,56 @@ export async function attributeTablePutEntry( invertedSpacing ? 'attr-cell-s' : 'attr-cell-l' ), }).appendTo(contentRow); + const valContents = $('
', { + class: 'attr-table-value', + }).appendTo(valueCell); - if (key === 'constants_prop') { - const constContainer = $('
').appendTo(valueCell); - for (const k in val) { - const v = val[k]; - constContainer.append($('
', { - text: k + ': ' + v[1].toString(), - })); - } - } else if (dtype === undefined) { + const setValContentsPlain = async () => { + const sdfgMetaDict = await VSCodeSDFV.getInstance().getMetaDict(); // Implementations that are set to null should still be visible. Other // null properties should be shown as an empty field. - if (key === 'implementation' && val === null) - valueCell.html('null'); - else - valueCell.html(sdfg_property_to_string( + if (key === 'implementation' && val === null) { + valContents.text('null'); + } else if (dtype == undefined) { + valContents.html(sdfg_property_to_string( val, VSCodeRenderer.getInstance()?.view_settings() )); - } else { + } else if (dtype in sdfgMetaDict['__data_container_types__']) { + let containerLabel = dtype + ' '; + if (val['attributes']) { + const attr = val['attributes'] + if (dtype.endsWith('Array') && attr['shape']) + containerLabel += sdfg_property_to_string(attr['shape']); + } + $('
', { + class: 'data-container-summary', + text: containerLabel, + }).appendTo(valContents); + } else { + switch (dtype) { + default: + valContents.html(sdfg_property_to_string( + val, VSCodeRenderer.getInstance()?.view_settings() + )); + break; + } + } + }; + + const setValContentsRich = async () => { const sdfgMetaDict = await VSCodeSDFV.getInstance().getMetaDict(); switch (dtype) { case 'typeclass': if (meta !== undefined && meta['base_types'] && meta['compound_types']) valProp = [attrTablePutTypeclass( - key, undefined, val, elem, xform, target, valueCell, + key, undefined, val, elem, xform, target, valContents, dtype, meta['base_types'], meta['compound_types'] )]; break; case 'bool': valProp = [attrTablePutBool( - key, undefined, val, elem, xform, target, valueCell, dtype + key, undefined, val, elem, xform, target, valContents, dtype )]; break; case 'str': @@ -1016,12 +984,12 @@ export async function attributeTablePutEntry( // TODO(later): Treat symbolic expressions with a symbolic // parser, they're not just a regular string. valProp = [attrTablePutText( - key, undefined, val, elem, xform, target, valueCell, dtype + key, undefined, val, elem, xform, target, valContents, dtype )]; break; case 'int': valProp = [attrTablePutNumber( - key, undefined, val, elem, xform, target, valueCell, dtype + key, undefined, val, elem, xform, target, valContents, dtype )]; break; case 'dict': @@ -1035,8 +1003,8 @@ export async function attributeTablePutEntry( valMeta = sdfgMetaDict['__reverse_type_lookup__'][valType]; const allowAdding = addDeleteButton; attrTablePutDict( - key, undefined, val, elem, xform, target, valueCell, dtype, - valMeta, allowAdding + key, undefined, val, elem, xform, target, valContents, + dtype, valMeta, allowAdding ); break; case 'set': @@ -1058,63 +1026,162 @@ export async function attributeTablePutEntry( }; valProp = [attrTablePutList( - key, undefined, val, elem, xform, target, valueCell, dtype, - elemMeta + key, undefined, val, elem, xform, target, valContents, + dtype, elemMeta )]; break; case 'Range': case 'SubsetProperty': valProp = [attrTablePutRange( - key, undefined, val, elem, xform, target, valueCell, dtype + key, undefined, val, elem, xform, target, valContents, dtype )]; break; case 'DataProperty': valProp = [attrTablePutSelect( - key, undefined, val, elem, xform, target, valueCell, dtype, - elem ? Object.keys(elem.sdfg.attributes._arrays): [] + key, undefined, val, elem, xform, target, valContents, + dtype, elem ? Object.keys(elem.sdfg.attributes._arrays): [] )]; break; case 'CodeBlock': valProp = [attrTablePutCode( key, undefined, val ? val.string_data : '', elem, xform, - target, valueCell, dtype + target, valContents, dtype )]; break; case 'LogicalGroup': valProp = [attrTablePutLogicalGroup( - key, undefined, val, elem, xform, target, valueCell, dtype + key, undefined, val, elem, xform, target, valContents, dtype )]; break; default: - if (key in sdfgMetaDict['__data_container_types__']) { + if (dtype in sdfgMetaDict['__data_container_types__']) { const containerTypeChoices = Object.keys( sdfgMetaDict['__data_container_types__'] ); + const dataContainer = $('
', { + class: 'data-container-editing-container', + }).appendTo(valContents); + const typeContainer = $('
').appendTo(dataContainer); const dataTypeProp = attrTablePutSelect( - key, 'type', val.type, elem, xform, target, valueCell, - dtype, containerTypeChoices + key, 'type', val.type, elem, xform, target, + typeContainer, dtype, containerTypeChoices ); + const editBtnContainer = $('
').appendTo(dataContainer); const dataAttrProp = attrTablePutData( key, 'attributes', val, elem, xform, target, - valueCell, dtype, meta + editBtnContainer, dtype, meta ); valProp = [dataTypeProp, dataAttrProp]; } else { if (choices !== undefined) valProp = [attrTablePutSelect( - key, undefined, val, elem, xform, target, valueCell, - dtype, choices + key, undefined, val, elem, xform, target, + valContents, dtype, choices )]; else - valueCell.html(sdfg_property_to_string( + valContents.html(sdfg_property_to_string( val, VSCodeRenderer.getInstance()?.view_settings() )); } break; } + return valProp; + }; + + if (key === 'constants_prop') { + const constContainer = $('
').appendTo(valContents); + for (const k in val) { + const v = val[k]; + constContainer.append($('
', { + text: k + ': ' + v[1].toString(), + })); + } + } else if (dtype === undefined) { + await setValContentsPlain(); + } else if (delayedEdit) { + await setValContentsPlain(); + + const delayedEditBtnContainer = $('
', { + class: 'value-edit-control', + }).appendTo(valueCell); + + const delayedEditBtn = $('', { + class: 'material-symbols-outlined property-edit-btn', + text: 'edit', + title: 'Click to edit', + }).appendTo(delayedEditBtnContainer); + + delayedEditBtn.on('click', async () => { + delayedEditBtn.hide(); + + valContents.html(''); + if (editableKey) { + keyCell.removeClass('attr-table-heading'); + keyCell.html(''); + const keyInput = $('', { + 'type': 'text', + 'class': 'property-key-input sdfv-property-text', + 'value': key, + }).appendTo(keyCell); + keyProp = new KeyProperty(elem, xform, target, key, keyInput); + } + valProp = await setValContentsRich(); + + if (valProp === undefined) { + // TODO: gracefully fail. + } else { + const delayedEditDiscardBtn = $('', { + class: 'material-symbols-outlined property-edit-btn', + text: 'close', + title: 'Discard change', + }).appendTo(delayedEditBtnContainer); + const delayedEditAcceptBtn = $('', { + class: 'material-symbols-outlined property-edit-btn', + text: 'check', + title: 'Confirm change', + }).appendTo(delayedEditBtnContainer); + delayedEditAcceptBtn.on('click', async () => { + if (keyProp) + keyPropUpdateHandler(keyProp); + + if (editableKey) { + keyCell.addClass('attr-table-heading'); + keyCell.html(''); + keyCell.text(key); + } + + valProp!.forEach(prop => { + valPropUpdateHandler(prop); + }); + valContents.html(''); + await setValContentsPlain(); + + delayedEditBtn.show(); + delayedEditAcceptBtn.remove(); + delayedEditDiscardBtn.remove(); + }); + + delayedEditDiscardBtn.on('click', async () => { + if (editableKey) { + keyCell.addClass('attr-table-heading'); + keyCell.html(''); + keyCell.text(key); + } + + valContents.html(''); + await setValContentsPlain(); + + delayedEditBtn.show(); + delayedEditAcceptBtn.remove(); + delayedEditDiscardBtn.remove(); + }); + } + }); + } else { + valProp = await setValContentsRich(); } - if (updateOnChange && valProp !== undefined) { + if (updateOnChange && !delayedEdit && valProp !== undefined) { valProp.forEach(prop => { if (prop instanceof ValueProperty) { if (prop instanceof TypeclassProperty) { @@ -1141,7 +1208,8 @@ export async function attributeTablePutEntry( }); } - if (updateOnChange && keyProp && keyProp.getInput() !== undefined) { + if (updateOnChange && !delayedEdit && keyProp && + keyProp.getInput() !== undefined) { for (const vProp of valProp ?? []) keyProp.connectedProperties.add(vProp); keyProp.getInput().on('change', () => { @@ -1175,8 +1243,125 @@ const ATTR_TABLE_HIDDEN_ATTRIBUTES = [ 'position', 'transformation_hist', 'symbols', + 'metatype', ]; +async function setTableFromAttributes( + attributes: any, metadata: any, identifier: string, + root: JQuery, editableKeys: boolean = false, + updateOnChange: boolean = false, delayedEdit: boolean = false, + addDeleteButton: boolean = false, elem?: any, xform?: any +): Promise { + const propertyEntries: PropertyEntry[] = []; + + let sortedAttributes: { [key: string]: any } = {}; + let handledKeys = new Set(); + for (const k in metadata){ + const val = metadata[k]; + if (ATTR_TABLE_HIDDEN_ATTRIBUTES.includes(k) || k.startsWith('_')) + continue; + if (!sortedAttributes[metadata[k]['category']]) + sortedAttributes[metadata[k]['category']] = {}; + sortedAttributes[metadata[k]['category']][k] = val; + handledKeys.add(k); + } + + for (const k in attributes) { + if (ATTR_TABLE_HIDDEN_ATTRIBUTES.includes(k) || k.startsWith('_')) + continue; + if (!handledKeys.has(k)) { + if (!sortedAttributes['Uncategorized']) + sortedAttributes['Uncategorized'] = {}; + sortedAttributes['Uncategorized'][k] = attributes[k]; + handledKeys.add(k); + } + } + + for (const category in sortedAttributes) { + if (category === '(Debug)') + continue; + if (!Object.keys(sortedAttributes[category]).length) + continue; + + const catRow = $('
', { + 'class': 'row attr-table-cat-row', + }).appendTo(root); + const catContainer = $('
', { + 'class': 'col-12 attr-table-cat-container', + }).appendTo(catRow); + + const catToggleBtn = $('