diff --git a/CHANGELOG.md b/CHANGELOG.md index 9659864..f5d14cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## 3.3.3.0 +* Fixed deselection in Slicer wasn't apply to Globe map +* Update powerbi-visuals-api to 5.9.0 +* Refactored cacheManager, LocalStorageCache, MemoryCache + ## 3.3.2.0 * Fixed console error "undefined CustomVisualObjects" diff --git a/package-lock.json b/package-lock.json index 493c45f..22cc690 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,25 +1,25 @@ { "name": "powerbi-visuals-globemap", - "version": "3.3.2.0", + "version": "3.3.3.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "powerbi-visuals-globemap", - "version": "3.3.2.0", + "version": "3.3.3.0", "license": "MIT", "dependencies": { "d3-selection": "^3.0.0", "lodash.clone": "^4.5.0", "lodash.isempty": "^4.4.0", "lodash.mapvalues": "^4.6.0", - "powerbi-visuals-api": "^5.8.0", - "powerbi-visuals-utils-colorutils": "^6.0.3", - "powerbi-visuals-utils-dataviewutils": "^6.0.2", - "powerbi-visuals-utils-formattingmodel": "^6.0.1", - "powerbi-visuals-utils-formattingutils": "^6.1.0", - "powerbi-visuals-utils-interactivityutils": "^6.0.3", - "powerbi-visuals-utils-typeutils": "^6.0.1", + "powerbi-visuals-api": "^5.9.0", + "powerbi-visuals-utils-colorutils": "^6.0.4", + "powerbi-visuals-utils-dataviewutils": "^6.0.3", + "powerbi-visuals-utils-formattingmodel": "^6.0.2", + "powerbi-visuals-utils-formattingutils": "^6.1.1", + "powerbi-visuals-utils-interactivityutils": "^6.0.4", + "powerbi-visuals-utils-typeutils": "^6.0.3", "three": "^0.157.0" }, "devDependencies": { @@ -46,14 +46,14 @@ "karma-webpack": "^5.0.1", "less": "^4.2.0", "less-loader": "^11.1.4", - "playwright-chromium": "^1.42.0", - "powerbi-visuals-tools": "^5.4.2", - "powerbi-visuals-utils-testutils": "^6.1.0", + "playwright-chromium": "^1.43.0", + "powerbi-visuals-tools": "^5.4.3", + "powerbi-visuals-utils-testutils": "^6.1.1", "style-loader": "^3.3.4", "ts-loader": "^9.5.1", "ts-node": "^10.9.2", "typescript": "^5.2.2", - "webpack": "^5.90.3" + "webpack": "^5.91.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -857,9 +857,9 @@ } }, "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "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 }, "node_modules/@nodelib/fs.scandir": { @@ -944,9 +944,9 @@ "dev": true }, "node_modules/@types/body-parser": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.3.tgz", - "integrity": "sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==", + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, "dependencies": { "@types/connect": "*", @@ -954,27 +954,27 @@ } }, "node_modules/@types/bonjour": { - "version": "3.5.11", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.11.tgz", - "integrity": "sha512-isGhjmBtLIxdHBDl2xGwUzEM8AOyOvWsADWq7rqirdi/ZQoHnLWErHvsThcEzTX8juDRiZtzp2Qkv5bgNh6mAg==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect": { - "version": "3.4.36", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", - "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.1.tgz", - "integrity": "sha512-iaQslNbARe8fctL5Lk+DsmgWOM83lM+7FzP0eQUJs1jd3kBE8NWqBTIT2S8SqQOJjxvt2eyIjpOuYeRXq2AdMw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", "dev": true, "dependencies": { "@types/express-serve-static-core": "*", @@ -1029,9 +1029,9 @@ "dev": true }, "node_modules/@types/express": { - "version": "4.17.18", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.18.tgz", - "integrity": "sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, "dependencies": { "@types/body-parser": "*", @@ -1041,9 +1041,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.37", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.37.tgz", - "integrity": "sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg==", + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz", + "integrity": "sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==", "dev": true, "dependencies": { "@types/node": "*", @@ -1053,15 +1053,15 @@ } }, "node_modules/@types/http-errors": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.2.tgz", - "integrity": "sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg==", + "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 }, "node_modules/@types/http-proxy": { - "version": "1.17.12", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.12.tgz", - "integrity": "sha512-kQtujO08dVtQ2wXAuSFfk9ASy3sug4+ogFR8Kd8UgP8PEuc1/G/8yjYRmp//PcDNJEUKOza/MrQu15bouEUCiw==", + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", "dev": true, "dependencies": { "@types/node": "*" @@ -1113,9 +1113,9 @@ } }, "node_modules/@types/mime": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.3.tgz", - "integrity": "sha512-Ys+/St+2VF4+xuY6+kDIXGxbNRO0mesVg0bbxEfB97Od1Vjpjx9KD1qxs64Gcb3CWPirk9Xe+PT4YiiHQ9T+eg==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "dev": true }, "node_modules/@types/node": { @@ -1124,16 +1124,25 @@ "integrity": "sha512-3JRwhbjI+cHLAkUorhf8RnqUbFXajvzX4q6fMn5JwkgtuwfYtRQYI3u4V92vI6NJuTsbBQWWh3RZjFsuevyMGQ==", "dev": true }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/qs": { - "version": "6.9.8", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz", - "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==", + "version": "6.9.14", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.14.tgz", + "integrity": "sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==", "dev": true }, "node_modules/@types/range-parser": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.5.tgz", - "integrity": "sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA==", + "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 }, "node_modules/@types/retry": { @@ -1149,9 +1158,9 @@ "dev": true }, "node_modules/@types/send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.2.tgz", - "integrity": "sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw==", + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, "dependencies": { "@types/mime": "^1", @@ -1159,29 +1168,29 @@ } }, "node_modules/@types/serve-index": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.2.tgz", - "integrity": "sha512-asaEIoc6J+DbBKXtO7p2shWUpKacZOoMBEGBgPG91P8xhO53ohzHWGCs4ScZo5pQMf5ukQzVT9fhX1WzpHihig==", + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "dev": true, "dependencies": { "@types/express": "*" } }, "node_modules/@types/serve-static": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.3.tgz", - "integrity": "sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg==", + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", "dev": true, "dependencies": { "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" + "@types/node": "*", + "@types/send": "*" } }, "node_modules/@types/sockjs": { - "version": "0.3.34", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.34.tgz", - "integrity": "sha512-R+n7qBFnm/6jinlteC9DBL5dGiDGjWAvjo4viUanpnc/dG1y7uDoacXPIQ/PQEg1fI912SMHIa014ZjRpvDw4g==", + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", "dev": true, "dependencies": { "@types/node": "*" @@ -1212,9 +1221,9 @@ "dev": true }, "node_modules/@types/ws": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.6.tgz", - "integrity": "sha512-8B5EO9jLVCy+B58PLHvLDuOD8DRVMgQzq8d55SjLCOn9kqGyqOvy27exVaTio1q1nX5zLu8/6N0n2ThSxOM6tg==", + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", "dev": true, "dependencies": { "@types/node": "*" @@ -1441,9 +1450,9 @@ "dev": true }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", @@ -1463,9 +1472,9 @@ "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", "dev": true }, "node_modules/@webassemblyjs/helper-numbers": { @@ -1486,15 +1495,15 @@ "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/wasm-gen": "1.12.1" } }, "node_modules/@webassemblyjs/ieee754": { @@ -1522,28 +1531,28 @@ "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", @@ -1551,24 +1560,24 @@ } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", @@ -1577,12 +1586,12 @@ } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, @@ -1788,9 +1797,9 @@ "dev": true }, "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "dev": true }, "node_modules/array-union": { @@ -1917,13 +1926,13 @@ "dev": true }, "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "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.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -1931,7 +1940,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -1971,13 +1980,11 @@ } }, "node_modules/bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", "dev": true, "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" } @@ -2498,9 +2505,9 @@ } }, "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, "engines": { "node": ">= 0.6" @@ -2890,12 +2897,6 @@ "node": ">=8" } }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, "node_modules/dns-packet": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", @@ -3068,9 +3069,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -3454,17 +3455,17 @@ } }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dev": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -3495,16 +3496,10 @@ "node": ">= 0.10.0" } }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, "node_modules/express/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "dev": true, "engines": { "node": ">= 0.6" @@ -3751,9 +3746,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "dev": true, "funding": [ { @@ -3852,9 +3847,9 @@ "dev": true }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "hasInstallScript": true, "optional": true, "os": [ @@ -4031,9 +4026,9 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, "node_modules/graphemer": { @@ -4210,9 +4205,9 @@ } }, "node_modules/html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", "dev": true, "funding": [ { @@ -4426,9 +4421,9 @@ "dev": true }, "node_modules/inline-source-map": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", - "integrity": "sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.3.tgz", + "integrity": "sha512-1aVsPEsJWMJq/pdMU61CDlm1URcW702MTB4w9/zUjMus6H/Py8o7g68Pr9D4I6QluWGt/KdmswuRhaA05xVR1w==", "dev": true, "dependencies": { "source-map": "~0.5.3" @@ -5423,13 +5418,13 @@ } }, "node_modules/launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", "dev": true, "dependencies": { "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" + "shell-quote": "^1.8.1" } }, "node_modules/less": { @@ -5833,12 +5828,13 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", - "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.1.tgz", + "integrity": "sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA==", "dev": true, "dependencies": { - "schema-utils": "^4.0.0" + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" }, "engines": { "node": ">= 12.13.0" @@ -6491,13 +6487,13 @@ } }, "node_modules/playwright-chromium": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/playwright-chromium/-/playwright-chromium-1.42.0.tgz", - "integrity": "sha512-KSr77+O8XAo7P86SD7B7Ww0Z2gJi45seLNHdUuomVE1U/Up7GPFELfvbZsAHL6oppTrfEYPq3QzdR56uOZ8uJQ==", + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/playwright-chromium/-/playwright-chromium-1.43.0.tgz", + "integrity": "sha512-WeytzaCdiSL7NfGr6Pix/LTrnVixo5apb0q3SjgDQ9xtLYq0QCB9WanzDj2GI7DCmPEIhdCpvC2MRAjuJUUZyA==", "dev": true, "hasInstallScript": true, "dependencies": { - "playwright-core": "1.42.0" + "playwright-core": "1.43.0" }, "bin": { "playwright": "cli.js" @@ -6507,9 +6503,9 @@ } }, "node_modules/playwright-core": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.42.0.tgz", - "integrity": "sha512-0HD9y8qEVlcbsAjdpBaFjmaTHf+1FeIddy8VJLeiqwhcNqGCBe4Wp2e8knpqiYbzxtxarxiXyNDw2cG8sCaNMQ==", + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.43.0.tgz", + "integrity": "sha512-iWFjyBUH97+pUFiyTqSLd8cDMMOS0r2ZYz2qEsPjH8/bX++sbIJT35MSwKnp1r/OQBAqC5XO99xFbJ9XClhf4w==", "dev": true, "bin": { "playwright-core": "cli.js" @@ -6630,20 +6626,20 @@ "integrity": "sha512-fToQmRqECBJSlHaKNAzFql52ryNnhSm2UwRXfsctcS5Hp//o9sExasVsASv6jZjXE8ACNyKjDUKdGqWsCjRd1Q==" }, "node_modules/powerbi-visuals-api": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/powerbi-visuals-api/-/powerbi-visuals-api-5.8.0.tgz", - "integrity": "sha512-0rcldFiNPn0HSQ3XGdFzRqFofh/UHn0zcGMtcUWXqJIIL3ekhpdRmTdw/OsT9biEHVnBiim3HIhgHHoGr/se/Q==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/powerbi-visuals-api/-/powerbi-visuals-api-5.9.0.tgz", + "integrity": "sha512-i7GLJOr2gNvdvHuGqTt+ktBVuRcrduoJMIG94avCba/iPEo2pHGqbdESfsV85UALwZA+6lTKfOnwn83lDh0rCA==", "dependencies": { - "semver": "^7.3.5" + "semver": "^7.6.0" } }, "node_modules/powerbi-visuals-tools": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/powerbi-visuals-tools/-/powerbi-visuals-tools-5.4.2.tgz", - "integrity": "sha512-5zjyf2ByXIMTmoOuMkweGkOoPC5qkOqa2P3p4gn1fxIGfhmUrkDcH73Ib6y9nbbb6OhcL2zT4OL777Hvzj7Fvg==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/powerbi-visuals-tools/-/powerbi-visuals-tools-5.4.3.tgz", + "integrity": "sha512-msriNFlq+jk+YfJ7lBOG657QJggFCD3h0YMmmk2H5F7M4doVoVuY/79jcs3MacjZds3lMARKexxR+V6n/tiwgA==", "dev": true, "dependencies": { - "@typescript-eslint/parser": "^6.17.0", + "@typescript-eslint/parser": "^6.21.0", "assert": "^2.1.0", "async": "^3.2.5", "browserify-zlib": "^0.2.0", @@ -6654,13 +6650,13 @@ "console-browserify": "^1.2.0", "constants-browserify": "^1.0.0", "crypto-browserify": "^3.12.0", - "css-loader": "^6.8.1", + "css-loader": "^6.10.0", "domain-browser": "^5.7.0", "events": "^3.3.0", "extra-watch-webpack-plugin": "^1.0.3", "fs-extra": "^11.2.0", "https-browserify": "^1.0.0", - "inline-source-map": "^0.6.2", + "inline-source-map": "^0.6.3", "json-loader": "0.5.7", "jszip": "^3.10.1", "less": "^4.2.0", @@ -6669,7 +6665,7 @@ "lodash.defaults": "4.2.0", "lodash.isequal": "4.5.0", "lodash.ismatch": "^4.4.0", - "mini-css-extract-plugin": "^2.7.6", + "mini-css-extract-plugin": "^2.8.1", "os-browserify": "^0.3.0", "path-browserify": "^1.0.1", "powerbi-visuals-webpack-plugin": "4.1.0", @@ -6688,9 +6684,9 @@ "url": "^0.11.3", "util": "^0.12.5", "vm-browserify": "^1.1.2", - "webpack": "^5.89.0", + "webpack": "^5.91.0", "webpack-bundle-analyzer": "4.10.1", - "webpack-dev-server": "^4.15.1" + "webpack-dev-server": "^4.15.2" }, "bin": { "pbiviz": "bin/pbiviz.js" @@ -6821,101 +6817,85 @@ } }, "node_modules/powerbi-visuals-utils-colorutils": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-colorutils/-/powerbi-visuals-utils-colorutils-6.0.3.tgz", - "integrity": "sha512-Xcc4Z4337X2E1CpdTzgfwZC38suSbo/HKSOo+puzotIcUuX6KUlVjrnnuSggDAkd2KzjNEAVRmuS6GsTEpXu7Q==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-colorutils/-/powerbi-visuals-utils-colorutils-6.0.4.tgz", + "integrity": "sha512-gCQOU6KvY56zz9f/FQLns+01X90p7W+xyX3BbnH3ACR6/iWvrtCuzbGHrfSO/UVPN3vACVsG3zOabNVi43qm9Q==", "dependencies": { - "powerbi-visuals-utils-dataviewutils": "^6.0.2", - "powerbi-visuals-utils-typeutils": "^6.0.2" + "powerbi-visuals-utils-dataviewutils": "^6.0.3", + "powerbi-visuals-utils-typeutils": "^6.0.3" } }, "node_modules/powerbi-visuals-utils-dataviewutils": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-dataviewutils/-/powerbi-visuals-utils-dataviewutils-6.0.2.tgz", - "integrity": "sha512-TwB+NV4jiExKoV2xSQITPR5V4bCvFWpYI+/IR3Z7CTdSlJdlEbc1+2mKdlRN8fOS2m3XY8M3SkUu3rqHAzmkHw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-dataviewutils/-/powerbi-visuals-utils-dataviewutils-6.0.3.tgz", + "integrity": "sha512-GzAb0J86tjAXfrLlNZ0dYR70m6YW751UcUnnpBzV7rz0w0UjHL0ty+rU3yzNEORcqb5hHNnBa3kMEzgz0l4LxA==", "optionalDependencies": { "fsevents": "*" } }, "node_modules/powerbi-visuals-utils-formattingmodel": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-formattingmodel/-/powerbi-visuals-utils-formattingmodel-6.0.1.tgz", - "integrity": "sha512-WWdyQI9bUlBtsRncpuCQ0wg27mKEnZLKNlvPhov7tSUBky0V7rsJ4uiDLutnrMCWcLuu8IZGAMtEnu06NyeVjQ==", - "dependencies": { - "powerbi-visuals-api": "~5.7.0" - } - }, - "node_modules/powerbi-visuals-utils-formattingmodel/node_modules/powerbi-visuals-api": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/powerbi-visuals-api/-/powerbi-visuals-api-5.7.0.tgz", - "integrity": "sha512-sPAGYUUkTtbbZXyL8cIJZh6MrZ7BiXPs5li3V7pAa3UUQC3Jih7OS1Hq9AsTp05IKsp94YHXILrcyn4mNAi9qg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-formattingmodel/-/powerbi-visuals-utils-formattingmodel-6.0.2.tgz", + "integrity": "sha512-UY9g7ZyY1UC7pyzJxjZU8iwvIfMrLCHzYSEL1D3B65mZHgdIW/vWhGS0EvXTEdl0Gu0HmTiwvvVXtN3+IfHgiA==", "dependencies": { - "semver": "^7.3.5" + "powerbi-visuals-api": "^5.9.0" } }, "node_modules/powerbi-visuals-utils-formattingutils": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-formattingutils/-/powerbi-visuals-utils-formattingutils-6.1.0.tgz", - "integrity": "sha512-UecuCS1u3LnOBwVem1wESvBz7JX+AO9pzjZxmZR11WHmg4ZSLqPMGXr751Oh/KvNJ1BXaLXg5cA92ioY8axnRg==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-formattingutils/-/powerbi-visuals-utils-formattingutils-6.1.1.tgz", + "integrity": "sha512-KQNjQQIfH007COcr5xMdN9WVZ6v2OcYX7l4U8ZL5lTpcKhaQBH3g96AUECz3oWnK7rmqI9DjqdikUTkcPBgo5Q==", "dependencies": { - "powerbi-visuals-api": "5.7.0", - "powerbi-visuals-utils-dataviewutils": "^6.0.2", - "powerbi-visuals-utils-typeutils": "^6.0.2" + "powerbi-visuals-api": "^5.9.0", + "powerbi-visuals-utils-dataviewutils": "^6.0.3", + "powerbi-visuals-utils-typeutils": "^6.0.3" }, "optionalDependencies": { - "fsevents": "*" - } - }, - "node_modules/powerbi-visuals-utils-formattingutils/node_modules/powerbi-visuals-api": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/powerbi-visuals-api/-/powerbi-visuals-api-5.7.0.tgz", - "integrity": "sha512-sPAGYUUkTtbbZXyL8cIJZh6MrZ7BiXPs5li3V7pAa3UUQC3Jih7OS1Hq9AsTp05IKsp94YHXILrcyn4mNAi9qg==", - "dependencies": { - "semver": "^7.3.5" + "fsevents": "2.3.3" } }, "node_modules/powerbi-visuals-utils-interactivityutils": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-interactivityutils/-/powerbi-visuals-utils-interactivityutils-6.0.3.tgz", - "integrity": "sha512-PosUUJHyoIyFmtC8xIRtWmHUGqXYmk86GwIWwDVAvXCJGZU7FS8zAI0DWBwao86sQ6xgQgt7xtHqLa54v7v/Ag==", + "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.3", - "powerbi-visuals-utils-typeutils": "^6.0.2" + "powerbi-visuals-utils-svgutils": "^6.0.4", + "powerbi-visuals-utils-typeutils": "^6.0.3" } }, "node_modules/powerbi-visuals-utils-svgutils": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-svgutils/-/powerbi-visuals-utils-svgutils-6.0.3.tgz", - "integrity": "sha512-uqJ82eAZuBIr4eNlUGvlSNvn+sum3PcjDflvsJwmudi/pBZcHGJi35GyguWHX5PCguKyfoN6vcmO81MszpclAQ==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-svgutils/-/powerbi-visuals-utils-svgutils-6.0.4.tgz", + "integrity": "sha512-5aS/nxvO25adfmUn9bLh1OMmbQFGzN7b1AETp2ak/mtpMJ3dTRuXpq1wyXpByxIYTkrQ7iPsrUtdjCSXeboX2Q==", "dependencies": { "d3-selection": "^3.0.0", "d3-timer": "^3.0.1", - "powerbi-visuals-utils-typeutils": "^6.0.2" + "powerbi-visuals-utils-typeutils": "^6.0.3" } }, "node_modules/powerbi-visuals-utils-testutils": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-testutils/-/powerbi-visuals-utils-testutils-6.1.0.tgz", - "integrity": "sha512-XIpsesh7bcgnrFYofNIi7a0X2ArR3A7h7cLYqX3qugN+EA0710e/5LeygXKxq8ZvZoC334EC+KvtfbNAvoabkQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-testutils/-/powerbi-visuals-utils-testutils-6.1.1.tgz", + "integrity": "sha512-BHD/b0trm99M3hyrqfWb4WPSLQBVcWh5XQtbl+uoqRzFjPCpaE9enS3MgPyUmRGR8xeTpkfWLc7o8w8XCIstrw==", "dev": true, "dependencies": { "d3-array": "3.2.4", "d3-timer": "3.0.1", "lodash-es": "4.17.21", - "powerbi-visuals-api": "^5.8.0", - "powerbi-visuals-utils-formattingmodel": "^6.0.1", - "powerbi-visuals-utils-typeutils": "^6.0.2" + "powerbi-visuals-api": "^5.9.0", + "powerbi-visuals-utils-formattingmodel": "^6.0.2", + "powerbi-visuals-utils-typeutils": "^6.0.3" }, "optionalDependencies": { "fsevents": "*" } }, "node_modules/powerbi-visuals-utils-typeutils": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-typeutils/-/powerbi-visuals-utils-typeutils-6.0.2.tgz", - "integrity": "sha512-KPZ65ti4+jiSpxfNkCTATudE6b9+GpbDG3/8NI5b4X8Vym4eI+LAn2TtZAy6yX0h68WLA5eV0du/TOaPog+REQ==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-typeutils/-/powerbi-visuals-utils-typeutils-6.0.3.tgz", + "integrity": "sha512-GKJTdIgoNushNHaFOHkyRIdccbnk4ECb89DqVICthm3fuLHOD15Nb3hH45kz+2dr8lPdc9oCHhuDiBGMcCr1UQ==", "optionalDependencies": { "fsevents": "*" } @@ -7163,9 +7143,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "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", @@ -7410,11 +7390,12 @@ "dev": true }, "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", "dev": true, "dependencies": { + "@types/node-forge": "^1.3.0", "node-forge": "^1" }, "engines": { @@ -7422,9 +7403,9 @@ } }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -8478,9 +8459,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", "dev": true, "dependencies": { "glob-to-regexp": "^0.4.1", @@ -8509,26 +8490,26 @@ } }, "node_modules/webpack": { - "version": "5.90.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", - "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", + "version": "5.91.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", + "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", "acorn-import-assertions": "^1.9.0", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", + "enhanced-resolve": "^5.16.0", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", @@ -8536,7 +8517,7 @@ "schema-utils": "^3.2.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.0", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { @@ -8613,9 +8594,9 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "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==", "dev": true, "dependencies": { "colorette": "^2.0.10", @@ -8689,9 +8670,9 @@ } }, "node_modules/webpack-dev-server": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", - "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", + "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", @@ -8722,7 +8703,7 @@ "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", + "webpack-dev-middleware": "^5.3.4", "ws": "^8.13.0" }, "bin": { @@ -8801,9 +8782,9 @@ } }, "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.14.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", - "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "dev": true, "engines": { "node": ">=10.0.0" @@ -9679,9 +9660,9 @@ } }, "@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "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 }, "@nodelib/fs.scandir": { @@ -9754,9 +9735,9 @@ "dev": true }, "@types/body-parser": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.3.tgz", - "integrity": "sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==", + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, "requires": { "@types/connect": "*", @@ -9764,27 +9745,27 @@ } }, "@types/bonjour": { - "version": "3.5.11", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.11.tgz", - "integrity": "sha512-isGhjmBtLIxdHBDl2xGwUzEM8AOyOvWsADWq7rqirdi/ZQoHnLWErHvsThcEzTX8juDRiZtzp2Qkv5bgNh6mAg==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", "dev": true, "requires": { "@types/node": "*" } }, "@types/connect": { - "version": "3.4.36", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", - "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, "requires": { "@types/node": "*" } }, "@types/connect-history-api-fallback": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.1.tgz", - "integrity": "sha512-iaQslNbARe8fctL5Lk+DsmgWOM83lM+7FzP0eQUJs1jd3kBE8NWqBTIT2S8SqQOJjxvt2eyIjpOuYeRXq2AdMw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", "dev": true, "requires": { "@types/express-serve-static-core": "*", @@ -9839,9 +9820,9 @@ "dev": true }, "@types/express": { - "version": "4.17.18", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.18.tgz", - "integrity": "sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, "requires": { "@types/body-parser": "*", @@ -9851,9 +9832,9 @@ } }, "@types/express-serve-static-core": { - "version": "4.17.37", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.37.tgz", - "integrity": "sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg==", + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz", + "integrity": "sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==", "dev": true, "requires": { "@types/node": "*", @@ -9863,15 +9844,15 @@ } }, "@types/http-errors": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.2.tgz", - "integrity": "sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg==", + "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 }, "@types/http-proxy": { - "version": "1.17.12", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.12.tgz", - "integrity": "sha512-kQtujO08dVtQ2wXAuSFfk9ASy3sug4+ogFR8Kd8UgP8PEuc1/G/8yjYRmp//PcDNJEUKOza/MrQu15bouEUCiw==", + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", "dev": true, "requires": { "@types/node": "*" @@ -9923,9 +9904,9 @@ } }, "@types/mime": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.3.tgz", - "integrity": "sha512-Ys+/St+2VF4+xuY6+kDIXGxbNRO0mesVg0bbxEfB97Od1Vjpjx9KD1qxs64Gcb3CWPirk9Xe+PT4YiiHQ9T+eg==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "dev": true }, "@types/node": { @@ -9934,16 +9915,25 @@ "integrity": "sha512-3JRwhbjI+cHLAkUorhf8RnqUbFXajvzX4q6fMn5JwkgtuwfYtRQYI3u4V92vI6NJuTsbBQWWh3RZjFsuevyMGQ==", "dev": true }, + "@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/qs": { - "version": "6.9.8", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz", - "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==", + "version": "6.9.14", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.14.tgz", + "integrity": "sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==", "dev": true }, "@types/range-parser": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.5.tgz", - "integrity": "sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA==", + "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 }, "@types/retry": { @@ -9959,9 +9949,9 @@ "dev": true }, "@types/send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.2.tgz", - "integrity": "sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw==", + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, "requires": { "@types/mime": "^1", @@ -9969,29 +9959,29 @@ } }, "@types/serve-index": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.2.tgz", - "integrity": "sha512-asaEIoc6J+DbBKXtO7p2shWUpKacZOoMBEGBgPG91P8xhO53ohzHWGCs4ScZo5pQMf5ukQzVT9fhX1WzpHihig==", + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "dev": true, "requires": { "@types/express": "*" } }, "@types/serve-static": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.3.tgz", - "integrity": "sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg==", + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", "dev": true, "requires": { "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" + "@types/node": "*", + "@types/send": "*" } }, "@types/sockjs": { - "version": "0.3.34", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.34.tgz", - "integrity": "sha512-R+n7qBFnm/6jinlteC9DBL5dGiDGjWAvjo4viUanpnc/dG1y7uDoacXPIQ/PQEg1fI912SMHIa014ZjRpvDw4g==", + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", "dev": true, "requires": { "@types/node": "*" @@ -10022,9 +10012,9 @@ "dev": true }, "@types/ws": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.6.tgz", - "integrity": "sha512-8B5EO9jLVCy+B58PLHvLDuOD8DRVMgQzq8d55SjLCOn9kqGyqOvy27exVaTio1q1nX5zLu8/6N0n2ThSxOM6tg==", + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", "dev": true, "requires": { "@types/node": "*" @@ -10158,9 +10148,9 @@ "dev": true }, "@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, "requires": { "@webassemblyjs/helper-numbers": "1.11.6", @@ -10180,9 +10170,9 @@ "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", "dev": true }, "@webassemblyjs/helper-numbers": { @@ -10203,15 +10193,15 @@ "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/wasm-gen": "1.12.1" } }, "@webassemblyjs/ieee754": { @@ -10239,28 +10229,28 @@ "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", @@ -10268,24 +10258,24 @@ } }, "@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", @@ -10294,12 +10284,12 @@ } }, "@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, @@ -10452,9 +10442,9 @@ "dev": true }, "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "dev": true }, "array-union": { @@ -10551,13 +10541,13 @@ "dev": true }, "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dev": true, "requires": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -10565,7 +10555,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -10597,13 +10587,11 @@ } }, "bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", "dev": true, "requires": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" } @@ -11017,9 +11005,9 @@ } }, "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 }, "convert-source-map": { @@ -11322,12 +11310,6 @@ "path-type": "^4.0.0" } }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, "dns-packet": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", @@ -11472,9 +11454,9 @@ "dev": true }, "enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", "dev": true, "requires": { "graceful-fs": "^4.2.4", @@ -11768,17 +11750,17 @@ } }, "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dev": true, "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -11806,16 +11788,10 @@ "vary": "~1.1.2" }, "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "dev": true }, "debug": { @@ -12024,9 +12000,9 @@ "dev": true }, "follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "dev": true }, "for-each": { @@ -12092,9 +12068,9 @@ "dev": true }, "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "optional": true }, "function-bind": { @@ -12213,9 +12189,9 @@ } }, "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, "graphemer": { @@ -12361,9 +12337,9 @@ } }, "html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", "dev": true }, "html-escaper": { @@ -12507,9 +12483,9 @@ "dev": true }, "inline-source-map": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", - "integrity": "sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.3.tgz", + "integrity": "sha512-1aVsPEsJWMJq/pdMU61CDlm1URcW702MTB4w9/zUjMus6H/Py8o7g68Pr9D4I6QluWGt/KdmswuRhaA05xVR1w==", "dev": true, "requires": { "source-map": "~0.5.3" @@ -13257,13 +13233,13 @@ } }, "launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", "dev": true, "requires": { "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" + "shell-quote": "^1.8.1" } }, "less": { @@ -13583,12 +13559,13 @@ "dev": true }, "mini-css-extract-plugin": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", - "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.1.tgz", + "integrity": "sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA==", "dev": true, "requires": { - "schema-utils": "^4.0.0" + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" }, "dependencies": { "ajv": { @@ -14067,18 +14044,18 @@ "optional": true }, "playwright-chromium": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/playwright-chromium/-/playwright-chromium-1.42.0.tgz", - "integrity": "sha512-KSr77+O8XAo7P86SD7B7Ww0Z2gJi45seLNHdUuomVE1U/Up7GPFELfvbZsAHL6oppTrfEYPq3QzdR56uOZ8uJQ==", + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/playwright-chromium/-/playwright-chromium-1.43.0.tgz", + "integrity": "sha512-WeytzaCdiSL7NfGr6Pix/LTrnVixo5apb0q3SjgDQ9xtLYq0QCB9WanzDj2GI7DCmPEIhdCpvC2MRAjuJUUZyA==", "dev": true, "requires": { - "playwright-core": "1.42.0" + "playwright-core": "1.43.0" } }, "playwright-core": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.42.0.tgz", - "integrity": "sha512-0HD9y8qEVlcbsAjdpBaFjmaTHf+1FeIddy8VJLeiqwhcNqGCBe4Wp2e8knpqiYbzxtxarxiXyNDw2cG8sCaNMQ==", + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.43.0.tgz", + "integrity": "sha512-iWFjyBUH97+pUFiyTqSLd8cDMMOS0r2ZYz2qEsPjH8/bX++sbIJT35MSwKnp1r/OQBAqC5XO99xFbJ9XClhf4w==", "dev": true }, "postcss": { @@ -14150,20 +14127,20 @@ "integrity": "sha512-fToQmRqECBJSlHaKNAzFql52ryNnhSm2UwRXfsctcS5Hp//o9sExasVsASv6jZjXE8ACNyKjDUKdGqWsCjRd1Q==" }, "powerbi-visuals-api": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/powerbi-visuals-api/-/powerbi-visuals-api-5.8.0.tgz", - "integrity": "sha512-0rcldFiNPn0HSQ3XGdFzRqFofh/UHn0zcGMtcUWXqJIIL3ekhpdRmTdw/OsT9biEHVnBiim3HIhgHHoGr/se/Q==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/powerbi-visuals-api/-/powerbi-visuals-api-5.9.0.tgz", + "integrity": "sha512-i7GLJOr2gNvdvHuGqTt+ktBVuRcrduoJMIG94avCba/iPEo2pHGqbdESfsV85UALwZA+6lTKfOnwn83lDh0rCA==", "requires": { - "semver": "^7.3.5" + "semver": "^7.6.0" } }, "powerbi-visuals-tools": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/powerbi-visuals-tools/-/powerbi-visuals-tools-5.4.2.tgz", - "integrity": "sha512-5zjyf2ByXIMTmoOuMkweGkOoPC5qkOqa2P3p4gn1fxIGfhmUrkDcH73Ib6y9nbbb6OhcL2zT4OL777Hvzj7Fvg==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/powerbi-visuals-tools/-/powerbi-visuals-tools-5.4.3.tgz", + "integrity": "sha512-msriNFlq+jk+YfJ7lBOG657QJggFCD3h0YMmmk2H5F7M4doVoVuY/79jcs3MacjZds3lMARKexxR+V6n/tiwgA==", "dev": true, "requires": { - "@typescript-eslint/parser": "^6.17.0", + "@typescript-eslint/parser": "^6.21.0", "assert": "^2.1.0", "async": "^3.2.5", "browserify-zlib": "^0.2.0", @@ -14174,14 +14151,14 @@ "console-browserify": "^1.2.0", "constants-browserify": "^1.0.0", "crypto-browserify": "^3.12.0", - "css-loader": "^6.8.1", + "css-loader": "^6.10.0", "domain-browser": "^5.7.0", "events": "^3.3.0", "extra-watch-webpack-plugin": "^1.0.3", "fs-extra": "^11.2.0", "fsevents": "*", "https-browserify": "^1.0.0", - "inline-source-map": "^0.6.2", + "inline-source-map": "^0.6.3", "json-loader": "0.5.7", "jszip": "^3.10.1", "less": "^4.2.0", @@ -14190,7 +14167,7 @@ "lodash.defaults": "4.2.0", "lodash.isequal": "4.5.0", "lodash.ismatch": "^4.4.0", - "mini-css-extract-plugin": "^2.7.6", + "mini-css-extract-plugin": "^2.8.1", "os-browserify": "^0.3.0", "path-browserify": "^1.0.1", "powerbi-visuals-webpack-plugin": "4.1.0", @@ -14209,9 +14186,9 @@ "url": "^0.11.3", "util": "^0.12.5", "vm-browserify": "^1.1.2", - "webpack": "^5.89.0", + "webpack": "^5.91.0", "webpack-bundle-analyzer": "4.10.1", - "webpack-dev-server": "^4.15.1" + "webpack-dev-server": "^4.15.2" }, "dependencies": { "buffer": { @@ -14291,101 +14268,81 @@ } }, "powerbi-visuals-utils-colorutils": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-colorutils/-/powerbi-visuals-utils-colorutils-6.0.3.tgz", - "integrity": "sha512-Xcc4Z4337X2E1CpdTzgfwZC38suSbo/HKSOo+puzotIcUuX6KUlVjrnnuSggDAkd2KzjNEAVRmuS6GsTEpXu7Q==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-colorutils/-/powerbi-visuals-utils-colorutils-6.0.4.tgz", + "integrity": "sha512-gCQOU6KvY56zz9f/FQLns+01X90p7W+xyX3BbnH3ACR6/iWvrtCuzbGHrfSO/UVPN3vACVsG3zOabNVi43qm9Q==", "requires": { - "powerbi-visuals-utils-dataviewutils": "^6.0.2", - "powerbi-visuals-utils-typeutils": "^6.0.2" + "powerbi-visuals-utils-dataviewutils": "^6.0.3", + "powerbi-visuals-utils-typeutils": "^6.0.3" } }, "powerbi-visuals-utils-dataviewutils": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-dataviewutils/-/powerbi-visuals-utils-dataviewutils-6.0.2.tgz", - "integrity": "sha512-TwB+NV4jiExKoV2xSQITPR5V4bCvFWpYI+/IR3Z7CTdSlJdlEbc1+2mKdlRN8fOS2m3XY8M3SkUu3rqHAzmkHw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-dataviewutils/-/powerbi-visuals-utils-dataviewutils-6.0.3.tgz", + "integrity": "sha512-GzAb0J86tjAXfrLlNZ0dYR70m6YW751UcUnnpBzV7rz0w0UjHL0ty+rU3yzNEORcqb5hHNnBa3kMEzgz0l4LxA==", "requires": { "fsevents": "*" } }, "powerbi-visuals-utils-formattingmodel": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-formattingmodel/-/powerbi-visuals-utils-formattingmodel-6.0.1.tgz", - "integrity": "sha512-WWdyQI9bUlBtsRncpuCQ0wg27mKEnZLKNlvPhov7tSUBky0V7rsJ4uiDLutnrMCWcLuu8IZGAMtEnu06NyeVjQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-formattingmodel/-/powerbi-visuals-utils-formattingmodel-6.0.2.tgz", + "integrity": "sha512-UY9g7ZyY1UC7pyzJxjZU8iwvIfMrLCHzYSEL1D3B65mZHgdIW/vWhGS0EvXTEdl0Gu0HmTiwvvVXtN3+IfHgiA==", "requires": { - "powerbi-visuals-api": "~5.7.0" - }, - "dependencies": { - "powerbi-visuals-api": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/powerbi-visuals-api/-/powerbi-visuals-api-5.7.0.tgz", - "integrity": "sha512-sPAGYUUkTtbbZXyL8cIJZh6MrZ7BiXPs5li3V7pAa3UUQC3Jih7OS1Hq9AsTp05IKsp94YHXILrcyn4mNAi9qg==", - "requires": { - "semver": "^7.3.5" - } - } + "powerbi-visuals-api": "^5.9.0" } }, "powerbi-visuals-utils-formattingutils": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-formattingutils/-/powerbi-visuals-utils-formattingutils-6.1.0.tgz", - "integrity": "sha512-UecuCS1u3LnOBwVem1wESvBz7JX+AO9pzjZxmZR11WHmg4ZSLqPMGXr751Oh/KvNJ1BXaLXg5cA92ioY8axnRg==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-formattingutils/-/powerbi-visuals-utils-formattingutils-6.1.1.tgz", + "integrity": "sha512-KQNjQQIfH007COcr5xMdN9WVZ6v2OcYX7l4U8ZL5lTpcKhaQBH3g96AUECz3oWnK7rmqI9DjqdikUTkcPBgo5Q==", "requires": { - "fsevents": "*", - "powerbi-visuals-api": "5.7.0", - "powerbi-visuals-utils-dataviewutils": "^6.0.2", - "powerbi-visuals-utils-typeutils": "^6.0.2" - }, - "dependencies": { - "powerbi-visuals-api": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/powerbi-visuals-api/-/powerbi-visuals-api-5.7.0.tgz", - "integrity": "sha512-sPAGYUUkTtbbZXyL8cIJZh6MrZ7BiXPs5li3V7pAa3UUQC3Jih7OS1Hq9AsTp05IKsp94YHXILrcyn4mNAi9qg==", - "requires": { - "semver": "^7.3.5" - } - } + "fsevents": "2.3.3", + "powerbi-visuals-api": "^5.9.0", + "powerbi-visuals-utils-dataviewutils": "^6.0.3", + "powerbi-visuals-utils-typeutils": "^6.0.3" } }, "powerbi-visuals-utils-interactivityutils": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-interactivityutils/-/powerbi-visuals-utils-interactivityutils-6.0.3.tgz", - "integrity": "sha512-PosUUJHyoIyFmtC8xIRtWmHUGqXYmk86GwIWwDVAvXCJGZU7FS8zAI0DWBwao86sQ6xgQgt7xtHqLa54v7v/Ag==", + "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==", "requires": { "d3-selection": "^3.0.0", "powerbi-models": "1.13.0", - "powerbi-visuals-utils-svgutils": "^6.0.3", - "powerbi-visuals-utils-typeutils": "^6.0.2" + "powerbi-visuals-utils-svgutils": "^6.0.4", + "powerbi-visuals-utils-typeutils": "^6.0.3" } }, "powerbi-visuals-utils-svgutils": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-svgutils/-/powerbi-visuals-utils-svgutils-6.0.3.tgz", - "integrity": "sha512-uqJ82eAZuBIr4eNlUGvlSNvn+sum3PcjDflvsJwmudi/pBZcHGJi35GyguWHX5PCguKyfoN6vcmO81MszpclAQ==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-svgutils/-/powerbi-visuals-utils-svgutils-6.0.4.tgz", + "integrity": "sha512-5aS/nxvO25adfmUn9bLh1OMmbQFGzN7b1AETp2ak/mtpMJ3dTRuXpq1wyXpByxIYTkrQ7iPsrUtdjCSXeboX2Q==", "requires": { "d3-selection": "^3.0.0", "d3-timer": "^3.0.1", - "powerbi-visuals-utils-typeutils": "^6.0.2" + "powerbi-visuals-utils-typeutils": "^6.0.3" } }, "powerbi-visuals-utils-testutils": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-testutils/-/powerbi-visuals-utils-testutils-6.1.0.tgz", - "integrity": "sha512-XIpsesh7bcgnrFYofNIi7a0X2ArR3A7h7cLYqX3qugN+EA0710e/5LeygXKxq8ZvZoC334EC+KvtfbNAvoabkQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-testutils/-/powerbi-visuals-utils-testutils-6.1.1.tgz", + "integrity": "sha512-BHD/b0trm99M3hyrqfWb4WPSLQBVcWh5XQtbl+uoqRzFjPCpaE9enS3MgPyUmRGR8xeTpkfWLc7o8w8XCIstrw==", "dev": true, "requires": { "d3-array": "3.2.4", "d3-timer": "3.0.1", "fsevents": "*", "lodash-es": "4.17.21", - "powerbi-visuals-api": "^5.8.0", - "powerbi-visuals-utils-formattingmodel": "^6.0.1", - "powerbi-visuals-utils-typeutils": "^6.0.2" + "powerbi-visuals-api": "^5.9.0", + "powerbi-visuals-utils-formattingmodel": "^6.0.2", + "powerbi-visuals-utils-typeutils": "^6.0.3" } }, "powerbi-visuals-utils-typeutils": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-typeutils/-/powerbi-visuals-utils-typeutils-6.0.2.tgz", - "integrity": "sha512-KPZ65ti4+jiSpxfNkCTATudE6b9+GpbDG3/8NI5b4X8Vym4eI+LAn2TtZAy6yX0h68WLA5eV0du/TOaPog+REQ==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/powerbi-visuals-utils-typeutils/-/powerbi-visuals-utils-typeutils-6.0.3.tgz", + "integrity": "sha512-GKJTdIgoNushNHaFOHkyRIdccbnk4ECb89DqVICthm3fuLHOD15Nb3hH45kz+2dr8lPdc9oCHhuDiBGMcCr1UQ==", "requires": { "fsevents": "*" } @@ -14579,9 +14536,9 @@ "dev": true }, "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "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, "requires": { "bytes": "3.1.2", @@ -14749,18 +14706,19 @@ "dev": true }, "selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", "dev": true, "requires": { + "@types/node-forge": "^1.3.0", "node-forge": "^1" } }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "requires": { "lru-cache": "^6.0.0" } @@ -15544,9 +15502,9 @@ "dev": true }, "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", "dev": true, "requires": { "glob-to-regexp": "^0.4.1", @@ -15572,26 +15530,26 @@ } }, "webpack": { - "version": "5.90.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", - "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", + "version": "5.91.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", + "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", "acorn-import-assertions": "^1.9.0", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", + "enhanced-resolve": "^5.16.0", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", @@ -15599,7 +15557,7 @@ "schema-utils": "^3.2.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.0", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "dependencies": { @@ -15653,9 +15611,9 @@ } }, "webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "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==", "dev": true, "requires": { "colorette": "^2.0.10", @@ -15707,9 +15665,9 @@ } }, "webpack-dev-server": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", - "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", + "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", "dev": true, "requires": { "@types/bonjour": "^3.5.9", @@ -15740,7 +15698,7 @@ "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", + "webpack-dev-middleware": "^5.3.4", "ws": "^8.13.0" }, "dependencies": { @@ -15784,9 +15742,9 @@ } }, "ws": { - "version": "8.14.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", - "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "dev": true, "requires": {} } diff --git a/package.json b/package.json index 5fd355c..80b8733 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "powerbi-visuals-globemap", "description": "GlobeMap", - "version": "3.3.2.0", + "version": "3.3.3.0", "author": { "name": "Microsoft", "email": "pbicvsupport@microsoft.com" @@ -25,13 +25,13 @@ "lodash.clone": "^4.5.0", "lodash.isempty": "^4.4.0", "lodash.mapvalues": "^4.6.0", - "powerbi-visuals-api": "^5.8.0", - "powerbi-visuals-utils-colorutils": "^6.0.3", - "powerbi-visuals-utils-dataviewutils": "^6.0.2", - "powerbi-visuals-utils-formattingmodel": "^6.0.1", - "powerbi-visuals-utils-formattingutils": "^6.1.0", - "powerbi-visuals-utils-interactivityutils": "^6.0.3", - "powerbi-visuals-utils-typeutils": "^6.0.1", + "powerbi-visuals-api": "^5.9.0", + "powerbi-visuals-utils-colorutils": "^6.0.4", + "powerbi-visuals-utils-dataviewutils": "^6.0.3", + "powerbi-visuals-utils-formattingmodel": "^6.0.2", + "powerbi-visuals-utils-formattingutils": "^6.1.1", + "powerbi-visuals-utils-interactivityutils": "^6.0.4", + "powerbi-visuals-utils-typeutils": "^6.0.3", "three": "^0.157.0" }, "devDependencies": { @@ -58,13 +58,13 @@ "karma-webpack": "^5.0.1", "less": "^4.2.0", "less-loader": "^11.1.4", - "playwright-chromium": "^1.42.0", - "powerbi-visuals-tools": "^5.4.2", - "powerbi-visuals-utils-testutils": "^6.1.0", + "playwright-chromium": "^1.43.0", + "powerbi-visuals-tools": "^5.4.3", + "powerbi-visuals-utils-testutils": "^6.1.1", "style-loader": "^3.3.4", "ts-loader": "^9.5.1", "ts-node": "^10.9.2", "typescript": "^5.2.2", - "webpack": "^5.90.3" + "webpack": "^5.91.0" } } diff --git a/pbiviz.json b/pbiviz.json index 7011a91..3cbe6f3 100644 --- a/pbiviz.json +++ b/pbiviz.json @@ -4,12 +4,12 @@ "displayName": "GlobeMap", "guid": "GlobeMap1447669447625", "visualClassName": "GlobeMap", - "version": "3.3.2.0", + "version": "3.3.3.0", "description": "A 3D visual using WebGL for plotting locations, with category values displayed as bar heights and heat maps.\n\nShift+Click on bar to change center point. \nSlicing data points will animate to average location.\n\nAttributions:\nthree.js - https://github.com/mrdoob/three.js/\nwebgl-heatmap - https://github.com/pyalot/webgl-heatmap", "supportUrl": "https://aka.ms/customvisualscommunity", "gitHubUrl": "https://github.com/Microsoft/powerbi-visuals-globemap" }, - "apiVersion": "5.8.0", + "apiVersion": "5.9.0", "author": { "name": "Microsoft", "email": "pbicvsupport@microsoft.com" diff --git a/src/cache/CacheManager.ts b/src/cache/CacheManager.ts index ae99211..f74637d 100644 --- a/src/cache/CacheManager.ts +++ b/src/cache/CacheManager.ts @@ -12,37 +12,31 @@ export class CacheManager { private memoryCache: MemoryCache; private localStorageCache: LocalStorageCache; private bingGeocoder: BingGeocoder; - private coordsInLocalStorage: ILocationDictionary; - private localStorageService: IVisualLocalStorageV2Service; - constructor(localStorageService: IVisualLocalStorageV2Service) { - this.memoryCache = new MemoryCache(CacheSettings.MaxCacheSize, CacheSettings.MaxCacheSizeOverflow); - this.localStorageService = localStorageService; - this.bingGeocoder = new BingGeocoder(); - this.coordsInLocalStorage = {}; + constructor(localStorageService: IVisualLocalStorageV2Service, memoryCache?: MemoryCache, localStorageCache?: LocalStorageCache, bingGeocoder?: BingGeocoder) { + this.memoryCache = memoryCache ?? new MemoryCache(CacheSettings.MaxCacheSize, CacheSettings.MaxCacheSizeOverflow); + this.bingGeocoder = bingGeocoder ?? new BingGeocoder(); + this.localStorageCache = localStorageCache ?? new LocalStorageCache(localStorageService); } - private createLocalStorageCache(): IPromise2 { - const cache: LocalStorageCache = new LocalStorageCache(this.localStorageService); - - return cache.syncStatus() - .then(status => { + private syncLocalStorageCacheStatus(): Promise { + return new Promise((resolve) => { + this.localStorageCache.syncStatus() + .then((status: powerbi.PrivilegeStatus) => { console.log(`Received local storage status: ${status}`); - this.localStorageCache = cache; - return cache - }); + resolve(); + }) + }); } - private getLocationsFromBing = async (locations: string[], locationsInMemory: string[], locationsDictionary: ILocationKeyDictionary): Promise => { + private getLocationsFromBing = async (locations: string[], locationsDictionary: ILocationKeyDictionary): Promise => { console.log("Getting locations from Bing..."); locationsDictionary = locations .reduce((obj, key) => ({ ...obj, [key]: locationsDictionary[key] }), {}); const coordinatesFromBing = await this.bingGeocoder.geocode(locations); - const resultObject = Object.assign({}, locationsInMemory, this.coordsInLocalStorage, coordinatesFromBing); - - return resultObject; + return coordinatesFromBing; } public async loadCoordinates(locationsDictionary: ILocationKeyDictionary): Promise { @@ -56,58 +50,28 @@ export class CacheManager { let locations: string[] = Object.keys(locationsDictionary); // Load from memory - const coordsInMemory: ILocationDictionary = await this.memoryCache.loadCoordinates(locations); // {"London": {"lat": 54, "lon": 34"}, "Moscow": {"lat": 64, "lon": 54"} + const coordsInMemory: ILocationDictionary = this.memoryCache.loadCoordinates(locations); // {"London": {"lat": 54, "lon": 34"}, "Moscow": {"lat": 64, "lon": 54"} locationsInMemory = Object.keys(coordsInMemory); - locations = locations.filter(loc => !locationsInMemory.includes(loc)); - if (locations.length === 0) { result = Object.assign({}, coordsInMemory); return result; } - - // Load from localStorage - if (isEmpty(this.coordsInLocalStorage)) { - return this.createLocalStorageCache() - .then(cache => cache.loadCoordinates(locations)) - .then(async (coordinatesPromise: Promise) => { - const coordinates = await coordinatesPromise; - if (coordinates && Object.keys(coordinates).length > 0) { - if (isEmpty(this.coordsInLocalStorage)) { - this.coordsInLocalStorage = coordinates; - } - - if (this.coordsInLocalStorage) { - const locationsInLocalStorage = Object.keys(this.coordsInLocalStorage); - locations = locations.filter(loc => !locationsInLocalStorage.includes(loc)); - - if (locations.length === 0) { - result = Object.assign({}, locationsInMemory, this.coordsInLocalStorage); - return result; - } - - // Load additional locations from Bing - const locationsFromBing = await this.getLocationsFromBing(locations, locationsInMemory, locationsDictionary); - return locationsFromBing; - } - } - else { - console.log("Local storage is empty, will attempt to load the coordinates from Bing API"); - - const locationsFromBing = await this.getLocationsFromBing(locations, locationsInMemory, locationsDictionary); - return locationsFromBing; - } - - }).catch(async (e) => { - console.error("Error while loading coordinates from local storage", e); - const locationsFromBing = await this.getLocationsFromBing(locations, locationsInMemory, locationsDictionary); - return locationsFromBing; - }); - } - else { - return this.coordsInLocalStorage; + // Load from local storage + await this.syncLocalStorageCacheStatus(); + const coordsInLocalStorage: ILocationDictionary = await this.localStorageCache.loadCoordinates(locations); + const locationsInlocalStorage = Object.keys(coordsInLocalStorage); + locations = locations.filter(loc => !locationsInlocalStorage.includes(loc)); + if (locations.length === 0) { + result = Object.assign({}, coordsInMemory, coordsInLocalStorage); + return result; } + + // Load from Bing + const coordsFromBing: ILocationDictionary = await this.getLocationsFromBing(locations, locationsDictionary); + result = Object.assign({}, coordsInMemory, coordsInLocalStorage, coordsFromBing); + return result; } public saveCoordinates(coordinates: ILocationDictionary): IPromise2 { diff --git a/src/cache/MemoryCache.ts b/src/cache/MemoryCache.ts index 5b3d6ba..d472690 100644 --- a/src/cache/MemoryCache.ts +++ b/src/cache/MemoryCache.ts @@ -22,7 +22,7 @@ export class MemoryCache { this.maxCacheSizeOverflow = maxCacheSizeOverflow; } - public async loadCoordinates(keys: string[]): Promise { + public loadCoordinates(keys: string[]): ILocationDictionary { console.log("Loading from memory cache..."); if (!keys || !keys.length) { @@ -30,7 +30,7 @@ export class MemoryCache { } const locations: ILocationDictionary = {}; - for (const key in this.geocodeCache) { + for (const key of keys) { if (this.geocodeCache[key]) { this.geocodeCache[key].hitCount++; locations[key] = this.geocodeCache[key].coordinate; @@ -44,7 +44,7 @@ export class MemoryCache { return locations; } - public saveCoordinates(coordinates: ILocationDictionary): Promise { + public saveCoordinates(coordinates: ILocationDictionary): void { console.log("Saving coordinates to memory cache..."); if (!coordinates) { diff --git a/src/geocoder.ts b/src/geocoder.ts index d3f600d..46127ad 100644 --- a/src/geocoder.ts +++ b/src/geocoder.ts @@ -62,13 +62,18 @@ export class BingGeocoder { for (let i = 0; i < responseJson.resourceSets.length; i++) { const currentSet: BingGeocodeResourceSet = responseJson.resourceSets[i]; - const coordinates: number[] = currentSet.resources[0].point.coordinates; - - const latitude: number = coordinates[0]; - const longitude: number = coordinates[1]; - - const name: string = batch[i]; - result[name] = { latitude, longitude }; + if (!currentSet.resources[0]?.point){ + console.log(`Could not get coordinates of '${batch[i]}' from Bing`); + } + else { + const coordinates: number[] = currentSet.resources[0].point.coordinates; + + const latitude: number = coordinates[0]; + const longitude: number = coordinates[1]; + + const name: string = batch[i]; + result[name] = { latitude, longitude }; + } } })); } catch (e) { diff --git a/test/visualData.ts b/test/visualData.ts index e8755bb..72d297b 100644 --- a/test/visualData.ts +++ b/test/visualData.ts @@ -104,6 +104,28 @@ export class GlobeMapData extends TestDataViewBuilder { 80.237908 ]; + public coordinatesMock: ILocationDictionary = { + "addis ababa, ethiopia": {latitude: 9.03582859, longitude: 38.75241089}, + "ahmedabad, india": {latitude: 23.0145092, longitude: 72.59175873}, + "cairo, egypt": {latitude: 30.04348755, longitude: 31.23529243}, + "cape town, south africa": {latitude: -33.92710876, longitude: 18.42006111}, + "casablanca, morocco": {latitude: 33.59451294, longitude: -7.6200285}, + "chennai, india": {latitude: 13.07209206, longitude: 80.20185852}, + "durban, south africa": {latitude: -29.88188934, longitude: 30.98084259}, + "jakarta, indonesia": {latitude: -6.17475653, longitude: 106.82707214}, + "jeddah, saudi arabia": {latitude: 21.48730469, longitude: 39.18133545}, + "lagos, nigeria": {latitude: 6.45505762, longitude: 3.39417958}, + "lima, peru": {latitude: -12.06210613, longitude: -77.03652191}, + "london, united kingdom": {latitude: 51.50740814, longitude: -0.12772401}, + "mexico city, mexico": {latitude: 19.43267822, longitude: -99.13420868}, + "new taipei city, republic of china": {latitude: 25.01170921, longitude: 121.46588135}, + "riyadh, saudi arabia": {latitude: 24.69496918, longitude: 46.72412872}, + "shanghai, china": {latitude: 31.23036957, longitude: 121.47370148}, + "shenzhen, china": {latitude: 22.54368019, longitude: 114.0579071}, + "surat, india": {latitude: 21.20350838, longitude: 72.83922577}, + "tehran, iran": {latitude: 35.68925095, longitude: 51.38959885} + }; + public valuesValue: number[] = getRandomNumbers(this.valuesSourceDestination.length, 10, 500); public getDataView(columnNames?: string[]): DataView { @@ -147,28 +169,4 @@ export class GlobeMapData extends TestDataViewBuilder { } ], columnNames).build(); } - - public getCoordinatesMock(): ILocationDictionary{ - return { - "addis ababa, ethiopia": {latitude: 9.03582859, longitude: 38.75241089}, - "ahmedabad, india": {latitude: 23.0145092, longitude: 72.59175873}, - "cairo, egypt": {latitude: 30.04348755, longitude: 31.23529243}, - "cape town, south africa": {latitude: -33.92710876, longitude: 18.42006111}, - "casablanca, morocco": {latitude: 33.59451294, longitude: -7.6200285}, - "chennai, india": {latitude: 13.07209206, longitude: 80.20185852}, - "durban, south africa": {latitude: -29.88188934, longitude: 30.98084259}, - "jakarta, indonesia": {latitude: -6.17475653, longitude: 106.82707214}, - "jeddah, saudi arabia": {latitude: 21.48730469, longitude: 39.18133545}, - "lagos, nigeria": {latitude: 6.45505762, longitude: 3.39417958}, - "lima, peru": {latitude: -12.06210613, longitude: -77.03652191}, - "london, united kingdom": {latitude: 51.50740814, longitude: -0.12772401}, - "mexico city, mexico": {latitude: 19.43267822, longitude: -99.13420868}, - "new taipei city, republic of china": {latitude: 25.01170921, longitude: 121.46588135}, - "riyadh, saudi arabia": {latitude: 24.69496918, longitude: 46.72412872}, - "shanghai, china": {latitude: 31.23036957, longitude: 121.47370148}, - "shenzhen, china": {latitude: 22.54368019, longitude: 114.0579071}, - "surat, india": {latitude: 21.20350838, longitude: 72.83922577}, - "tehran, iran": {latitude: 35.68925095, longitude: 51.38959885} - }; - } } diff --git a/test/visualTest.ts b/test/visualTest.ts index 7621e17..21afb45 100644 --- a/test/visualTest.ts +++ b/test/visualTest.ts @@ -41,11 +41,15 @@ import { TileMap, ITileGapObject, IGlobeMapObject3DWithToolTipData } from "../sr import capabilities from '../capabilities.json'; import PrimitiveValue = powerbi.PrimitiveValue; -import { ILocationKeyDictionary } from "../src/interfaces/locationInterfaces"; -import { PointerType, createSelectionId, d3MouseDown, renderTimeout } from "powerbi-visuals-utils-testutils"; +import { IGeocodeCoordinate, ILocationDictionary, ILocationKeyDictionary } from "../src/interfaces/locationInterfaces"; +import { PointerType, createSelectionId, d3MouseDown, renderTimeout, MockIStorageV2Service } from "powerbi-visuals-utils-testutils"; import SubSelectionOutlineVisibility = powerbi.visuals.SubSelectionOutlineVisibility; import ArcSubSelectionOutline = powerbi.visuals.ArcSubSelectionOutline; -import { DataPointReferences } from "../src/settings"; +import { CacheSettings, DataPointReferences } from "../src/settings"; +import { BingGeocoder } from "../src/geocoder"; +import { LocalStorageCache } from "../src/cache/LocalStorageCache"; +import { MemoryCache } from "../src/cache/MemoryCache"; +import { CacheManager } from "../src/cache/CacheManager"; describe("GlobeMap", () => { let visualBuilder: GlobeMapBuilder, @@ -61,16 +65,8 @@ describe("GlobeMap", () => { let categoricalColumns = GlobeMapColumns.getCategoricalColumns(dataView); - let locations = categoricalColumns.Location.values as PrimitiveValue[]; - let locationsNeedToBeLoaded = {} as ILocationKeyDictionary; - - locations.forEach((locationName) => { - const name = (locationName as string).toLowerCase(); - locationsNeedToBeLoaded[name] = { - place: name, - locationType: "" - }; - }); + let locations = categoricalColumns.Location.values as string[]; + let locationsNeedToBeLoaded = convertLocationsForCacheManager(locations); const coordinates = await visualInstance.cacheManager.loadCoordinates(locationsNeedToBeLoaded); @@ -244,11 +240,140 @@ describe("GlobeMap", () => { } }); }); + + it("geocoder should return locations for all valid input", async () => { + const locations = Object.assign(defaultDataViewBuilder.valuesSourceDestination); + const locationsWithCoordinates = Object.assign(defaultDataViewBuilder.coordinatesMock); + // set invalid location + locations[0] = 'lll, lll'; + const data = { + resourceSets: locations.map((location: string) => { + const coordsForLocation = locationsWithCoordinates[location.toLowerCase()] as IGeocodeCoordinate; + if (coordsForLocation){ + return { + resources: [{ + point: { + coordinates: [coordsForLocation.latitude, coordsForLocation.longitude] + } + }], + }; + } + else { + return { resources: []}; + } + }) + }; + const response = new Response(JSON.stringify(data)); + const bingGeocoder = new BingGeocoder(); + + spyOn(window, "fetch").and.returnValue(Promise.resolve(response)); + const coordinatesFromBing: ILocationDictionary = await bingGeocoder.geocode(locations); + + expect(Object.keys(coordinatesFromBing).length).toBe(locations.length - 1); + expect(coordinatesFromBing[locations[0]]).toBeUndefined; + }); + + it("cacheManager should load coordinates for all input from bing, when memory cache is empty and local storage is empty", async () => { + const locations = Object.assign(defaultDataViewBuilder.valuesSourceDestination); + const locationsNeedToBeLoaded = convertLocationsForCacheManager(locations); + + const { memoryCacheMock, localStorageMock, geocoderMock } = setUpMocks(0, 0); + const cacheManager = new CacheManager(new MockIStorageV2Service(), memoryCacheMock, localStorageMock, geocoderMock); + + const result = await cacheManager.loadCoordinates(locationsNeedToBeLoaded); + expect(geocoderMock.geocode).toHaveBeenCalled(); + expect(Object.keys(result).length).toBe(Object.keys(locationsNeedToBeLoaded).length); + }); + + it("cacheManager should load coordinates for all input, when memory cache is empty and local storage has half of data", async () => { + const locations = Object.assign(defaultDataViewBuilder.valuesSourceDestination); + const locationsNeedToBeLoaded = convertLocationsForCacheManager(locations); + + const { memoryCacheMock, localStorageMock, geocoderMock } = setUpMocks(0, 10); + const cacheManager = new CacheManager(new MockIStorageV2Service(), memoryCacheMock, localStorageMock, geocoderMock); + + const result = await cacheManager.loadCoordinates(locationsNeedToBeLoaded); + expect(geocoderMock.geocode).toHaveBeenCalled(); + expect(Object.keys(result).length).toBe(Object.keys(locationsNeedToBeLoaded).length); + }); + + it("cacheManager should load coordinates for all input, when memory cache has half of data and local storage is empty", async () => { + const locations = Object.assign(defaultDataViewBuilder.valuesSourceDestination); + const locationsNeedToBeLoaded = convertLocationsForCacheManager(locations); + + const { memoryCacheMock, localStorageMock, geocoderMock } = setUpMocks(10, 0); + const cacheManager = new CacheManager(new MockIStorageV2Service(), memoryCacheMock, localStorageMock, geocoderMock); + + const result = await cacheManager.loadCoordinates(locationsNeedToBeLoaded); + expect(geocoderMock.geocode).toHaveBeenCalled(); + expect(Object.keys(result).length).toBe(Object.keys(locationsNeedToBeLoaded).length); + }); + + it("cacheManager should load coordinates for all input, when memory cache has 1/3 of data and local storage has 1/3 of data", async () => { + const locations = Object.assign(defaultDataViewBuilder.valuesSourceDestination); + const locationsNeedToBeLoaded = convertLocationsForCacheManager(locations); + + const { memoryCacheMock, localStorageMock, geocoderMock } = setUpMocks(5, 5); + const cacheManager = new CacheManager(new MockIStorageV2Service(), memoryCacheMock, localStorageMock, geocoderMock); + + const result = await cacheManager.loadCoordinates(locationsNeedToBeLoaded); + expect(geocoderMock.geocode).toHaveBeenCalled(); + expect(Object.keys(result).length).toBe(Object.keys(locationsNeedToBeLoaded).length); + }); + + it("cacheManager should load coordinates for all input, when memory cache has 1/2 of data and local storage has 1/2 of data", async () => { + const locations = Object.assign(defaultDataViewBuilder.valuesSourceDestination); + const locationsNeedToBeLoaded = convertLocationsForCacheManager(locations); + + const { memoryCacheMock, localStorageMock, geocoderMock } = setUpMocks(10, 10); + const cacheManager = new CacheManager(new MockIStorageV2Service(), memoryCacheMock, localStorageMock, geocoderMock); + + const result = await cacheManager.loadCoordinates(locationsNeedToBeLoaded); + expect(geocoderMock.geocode).not.toHaveBeenCalled(); + expect(Object.keys(result).length).toBe(Object.keys(locationsNeedToBeLoaded).length); + }); + + function setUpMocks(locationsInMemoryCache: number, locationsInLocalStorageCache: number) { + const fullResult = defaultDataViewBuilder.coordinatesMock; + + const locationsFromMemoryCache: ILocationDictionary = {}; + const locationsFromLocalStorageCache: ILocationDictionary = {}; + const locationsFromBing: ILocationDictionary = {}; + let counter = 0; + for (let key in fullResult) { + if (counter < locationsInMemoryCache){ + locationsFromMemoryCache[key] = fullResult[key]; + } + else if (counter < locationsInLocalStorageCache + locationsInMemoryCache){ + locationsFromLocalStorageCache[key] = fullResult[key]; + } + else { + locationsFromBing[key] = fullResult[key]; + } + counter++; + } + + // mock for local storage + const localStorageMock = new LocalStorageCache(new MockIStorageV2Service()); + const locationsInPromise = new Promise((resolve)=> resolve(locationsFromLocalStorageCache)); + spyOn(localStorageMock, 'loadCoordinates').and.returnValue(locationsInPromise); + + // mock for MemoryCache + const memoryCacheMock = new MemoryCache(CacheSettings.MaxCacheSize, CacheSettings.MaxCacheSizeOverflow); + spyOn(memoryCacheMock, 'loadCoordinates').and.returnValue(locationsFromMemoryCache); + + // mock for geocoder + const geocoderMock = new BingGeocoder(); + const locationsGeocoderInPromise = new Promise((resolve)=> resolve(locationsFromBing)); + spyOn(geocoderMock, 'geocode').and.returnValue(locationsGeocoderInPromise); + + return {memoryCacheMock, localStorageMock, geocoderMock}; + } }); describe("OnObject tests", () => { beforeAll((done) => { - const coordinates = defaultDataViewBuilder.getCoordinatesMock(); + const coordinates = defaultDataViewBuilder.coordinatesMock; if (Object.keys(coordinates).length > 0) { visualInstance.cacheManager.saveCoordinates(coordinates) .then(() => { @@ -739,4 +864,16 @@ describe("GlobeMap", () => { }, powerbi.VisualUpdateType.Data, true, 1500, subselectionsFromContextMenu); }); }); + + function convertLocationsForCacheManager(locations: string[]): ILocationKeyDictionary{ + const locationsNeedToBeLoaded = {} as ILocationKeyDictionary; + locations.forEach((locationName) => { + const name = (locationName as string).toLowerCase(); + locationsNeedToBeLoaded[name] = { + place: name, + locationType: "" + }; + }); + return locationsNeedToBeLoaded; + } });