From 67e6455462e775cc1e46617f3862e0db4d23e2d2 Mon Sep 17 00:00:00 2001 From: Iuliia Kulagina <86924383+kullJul@users.noreply.github.com> Date: Fri, 20 Dec 2024 15:36:37 +0100 Subject: [PATCH] Visual update v3.0.0.0 (#61) * Update dependencies and related files * Add eslint, update readme, add github workflows * Split d3 packages * Migrate to formatting model * Fix tests * Fix subtitle descriptor * add Short and Long description to en-US resources * Refactoring * Update eslint * Fix eslint errors * Remove unused dependencies * Add bold, italic and underline settings * Remove phantom js * Add displayKey for font family * Rename style prop * Move show property from the base descriptor * Added settings parsing to containers * Add high contrast mode * Fix localization keys * Fix npm vulnerabilities * Update changelog * Remove getMin getMax from axisDescriptor * Remove setFormat and getFormat * Fix tests * Remove redundant hcm logic * Fix lint error --------- Co-authored-by: Alexey --- CHANGELOG.md | 7 + capabilities.json | 60 + eslint.config.mjs | 10 + package-lock.json | 2203 ++++++++++------- package.json | 16 +- specs/common.spec.ts | 20 +- src/converter/data/dataConverter.ts | 56 +- src/converter/data/dataFormatter.ts | 9 +- src/converter/data/dataRepresentationScale.ts | 8 +- src/multiKpi.ts | 29 +- .../descriptors/axisBaseDescriptor.ts | 18 +- src/settings/descriptors/baseDescriptor.ts | 11 - src/settings/descriptors/chartDescriptor.ts | 12 + .../container/baseContainerDescriptor.ts | 41 +- src/settings/descriptors/descriptor.ts | 2 + src/settings/descriptors/formatDescriptor.ts | 16 +- .../descriptors/kpi/kpiBaseDescriptor.ts | 13 + src/settings/descriptors/printDescriptor.ts | 12 +- .../sparkline/sparklineAxisDescriptor.ts | 2 +- .../sparkline/sparklineChartDescriptor.ts | 15 +- .../sparkline/sparklineDescriptor.ts | 2 +- .../descriptors/staleDataDescriptor.ts | 12 + .../descriptors/subtitleBaseDescriptor.ts | 20 +- .../descriptors/subtitleDescriptor.ts | 2 +- .../descriptors/textFormattingDescriptor.ts | 35 +- src/settings/descriptors/tooltipDescriptor.ts | 2 +- src/settings/descriptors/valuesDescriptor.ts | 2 +- .../descriptors/varianceDescriptor.ts | 2 +- src/settings/settings.ts | 43 +- src/visualComponent/baseComponent.ts | 36 +- src/visualComponent/baseContainerComponent.ts | 4 +- .../mainChart/axisComponent.ts | 18 +- .../mainChart/chartComponent.ts | 11 +- .../mainChart/chartLabelBaseComponent.ts | 35 +- .../mainChart/hoverLabelComponent.ts | 4 +- .../mainChart/mainChartComponent.ts | 2 +- src/visualComponent/rootComponent.ts | 52 +- .../sparkline/dotsComponent.ts | 17 +- .../sparkline/lineComponent.ts | 36 +- .../sparkline/sparklineComponent.ts | 33 +- .../sparkline/sparklineGroupComponent.ts | 2 +- src/visualComponent/sparkline/svgComponent.ts | 14 +- src/visualComponent/subtitleComponent.ts | 21 +- .../subtitleWarningComponent.ts | 24 +- .../verticalReferenceLineComponent.ts | 19 +- src/visualComponent/visualComponent.ts | 2 +- .../visualComponentBaseConstructorOptions.ts | 5 +- .../visualComponentConstructorOptions.ts | 6 +- stringResources/en-US/resources.resjson | 9 +- styles/styles.less | 12 + 50 files changed, 1712 insertions(+), 1330 deletions(-) create mode 100644 eslint.config.mjs diff --git a/CHANGELOG.md b/CHANGELOG.md index f6614dd..eb47095 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## 3.0.0.0 +* API 5.11.0 +* Migrate to formatting model +* Add high contrast mode +* Add localization +* Update packages + ## 2.3.1 * FIX (Regression): Hovering on sparklines did not cause changing of main grap for preview diff --git a/capabilities.json b/capabilities.json index 2567d59..6eec330 100644 --- a/capabilities.json +++ b/capabilities.json @@ -155,6 +155,21 @@ } } }, + "bold": { + "type": { + "bool": true + } + }, + "italic": { + "type": { + "bool": true + } + }, + "underline": { + "type": { + "bool": true + } + }, "format": { "type": { "text": true @@ -560,6 +575,21 @@ } } }, + "bold": { + "type": { + "bool": true + } + }, + "italic": { + "type": { + "bool": true + } + }, + "underline": { + "type": { + "bool": true + } + }, "position": { "type": { "numeric": true @@ -686,6 +716,21 @@ } } }, + "bold": { + "type": { + "bool": true + } + }, + "italic": { + "type": { + "bool": true + } + }, + "underline": { + "type": { + "bool": true + } + }, "format": { "type": { "text": true @@ -777,6 +822,21 @@ } } }, + "bold": { + "type": { + "bool": true + } + }, + "italic": { + "type": { + "bool": true + } + }, + "underline": { + "type": { + "bool": true + } + }, "warningText": { "type": { "text": true diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..feaf6dd --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,10 @@ +import powerbiVisualsConfigs from "eslint-plugin-powerbi-visuals"; +import tseslint from 'typescript-eslint'; + +export default [ + ...tseslint.configs.recommended, + powerbiVisualsConfigs.configs.recommended, + { + ignores: ["node_modules/**", "dist/**", ".vscode/**", ".tmp/**", "coverage/**", "specs/**", "test.webpack.config.js", "karma.conf.ts"], + }, +]; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 5aeea24..6f063de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,15 +17,14 @@ "d3-scale": "^4.0.2", "d3-selection": "^3.0.0", "d3-shape": "^3.2.0", - "powerbi-visuals-utils-chartutils": "6.0.4", "powerbi-visuals-utils-colorutils": "6.0.4", "powerbi-visuals-utils-dataviewutils": "6.1.0", "powerbi-visuals-utils-formattingutils": "6.1.1", - "powerbi-visuals-utils-interactivityutils": "6.0.4", "powerbi-visuals-utils-svgutils": "6.0.4", "powerbi-visuals-utils-tooltiputils": "^6.0.4", "powerbi-visuals-utils-typeutils": "6.0.3", - "regenerator-runtime": "^0.14.1" + "regenerator-runtime": "^0.14.1", + "typescript-eslint": "^8.9.0" }, "devDependencies": { "@types/d3-array": "^3.2.1", @@ -36,11 +35,10 @@ "@types/d3-shape": "^3.1.6", "@types/jasmine": "5.1.4", "@types/karma": "6.3.8", - "core-js": "3.38.0", "coverage-istanbul-loader": "^3.0.5", "css-loader": "7.1.2", - "eslint": "^8.57.0", - "eslint-plugin-powerbi-visuals": "^0.8.1", + "eslint": "^8.57.1", + "eslint-plugin-powerbi-visuals": "^1.0.0", "jasmine": "5.2.0", "karma": "6.4.4", "karma-chrome-launcher": "3.2.0", @@ -52,11 +50,11 @@ "less-loader": "^12.2.0", "playwright-chromium": "^1.46.0", "powerbi-visuals-api": "5.11.0", - "powerbi-visuals-tools": "5.5.1", + "powerbi-visuals-tools": "^5.6.0", "powerbi-visuals-utils-testutils": "6.1.1", "style-loader": "4.0.0", "ts-loader": "9.5.1", - "typescript": "4.9.5", + "typescript": "^5.6.3", "webpack": "^5.93.0" } }, @@ -521,32 +519,23 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", "deprecated": "Use @eslint/config-array instead", + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -554,17 +543,6 @@ "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -581,7 +559,8 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead" + "deprecated": "Use @eslint/object-schema instead", + "license": "BSD-3-Clause" }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -784,7 +763,8 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", @@ -845,6 +825,7 @@ "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, + "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -855,6 +836,7 @@ "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -864,6 +846,7 @@ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -873,6 +856,7 @@ "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", "dev": true, + "license": "MIT", "dependencies": { "@types/express-serve-static-core": "*", "@types/node": "*" @@ -882,13 +866,15 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/cors": { "version": "2.8.17", "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -950,37 +936,19 @@ "integrity": "sha512-Abz8bTzy8UWDeYs9pCa3D37i29EWDjNTjemdk0ei1ApYVNqulYlGUKip/jLOpogkPSsPz/GvZCYiC7MFlEk0iQ==", "dev": true }, - "node_modules/@types/eslint": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", - "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" }, "node_modules/@types/express": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -989,10 +957,24 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.19.5", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", - "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.0.tgz", + "integrity": "sha512-AbXMTZGt40T+KON9/Fdxx0B2WK5hsgxcfXJLr5bFpZ7b4JCex2WyQPTEKdXqfHiY5nKKBScZ7yCoO6Pvgxfvnw==", "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/express/node_modules/@types/express-serve-static-core": { + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -1004,13 +986,15 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/http-proxy": { "version": "1.17.15", "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -1040,7 +1024,8 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { "version": "14.14.16", @@ -1053,27 +1038,31 @@ "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/qs": { - "version": "6.9.15", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", - "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", - "dev": true + "version": "6.9.16", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.16.tgz", + "integrity": "sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==", + "dev": true, + "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "dev": true, + "license": "MIT" }, "node_modules/@types/semver": { "version": "7.5.8", @@ -1085,6 +1074,7 @@ "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, + "license": "MIT", "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -1095,6 +1085,7 @@ "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "dev": true, + "license": "MIT", "dependencies": { "@types/express": "*" } @@ -1104,6 +1095,7 @@ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-errors": "*", "@types/node": "*", @@ -1115,6 +1107,7 @@ "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -1124,6 +1117,7 @@ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -1508,13 +1502,14 @@ } }, "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, + "license": "MIT", "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { "node": ">= 0.6" @@ -1580,6 +1575,7 @@ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -1597,6 +1593,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -1612,7 +1609,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ajv-keywords": { "version": "3.5.2", @@ -1631,6 +1629,7 @@ "engines": [ "node >= 0.8.0" ], + "license": "Apache-2.0", "bin": { "ansi-html": "bin/ansi-html" } @@ -1679,7 +1678,8 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/array-union": { "version": "2.1.0", @@ -1690,22 +1690,30 @@ } }, "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" + "minimalistic-assert": "^1.0.0" } }, "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "dev": true, + "license": "MIT" + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" }, "node_modules/at-least-node": { "version": "1.0.0", @@ -1761,6 +1769,7 @@ "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", "dev": true, + "license": "MIT", "engines": { "node": "^4.5.0 || >= 5.9" } @@ -1769,7 +1778,8 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/big.js": { "version": "5.2.2", @@ -1791,30 +1801,35 @@ } }, "node_modules/bn.js": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", - "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", - "dev": true + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true, + "license": "MIT" }, "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dev": true, + "license": "MIT", "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", + "bytes": "3.1.2", + "content-type": "~1.0.5", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/body-parser/node_modules/debug": { @@ -1832,13 +1847,17 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "node_modules/body-parser/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, "engines": { - "node": ">=0.6" + "node": ">= 0.8" } }, "node_modules/bonjour-service": { @@ -1846,6 +1865,7 @@ "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" @@ -1925,34 +1945,39 @@ } }, "node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", "dev": true, + "license": "ISC", "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", + "elliptic": "^6.5.5", + "hash-base": "~3.0", "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" } }, - "node_modules/browserify-sign/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "node_modules/browserify-sign/node_modules/hash-base": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", + "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", "dev": true, + "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" }, "engines": { - "node": ">= 6" + "node": ">= 0.10" } }, "node_modules/browserify-zlib": { @@ -2014,11 +2039,28 @@ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -2155,6 +2197,13 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, "node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", @@ -2175,6 +2224,7 @@ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": ">= 1.43.0 < 2" }, @@ -2187,6 +2237,7 @@ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.5", "bytes": "3.0.0", @@ -2205,6 +2256,7 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -2214,6 +2266,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -2222,13 +2275,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/compression/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", @@ -2255,6 +2310,7 @@ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } @@ -2291,6 +2347,7 @@ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -2299,10 +2356,11 @@ } }, "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -2315,10 +2373,11 @@ "license": "MIT" }, "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -2327,7 +2386,8 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/copy-anything": { "version": "2.0.1", @@ -2338,17 +2398,6 @@ "is-what": "^3.7.1" } }, - "node_modules/core-js": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.0.tgz", - "integrity": "sha512-XPpwqEodRljce9KswjZShh95qJ1URisBeKCjUdq27YdenkslVe7OO0ZJhlYXAChW7OhXaRLl8AAba7IBfoIHug==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -2360,6 +2409,7 @@ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dev": true, + "license": "MIT", "dependencies": { "object-assign": "^4", "vary": "^1" @@ -2425,9 +2475,10 @@ } }, "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", "shebang-command": "^2.0.0", @@ -2561,14 +2612,6 @@ "node": ">=12" } }, - "node_modules/d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", - "engines": { - "node": ">=12" - } - }, "node_modules/d3-format": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", @@ -2660,24 +2703,6 @@ "node": ">=12" } }, - "node_modules/d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "dependencies": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "d3-selection": "2 - 3" - } - }, "node_modules/date-format": { "version": "4.0.14", "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", @@ -2714,16 +2739,34 @@ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", "dev": true, + "license": "MIT", "dependencies": { - "execa": "^5.0.0" + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" }, "engines": { - "node": ">= 10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/define-data-property": { @@ -2744,12 +2787,16 @@ } }, "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/define-properties": { @@ -2770,12 +2817,13 @@ } }, "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/des.js": { @@ -2793,6 +2841,7 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -2802,7 +2851,8 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/di": { "version": "0.0.1", @@ -2843,6 +2893,7 @@ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dev": true, + "license": "MIT", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" }, @@ -2910,18 +2961,19 @@ "dev": true }, "node_modules/elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "dev": true, + "license": "MIT", "dependencies": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", + "bn.js": "^4.11.9", + "brorand": "^1.1.0", "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" } }, "node_modules/elliptic/node_modules/bn.js": { @@ -2956,17 +3008,18 @@ } }, "node_modules/engine.io": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", - "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz", + "integrity": "sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==", "dev": true, + "license": "MIT", "dependencies": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", - "cookie": "~0.4.1", + "cookie": "~0.7.2", "cors": "~2.8.5", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", @@ -2981,6 +3034,7 @@ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" } @@ -2990,6 +3044,7 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -3092,15 +3147,17 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -3146,10 +3203,162 @@ } }, "node_modules/eslint-plugin-powerbi-visuals": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-powerbi-visuals/-/eslint-plugin-powerbi-visuals-0.8.1.tgz", - "integrity": "sha512-GAdD5kIO2+X+WsTGW9DvfQ5sd2UFw+0FaPGYPsq2Dpt0RuVdfpHG58PJF7YWzjQmtr2EUGGJUbCALq4v3hK+JQ==", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-powerbi-visuals/-/eslint-plugin-powerbi-visuals-1.0.0.tgz", + "integrity": "sha512-7FtQJ3HcNFJfipaIJMG6DwWvtUl8PM1H3mJaTCbA6XWYyrosMxFRZd6QpVP3zrzKlP6o01ACE1MN4Bi7EF6UYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/parser": "^8.8.0", + "globals": "^15.10.0" + } + }, + "node_modules/eslint-plugin-powerbi-visuals/node_modules/@typescript-eslint/parser": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.9.0.tgz", + "integrity": "sha512-U+BLn2rqTTHnc4FL3FJjxaXptTxmf9sNftJK62XLz4+GxG3hLHm/SUNaaXP5Y4uTiuYoL5YLy4JBCJe3+t8awQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "8.9.0", + "@typescript-eslint/types": "8.9.0", + "@typescript-eslint/typescript-estree": "8.9.0", + "@typescript-eslint/visitor-keys": "8.9.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-powerbi-visuals/node_modules/@typescript-eslint/scope-manager": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.9.0.tgz", + "integrity": "sha512-bZu9bUud9ym1cabmOYH9S6TnbWRzpklVmwqICeOulTCZ9ue2/pczWzQvt/cGj2r2o1RdKoZbuEMalJJSYw3pHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.9.0", + "@typescript-eslint/visitor-keys": "8.9.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-powerbi-visuals/node_modules/@typescript-eslint/types": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.9.0.tgz", + "integrity": "sha512-SjgkvdYyt1FAPhU9c6FiYCXrldwYYlIQLkuc+LfAhCna6ggp96ACncdtlbn8FmnG72tUkXclrDExOpEYf1nfJQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-powerbi-visuals/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.9.0.tgz", + "integrity": "sha512-9iJYTgKLDG6+iqegehc5+EqE6sqaee7kb8vWpmHZ86EqwDjmlqNNHeqDVqb9duh+BY6WCNHfIGvuVU3Tf9Db0g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "8.9.0", + "@typescript-eslint/visitor-keys": "8.9.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-powerbi-visuals/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.9.0.tgz", + "integrity": "sha512-Ht4y38ubk4L5/U8xKUBfKNYGmvKvA1CANoxiTRMM+tOLk3lbF3DvzZCxJCRSE+2GdCMSh6zq9VZJc3asc1XuAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.9.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-powerbi-visuals/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/eslint-plugin-powerbi-visuals/node_modules/globals": { + "version": "15.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.11.0.tgz", + "integrity": "sha512-yeyNSjdbyVaWurlwCpcA6XNBrHTMIeDdj0/hnvX/OLJ9ekOXYbLsLinH/MucQyGvNnXhidTdNhTtJaffL2sMfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-powerbi-visuals/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/eslint-scope": { "version": "7.2.2", @@ -3232,17 +3441,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/eslint/node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -3341,6 +3539,7 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3379,61 +3578,39 @@ "safe-buffer": "^5.1.1" } }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.2", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -3444,66 +3621,12 @@ "node": ">= 0.10.0" } }, - "node_modules/express/node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/express/node_modules/body-parser/node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/express/node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3513,27 +3636,30 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, - "node_modules/express/node_modules/depd": { + "node_modules/express/node_modules/encodeurl": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/express/node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -3544,63 +3670,19 @@ "node": ">= 0.8" } }, - "node_modules/express/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/express/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, - "engines": { - "node": ">= 0.6" - } + "license": "MIT" }, "node_modules/express/node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -3608,60 +3690,16 @@ "node": ">= 0.8" } }, - "node_modules/express/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/express/node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/express/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/express/node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -3724,10 +3762,11 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "node_modules/fast-uri": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", - "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", - "dev": true + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/fastq": { "version": "1.17.1", @@ -3742,6 +3781,7 @@ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, + "license": "Apache-2.0", "dependencies": { "websocket-driver": ">=0.5.1" }, @@ -3823,9 +3863,9 @@ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==" }, "node_modules/follow-redirects": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", - "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==", + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "dev": true, "funding": [ { @@ -3833,6 +3873,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -3884,6 +3925,7 @@ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3893,6 +3935,7 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3911,12 +3954,6 @@ "node": ">=14.14" } }, - "node_modules/fs-monkey": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", - "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", - "dev": true - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3982,18 +4019,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -4031,17 +4056,6 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -4117,7 +4131,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/has-flag": { "version": "4.0.0", @@ -4244,6 +4259,7 @@ "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "obuf": "^1.0.0", @@ -4265,7 +4281,8 @@ "type": "patreon", "url": "https://patreon.com/mdevils" } - ] + ], + "license": "MIT" }, "node_modules/html-escaper": { "version": "2.0.2", @@ -4277,35 +4294,42 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, + "license": "MIT", "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, "node_modules/http-parser-js": { "version": "0.5.8", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/http-proxy": { "version": "1.18.1", @@ -4322,10 +4346,11 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", + "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -4351,13 +4376,14 @@ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", "dev": true, + "license": "MIT", "engines": { - "node": ">=10.17.0" + "node": ">=10.18" } }, "node_modules/iconv-lite": { @@ -4365,6 +4391,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -4506,6 +4533,7 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } @@ -4551,15 +4579,16 @@ } }, "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "dev": true, + "license": "MIT", "bin": { "is-docker": "cli.js" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -4608,6 +4637,25 @@ "node": ">=0.10.0" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-nan": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", @@ -4624,6 +4672,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-network-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", + "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -4645,6 +4706,7 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -4652,18 +4714,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-typed-array": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", @@ -4685,6 +4735,22 @@ "integrity": "sha512-2ilQz5/f/o9V7WRWJQmpFYNmQFZ9iM+OXRonZKcYgTkCzjb949Vi4h282PD1UfmgHk666rcWonbRJ++KI41VGw==", "dev": true }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/isbinaryfile": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", @@ -5068,10 +5134,11 @@ } }, "node_modules/launch-editor": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.1.tgz", - "integrity": "sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA==", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.9.1.tgz", + "integrity": "sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==", "dev": true, + "license": "MIT", "dependencies": { "picocolors": "^1.0.0", "shell-quote": "^1.8.1" @@ -5157,10 +5224,11 @@ } }, "node_modules/less/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "optional": true, "bin": { "semver": "bin/semver" @@ -5307,22 +5375,128 @@ } }, "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.14.0.tgz", + "integrity": "sha512-JUeY0F/fQZgIod31Ja1eJgiSxLn7BfQlCnqhwXFBzFHEw63OdLK7VJUJ7bnzNsWgCyoUP5tEp1VRY8rDaYzqOA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "fs-monkey": "^1.0.4" + "@jsonjoy.com/json-pack": "^1.0.3", + "@jsonjoy.com/util": "^1.3.0", + "tree-dump": "^1.0.1", + "tslib": "^2.0.0" }, "engines": { "node": ">= 4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/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==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.1", + "@jsonjoy.com/util": "^1.1.2", + "hyperdyperid": "^1.2.0", + "thingies": "^1.20.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/util": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.5.0.tgz", + "integrity": "sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/thingies": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", + "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", + "dev": true, + "license": "Unlicense", + "engines": { + "node": ">=10.18" + }, + "peerDependencies": { + "tslib": "^2" + } + }, + "node_modules/memfs/node_modules/tree-dump": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz", + "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, + "node_modules/memfs/node_modules/tslib": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", + "dev": true, + "license": "0BSD" + }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/merge-source-map": { "version": "1.1.0", @@ -5353,14 +5527,16 @@ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -5401,40 +5577,34 @@ } }, "node_modules/mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, + "license": "MIT", "dependencies": { - "mime-db": "1.44.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/mini-css-extract-plugin": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz", - "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.1.tgz", + "integrity": "sha512-+Vyi+GCCOHnrJ2VPS+6aPoXN2k2jgUzDRhTFLjjTBn23qyXJXkjUWQgTL+mXpF5/A8ixLdCc6kWsoeOjKGejKQ==", "dev": true, + "license": "MIT", "dependencies": { "schema-utils": "^4.0.0", "tapable": "^2.2.1" @@ -5463,10 +5633,10 @@ "dev": true }, "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -5475,10 +5645,14 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/minipass": { "version": "7.1.2", @@ -5520,6 +5694,7 @@ "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dev": true, + "license": "MIT", "dependencies": { "dns-packet": "^5.2.2", "thunky": "^1.0.2" @@ -5582,10 +5757,11 @@ } }, "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -5601,6 +5777,7 @@ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { "node": ">= 6.13.0" } @@ -5620,23 +5797,12 @@ "node": ">=0.10.0" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5700,7 +5866,8 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/on-finished": { "version": "2.3.0", @@ -5719,6 +5886,7 @@ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -5731,50 +5899,25 @@ "wrappy": "1" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", "dev": true, + "license": "MIT", "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/open/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/opener": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", @@ -5807,16 +5950,21 @@ "dev": true }, "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz", + "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==", "dev": true, + "license": "MIT", "dependencies": { - "@types/retry": "0.12.0", + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", "retry": "^0.13.1" }, "engines": { - "node": ">=8" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/package-json-from-dist": { @@ -5843,16 +5991,35 @@ } }, "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", "dev": true, + "license": "ISC", "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-asn1/node_modules/hash-base": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", + "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" } }, "node_modules/parse-node-version": { @@ -5914,10 +6081,11 @@ } }, "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "dev": true, + "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", @@ -5928,10 +6096,11 @@ } }, "node_modules/pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, + "license": "MIT", "dependencies": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -6115,11 +6284,6 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, - "node_modules/powerbi-models": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/powerbi-models/-/powerbi-models-1.13.0.tgz", - "integrity": "sha512-fToQmRqECBJSlHaKNAzFql52ryNnhSm2UwRXfsctcS5Hp//o9sExasVsASv6jZjXE8ACNyKjDUKdGqWsCjRd1Q==" - }, "node_modules/powerbi-visuals-api": { "version": "5.11.0", "resolved": "https://registry.npmjs.org/powerbi-visuals-api/-/powerbi-visuals-api-5.11.0.tgz", @@ -6129,24 +6293,26 @@ } }, "node_modules/powerbi-visuals-tools": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/powerbi-visuals-tools/-/powerbi-visuals-tools-5.5.1.tgz", - "integrity": "sha512-330nPyn5KEssbVmYnoKHU0DiyUzxeZrw2tYIo1kaWUqkF7r6CUJuUTy/UNO8t6GGjgaYK6ieBE3ttRJO81nQ8Q==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/powerbi-visuals-tools/-/powerbi-visuals-tools-5.6.0.tgz", + "integrity": "sha512-WfR3VWz+Kre0vRi2+Sm08fGiBLUIDSp4zyFGH/q0CztA8XIWJt5BD+31A/gkkN4aifdBz8dcKXh1UxIYNajwSA==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/parser": "^7.12.0", + "@typescript-eslint/parser": "^8.8.0", "assert": "^2.1.0", - "async": "^3.2.5", + "async": "^3.2.6", "browserify-zlib": "^0.2.0", "buffer": "^6.0.3", "chalk": "^5.3.0", - "commander": "^11.1.0", - "compare-versions": "^6.1.0", + "commander": "^12.1.0", + "compare-versions": "^6.1.1", "console-browserify": "^1.2.0", "constants-browserify": "^1.0.0", "crypto-browserify": "^3.12.0", - "css-loader": "^6.11.0", + "css-loader": "^7.1.2", "domain-browser": "^5.7.0", + "eslint-plugin-powerbi-visuals": "^1.0.0", "events": "^3.3.0", "extra-watch-webpack-plugin": "^1.0.3", "fs-extra": "^11.2.0", @@ -6160,7 +6326,7 @@ "lodash.defaults": "4.2.0", "lodash.isequal": "4.5.0", "lodash.ismatch": "^4.4.0", - "mini-css-extract-plugin": "^2.9.0", + "mini-css-extract-plugin": "^2.9.1", "os-browserify": "^0.3.0", "path-browserify": "^1.0.1", "powerbi-visuals-webpack-plugin": "4.1.0", @@ -6175,13 +6341,13 @@ "timers-browserify": "^2.0.12", "ts-loader": "^9.5.1", "tty-browserify": "^0.0.1", - "typescript": "^4.9.5", - "url": "^0.11.3", + "typescript": "^5.5.0", + "url": "^0.11.4", "util": "^0.12.5", "vm-browserify": "^1.1.2", - "webpack": "^5.91.0", + "webpack": "^5.95.0", "webpack-bundle-analyzer": "4.10.2", - "webpack-dev-server": "^4.15.2" + "webpack-dev-server": "^5.1.0" }, "bin": { "pbiviz": "bin/pbiviz.js" @@ -6194,26 +6360,27 @@ } }, "node_modules/powerbi-visuals-tools/node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.9.0.tgz", + "integrity": "sha512-U+BLn2rqTTHnc4FL3FJjxaXptTxmf9sNftJK62XLz4+GxG3hLHm/SUNaaXP5Y4uTiuYoL5YLy4JBCJe3+t8awQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@typescript-eslint/scope-manager": "8.9.0", + "@typescript-eslint/types": "8.9.0", + "@typescript-eslint/typescript-estree": "8.9.0", + "@typescript-eslint/visitor-keys": "8.9.0", "debug": "^4.3.4" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -6222,16 +6389,17 @@ } }, "node_modules/powerbi-visuals-tools/node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.9.0.tgz", + "integrity": "sha512-bZu9bUud9ym1cabmOYH9S6TnbWRzpklVmwqICeOulTCZ9ue2/pczWzQvt/cGj2r2o1RdKoZbuEMalJJSYw3pHQ==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" + "@typescript-eslint/types": "8.9.0", + "@typescript-eslint/visitor-keys": "8.9.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -6239,12 +6407,13 @@ } }, "node_modules/powerbi-visuals-tools/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.9.0.tgz", + "integrity": "sha512-SjgkvdYyt1FAPhU9c6FiYCXrldwYYlIQLkuc+LfAhCna6ggp96ACncdtlbn8FmnG72tUkXclrDExOpEYf1nfJQ==", "dev": true, + "license": "MIT", "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -6252,22 +6421,23 @@ } }, "node_modules/powerbi-visuals-tools/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.9.0.tgz", + "integrity": "sha512-9iJYTgKLDG6+iqegehc5+EqE6sqaee7kb8vWpmHZ86EqwDjmlqNNHeqDVqb9duh+BY6WCNHfIGvuVU3Tf9Db0g==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@typescript-eslint/types": "8.9.0", + "@typescript-eslint/visitor-keys": "8.9.0", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -6280,16 +6450,17 @@ } }, "node_modules/powerbi-visuals-tools/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.9.0.tgz", + "integrity": "sha512-Ht4y38ubk4L5/U8xKUBfKNYGmvKvA1CANoxiTRMM+tOLk3lbF3DvzZCxJCRSE+2GdCMSh6zq9VZJc3asc1XuAA==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/types": "8.9.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -6309,17 +6480,12 @@ "util": "^0.12.5" } }, - "node_modules/powerbi-visuals-tools/node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "dev": true - }, "node_modules/powerbi-visuals-tools/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -6349,47 +6515,13 @@ } }, "node_modules/powerbi-visuals-tools/node_modules/commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", - "dev": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/powerbi-visuals-tools/node_modules/css-loader": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", - "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, + "license": "MIT", "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } + "node": ">=18" } }, "node_modules/powerbi-visuals-tools/node_modules/minimatch": { @@ -6397,6 +6529,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -6516,25 +6649,6 @@ "which-typed-array": "^1.1.2" } }, - "node_modules/powerbi-visuals-utils-chartutils": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-chartutils/-/powerbi-visuals-utils-chartutils-6.0.4.tgz", - "integrity": "sha512-N2WD47EtOIVUBr5LEjw9IPEbzlN4eLlry2uUhWSdv3THV2Sp7GHvFf9GkquO3ag8jl1uqRqsmMdeE+/96nX7mw==", - "dependencies": { - "d3-array": "^3.2.4", - "d3-axis": "^3.0.0", - "d3-scale": "^4.0.2", - "d3-selection": "^3.0.0", - "d3-transition": "^3.0.1", - "powerbi-visuals-utils-formattingutils": "^6.1.1", - "powerbi-visuals-utils-interactivityutils": "^6.0.4", - "powerbi-visuals-utils-svgutils": "^6.0.4", - "powerbi-visuals-utils-typeutils": "^6.0.3" - }, - "optionalDependencies": { - "fsevents": "2.3.3" - } - }, "node_modules/powerbi-visuals-utils-colorutils": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-colorutils/-/powerbi-visuals-utils-colorutils-6.0.4.tgz", @@ -6574,17 +6688,6 @@ "fsevents": "2.3.3" } }, - "node_modules/powerbi-visuals-utils-interactivityutils": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-interactivityutils/-/powerbi-visuals-utils-interactivityutils-6.0.4.tgz", - "integrity": "sha512-oqC3juH9gc+oYhWX7dijQWD7rf2Lgc4Hi/G0JNvPa/jbOdS55jgaUyPpknRlRl4RU+lcAa1SXk1146a6+a+5gw==", - "dependencies": { - "d3-selection": "^3.0.0", - "powerbi-models": "1.13.0", - "powerbi-visuals-utils-svgutils": "^6.0.4", - "powerbi-visuals-utils-typeutils": "^6.0.3" - } - }, "node_modules/powerbi-visuals-utils-svgutils": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-svgutils/-/powerbi-visuals-utils-svgutils-6.0.4.tgz", @@ -6748,6 +6851,7 @@ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, + "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -6761,6 +6865,7 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -6881,13 +6986,14 @@ } }, "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, + "license": "MIT", "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.2", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -6896,10 +7002,11 @@ } }, "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -6953,6 +7060,7 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6976,6 +7084,7 @@ "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -7020,6 +7129,19 @@ "inherits": "^2.0.1" } }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -7080,6 +7202,7 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -7099,6 +7222,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -7115,6 +7239,7 @@ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -7126,19 +7251,22 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/selfsigned": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/node-forge": "^1.3.0", "node-forge": "^1" @@ -7159,10 +7287,11 @@ } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -7187,6 +7316,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -7195,38 +7325,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/send/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } + "license": "MIT" }, "node_modules/send/node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -7238,13 +7345,15 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/send/node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -7252,30 +7361,16 @@ "node": ">= 0.8" } }, - "node_modules/send/node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, "node_modules/send/node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/send/node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", @@ -7290,6 +7385,7 @@ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.4", "batch": "0.6.1", @@ -7308,15 +7404,27 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/serve-index/node_modules/http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, + "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -7331,35 +7439,49 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/serve-index/node_modules/setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dev": true, + "license": "MIT", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" } }, + "node_modules/serve-static/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -7384,10 +7506,11 @@ "dev": true }, "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" }, "node_modules/sha.js": { "version": "2.4.11", @@ -7426,6 +7549,7 @@ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7448,12 +7572,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, "node_modules/sirv": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", @@ -7477,16 +7595,17 @@ } }, "node_modules/socket.io": { - "version": "4.7.5", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", - "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", + "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.5.2", + "engine.io": "~6.6.0", "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.4" }, @@ -7543,21 +7662,13 @@ "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, + "license": "MIT", "dependencies": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", "websocket-driver": "^0.7.4" } }, - "node_modules/sockjs/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -7591,6 +7702,7 @@ "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -7607,6 +7719,7 @@ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.0", "detect-node": "^2.0.4", @@ -7621,6 +7734,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -7753,15 +7867,6 @@ "node": ">=8" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -7898,7 +8003,8 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/timers-browserify": { "version": "2.0.12", @@ -7946,10 +8052,11 @@ } }, "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6" } @@ -8073,15 +8180,248 @@ } }, "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.9.0.tgz", + "integrity": "sha512-AuD/FXGYRQyqyOBCpNLldMlsCGvmDNxptQ3Dp58/NXeB+FqyvTfXmMyba3PYa0Vi9ybnj7G8S/yd/4Cw8y47eA==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.9.0", + "@typescript-eslint/parser": "8.9.0", + "@typescript-eslint/utils": "8.9.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.9.0.tgz", + "integrity": "sha512-Y1n621OCy4m7/vTXNlCbMVp87zSd7NH0L9cXD8aIpOaNlzeWxIK4+Q19A68gSmTNRZn92UjocVUWDthGxtqHFg==", + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.9.0", + "@typescript-eslint/type-utils": "8.9.0", + "@typescript-eslint/utils": "8.9.0", + "@typescript-eslint/visitor-keys": "8.9.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.9.0.tgz", + "integrity": "sha512-U+BLn2rqTTHnc4FL3FJjxaXptTxmf9sNftJK62XLz4+GxG3hLHm/SUNaaXP5Y4uTiuYoL5YLy4JBCJe3+t8awQ==", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "8.9.0", + "@typescript-eslint/types": "8.9.0", + "@typescript-eslint/typescript-estree": "8.9.0", + "@typescript-eslint/visitor-keys": "8.9.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/scope-manager": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.9.0.tgz", + "integrity": "sha512-bZu9bUud9ym1cabmOYH9S6TnbWRzpklVmwqICeOulTCZ9ue2/pczWzQvt/cGj2r2o1RdKoZbuEMalJJSYw3pHQ==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.9.0", + "@typescript-eslint/visitor-keys": "8.9.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/type-utils": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.9.0.tgz", + "integrity": "sha512-JD+/pCqlKqAk5961vxCluK+clkppHY07IbV3vett97KOV+8C6l+CPEPwpUuiMwgbOz/qrN3Ke4zzjqbT+ls+1Q==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.9.0", + "@typescript-eslint/utils": "8.9.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/types": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.9.0.tgz", + "integrity": "sha512-SjgkvdYyt1FAPhU9c6FiYCXrldwYYlIQLkuc+LfAhCna6ggp96ACncdtlbn8FmnG72tUkXclrDExOpEYf1nfJQ==", + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.9.0.tgz", + "integrity": "sha512-9iJYTgKLDG6+iqegehc5+EqE6sqaee7kb8vWpmHZ86EqwDjmlqNNHeqDVqb9duh+BY6WCNHfIGvuVU3Tf9Db0g==", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "8.9.0", + "@typescript-eslint/visitor-keys": "8.9.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.9.0.tgz", + "integrity": "sha512-PKgMmaSo/Yg/F7kIZvrgrWa1+Vwn036CdNUvYFEkYbPwOH4i8xvkaRlu148W3vtheWK9ckKRIz7PBP5oUlkrvQ==", + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.9.0", + "@typescript-eslint/types": "8.9.0", + "@typescript-eslint/typescript-estree": "8.9.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.9.0.tgz", + "integrity": "sha512-Ht4y38ubk4L5/U8xKUBfKNYGmvKvA1CANoxiTRMM+tOLk3lbF3DvzZCxJCRSE+2GdCMSh6zq9VZJc3asc1XuAA==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.9.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/ua-parser-js": { @@ -8203,6 +8543,16 @@ "node": ">= 0.4.0" } }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -8245,17 +8595,18 @@ "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, + "license": "MIT", "dependencies": { "minimalistic-assert": "^1.0.0" } }, "node_modules/webpack": { - "version": "5.93.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", - "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", + "version": "5.95.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.95.0.tgz", + "integrity": "sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==", "dev": true, + "license": "MIT", "dependencies": { - "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", "@webassemblyjs/wasm-edit": "^1.12.1", @@ -8264,7 +8615,7 @@ "acorn-import-attributes": "^1.9.5", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -8322,113 +8673,105 @@ "node": ">= 10.13.0" } }, - "node_modules/webpack-dev-server": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", - "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", - "dev": true, - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", + "node_modules/webpack-dev-middleware": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz", + "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==", + "dev": true, + "license": "MIT", + "dependencies": { "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.4", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" + "memfs": "^4.6.0", + "mime-types": "^2.1.31", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" + "webpack": "^5.0.0" }, "peerDependenciesMeta": { "webpack": { "optional": true - }, - "webpack-cli": { - "optional": true } } }, - "node_modules/webpack-dev-server/node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "node_modules/webpack-dev-server/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-server/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/webpack-dev-middleware/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, + "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "ee-first": "1.1.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, - "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "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==", "dev": true, + "license": "MIT", "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "express": "^4.19.2", + "graceful-fs": "^4.2.6", + "html-entities": "^2.4.0", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^7.4.2", + "ws": "^8.18.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } } }, "node_modules/webpack-dev-server/node_modules/ws": { @@ -8436,6 +8779,7 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -8515,6 +8859,7 @@ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", @@ -8529,6 +8874,7 @@ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=0.8.0" } @@ -8613,10 +8959,11 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/ws": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.1.tgz", - "integrity": "sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ==", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.3.0" }, diff --git a/package.json b/package.json index 4f2a937..d1f5bfb 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "pbiviz": "pbiviz", "start": "pbiviz start", "package": "pbiviz package", - "lint": "npx eslint . --ext .js,.jsx,.ts,.tsx", + "lint": "npx eslint .", "pretest": "pbiviz package --resources --no-minify --no-pbiviz", "test": "karma start", "debug": "karma start --browsers=Chrome --single-run=false", @@ -39,11 +39,10 @@ "@types/d3-shape": "^3.1.6", "@types/jasmine": "5.1.4", "@types/karma": "6.3.8", - "core-js": "3.38.0", "coverage-istanbul-loader": "^3.0.5", "css-loader": "7.1.2", - "eslint": "^8.57.0", - "eslint-plugin-powerbi-visuals": "^0.8.1", + "eslint": "^8.57.1", + "eslint-plugin-powerbi-visuals": "^1.0.0", "jasmine": "5.2.0", "karma": "6.4.4", "karma-chrome-launcher": "3.2.0", @@ -55,11 +54,11 @@ "less-loader": "^12.2.0", "playwright-chromium": "^1.46.0", "powerbi-visuals-api": "5.11.0", - "powerbi-visuals-tools": "5.5.1", + "powerbi-visuals-tools": "^5.6.0", "powerbi-visuals-utils-testutils": "6.1.1", "style-loader": "4.0.0", "ts-loader": "9.5.1", - "typescript": "4.9.5", + "typescript": "^5.6.3", "webpack": "^5.93.0" }, "dependencies": { @@ -71,14 +70,13 @@ "d3-scale": "^4.0.2", "d3-selection": "^3.0.0", "d3-shape": "^3.2.0", - "powerbi-visuals-utils-chartutils": "6.0.4", "powerbi-visuals-utils-colorutils": "6.0.4", "powerbi-visuals-utils-dataviewutils": "6.1.0", "powerbi-visuals-utils-formattingutils": "6.1.1", - "powerbi-visuals-utils-interactivityutils": "6.0.4", "powerbi-visuals-utils-svgutils": "6.0.4", "powerbi-visuals-utils-tooltiputils": "^6.0.4", "powerbi-visuals-utils-typeutils": "6.0.3", - "regenerator-runtime": "^0.14.1" + "regenerator-runtime": "^0.14.1", + "typescript-eslint": "^8.9.0" } } diff --git a/specs/common.spec.ts b/specs/common.spec.ts index e07aea4..34874fb 100644 --- a/specs/common.spec.ts +++ b/specs/common.spec.ts @@ -147,13 +147,13 @@ describe("Multi KPI", () => { expect(actualValue).toBe(expectedValue); }); - it("should return 1.23K% for 12.34312 if precision is auto and display units are thousand and default format in percents", () => { + it("should return 1.23K% for 12.34312 if precision is auto and display units are thousand and format in percents", () => { const value: number = 12.34312; const expectedValue: string = "+1.23K%"; const numericDescriptor: NumericDescriptor = new NumericDescriptor(); numericDescriptor.autoPrecision = true; numericDescriptor.displayUnits.value = 1000; - numericDescriptor.defaultFormat = "+0.00%;-0.00%;0.00%"; + numericDescriptor.format.value = "+0.00%;-0.00%;0.00%"; numericDescriptor.precision.value = 5; const actualValue: string = getFormattedValueWithFallback( @@ -180,12 +180,12 @@ describe("Multi KPI", () => { expect(actualValue).toBe(expectedValue); }); - it("should return 87.7% for 0.87712 if precision is auto and display units are auto and default format in percents", () => { + it("should return 87.7% for 0.87712 if precision is auto and display units are auto and format in percents", () => { const value: number = 0.87712; const expectedValue: string = "+87.7%"; const numericDescriptor: NumericDescriptor = new NumericDescriptor(); numericDescriptor.autoPrecision = true; - numericDescriptor.defaultFormat = "+0.00%;-0.00%;0.00%"; + numericDescriptor.format.value = "+0.00%;-0.00%;0.00%"; numericDescriptor.precision.value = 5; const actualValue: string = getFormattedValueWithFallback( @@ -196,12 +196,12 @@ describe("Multi KPI", () => { expect(actualValue).toBe(expectedValue); }); - it("should return 7.43% for 0.0742712 if precision is auto and display units are auto and column format in percents", () => { + it("should return 7.43% for 0.0742712 if precision is auto and display units are auto and format in percents", () => { const value: number = 0.0742712; const expectedValue: string = "+7.43%"; const numericDescriptor: NumericDescriptor = new NumericDescriptor(); numericDescriptor.autoPrecision = true; - numericDescriptor.columnFormat = "+0.00%;-0.00%;0.00%"; + numericDescriptor.format.value = "+0.00%;-0.00%;0.00%"; numericDescriptor.precision.value = 5; const actualValue: string = getFormattedValueWithFallback( @@ -212,12 +212,12 @@ describe("Multi KPI", () => { expect(actualValue).toBe(expectedValue); }); - it("should return -0.02% for -0.00293312 if precision is auto and display units are auto and column format in percents", () => { + it("should return -0.02% for -0.00293312 if precision is auto and display units are auto and format in percents", () => { const value: number = -0.000243312; const expectedValue: string = "-0.02%"; const numericDescriptor: NumericDescriptor = new NumericDescriptor(); numericDescriptor.autoPrecision = true; - numericDescriptor.columnFormat = "+0.00%;-0.00%;0.00%"; + numericDescriptor.format.value = "+0.00%;-0.00%;0.00%"; numericDescriptor.precision.value = 5; const actualValue: string = getFormattedValueWithFallback( @@ -1018,7 +1018,9 @@ describe("Multi KPI", () => { describe("DataFormatter", () => { describe("getFormattedVariance", () => { it("should return N/A if a variance is not valid", () => { - expect(getFormattedValueWithFallback(NaN, null)).toBe("N/A"); + const numericDescriptor: NumericDescriptor = new NumericDescriptor(); + numericDescriptor.noValueLabel.value = null; + expect(getFormattedValueWithFallback(NaN, numericDescriptor)).toBe("N/A"); }); it("should return 12.34K if precision is 2 and display units are 1000", () => { diff --git a/src/converter/data/dataConverter.ts b/src/converter/data/dataConverter.ts index e93b9cf..955fb54 100644 --- a/src/converter/data/dataConverter.ts +++ b/src/converter/data/dataConverter.ts @@ -27,7 +27,7 @@ import powerbi from "powerbi-visuals-api"; import DataView = powerbi.DataView; import IViewport = powerbi.IViewport; -import DataViewObjects = powerbi.DataViewObjects; +import PrimitiveValue = powerbi.PrimitiveValue; import DataViewValueColumn = powerbi.DataViewValueColumn; import DataViewValueColumns = powerbi.DataViewValueColumns; import DataViewCategoryColumn= powerbi.DataViewCategoryColumn; @@ -73,7 +73,7 @@ import { export interface IColumnGroup { name: string; - values: any[]; + values: PrimitiveValue[]; columns: (DataViewValueColumn | DataViewCategoryColumn)[]; } @@ -164,15 +164,7 @@ export class DataConverter implements IConverterwarningColumnGroup.values[0]; } const changeStartDateColumnGroup: IColumnGroup = columnGroupByRole[changeStartDateColumn.name]; if (changeStartDateColumnGroup) { - const date: Date = changeStartDateColumnGroup - && changeStartDateColumnGroup.values - && changeStartDateColumnGroup.values[0]; + const date: Date = changeStartDateColumnGroup?.values?.[0]; dataRepresentation.percentCalcDate = date instanceof Date ? date : dataRepresentation.percentCalcDate; } @@ -422,7 +412,7 @@ export class DataConverter implements IConverter { - if (series.current && series.current.x) { + if (series?.current?.x) { series.staleDateDifference = this.getDaysBetween(series.current.x, new Date()); if (series.staleDateDifference > dataRepresentation.staleDateDifference) { dataRepresentation.staleDateDifference = series.staleDateDifference; @@ -446,8 +436,8 @@ export class DataConverter implements IConverter(axisDescriptor.min.value)) && axisDescriptor.min.value !== null) - || (!isNaN((axisDescriptor.defaultMin)) && axisDescriptor.defaultMin !== null)) { - axis.min = axisDescriptor.getMin(); + if (!isNaN((axisDescriptor.min.value)) && axisDescriptor.min.value !== null) { + axis.min = axisDescriptor.min.value; } else if (!isNaN((axis.min)) && axis.min !== null) { - axisDescriptor.defaultMin = axis.min; + axisDescriptor.min.value = axis.min; } - if ((!isNaN((axisDescriptor.max.value)) && axisDescriptor.max.value !== null) - || (!isNaN((axisDescriptor.defaultMax)) && axisDescriptor.defaultMax !== null)) { - axis.max = axisDescriptor.getMax(); + if (!isNaN((axisDescriptor.max.value)) && axisDescriptor.max.value !== null) { + axis.max = axisDescriptor.max.value; } else if (!isNaN((axis.max)) && axis.max !== null) { - axisDescriptor.defaultMax = ((axis.max)) + ((axis.max)) * this.increasedDomainValueInPercentage; - axis.max = axisDescriptor.defaultMax; + axisDescriptor.max.value = ((axis.max)) + ((axis.max)) * this.increasedDomainValueInPercentage; + axis.max = axisDescriptor.max.value; } if (axis.min > axis.max) { @@ -577,9 +565,9 @@ export class DataConverter implements IConvertervalue) && value != null) { + return value; } if (treatEmptyValuesAsZero) { diff --git a/src/converter/data/dataFormatter.ts b/src/converter/data/dataFormatter.ts index f344e2a..4d12585 100644 --- a/src/converter/data/dataFormatter.ts +++ b/src/converter/data/dataFormatter.ts @@ -32,10 +32,7 @@ const wholeUnits: displayUnitSystemType.DisplayUnitSystemType = displayUnitSyste export function getFormattedValueWithFallback(variance: number, settings: NumericDescriptor): string { if (!isValueValid(variance)) { - if (settings && settings.noValueLabel.value) { - return settings.noValueLabel.value; - } - return "N/A"; + return settings.noValueLabel.value || "N/A"; } return getFormattedValue(variance, settings); @@ -54,7 +51,7 @@ export function getFormattedValue(value: number, settings: NumericDescriptor): s export function getValueFormatter(value: number, settings: NumericDescriptor): valueFormatter.IValueFormatter { return valueFormatter.create({ displayUnitSystemType: wholeUnits, - format: settings.getFormat(), + format: settings.format.value, precision: detectPrecision(value, settings), value: settings.displayUnits.value || value, }); @@ -62,7 +59,7 @@ export function getValueFormatter(value: number, settings: NumericDescriptor): v export function detectPrecision(inputValue: number, settings: NumericDescriptor): number { if (settings.autoPrecision) { - const format = settings.format.value || settings.defaultFormat || settings.columnFormat; + const format = settings.format.value; return valueFormatter.calculateExactDigitsPrecision(inputValue, format, +settings.displayUnits.value, 3); } diff --git a/src/converter/data/dataRepresentationScale.ts b/src/converter/data/dataRepresentationScale.ts index c0288be..6a3b193 100644 --- a/src/converter/data/dataRepresentationScale.ts +++ b/src/converter/data/dataRepresentationScale.ts @@ -61,7 +61,7 @@ export class DataRepresentationScale { ): DataRepresentationScale { let scale: DataRepresentationAxisScale; - if (values && values.length) { + if (values?.length) { switch (type) { case DataRepresentationTypeEnum.DateType: { scale = scaleTime(); @@ -75,7 +75,7 @@ export class DataRepresentationScale { } if (scale) { - (scale).domain(values); // "as any" is some kind of hack for TS to build it well + scale.domain(values); } this.baseScale = scale; @@ -97,11 +97,11 @@ export class DataRepresentationScale { return 0; } - return ((this.baseScale))(value); // "as any" is some kind of hack for TS to build it well + return this.baseScale(value); } public copy(): DataRepresentationScale { - return new DataRepresentationScale(this.baseScale && this.baseScale.copy()); + return new DataRepresentationScale(this.baseScale?.copy()); } public range(rangeValues): DataRepresentationScale { diff --git a/src/multiKpi.ts b/src/multiKpi.ts index f7a86e9..84fd72e 100644 --- a/src/multiKpi.ts +++ b/src/multiKpi.ts @@ -69,7 +69,7 @@ export class MultiKpi implements powerbi.extensibility.visual.IVisual { private settings: Settings; private formattingSettingsService: FormattingSettingsService; private viewport: powerbi.IViewport; - private eventDispatcher: Dispatch = dispatch(...Object.keys(EventName)); + private eventDispatcher: Dispatch = dispatch(...Object.keys(EventName)); private tooltipServiceWrapper: ITooltipServiceWrapper; private host: powerbi.extensibility.visual.IVisualHost; private selectionManager: ISelectionManager; @@ -77,10 +77,6 @@ export class MultiKpi implements powerbi.extensibility.visual.IVisual { public rootComponent: IVisualComponent; constructor(options: powerbi.extensibility.visual.VisualConstructorOptions) { - if (window.location !== window.parent.location) { - require("core-js/stable"); - } - const { element, host, @@ -88,7 +84,7 @@ export class MultiKpi implements powerbi.extensibility.visual.IVisual { this.host = host; - this.localizationManager = options.host.createLocalizationManager() + this.localizationManager = options.host.createLocalizationManager(); this.formattingSettingsService = new FormattingSettingsService(this.localizationManager); this.tooltipServiceWrapper = new TooltipServiceWrapper( @@ -121,16 +117,15 @@ export class MultiKpi implements powerbi.extensibility.visual.IVisual { element: d3Select(element), eventDispatcher: this.eventDispatcher, scaleService: new ScaleService(element), - style: host.colorPalette, + colorPalette: host.colorPalette, tooltipServiceWrapper: this.tooltipServiceWrapper, }); this.selectionManager = this.host.createSelectionManager(); const visualSelection = d3Select(element); - visualSelection.on("contextmenu", (event) => { - const dataPoint: any = d3Select(event.target).datum(); - this.selectionManager.showContextMenu(dataPoint ? dataPoint.selectionId : {}, { + visualSelection.on("contextmenu", (event: PointerEvent, dataPoint) => { + this.selectionManager.showContextMenu(dataPoint ? dataPoint : {}, { x: event.clientX, y: event.clientY }); @@ -146,14 +141,11 @@ export class MultiKpi implements powerbi.extensibility.visual.IVisual { try { this.host.eventService.renderingStarted(options); - const dataView: powerbi.DataView = options - && options.dataViews - && options.dataViews[0]; + const dataView: powerbi.DataView = options?.dataViews?.[0]; - this.viewport = this.getViewport(options && options.viewport); + this.viewport = this.getViewport(options?.viewport); - this.settings = this.formattingSettingsService.populateFormattingSettingsModel(Settings, options.dataViews[0]); - this.settings.parse(); + this.settings = this.formattingSettingsService.populateFormattingSettingsModel(Settings, dataView); this.dataRepresentation = this.dataConverter.convert({ dataView, @@ -161,6 +153,8 @@ export class MultiKpi implements powerbi.extensibility.visual.IVisual { viewport: this.viewport, }); + this.settings.parse(this.host.colorPalette, this.localizationManager); + this.render( this.dataRepresentation, this.settings, @@ -173,9 +167,6 @@ export class MultiKpi implements powerbi.extensibility.visual.IVisual { } public getFormattingModel(): powerbi.visuals.FormattingModel { - this.settings.updateFormatPropertyValue(); - this.settings.setLocalizedOptions(this.localizationManager); - return this.formattingSettingsService.buildFormattingModel(this.settings); } diff --git a/src/settings/descriptors/axisBaseDescriptor.ts b/src/settings/descriptors/axisBaseDescriptor.ts index 67ca240..2211427 100644 --- a/src/settings/descriptors/axisBaseDescriptor.ts +++ b/src/settings/descriptors/axisBaseDescriptor.ts @@ -31,14 +31,12 @@ import {BaseContainerDescriptor} from "../descriptors/container/baseContainerDes import { TextFormattingDescriptor } from "./textFormattingDescriptor"; export class AxisBaseContainerItem extends TextFormattingDescriptor { - public displayName: string = "All"; + public displayNameKey: string = "Visual_All"; + public defaultDomainColor: string = "#4F4F4F" public axisLabelX: number = 3; public axisLabelY: number = 6; - public defaultMin: number = null; - public defaultMax: number = null; - public min = new NumUpDown({ name: "min", displayNameKey: "Visual_Min", @@ -57,18 +55,6 @@ export class AxisBaseContainerItem extends TextFormattingDescriptor { this.min, this.max ]; - public getMin(): number { - return this.min.value == null - ? this.defaultMin - : this.min.value; - } - - public getMax(): number { - return this.max.value == null - ? this.defaultMax - : this.max.value; - } - constructor(defaultAxisContainerItem?: AxisBaseContainerItem){ super(defaultAxisContainerItem); diff --git a/src/settings/descriptors/baseDescriptor.ts b/src/settings/descriptors/baseDescriptor.ts index 0df960c..2ba65bd 100644 --- a/src/settings/descriptors/baseDescriptor.ts +++ b/src/settings/descriptors/baseDescriptor.ts @@ -28,27 +28,16 @@ import FormattingSettingsCard = formattingSettings.SimpleCard; import ToggleSwitch = formattingSettings.ToggleSwitch; export class BaseDescriptor extends FormattingSettingsCard { - public show: ToggleSwitch = new ToggleSwitch({ - name: "show", - displayNameKey: "Visual_Show", - value: true - }); - public isShown: ToggleSwitch = new ToggleSwitch({ name: "isShown", displayNameKey: "Visual_Show", value: true }); - public get shouldBeShown(): boolean { - return this.show.value && this.isShown.value; - } - constructor(defaultBaseDescriptor?: BaseDescriptor){ super(); if (defaultBaseDescriptor){ - this.show.value = defaultBaseDescriptor.show.value; this.isShown.value = defaultBaseDescriptor.isShown.value; } } diff --git a/src/settings/descriptors/chartDescriptor.ts b/src/settings/descriptors/chartDescriptor.ts index 53d5296..ee1f3f0 100644 --- a/src/settings/descriptors/chartDescriptor.ts +++ b/src/settings/descriptors/chartDescriptor.ts @@ -25,6 +25,7 @@ */ import powerbi from "powerbi-visuals-api"; import ILocalizationManager = powerbi.extensibility.ILocalizationManager; +import ISandboxExtendedColorPalette = powerbi.extensibility.ISandboxExtendedColorPalette; import { formattingSettings } from "powerbi-visuals-utils-formattingmodel"; import FormattingSettingsSlice = formattingSettings.Slice; @@ -85,6 +86,17 @@ export class ChartDescriptor extends BaseDescriptor implements IDescriptor { ); } + public processHighContrastMode(colorPalette: ISandboxExtendedColorPalette): void { + const isHighContrast: boolean = colorPalette.isHighContrast; + + this.slices.forEach((slice) => { + if (slice instanceof ColorPicker){ + slice.visible = isHighContrast ? false : slice.visible; + slice.value = isHighContrast ? colorPalette.foreground : slice.value; + } + }) + } + public setLocalizedDisplayName(localizationManager: ILocalizationManager): void { dataRepresentationOptions.forEach(option => { option.displayName = localizationManager.getDisplayName(option.key) diff --git a/src/settings/descriptors/container/baseContainerDescriptor.ts b/src/settings/descriptors/container/baseContainerDescriptor.ts index ceea26c..832e20b 100644 --- a/src/settings/descriptors/container/baseContainerDescriptor.ts +++ b/src/settings/descriptors/container/baseContainerDescriptor.ts @@ -2,6 +2,8 @@ import powerbi from "powerbi-visuals-api"; import ISelectionId = powerbi.visuals.ISelectionId; import DataViewMetadataColumn = powerbi.DataViewMetadataColumn; import Selector = powerbi.data.Selector; +import FormattingComponent = powerbi.visuals.FormattingComponent; +import ISandboxExtendedColorPalette = powerbi.extensibility.ISandboxExtendedColorPalette; import { formattingSettings } from "powerbi-visuals-utils-formattingmodel"; import FormattingSettingsCard = formattingSettings.SimpleCard; @@ -10,13 +12,13 @@ import FormattingSettingsSlice = formattingSettings.Slice; import FontControl = formattingSettings.FontControl; import { ColorHelper } from "powerbi-visuals-utils-colorutils"; - import { FormatDescriptor } from "../formatDescriptor"; import { BaseDescriptor } from "../baseDescriptor"; +import { IDescriptor } from "../descriptor"; export type BaseContainerItemType = FormatDescriptor | BaseDescriptor; -export abstract class BaseContainerDescriptor extends FormattingSettingsCard { +export abstract class BaseContainerDescriptor extends FormattingSettingsCard implements IDescriptor{ protected abstract getNewContainerItem(defaultContainerItem?: BaseContainerItem): BaseContainerItem; public defaultContainerItem: BaseContainerItem = this.getNewContainerItem(); @@ -31,16 +33,17 @@ export abstract class BaseContainerDescriptor { slice.setPropertiesValues(objects, this.name); this.setSliceSelector(slice, selector); - }) + }); return newContainerItem; } @@ -54,11 +57,31 @@ export abstract class BaseContainerDescriptor { + const settings = item as IDescriptor; + if (settings.parse) { + settings.parse(); + } + }); + } + + public processHighContrastMode(colorPalette: ISandboxExtendedColorPalette): void { + this.container.containerItems.forEach((item) => { + const settings = item as IDescriptor; + if (settings.processHighContrastMode) { + settings.processHighContrastMode(colorPalette); + } + }); + } + private setSliceSelector(slice: FormattingSettingsSlice, selector: Selector) { if (slice instanceof formattingSettings.CompositeSlice){ - const fontControlSlice: FontControl = slice as FontControl; - fontControlSlice.fontFamily.selector = selector; - fontControlSlice.fontSize.selector = selector; + if (slice.type === FormattingComponent.FontControl){ + const fontControlSlice: FontControl = slice as FontControl; + fontControlSlice.fontFamily.selector = selector; + fontControlSlice.fontSize.selector = selector; + } } else { slice.selector = selector; diff --git a/src/settings/descriptors/descriptor.ts b/src/settings/descriptors/descriptor.ts index 66e43ad..a132549 100644 --- a/src/settings/descriptors/descriptor.ts +++ b/src/settings/descriptors/descriptor.ts @@ -25,9 +25,11 @@ */ import powerbi from "powerbi-visuals-api"; import ILocalizationManager = powerbi.extensibility.ILocalizationManager; +import ISandboxExtendedColorPalette = powerbi.extensibility.ISandboxExtendedColorPalette; export interface IDescriptor { parse?(): void; setDefault?(): void; setLocalizedDisplayName?(localizationManager: ILocalizationManager): void; + processHighContrastMode?(colorPalette: ISandboxExtendedColorPalette): void; } diff --git a/src/settings/descriptors/formatDescriptor.ts b/src/settings/descriptors/formatDescriptor.ts index 86660c1..c88f3bb 100644 --- a/src/settings/descriptors/formatDescriptor.ts +++ b/src/settings/descriptors/formatDescriptor.ts @@ -29,29 +29,15 @@ import TextInput = formattingSettings.TextInput; import { BaseDescriptor } from "./baseDescriptor"; export class FormatDescriptor extends BaseDescriptor { - public defaultFormat: string = null; public defaultPlaceholderFormat: string = "Auto"; - public columnFormat: string = null; public format: TextInput = new TextInput({ name: "format", displayNameKey: "Visual_Format", - value: this.defaultFormat, + value: null, placeholder: this.defaultPlaceholderFormat }); - public getFormat(): string { - return this.format.value || this.columnFormat || this.defaultFormat; - } - - public setColumnFormat(format: string) { - if (!format) { - return; - } - - this.columnFormat = format; - } - constructor(defaultFormatDescriptor?: FormatDescriptor){ super(defaultFormatDescriptor); diff --git a/src/settings/descriptors/kpi/kpiBaseDescriptor.ts b/src/settings/descriptors/kpi/kpiBaseDescriptor.ts index a68b6f1..7dfc5f3 100644 --- a/src/settings/descriptors/kpi/kpiBaseDescriptor.ts +++ b/src/settings/descriptors/kpi/kpiBaseDescriptor.ts @@ -33,6 +33,7 @@ import NumUpDown = formattingSettings.NumUpDown; import { TextFormattingDescriptor } from "../textFormattingDescriptor"; import ValidatorType = powerbi.visuals.ValidatorType; +import ISandboxExtendedColorPalette = powerbi.extensibility.ISandboxExtendedColorPalette; export class KpiBaseDescriptor extends TextFormattingDescriptor { public defaultIsShown: boolean = true; @@ -213,6 +214,18 @@ export class KpiBaseDescriptor extends TextFormattingDescriptor { this.setValidFontSize(); } + public processHighContrastMode(colorPalette: ISandboxExtendedColorPalette): void { + super.processHighContrastMode(colorPalette); + + const isHighContrast: boolean = colorPalette.isHighContrast; + this.slices.forEach((slice) => { + if (slice instanceof ColorPicker){ + slice.visible = isHighContrast ? false : slice.visible; + slice.value = isHighContrast ? colorPalette.foreground : slice.value + } + }); + } + private setValidFontSize(): void { this.seriesNameFontSize.value = this.getValidFontSize(this.seriesNameFontSize.value); this.valueFontSize.value = this.getValidFontSize(this.valueFontSize.value); diff --git a/src/settings/descriptors/printDescriptor.ts b/src/settings/descriptors/printDescriptor.ts index 852666a..6f7da4b 100644 --- a/src/settings/descriptors/printDescriptor.ts +++ b/src/settings/descriptors/printDescriptor.ts @@ -24,17 +24,21 @@ * THE SOFTWARE. */ import { formattingSettings } from "powerbi-visuals-utils-formattingmodel"; +import FormattingSettingsCard = formattingSettings.SimpleCard; import ToggleSwitch = formattingSettings.ToggleSwitch; import FormattingSettingsSlice = formattingSettings.Slice; -import { BaseDescriptor } from "./baseDescriptor"; - -export class PrintDescriptor extends BaseDescriptor { +export class PrintDescriptor extends FormattingSettingsCard { public name: string = "printMode"; public displayNameKey: string = "Visual_PrintMode"; public descriptionKey: string = "Visual_PrintModeDescription"; + + public show: ToggleSwitch = new ToggleSwitch({ + name: "show", + displayNameKey: "Visual_Show", + value: true + }); public topLevelSlice?: ToggleSwitch = this.show; - public slices: FormattingSettingsSlice[] = [] constructor(){ diff --git a/src/settings/descriptors/sparkline/sparklineAxisDescriptor.ts b/src/settings/descriptors/sparkline/sparklineAxisDescriptor.ts index 632f3de..e6abe1c 100644 --- a/src/settings/descriptors/sparkline/sparklineAxisDescriptor.ts +++ b/src/settings/descriptors/sparkline/sparklineAxisDescriptor.ts @@ -48,7 +48,7 @@ export class SparklineAxisContainerItem extends AxisBaseContainerItem { export class SparklineAxisDescriptor extends AxisBaseDescriptor { public name: string = "sparklineYAxis"; - public displayNameKey: string = "VIsual_SparklineYAxis"; + public displayNameKey: string = "Visual_SparklineYAxis"; public getNewContainerItem(defaultContainerItem: SparklineAxisContainerItem): SparklineAxisContainerItem { return new SparklineAxisContainerItem(defaultContainerItem); diff --git a/src/settings/descriptors/sparkline/sparklineChartDescriptor.ts b/src/settings/descriptors/sparkline/sparklineChartDescriptor.ts index 7a2b277..995c544 100644 --- a/src/settings/descriptors/sparkline/sparklineChartDescriptor.ts +++ b/src/settings/descriptors/sparkline/sparklineChartDescriptor.ts @@ -31,8 +31,10 @@ import ColorPicker = formattingSettings.ColorPicker; import { BaseDescriptor } from "../baseDescriptor"; import { BaseContainerDescriptor } from "../container/baseContainerDescriptor"; +import ISandboxExtendedColorPalette = powerbi.extensibility.ISandboxExtendedColorPalette; + export class SparklineChartContainerItem extends BaseDescriptor { - public displayName: string = "All"; + public displayNameKey: string = "Visual_All"; public defaultColorValue: string = "#217cc9"; public defaultAlternativeColorValue: string = "#c7def1"; @@ -77,6 +79,17 @@ export class SparklineChartContainerItem extends BaseDescriptor { ); } + public processHighContrastMode(colorPalette: ISandboxExtendedColorPalette): void { + const isHighContrast: boolean = colorPalette.isHighContrast; + + this.slices.forEach((slice) => { + if (slice instanceof ColorPicker){ + slice.visible = isHighContrast ? false : slice.visible; + slice.value = isHighContrast ? colorPalette.foreground : slice.value; + } + }) + } + constructor(defaultSparklineChartContainerItem?: SparklineChartContainerItem){ super(defaultSparklineChartContainerItem); diff --git a/src/settings/descriptors/sparkline/sparklineDescriptor.ts b/src/settings/descriptors/sparkline/sparklineDescriptor.ts index 7958254..0da6a51 100644 --- a/src/settings/descriptors/sparkline/sparklineDescriptor.ts +++ b/src/settings/descriptors/sparkline/sparklineDescriptor.ts @@ -36,7 +36,7 @@ import { GridDescriptor } from "../gridDescriptor"; import { BaseContainerDescriptor } from "../container/baseContainerDescriptor"; export class SparklineContainerItem extends BaseDescriptor implements IDescriptor{ - public displayName: string = "All"; + public displayNameKey: string = "Visual_All"; private minPosition: number = 1; private maxPosition: number = GridDescriptor.MaxColumns + 1; diff --git a/src/settings/descriptors/staleDataDescriptor.ts b/src/settings/descriptors/staleDataDescriptor.ts index c535077..0b855c8 100644 --- a/src/settings/descriptors/staleDataDescriptor.ts +++ b/src/settings/descriptors/staleDataDescriptor.ts @@ -30,6 +30,8 @@ import NumUpDown = formattingSettings.NumUpDown; import ColorPicker = formattingSettings.ColorPicker; import TextInput = formattingSettings.TextInput; +import ISandboxExtendedColorPalette = powerbi.extensibility.ISandboxExtendedColorPalette; + import { BaseDescriptor } from "./baseDescriptor"; export class StaleDataDescriptor extends BaseDescriptor { @@ -79,4 +81,14 @@ export class StaleDataDescriptor extends BaseDescriptor { this.staleDataText, this.deductThresholdDays, this.staleDataThreshold, this.color, this.backgroundColor ]; + + public processHighContrastMode(colorPalette: ISandboxExtendedColorPalette): void { + const isHighContrast: boolean = colorPalette.isHighContrast; + + this.color.visible = isHighContrast ? false : this.color.visible; + this.color.value = isHighContrast ? colorPalette.foreground : this.color.value; + + this.backgroundColor.visible = isHighContrast ? false : this.backgroundColor.visible; + this.backgroundColor.value = isHighContrast ? colorPalette.foreground : this.backgroundColor.value; + } } diff --git a/src/settings/descriptors/subtitleBaseDescriptor.ts b/src/settings/descriptors/subtitleBaseDescriptor.ts index 3c9bead..b34cca0 100644 --- a/src/settings/descriptors/subtitleBaseDescriptor.ts +++ b/src/settings/descriptors/subtitleBaseDescriptor.ts @@ -26,10 +26,13 @@ import { formattingSettings } from "powerbi-visuals-utils-formattingmodel"; import TextInput = formattingSettings.TextInput; import ColorPicker = formattingSettings.ColorPicker; +import ToggleSwitch = formattingSettings.ToggleSwitch; import AlignmentGroup = formattingSettings.AlignmentGroup; import { TextFormattingDescriptor } from "./textFormattingDescriptor"; +import ISandboxExtendedColorPalette = powerbi.extensibility.ISandboxExtendedColorPalette; + export enum SubtitleAlignment { left = "left", center = "center", @@ -37,7 +40,7 @@ export enum SubtitleAlignment { } export class SubtitleBaseContainerItem extends TextFormattingDescriptor { - public displayName: string = "All"; + public displayNameKey: string = "Visual_All"; public defaultTitleText: string = ""; public defaultBackgroundColor: string = ""; @@ -75,6 +78,12 @@ export class SubtitleBaseContainerItem extends TextFormattingDescriptor { value: this.defaultWarningText, placeholder: this.defaultWarningText }); + + public show: ToggleSwitch = new ToggleSwitch({ + name: "show", + displayNameKey: "Visual_Show", + value: true + }); constructor(defaultSubtitleDescriptor?: SubtitleBaseContainerItem){ super(defaultSubtitleDescriptor); @@ -84,10 +93,19 @@ export class SubtitleBaseContainerItem extends TextFormattingDescriptor { this.backgroundColor.value = defaultSubtitleDescriptor.backgroundColor.value; this.alignment.value = defaultSubtitleDescriptor.alignment.value; this.warningText.value = defaultSubtitleDescriptor.warningText.value; + this.show.value = defaultSubtitleDescriptor.show.value; } else { this.color.value.value = this.defaultFontColor; this.font.fontFamily.value = this.defaultFontFamily; } } + + public processHighContrastMode(colorPalette: ISandboxExtendedColorPalette): void { + super.processHighContrastMode(colorPalette); + + const isHighContrast: boolean = colorPalette.isHighContrast; + this.backgroundColor.visible = isHighContrast ? false : this.backgroundColor.visible; + this.backgroundColor.value = isHighContrast ? colorPalette.background : this.backgroundColor.value; + } } diff --git a/src/settings/descriptors/subtitleDescriptor.ts b/src/settings/descriptors/subtitleDescriptor.ts index 80b060f..846714e 100644 --- a/src/settings/descriptors/subtitleDescriptor.ts +++ b/src/settings/descriptors/subtitleDescriptor.ts @@ -29,7 +29,7 @@ import ToggleSwitch = formattingSettings.ToggleSwitch; import { SubtitleAlignment, SubtitleBaseContainerItem } from "./subtitleBaseDescriptor"; -export class SubtitleItemContainer extends SubtitleBaseContainerItem { +export class SubtitleContainerItem extends SubtitleBaseContainerItem { public name: string = "subtitle"; public displayNameKey: string = "Visual_Subtitle"; diff --git a/src/settings/descriptors/textFormattingDescriptor.ts b/src/settings/descriptors/textFormattingDescriptor.ts index c41c93e..a98dffd 100644 --- a/src/settings/descriptors/textFormattingDescriptor.ts +++ b/src/settings/descriptors/textFormattingDescriptor.ts @@ -34,6 +34,7 @@ import ColorPicker = formattingSettings.ColorPicker; import ToggleSwitch = formattingSettings.ToggleSwitch; import ValidatorType = powerbi.visuals.ValidatorType; +import ISandboxExtendedColorPalette = powerbi.extensibility.ISandboxExtendedColorPalette; import { NumericDescriptor } from "./numericDescriptor"; @@ -44,10 +45,6 @@ export class TextFormattingDescriptor extends NumericDescriptor { public defaultFontFamily: string = "Segoe UI, wf_segoe-ui_normal, helvetica, arial, sans-serif"; public defaultFontColor: string = "#666666"; - public isBold: boolean = false; - public isItalic: boolean = false; - public isUnderlined: boolean = false; - protected minFontSize: number = 4; protected maxFontSize: number = 72; @@ -68,14 +65,33 @@ export class TextFormattingDescriptor extends NumericDescriptor { public fontFamily: FontPicker = new FontPicker({ name: "fontFamily", + displayNameKey: "Visual_FontFamily", value: this.defaultFontFamily }); + public isBold: ToggleSwitch = new ToggleSwitch({ + name: "bold", + value: false + }); + + public isItalic: ToggleSwitch = new ToggleSwitch({ + name: "italic", + value: false + }); + + public isUnderlined: ToggleSwitch = new ToggleSwitch({ + name: "underline", + value: false, + }); + public font: FontControl = new FontControl({ name: "font", displayNameKey: "Visual_Font", fontFamily: this.fontFamily, - fontSize: this.fontSize + fontSize: this.fontSize, + bold: this.isBold, + italic: this.isItalic, + underline: this.isUnderlined }); public color: ColorPicker = new ColorPicker({ @@ -95,6 +111,12 @@ export class TextFormattingDescriptor extends NumericDescriptor { this.font.fontSize.value = this.getValidFontSize(this.font.fontSize.value); } + public processHighContrastMode(colorPalette: ISandboxExtendedColorPalette): void { + const isHighContrast: boolean = colorPalette.isHighContrast; + this.color.visible = isHighContrast ? false : this.color.visible; + this.color.value = isHighContrast ? colorPalette.foreground : this.color.value; + } + public get fontSizePx(): string { return pixelConverter.toString(this.fontSizeInPx); } @@ -123,6 +145,9 @@ export class TextFormattingDescriptor extends NumericDescriptor { if (defaultTextDescriptor){ this.fontSize.value = defaultTextDescriptor.fontSize.value; this.fontFamily.value = defaultTextDescriptor.fontFamily.value; + this.isBold.value = defaultTextDescriptor.isBold.value; + this.isItalic.value = defaultTextDescriptor.isItalic.value; + this.isUnderlined.value = defaultTextDescriptor.isUnderlined.value; this.color.value = defaultTextDescriptor.color.value; this.autoAdjustFontSize.value = defaultTextDescriptor.autoAdjustFontSize.value; } diff --git a/src/settings/descriptors/tooltipDescriptor.ts b/src/settings/descriptors/tooltipDescriptor.ts index 65723ae..094390a 100644 --- a/src/settings/descriptors/tooltipDescriptor.ts +++ b/src/settings/descriptors/tooltipDescriptor.ts @@ -32,7 +32,7 @@ import { BaseDescriptor } from "./baseDescriptor"; import { BaseContainerDescriptor } from "./container/baseContainerDescriptor"; export class TooltipContainerItem extends BaseDescriptor { - public displayName: string = "All"; + public displayNameKey: string = "Visual_All"; public label: TextInput = new TextInput({ name: "label", diff --git a/src/settings/descriptors/valuesDescriptor.ts b/src/settings/descriptors/valuesDescriptor.ts index 36c52ea..91cd2ba 100644 --- a/src/settings/descriptors/valuesDescriptor.ts +++ b/src/settings/descriptors/valuesDescriptor.ts @@ -31,7 +31,7 @@ import { NumericDescriptor } from "./numericDescriptor"; import { BaseContainerDescriptor } from "./container/baseContainerDescriptor"; export class ValuesContainerItem extends NumericDescriptor { - public displayName: string = "All"; + public displayNameKey: string = "Visual_All"; public treatEmptyValuesAsZero: ToggleSwitch = new ToggleSwitch({ name: "treatEmptyValuesAsZero", diff --git a/src/settings/descriptors/varianceDescriptor.ts b/src/settings/descriptors/varianceDescriptor.ts index e8df7de..35d43d0 100644 --- a/src/settings/descriptors/varianceDescriptor.ts +++ b/src/settings/descriptors/varianceDescriptor.ts @@ -31,7 +31,7 @@ import { NumericDescriptor } from "./numericDescriptor"; import { BaseContainerDescriptor } from "./container/baseContainerDescriptor"; export class VarianceContainerItem extends NumericDescriptor { - public displayName: string = "All"; + public displayNameKey: string = "Visual_All"; public shouldCalculateDifference: ToggleSwitch = new ToggleSwitch({ name: "shouldCalculateDifference", diff --git a/src/settings/settings.ts b/src/settings/settings.ts index e71d74a..5852d44 100644 --- a/src/settings/settings.ts +++ b/src/settings/settings.ts @@ -27,6 +27,7 @@ import powerbi from "powerbi-visuals-api"; import DataViewMetadataColumn = powerbi.DataViewMetadataColumn; import ISelectionId = powerbi.visuals.ISelectionId; import ILocalizationManager = powerbi.extensibility.ILocalizationManager; +import ISandboxExtendedColorPalette = powerbi.extensibility.ISandboxExtendedColorPalette; import { formattingSettings } from "powerbi-visuals-utils-formattingmodel"; import FormattingSettingsModel = formattingSettings.Model; @@ -45,15 +46,13 @@ import { SparklineAxisDescriptor } from "./descriptors/sparkline/sparklineAxisDe import { SparklineChartDescriptor } from "./descriptors/sparkline/sparklineChartDescriptor"; import { SparklineDescriptor } from "./descriptors/sparkline/sparklineDescriptor"; import { StaleDataDescriptor } from "./descriptors/staleDataDescriptor"; -import { SubtitleItemContainer } from "./descriptors/subtitleDescriptor"; +import { SubtitleContainerItem } from "./descriptors/subtitleDescriptor"; import { TooltipDescriptor } from "./descriptors/tooltipDescriptor"; import { ValuesDescriptor } from "./descriptors/valuesDescriptor"; import { VarianceDescriptor } from "./descriptors/varianceDescriptor"; import { IDescriptor } from "./descriptors/descriptor"; -import { AxisBaseContainerItem } from "./descriptors/axisBaseDescriptor"; import { BaseContainerDescriptor } from "./descriptors/container/baseContainerDescriptor"; import { SeriesSettings } from "./seriesSettings"; -import { FormatDescriptor } from "./descriptors/formatDescriptor"; export class Settings extends FormattingSettingsModel { public date: DateDescriptor = new DateDescriptor(); @@ -70,7 +69,7 @@ export class Settings extends FormattingSettingsModel { public sparklineChart: SparklineChartDescriptor = new SparklineChartDescriptor(); public sparklineYAxis: SparklineAxisDescriptor = new SparklineAxisDescriptor(); public sparklineValue: SparklineValueDescriptor = new SparklineValueDescriptor(); - public subtitle: SubtitleItemContainer = new SubtitleItemContainer(); + public subtitle: SubtitleContainerItem = new SubtitleContainerItem(); public staleData: StaleDataDescriptor = new StaleDataDescriptor(); public printMode: PrintDescriptor = new PrintDescriptor(); @@ -83,38 +82,30 @@ export class Settings extends FormattingSettingsModel { this.subtitle, this.staleData, this.printMode ] - public parse(): void { + public parse(colorPalette: ISandboxExtendedColorPalette, localizationManager: ILocalizationManager): void { if (this.staleData.staleDataText.value === "") { this.staleData.staleDataText.value = "Data is ${1} days late." + (this.subtitle.staleDataText || ""); } - if (!this.subtitle.shouldBeShown) { + if (!this.subtitle.show.value) { this.staleData.isShown.value = false; } - this.cards.forEach((card) => { const settings: IDescriptor = card as IDescriptor; if (settings.parse) { settings.parse(); } - }); - } - public updateFormatPropertyValue(): void { - this.cards.forEach((card) => { - if (card instanceof BaseContainerDescriptor){ - card.container.containerItems.forEach((item) => { - if (item instanceof FormatDescriptor){ - item.format.value = item.getFormat(); - } - if (item instanceof AxisBaseContainerItem){ - item.min.value = item.getMin(); - item.max.value = item.getMax(); - } - }) + if (settings.processHighContrastMode) { + settings.processHighContrastMode(colorPalette); } + + if (settings.setLocalizedDisplayName) { + settings.setLocalizedDisplayName(localizationManager); + } + }); } @@ -139,14 +130,4 @@ export class Settings extends FormattingSettingsModel { currentSettings.staleData = this.staleData; return currentSettings; } - - public setLocalizedOptions(localizationManager: ILocalizationManager): void { - this.cards.forEach((card) => { - const settings: IDescriptor = card as IDescriptor; - - if (settings.setLocalizedDisplayName) { - settings.setLocalizedDisplayName(localizationManager); - } - }); - } } diff --git a/src/visualComponent/baseComponent.ts b/src/visualComponent/baseComponent.ts index 20a9891..d1434c4 100644 --- a/src/visualComponent/baseComponent.ts +++ b/src/visualComponent/baseComponent.ts @@ -34,7 +34,8 @@ import { import { pixelConverter } from "powerbi-visuals-utils-typeutils"; -import { Selection } from "d3-selection"; +import { Selection as d3Selection, BaseType } from "d3-selection"; +type Selection = d3Selection; import { IVisualComponent } from "./visualComponent"; @@ -47,7 +48,7 @@ export abstract class BaseComponent i protected italicClassName: string = this.getClassNameWithPrefix("italic"); protected underlinedClassName: string = this.getClassNameWithPrefix("underlined"); - protected element: Selection; + protected element: Selection; protected constructorOptions: ConstructorOptionsType; protected renderOptions: RenderOptionsType; @@ -59,12 +60,11 @@ export abstract class BaseComponent i protected height: number; private isComponentShown: boolean = true; - private classNamePrefix: string = "multiKpi_"; public abstract render(options: RenderOptionsType): void; public initElement( - baseElement: Selection, + baseElement: Selection, className: string, tagName: string = "div", ): void { @@ -145,7 +145,7 @@ export abstract class BaseComponent i } public updateFormatting( - selection: Selection, + selection: Selection, settings: TextFormattingDescriptor, ): void { if (!selection || !settings) { @@ -154,18 +154,18 @@ export abstract class BaseComponent i selection .style("font-size", settings.fontSizePx) - .style("font-family", settings.font.fontFamily.value) + .style("font-family", settings.fontFamily.value) .style("color", settings.color.value.value) - .classed(this.boldClassName, settings.isBold) - .classed(this.italicClassName, settings.isItalic) - .classed(this.underlinedClassName, settings.isUnderlined); + .classed(this.boldClassName, settings.isBold.value) + .classed(this.italicClassName, settings.isItalic.value) + .classed(this.underlinedClassName, settings.isUnderlined.value); } protected createElement( - baseElement: Selection, + baseElement: Selection, className: string, tagName: string = "div", - ): Selection { + ): Selection { return baseElement .append(tagName) .classed(this.getClassNameWithPrefix(className), true); @@ -173,15 +173,19 @@ export abstract class BaseComponent i protected getClassNameWithPrefix(className: string): string { return className - ? `${this.classNamePrefix}${className}` + ? `${this.getClassNamePrefix()}${className}` : className; } + protected getClassNamePrefix(): string { + return "multiKpi_"; + } + protected getSelectorWithPrefix(className: string): CssConstants.ClassAndSelector { return CssConstants.createClassAndSelector(this.getClassNameWithPrefix(className)); } - protected clearElement(element: Selection): void { + protected clearElement(element: Selection): void { element .selectAll("*") .remove(); @@ -197,7 +201,7 @@ export abstract class BaseComponent i return this.isComponentShown; } - protected updateBackgroundColor(element: Selection, color: string): void { + protected updateBackgroundColor(element: Selection, color: string): void { if (!element) { return; } @@ -227,7 +231,7 @@ export abstract class BaseComponent i .style("height", formatedHeight); } - protected updateElementOrder(element: Selection, order: number): void { + protected updateElementOrder(element: Selection, order: number): void { if (!element) { return; } @@ -240,7 +244,7 @@ export abstract class BaseComponent i .style("order", order); } - protected updateMargin(element: Selection, margin: IMargin): void { + protected updateMargin(element: Selection, margin: IMargin): void { if (!element) { return; } diff --git a/src/visualComponent/baseContainerComponent.ts b/src/visualComponent/baseContainerComponent.ts index 93ca10e..a235390 100644 --- a/src/visualComponent/baseContainerComponent.ts +++ b/src/visualComponent/baseContainerComponent.ts @@ -32,7 +32,7 @@ export abstract class BaseContainerComponent[] = []; - public getComponents(): IVisualComponent[] { + public getComponents(): IVisualComponent[] { return this.components; } @@ -50,7 +50,7 @@ export abstract class BaseContainerComponent[] = this.components): void { this.forEach( components.splice(0, components.length), - (component: IVisualComponent) => { + (component: IVisualComponent) => { component.destroy(); }, ); diff --git a/src/visualComponent/mainChart/axisComponent.ts b/src/visualComponent/mainChart/axisComponent.ts index 3702baa..1bce7d6 100644 --- a/src/visualComponent/mainChart/axisComponent.ts +++ b/src/visualComponent/mainChart/axisComponent.ts @@ -57,6 +57,8 @@ export class AxisComponent extends BaseComponent>(yScale.getScale())) + const yAxis: (selection) => void = axisRight(>(yScale.getScale())) .tickValues(domain) .tickFormat((value: number) => { return axisValueFormatter.format(value); @@ -111,9 +113,17 @@ export class AxisComponent extends BaseComponent; import powerbi from "powerbi-visuals-api"; import IViewport = powerbi.IViewport; @@ -98,7 +99,7 @@ export class ChartComponent extends BaseContainerComponent< private className: string = "chartComponent"; - private zeroLineSelection: Selection; + private zeroLineSelection: Selection; private axisComponent: IVisualComponent; private lineComponent: IVisualComponent; @@ -153,9 +154,7 @@ export class ChartComponent extends BaseContainerComponent< this.constructorOptions.eventDispatcher.on( `${EventName.onMouseOut}.${this.className}`, () => { - const latestDataPoint: IDataRepresentationPoint = this.renderOptions - && this.renderOptions.series - && this.renderOptions.series.current; + const latestDataPoint: IDataRepresentationPoint = this.renderOptions?.series?.current; this.constructorOptions.eventDispatcher.call( EventName.onCurrentDataPointIndexReset, @@ -246,7 +245,7 @@ export class ChartComponent extends BaseContainerComponent< private hideComponents(): void { this.forEach( this.dynamicComponents, - (component: IVisualComponent) => { + (component: IVisualComponent) => { component.hide(); }); } diff --git a/src/visualComponent/mainChart/chartLabelBaseComponent.ts b/src/visualComponent/mainChart/chartLabelBaseComponent.ts index d006565..24d439a 100644 --- a/src/visualComponent/mainChart/chartLabelBaseComponent.ts +++ b/src/visualComponent/mainChart/chartLabelBaseComponent.ts @@ -26,7 +26,8 @@ import powerbi from "powerbi-visuals-api"; -import { Selection } from "d3-selection"; +import { Selection as d3Selection, BaseType} from "d3-selection"; +type Selection = d3Selection; import { CssConstants } from "powerbi-visuals-utils-svgutils"; import { pixelConverter } from "powerbi-visuals-utils-typeutils"; @@ -75,36 +76,20 @@ export abstract class ChartLabelBaseComponent extends BaseCompone selector: CssConstants.ClassAndSelector, renderGroupData: IRenderGroup[], ): void { - const selection: Selection = this.element + const selection: Selection = this.element .selectAll(selector.selectorName) - .data([renderGroupData]); + .data([renderGroupData]) + .join("div") + .classed(selector.className, true); - selection - .exit() - .remove(); - - const mergedSelection = selection - .enter() - .append("div") - .classed(selector.className, true) - .merge(selection); - - const itemSelection: Selection = mergedSelection + const itemSelection: Selection = selection .selectAll(this.itemSelector.selectorName) .data((data: IRenderGroup[]) => { return data.filter((renderGroup: IRenderGroup) => { - return renderGroup && renderGroup.isShown; + return renderGroup?.isShown; }); - }); - - itemSelection - .exit() - .remove(); - - itemSelection - .enter() - .append("div") - .merge(itemSelection) + }) + .join("div") .attr("class", (data: IRenderGroup) => { const baseSelector: string = this.itemSelector.className; diff --git a/src/visualComponent/mainChart/hoverLabelComponent.ts b/src/visualComponent/mainChart/hoverLabelComponent.ts index 209e133..b368362 100644 --- a/src/visualComponent/mainChart/hoverLabelComponent.ts +++ b/src/visualComponent/mainChart/hoverLabelComponent.ts @@ -103,7 +103,7 @@ export class HoverLabelComponent extends ChartLabelBaseComponent = this.constructorOptions.eventDispatcher; + const eventDispatcher: Dispatch = this.constructorOptions.eventDispatcher; function onMouseMove(event) { event.preventDefault(); diff --git a/src/visualComponent/rootComponent.ts b/src/visualComponent/rootComponent.ts index b112682..3c99c84 100644 --- a/src/visualComponent/rootComponent.ts +++ b/src/visualComponent/rootComponent.ts @@ -123,16 +123,11 @@ export class RootComponent extends BaseContainerComponent< } public render(options: IVisualComponentRenderOptions) { - const previousViewportSize: ViewportSize = this.renderOptions - && this.renderOptions.data - && this.renderOptions.data.viewportSize; + const previousViewportSize: ViewportSize = this.renderOptions?.data?.viewportSize; this.renderOptions = options; - if (options - && options.data - && options.data.series - && options.data.series.length + if (options?.data?.series?.length ) { this.show(); this.renderComponent(options); @@ -144,12 +139,6 @@ export class RootComponent extends BaseContainerComponent< options.data.viewportSize, previousViewportSize, ); - - if (this.isExecutedInPhantomJs()) { - this.turnOnPrintMode(); - } else { - this.turnOffPrintMode(); - } } public destroy(): void { @@ -303,33 +292,15 @@ export class RootComponent extends BaseContainerComponent< } private bindPrintEvents(): void { - try { - if (!window - || !window.addEventListener - || !("onbeforeprint" in window) - || !("onafterprint" in window) - ) { - return; - } - - window.addEventListener("beforeprint", this.turnOnPrintMode.bind(this)); - window.addEventListener("afterprint", this.turnOffPrintMode.bind(this)); - } - catch (_) { - // No need to handle this exception as CVs do not have any logger so far + if (!window?.addEventListener + || !("onbeforeprint" in window) + || !("onafterprint" in window) + ) { + return; } - } - /** - * We detect Phantom JS in order to detect PBI Snapshot Service - * This is required to force Print Mode in Snapshot Service - */ - private isExecutedInPhantomJs(): boolean { - try { - return /PhantomJS/.test(window.navigator.userAgent); - } catch (_) { - return false; - } + window.addEventListener("beforeprint", this.turnOnPrintMode.bind(this)); + window.addEventListener("afterprint", this.turnOffPrintMode.bind(this)); } private onChartChangeClickHandler(seriesName: string): void { @@ -349,10 +320,7 @@ export class RootComponent extends BaseContainerComponent< seriesName: string, coordinates: number[], ): void { - const toggleSparklineOnHover: boolean = this.renderOptions - && this.renderOptions.settings - && this.renderOptions.settings.grid - && this.renderOptions.settings.grid.toggleSparklineOnHover.value; + const toggleSparklineOnHover: boolean = this.renderOptions?.settings?.grid?.toggleSparklineOnHover.value; if (!toggleSparklineOnHover) { return; diff --git a/src/visualComponent/sparkline/dotsComponent.ts b/src/visualComponent/sparkline/dotsComponent.ts index de37c92..dde3292 100644 --- a/src/visualComponent/sparkline/dotsComponent.ts +++ b/src/visualComponent/sparkline/dotsComponent.ts @@ -24,8 +24,6 @@ * THE SOFTWARE. */ -import { Selection } from "d3-selection"; - import powerbi from "powerbi-visuals-api"; import IViewport = powerbi.IViewport; @@ -83,21 +81,14 @@ export class DotsComponent extends BaseComponent = this.element + // dots selection + this.element .selectAll(this.dotSelector.selectorName) .data(points.filter((point: IDataRepresentationPoint) => { return point && isValueValid(point.y); - })); - - dotSelection - .exit() - .remove(); - - dotSelection - .enter() - .append("circle") + })) + .join("circle") .classed(this.dotSelector.className, true) - .merge(dotSelection) .attr("cx", (point: IDataRepresentationPoint) => xScale.scale(point.x)) .attr("cy", (point: IDataRepresentationPoint) => yScale.scale(point.y)) .attr("r", settings.getRadius()) diff --git a/src/visualComponent/sparkline/lineComponent.ts b/src/visualComponent/sparkline/lineComponent.ts index 9192d6f..a49c8fb 100644 --- a/src/visualComponent/sparkline/lineComponent.ts +++ b/src/visualComponent/sparkline/lineComponent.ts @@ -24,7 +24,8 @@ * THE SOFTWARE. */ -import { Selection } from "d3-selection"; +import { Selection as d3Selection, BaseType } from "d3-selection"; +type Selection = d3Selection; import { area, Area, line, Line } from "d3-shape"; import powerbi from "powerbi-visuals-api"; @@ -73,7 +74,7 @@ export class LineComponent extends BaseComponent; + private gradientSelection: Selection; constructor(options: IVisualComponentConstructorOptions) { super(); @@ -209,18 +210,12 @@ export class LineComponent extends BaseComponent { const points: IDataRepresentationPoint[] = this.getValidPoints(lineRenderOptions.points); @@ -317,25 +312,18 @@ export class LineComponent extends BaseComponent = this.gradientSelection + //stop selection + this.gradientSelection .selectAll("stop") - .data(gradients); - - stopSelection - .exit() - .remove(); - - stopSelection - .enter() - .append("stop") - .merge(stopSelection) + .data(gradients) + .join("stop") .attr("offset", (gradient: ILineComponentGradient) => gradient.offset) .style("stop-color", (gradient: ILineComponentGradient) => gradient.color) .style("stop-opacity", 1); } private getId(): string { - const crypto: Crypto = window.crypto || (window).msCrypto; + const crypto: Crypto = window.crypto; const generatedIds: Uint32Array = new Uint32Array(2); crypto.getRandomValues(generatedIds); diff --git a/src/visualComponent/sparkline/sparklineComponent.ts b/src/visualComponent/sparkline/sparklineComponent.ts index b8d4b32..41173d8 100644 --- a/src/visualComponent/sparkline/sparklineComponent.ts +++ b/src/visualComponent/sparkline/sparklineComponent.ts @@ -47,12 +47,12 @@ export interface ISparklineComponentRenderOptions { position: number; } -type SparklineComponentsRenderOptions = ISubtitleComponentRenderOptions | ISubtitleComponentRenderOptions; +type SparklineComponentsRenderOptions = ISparklineComponentRenderOptions | ISubtitleComponentRenderOptions; export class SparklineComponent extends BaseContainerComponent { private className: string = "sparklineComponent"; private topLabelComponent: IVisualComponent; - private plotComponent: IVisualComponent; + private plotComponent: IVisualComponent; private bottomLabelComponent: IVisualComponent; constructor(options: IVisualComponentConstructorOptions) { @@ -76,7 +76,7 @@ export class SparklineComponent extends BaseContainerComponent, componentIndex: number) => { const data: IDataRepresentationSeries = series[componentIndex]; - const position: number = data && data.settings.sparkline.position.value + const position: number = data?.settings?.sparkline.position.value ? data.settings.sparkline.position.value : data ? data.index diff --git a/src/visualComponent/sparkline/svgComponent.ts b/src/visualComponent/sparkline/svgComponent.ts index 9b4bbed..6bb939f 100644 --- a/src/visualComponent/sparkline/svgComponent.ts +++ b/src/visualComponent/sparkline/svgComponent.ts @@ -109,7 +109,7 @@ export class SvgComponent extends BaseContainerComponent< EventName.onChartChangeHover, undefined, event, - this.renderOptions && this.renderOptions.current && this.renderOptions.current.name + this.renderOptions?.current?.name ); }); } @@ -149,12 +149,7 @@ export class SvgComponent extends BaseContainerComponent< y: this.renderOptions.current.ySparkline, }); - this.onCurrentDataPointIndexChange( - this.renderOptions - && this.renderOptions.current - && this.renderOptions.current.current - && this.renderOptions.current.current.index, - ); + this.onCurrentDataPointIndexChange(this.renderOptions?.current?.current?.index); } public destroy(): void { @@ -205,9 +200,8 @@ export class SvgComponent extends BaseContainerComponent< points: IDataRepresentationPoint[], pointIndex: number, ): IDataRepresentationPoint { - if (points - && points.length - && pointIndex < points.length + if (points?.length + && pointIndex < points?.length ) { for (let index = pointIndex; index >= 0; index--) { const point: IDataRepresentationPoint = points[index]; diff --git a/src/visualComponent/subtitleComponent.ts b/src/visualComponent/subtitleComponent.ts index 6ef41a9..7064d95 100644 --- a/src/visualComponent/subtitleComponent.ts +++ b/src/visualComponent/subtitleComponent.ts @@ -24,8 +24,6 @@ * THE SOFTWARE. */ -import { Selection } from "d3-selection"; - import powerbi from "powerbi-visuals-api"; import IViewport = powerbi.IViewport; @@ -63,7 +61,7 @@ export class SubtitleComponent extends BaseComponent = this.element - .selectAll(this.subtitleSelector.selectorName) - .data(settings.shouldBeShown ? [[]] : []); - - subtitleSelection - .exit() - .remove(); - const subtitleText: string = `${settings.titleText.value}${(subtitle ?? "")}`; - subtitleSelection - .enter() - .append("div") + // subtitle selection + this.element + .selectAll(this.subtitleSelector.selectorName) + .data(settings.show.value && settings.isShown.value ? [[]] : []) + .join("div") .classed(this.subtitleSelector.className, true) - .merge(subtitleSelection) .text(subtitleText) .style("text-align", settings.alignment.value); diff --git a/src/visualComponent/subtitleWarningComponent.ts b/src/visualComponent/subtitleWarningComponent.ts index 9f0212e..2cf75d3 100644 --- a/src/visualComponent/subtitleWarningComponent.ts +++ b/src/visualComponent/subtitleWarningComponent.ts @@ -23,7 +23,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -import { Selection } from "d3-selection"; +import { Selection as d3Selection, BaseType} from "d3-selection"; +type Selection = d3Selection; + import powerbi from "powerbi-visuals-api"; import { CssConstants } from "powerbi-visuals-utils-svgutils"; import { IDataRepresentationSeries } from "../converter/data/dataRepresentation"; @@ -96,7 +98,7 @@ export class SubtitleWarningComponent extends SubtitleComponent { const { backgroundColor, color, - shouldBeShown, + isShown, staleDataText, staleDataThreshold, } = staleDataSettings; @@ -158,7 +160,7 @@ export class SubtitleWarningComponent extends SubtitleComponent { this.renderIcon({ backgroundColor: backgroundColor.value.value, color: color.value.value, - isShown: shouldBeShown && isDataStale, + isShown: isShown && isDataStale, selector: this.dataAgeSelector, tooltipItems, }); @@ -176,7 +178,7 @@ export class SubtitleWarningComponent extends SubtitleComponent { public getTitle(stringTemplate: string, dateDifference: number, staleDataThreshold: number): string { const days: number = dateDifference - staleDataThreshold; - return stringTemplate && stringTemplate.replace + return stringTemplate?.replace ? stringTemplate.replace("${1}", `${days}`) : stringTemplate; } @@ -188,19 +190,11 @@ export class SubtitleWarningComponent extends SubtitleComponent { selector, tooltipItems, }: IIcon): void { - const iconSelection: Selection = this.element + const iconSelection: Selection = this.element .selectAll(selector.selectorName) - .data(isShown ? [1] : []); - - iconSelection - .exit() - .remove(); - - iconSelection - .enter() - .append("div") + .data(isShown ? [1] : []) + .join("div") .classed(selector.className, true) - .merge(iconSelection) .style("color", color || null) .style("background-color", backgroundColor || null); diff --git a/src/visualComponent/verticalReferenceLineComponent.ts b/src/visualComponent/verticalReferenceLineComponent.ts index 479e81b..54cbce6 100644 --- a/src/visualComponent/verticalReferenceLineComponent.ts +++ b/src/visualComponent/verticalReferenceLineComponent.ts @@ -27,8 +27,6 @@ import powerbi from "powerbi-visuals-api"; import IViewport = powerbi.IViewport; -import { Selection } from "d3-selection"; - import { CssConstants } from "powerbi-visuals-utils-svgutils"; import { BaseComponent } from "./baseComponent"; @@ -80,21 +78,14 @@ export class VerticalReferenceLineComponent .copy() .range([offset, viewport.width]); - const xPosition: number = xScale.scale(dataPoint && dataPoint.x); + const xPosition: number = xScale.scale(dataPoint?.x); - const lineSelection: Selection = this.element + // line selection + this.element .selectAll(this.lineSelector.selectorName) - .data(dataPoint ? [dataPoint] : []); - - lineSelection - .exit() - .remove(); - - lineSelection - .enter() - .append("line") + .data(dataPoint ? [dataPoint] : []) + .join("line") .classed(this.lineSelector.className, true) - .merge(lineSelection) .attr("x1", xPosition) .attr("x2", xPosition) .attr("y1", 0) diff --git a/src/visualComponent/visualComponent.ts b/src/visualComponent/visualComponent.ts index 1b5f7de..bf0e8f7 100644 --- a/src/visualComponent/visualComponent.ts +++ b/src/visualComponent/visualComponent.ts @@ -37,5 +37,5 @@ export interface IVisualComponent { show?(): void; toggle?(): void; getViewport?(): IViewport; - getComponents?(): IVisualComponent[] + getComponents?(): IVisualComponent[] } diff --git a/src/visualComponent/visualComponentBaseConstructorOptions.ts b/src/visualComponent/visualComponentBaseConstructorOptions.ts index 0772e76..ed2b5b3 100644 --- a/src/visualComponent/visualComponentBaseConstructorOptions.ts +++ b/src/visualComponent/visualComponentBaseConstructorOptions.ts @@ -24,8 +24,9 @@ * THE SOFTWARE. */ -import { Selection } from "d3-selection"; +import { Selection as d3Selection, BaseType} from "d3-selection"; +type Selection = d3Selection; export interface IVisualComponentBaseConstructorOptions { - element?: Selection; + element?: Selection; } diff --git a/src/visualComponent/visualComponentConstructorOptions.ts b/src/visualComponent/visualComponentConstructorOptions.ts index ea7b27b..f4db729 100644 --- a/src/visualComponent/visualComponentConstructorOptions.ts +++ b/src/visualComponent/visualComponentConstructorOptions.ts @@ -26,7 +26,7 @@ import { Dispatch } from "d3-dispatch"; import powerbi from "powerbi-visuals-api"; -import IColorPalette = powerbi.extensibility.IColorPalette; +import IColorPalette = powerbi.extensibility.ISandboxExtendedColorPalette; import { ScaleService } from "../services/scaleService"; import { Settings } from "../settings/settings"; @@ -34,10 +34,10 @@ import { IVisualComponentBaseConstructorOptions } from "./visualComponentBaseCon import { ITooltipServiceWrapper } from "powerbi-visuals-utils-tooltiputils"; export interface IVisualComponentConstructorOptions extends IVisualComponentBaseConstructorOptions { - eventDispatcher?: Dispatch; // TODO + eventDispatcher?: Dispatch; // TODO id?: number | string; scaleService?: ScaleService; - style?: IColorPalette; // TODO: must be renamed + colorPalette?: IColorPalette; getSettings?: () => Settings; tooltipServiceWrapper?: ITooltipServiceWrapper; } diff --git a/stringResources/en-US/resources.resjson b/stringResources/en-US/resources.resjson index ed2d735..857ffca 100644 --- a/stringResources/en-US/resources.resjson +++ b/stringResources/en-US/resources.resjson @@ -7,7 +7,7 @@ "Visual_AutoFontSize": "Auto font size", "Visual_AutoPrecision": "Auto precision", "Visual_BackgroundColor": "Background color", - "Visual_BackgroundColorAll": "Background Color (for all only)", + "Visual_BackgroundColorAll": "Background color (for all only)", "Visual_CalculateDifference": "Calculate difference", "Visual_CalculateDifferenceDescription": "Calculates a difference instead of growth", "Visual_ChangeStartDate": "Change start date", @@ -22,10 +22,11 @@ "Visual_DateColor": "Date color", "Visual_DateDifference": "Date difference", "Visual_DateFontSize": "Date font size", - "Visual_DeductThresholdDays": "Deduct Threshold Days", + "Visual_DeductThresholdDays": "Deduct threshold days", "Visual_DisplayUnits": "Display units", "Visual_Font": "Font", "Visual_FontColor": "Font color", + "Visual_FontFamily": "Font family", "Visual_Format": "Format", "Visual_Interpolate": "Interpolate", "Visual_KPI": "KPI", @@ -55,7 +56,7 @@ "Visual_SparklineChart": "Sparkline chart", "Visual_SparklineGrid": "Sparkline grid", "Visual_SparklineName": "Sparkline name", - "Visual_SparklineValue": "Sparkline Value", + "Visual_SparklineValue": "Sparkline value", "Visual_SparklineYAxis": "Sparkline Y-axis", "Visual_StaleData": "Stale data", "Visual_StaleDataDescription": "To turn on Stale Data make sure to turn on Subtitle first", @@ -65,7 +66,7 @@ "Visual_ThresholdDescription": "Data is stale if data is older than some number of days from now", "Visual_Title": "Title", "Visual_TitleText": "Title text", - "Visual_ToggleSparklineOnHover": "Toggle Sparkline On Hover", + "Visual_ToggleSparklineOnHover": "Toggle sparkline on hover", "Visual_ToggleSparklineOnHoverDescription": "Toggle Sparkline to the main chart on hover event", "Visual_Tooltip": "Tooltip", "Visual_TreatEmptyValuesAsZero": "Treat empty/missing values as zero", diff --git a/styles/styles.less b/styles/styles.less index 5ddb4b2..019ca5e 100644 --- a/styles/styles.less +++ b/styles/styles.less @@ -144,6 +144,18 @@ .displayFlex(); .flexDirectionColumn(); + .multiKpi_italic { + font-style: italic; + } + + .multiKpi_bold { + font-weight: bold; + } + + .multiKpi_underlined { + text-decoration: underline; + } + .multiKpi_mainChartComponent { -webkit-tap-highlight-color: transparent;