diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index 52deec6..c389992 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -3,7 +3,7 @@ "isRoot": true, "tools": { "csharpier": { - "version": "0.20.0", + "version": "0.21.0", "commands": [ "dotnet-csharpier" ] diff --git a/.npmrc b/.npmrc index 8051a48..389cd1a 100644 --- a/.npmrc +++ b/.npmrc @@ -1,2 +1,3 @@ auto-install-peers=true -strict-peer-dependencies=false \ No newline at end of file +strict-peer-dependencies=false +use-node-version=16.18.1 \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index cb2d113..3bf23c2 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,7 +3,7 @@ "editor.defaultFormatter": "csharpier.csharpier-vscode", "editor.formatOnSave": true }, - "azureFunctions.deploySubpath": "src/lanco-incidents-func/bin/Release/net6.0/publish", + "azureFunctions.deploySubpath": "src/lanco-incidents-func/bin/Release/net7.0/publish", "azureFunctions.preDeployTask": "publish (functions)", "azureFunctions.projectLanguage": "C#", "azureFunctions.projectRuntime": "~4", @@ -27,5 +27,6 @@ "editor.defaultFormatter": "rome.rome" }, "dotnet-test-explorer.autoWatch": true, - "dotnet-test-explorer.testProjectPath": "**/*Tests.@(csproj|vbproj|fsproj)" + "dotnet-test-explorer.testProjectPath": "**/*Tests.@(csproj|vbproj|fsproj)", + "typescript.tsdk": "node_modules\\typescript\\lib" } diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 800cfe1..9628bcf 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -71,7 +71,7 @@ "type": "func", "dependsOn": "build (functions)", "options": { - "cwd": "${workspaceFolder}/src/lanco-incidents-func/bin/Debug/net6.0" + "cwd": "${workspaceFolder}/src/lanco-incidents-func/bin/Debug/net7.0" }, "command": "host start", "isBackground": true, diff --git a/package.json b/package.json index e2db794..501f8b1 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "license": "MIT", "scripts": { "build": "turbo run build", + "serve": "turbo run serve", "test": "turbo run test", "lint": "turbo run lint", "dev": "turbo run dev", @@ -13,8 +14,12 @@ }, "devDependencies": { "husky": "^8.0.2", - "lint-staged": "^13.0.3", - "turbo": "^1.6.3" + "lint-staged": "^13.1.0", + "turbo": "^1.6.3", + "typescript": "~4.9.4" + }, + "overrides": { + "typescript": "$typescript" }, "volta": { "node": "16.18.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1e29f68..5a950bd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,103 +5,115 @@ importers: .: specifiers: husky: ^8.0.2 - lint-staged: ^13.0.3 + lint-staged: ^13.1.0 turbo: ^1.6.3 + typescript: ~4.9.4 devDependencies: husky: 8.0.2 - lint-staged: 13.0.3 + lint-staged: 13.1.0 turbo: 1.6.3 + typescript: 4.9.4 src/lanco-incidents-app: specifiers: - '@babel/core': ^7.20.2 + '@babel/core': ^7.20.7 '@babel/preset-env': ^7.20.2 '@babel/preset-typescript': ^7.18.6 + '@react-leaflet/core': ^2.1.0 '@tailwindcss/forms': ^0.5.3 '@testing-library/jest-dom': ^5.16.5 '@testing-library/react': ^13.4.0 - '@types/google-map-react': ^2.1.7 - '@types/lodash': ^4.14.188 + '@types/leaflet': ^1.9.0 + '@types/lodash': ^4.14.191 '@types/luxon': ^2.4.0 '@types/node': ^17.0.45 - '@types/react': ^18.0.25 - '@types/react-dom': ^18.0.8 + '@types/react': ^18.0.26 + '@types/react-dom': ^18.0.10 '@types/react-router-dom': ^5.3.3 '@types/workbox-build': ^5.0.1 '@vitejs/plugin-react': ^2.2.0 autoprefixer: ^10.4.13 - axios: ^1.1.3 + axios: ^1.2.1 babel-loader: ^8.3.0 geolib: ^3.3.3 - google-map-react: ^2.2.0 - jotai: ^1.9.2 - jsdom: latest + jotai: ^1.12.0 + jsdom: ^20.0.3 + leaflet: ^1.9.3 lodash: ^4.17.21 - luxon: ^3.1.0 - postcss: ^8.4.19 - prettier: ^2.7.1 + luxon: ^3.1.1 + match-sorter: ^6.3.1 + postcss: ^8.4.20 + prettier: ^2.8.1 react: ^18.2.0 react-dom: ^18.2.0 - react-router-dom: ^6.4.3 - rome: ^10.0.1 + react-leaflet: ^4.2.0 + react-router-dom: ^6.6.1 + rome: ^11.0.0 + rxjs: ^7.8.0 simple-immutable-record: ^0.1.4 + sort-by: ^1.2.0 tailwindcss: ^3.2.4 ts-node: ^10.9.1 - typescript: '*' - vite: ^3.2.3 + typescript: ^4.9.4 + vite: ^3.2.5 vite-plugin-pwa: ^0.13.3 - vite-tsconfig-paths: ^3.5.2 + vite-tsconfig-paths: ^3.6.0 vitest: ^0.24.5 workbox-build: ^6.5.4 workbox-window: ^6.5.4 dependencies: + '@react-leaflet/core': 2.1.0_yydtlhsdonbqao6vgvkwhv2zki '@tailwindcss/forms': 0.5.3_tailwindcss@3.2.4 - axios: 1.1.3 + axios: 1.2.1 geolib: 3.3.3 - google-map-react: 2.2.0_biqbaboplfbrettd7655fr4n2y - jotai: 1.9.2_3lzqd2prgnu7gkxqqdmtvzna5u + jotai: 1.12.0_dojr2aquw55jwdpbannhlirjf4 + leaflet: 1.9.3 lodash: 4.17.21 - luxon: 3.1.0 + luxon: 3.1.1 + match-sorter: 6.3.1 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - react-router-dom: 6.4.3_biqbaboplfbrettd7655fr4n2y + react-leaflet: 4.2.0_yydtlhsdonbqao6vgvkwhv2zki + react-router-dom: 6.6.1_biqbaboplfbrettd7655fr4n2y + rxjs: 7.8.0 simple-immutable-record: 0.1.4 + sort-by: 1.2.0 workbox-build: 6.5.4 workbox-window: 6.5.4 devDependencies: - '@babel/core': 7.20.2 - '@babel/preset-env': 7.20.2_@babel+core@7.20.2 - '@babel/preset-typescript': 7.18.6_@babel+core@7.20.2 + '@babel/core': 7.20.7 + '@babel/preset-env': 7.20.2_@babel+core@7.20.7 + '@babel/preset-typescript': 7.18.6_@babel+core@7.20.7 '@testing-library/jest-dom': 5.16.5 '@testing-library/react': 13.4.0_biqbaboplfbrettd7655fr4n2y - '@types/google-map-react': 2.1.7 - '@types/lodash': 4.14.188 + '@types/leaflet': 1.9.0 + '@types/lodash': 4.14.191 '@types/luxon': 2.4.0 '@types/node': 17.0.45 - '@types/react': 18.0.25 - '@types/react-dom': 18.0.8 + '@types/react': 18.0.26 + '@types/react-dom': 18.0.10 '@types/react-router-dom': 5.3.3 '@types/workbox-build': 5.0.1 - '@vitejs/plugin-react': 2.2.0_vite@3.2.3 - autoprefixer: 10.4.13_postcss@8.4.19 - babel-loader: 8.3.0_npabyccmuonwo2rku4k53xo3hi - jsdom: 20.0.2 - postcss: 8.4.19 - prettier: 2.7.1 - rome: 10.0.1 - tailwindcss: 3.2.4_v776zzvn44o7tpgzieipaairwm - ts-node: 10.9.1_ksn4eycaeggbrckn3ykh37hwf4 - typescript: 4.8.4 - vite: 3.2.3_@types+node@17.0.45 - vite-plugin-pwa: 0.13.3_jklrv2undatkozcsn24zow6xuu - vite-tsconfig-paths: 3.5.2_vite@3.2.3 - vitest: 0.24.5_jsdom@20.0.2 + '@vitejs/plugin-react': 2.2.0_vite@3.2.5 + autoprefixer: 10.4.13_postcss@8.4.20 + babel-loader: 8.3.0_lkd654lvpl423ugsqn5olungie + jsdom: 20.0.3 + postcss: 8.4.20 + prettier: 2.8.1 + rome: 11.0.0 + tailwindcss: 3.2.4_ra2vnoek4vhbzktaezawwqbin4 + ts-node: 10.9.1_zpb5kzpnyozdjq4cwaojlul57u + typescript: 4.9.4 + vite: 3.2.5_@types+node@17.0.45 + vite-plugin-pwa: 0.13.3_x7bmrdf5vv7jofix4vzvx6ucm4 + vite-tsconfig-paths: 3.6.0_vite@3.2.5 + vitest: 0.24.5_jsdom@20.0.3 src/lanco-incidents-func: specifiers: - concurrently: ^7.5.0 + concurrently: ^7.6.0 devDependencies: - concurrently: 7.5.0 + concurrently: 7.6.0 packages: @@ -116,13 +128,13 @@ packages: '@jridgewell/gen-mapping': 0.1.1 '@jridgewell/trace-mapping': 0.3.17 - /@apideck/better-ajv-errors/0.3.6_ajv@8.11.0: + /@apideck/better-ajv-errors/0.3.6_ajv@8.11.2: resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} engines: {node: '>=10'} peerDependencies: ajv: '>=8' dependencies: - ajv: 8.11.0 + ajv: 8.11.2 json-schema: 0.4.0 jsonpointer: 5.0.1 leven: 3.1.0 @@ -133,37 +145,37 @@ packages: dependencies: '@babel/highlight': 7.18.6 - /@babel/compat-data/7.20.1: - resolution: {integrity: sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==} + /@babel/compat-data/7.20.10: + resolution: {integrity: sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==} engines: {node: '>=6.9.0'} - /@babel/core/7.20.2: - resolution: {integrity: sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==} + /@babel/core/7.20.7: + resolution: {integrity: sha512-t1ZjCluspe5DW24bn2Rr1CDb2v9rn/hROtg9a2tmd0+QYf4bsloYfLQzjG4qHPNMhWtKdGC33R5AxGR2Af2cBw==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.0 '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.4 - '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2 - '@babel/helper-module-transforms': 7.20.2 - '@babel/helpers': 7.20.1 - '@babel/parser': 7.20.3 - '@babel/template': 7.18.10 - '@babel/traverse': 7.20.1 - '@babel/types': 7.20.2 + '@babel/generator': 7.20.7 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.7 + '@babel/helper-module-transforms': 7.20.11 + '@babel/helpers': 7.20.7 + '@babel/parser': 7.20.7 + '@babel/template': 7.20.7 + '@babel/traverse': 7.20.10 + '@babel/types': 7.20.7 convert-source-map: 1.9.0 debug: 4.3.4 gensync: 1.0.0-beta.2 - json5: 2.2.1 + json5: 2.2.2 semver: 6.3.0 transitivePeerDependencies: - supports-color - /@babel/generator/7.20.4: - resolution: {integrity: sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==} + /@babel/generator/7.20.7: + resolution: {integrity: sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.2 + '@babel/types': 7.20.7 '@jridgewell/gen-mapping': 0.3.2 jsesc: 2.5.2 @@ -171,61 +183,62 @@ packages: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.2 + '@babel/types': 7.20.7 /@babel/helper-builder-binary-assignment-operator-visitor/7.18.9: resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-explode-assignable-expression': 7.18.6 - '@babel/types': 7.20.2 + '@babel/types': 7.20.7 - /@babel/helper-compilation-targets/7.20.0_@babel+core@7.20.2: - resolution: {integrity: sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==} + /@babel/helper-compilation-targets/7.20.7_@babel+core@7.20.7: + resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.20.1 - '@babel/core': 7.20.2 + '@babel/compat-data': 7.20.10 + '@babel/core': 7.20.7 '@babel/helper-validator-option': 7.18.6 browserslist: 4.21.4 + lru-cache: 5.1.1 semver: 6.3.0 - /@babel/helper-create-class-features-plugin/7.20.2_@babel+core@7.20.2: - resolution: {integrity: sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==} + /@babel/helper-create-class-features-plugin/7.20.7_@babel+core@7.20.7: + resolution: {integrity: sha512-LtoWbDXOaidEf50hmdDqn9g8VEzsorMexoWMQdQODbvmqYmaF23pBP5VNPAGIFHsFQCIeKokDiz3CH5Y2jlY6w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.19.0 - '@babel/helper-member-expression-to-functions': 7.18.9 + '@babel/helper-member-expression-to-functions': 7.20.7 '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-replace-supers': 7.19.1 + '@babel/helper-replace-supers': 7.20.7 '@babel/helper-split-export-declaration': 7.18.6 transitivePeerDependencies: - supports-color - /@babel/helper-create-regexp-features-plugin/7.19.0_@babel+core@7.20.2: - resolution: {integrity: sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==} + /@babel/helper-create-regexp-features-plugin/7.20.5_@babel+core@7.20.7: + resolution: {integrity: sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-annotate-as-pure': 7.18.6 - regexpu-core: 5.2.1 + regexpu-core: 5.2.2 - /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.20.2: + /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.20.7: resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} peerDependencies: '@babel/core': ^7.4.0-0 dependencies: - '@babel/core': 7.20.2 - '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2 + '@babel/core': 7.20.7 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.7 '@babel/helper-plugin-utils': 7.20.2 debug: 4.3.4 lodash.debounce: 4.0.8 @@ -242,35 +255,35 @@ packages: resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.2 + '@babel/types': 7.20.7 /@babel/helper-function-name/7.19.0: resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.18.10 - '@babel/types': 7.20.2 + '@babel/template': 7.20.7 + '@babel/types': 7.20.7 /@babel/helper-hoist-variables/7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.2 + '@babel/types': 7.20.7 - /@babel/helper-member-expression-to-functions/7.18.9: - resolution: {integrity: sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==} + /@babel/helper-member-expression-to-functions/7.20.7: + resolution: {integrity: sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.2 + '@babel/types': 7.20.7 /@babel/helper-module-imports/7.18.6: resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.2 + '@babel/types': 7.20.7 - /@babel/helper-module-transforms/7.20.2: - resolution: {integrity: sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==} + /@babel/helper-module-transforms/7.20.11: + resolution: {integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-environment-visitor': 7.18.9 @@ -278,9 +291,9 @@ packages: '@babel/helper-simple-access': 7.20.2 '@babel/helper-split-export-declaration': 7.18.6 '@babel/helper-validator-identifier': 7.19.1 - '@babel/template': 7.18.10 - '@babel/traverse': 7.20.1 - '@babel/types': 7.20.2 + '@babel/template': 7.20.7 + '@babel/traverse': 7.20.10 + '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color @@ -288,35 +301,36 @@ packages: resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.2 + '@babel/types': 7.20.7 /@babel/helper-plugin-utils/7.20.2: resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} engines: {node: '>=6.9.0'} - /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.20.2: + /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.20.7: resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-wrap-function': 7.19.0 - '@babel/types': 7.20.2 + '@babel/helper-wrap-function': 7.20.5 + '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color - /@babel/helper-replace-supers/7.19.1: - resolution: {integrity: sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==} + /@babel/helper-replace-supers/7.20.7: + resolution: {integrity: sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-member-expression-to-functions': 7.18.9 + '@babel/helper-member-expression-to-functions': 7.20.7 '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/traverse': 7.20.1 - '@babel/types': 7.20.2 + '@babel/template': 7.20.7 + '@babel/traverse': 7.20.10 + '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color @@ -324,19 +338,19 @@ packages: resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.2 + '@babel/types': 7.20.7 /@babel/helper-skip-transparent-expression-wrappers/7.20.0: resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.2 + '@babel/types': 7.20.7 /@babel/helper-split-export-declaration/7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.2 + '@babel/types': 7.20.7 /@babel/helper-string-parser/7.19.4: resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} @@ -350,24 +364,24 @@ packages: resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} engines: {node: '>=6.9.0'} - /@babel/helper-wrap-function/7.19.0: - resolution: {integrity: sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==} + /@babel/helper-wrap-function/7.20.5: + resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-function-name': 7.19.0 - '@babel/template': 7.18.10 - '@babel/traverse': 7.20.1 - '@babel/types': 7.20.2 + '@babel/template': 7.20.7 + '@babel/traverse': 7.20.10 + '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color - /@babel/helpers/7.20.1: - resolution: {integrity: sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==} + /@babel/helpers/7.20.7: + resolution: {integrity: sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.18.10 - '@babel/traverse': 7.20.1 - '@babel/types': 7.20.2 + '@babel/template': 7.20.7 + '@babel/traverse': 7.20.10 + '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color @@ -379,876 +393,877 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser/7.20.3: - resolution: {integrity: sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==} + /@babel/parser/7.20.7: + resolution: {integrity: sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.20.2 + '@babel/types': 7.20.7 - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.20.2: + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.20.7: resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.18.9_@babel+core@7.20.2: - resolution: {integrity: sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==} + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.20.7_@babel+core@7.20.7: + resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.20.2 + '@babel/plugin-proposal-optional-chaining': 7.20.7_@babel+core@7.20.7 - /@babel/plugin-proposal-async-generator-functions/7.20.1_@babel+core@7.20.2: - resolution: {integrity: sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==} + /@babel/plugin-proposal-async-generator-functions/7.20.7_@babel+core@7.20.7: + resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.20.2 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.2 + '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.20.7 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.7 transitivePeerDependencies: - supports-color - /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.20.2: + /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.20.7: resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 - '@babel/helper-create-class-features-plugin': 7.20.2_@babel+core@7.20.2 + '@babel/core': 7.20.7 + '@babel/helper-create-class-features-plugin': 7.20.7_@babel+core@7.20.7 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color - /@babel/plugin-proposal-class-static-block/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==} + /@babel/plugin-proposal-class-static-block/7.20.7_@babel+core@7.20.7: + resolution: {integrity: sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.20.2 - '@babel/helper-create-class-features-plugin': 7.20.2_@babel+core@7.20.2 + '@babel/core': 7.20.7 + '@babel/helper-create-class-features-plugin': 7.20.7_@babel+core@7.20.7 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.2 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.7 transitivePeerDependencies: - supports-color - /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.20.2: + /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.20.7: resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.7 - /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.20.2: + /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.20.7: resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.7 - /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.20.2: + /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.20.7: resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.7 - /@babel/plugin-proposal-logical-assignment-operators/7.18.9_@babel+core@7.20.2: - resolution: {integrity: sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==} + /@babel/plugin-proposal-logical-assignment-operators/7.20.7_@babel+core@7.20.7: + resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.2 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.7 - /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.20.2: + /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.20.7: resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.7 - /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.20.2: + /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.20.7: resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.2 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.7 - /@babel/plugin-proposal-object-rest-spread/7.20.2_@babel+core@7.20.2: - resolution: {integrity: sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==} + /@babel/plugin-proposal-object-rest-spread/7.20.7_@babel+core@7.20.7: + resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.20.1 - '@babel/core': 7.20.2 - '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2 + '@babel/compat-data': 7.20.10 + '@babel/core': 7.20.7 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.7 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.2 - '@babel/plugin-transform-parameters': 7.20.3_@babel+core@7.20.2 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.7 + '@babel/plugin-transform-parameters': 7.20.7_@babel+core@7.20.7 - /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.20.2: + /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.20.7: resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.7 - /@babel/plugin-proposal-optional-chaining/7.18.9_@babel+core@7.20.2: - resolution: {integrity: sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==} + /@babel/plugin-proposal-optional-chaining/7.20.7_@babel+core@7.20.7: + resolution: {integrity: sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.7 - /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.20.2: + /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.20.7: resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 - '@babel/helper-create-class-features-plugin': 7.20.2_@babel+core@7.20.2 + '@babel/core': 7.20.7 + '@babel/helper-create-class-features-plugin': 7.20.7_@babel+core@7.20.7 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color - /@babel/plugin-proposal-private-property-in-object/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==} + /@babel/plugin-proposal-private-property-in-object/7.20.5_@babel+core@7.20.7: + resolution: {integrity: sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.20.2_@babel+core@7.20.2 + '@babel/helper-create-class-features-plugin': 7.20.7_@babel+core@7.20.7 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.2 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.7 transitivePeerDependencies: - supports-color - /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.20.2: + /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.20.7: resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} engines: {node: '>=4'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 - '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.20.2 + '@babel/core': 7.20.7 + '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.20.2: + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.20.7: resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.20.2: + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.20.7: resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.20.2: + /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.20.7: resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.20.2: + /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.20.7: resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.20.2: + /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.20.7: resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.20.2: + /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.20.7: resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.20.2: + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.20.7: resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.2: + /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.7: resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.20.2: + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.20.7: resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.20.2: + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.20.7: resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.20.2: + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.20.7: resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.20.2: + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.20.7: resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.20.2: + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.20.7: resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.20.2: + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.20.7: resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.20.2: + /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.20.7: resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.20.2: + /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.20.7: resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.20.2: + /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.20.7: resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-arrow-functions/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==} + /@babel/plugin-transform-arrow-functions/7.20.7_@babel+core@7.20.7: + resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-async-to-generator/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==} + /@babel/plugin-transform-async-to-generator/7.20.7_@babel+core@7.20.7: + resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-module-imports': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.20.2 + '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.20.7 transitivePeerDependencies: - supports-color - /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.20.2: + /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.20.7: resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-block-scoping/7.20.2_@babel+core@7.20.2: - resolution: {integrity: sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==} + /@babel/plugin-transform-block-scoping/7.20.11_@babel+core@7.20.7: + resolution: {integrity: sha512-tA4N427a7fjf1P0/2I4ScsHGc5jcHPbb30xMbaTke2gxDuWpUfXDuX1FEymJwKk4tuGUvGcejAR6HdZVqmmPyw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-classes/7.20.2_@babel+core@7.20.2: - resolution: {integrity: sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==} + /@babel/plugin-transform-classes/7.20.7_@babel+core@7.20.7: + resolution: {integrity: sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.7 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.19.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-replace-supers': 7.19.1 + '@babel/helper-replace-supers': 7.20.7 '@babel/helper-split-export-declaration': 7.18.6 globals: 11.12.0 transitivePeerDependencies: - supports-color - /@babel/plugin-transform-computed-properties/7.18.9_@babel+core@7.20.2: - resolution: {integrity: sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==} + /@babel/plugin-transform-computed-properties/7.20.7_@babel+core@7.20.7: + resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 + '@babel/template': 7.20.7 - /@babel/plugin-transform-destructuring/7.20.2_@babel+core@7.20.2: - resolution: {integrity: sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==} + /@babel/plugin-transform-destructuring/7.20.7_@babel+core@7.20.7: + resolution: {integrity: sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.20.2: + /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.20.7: resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 - '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.20.2 + '@babel/core': 7.20.7 + '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.20.2: + /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.20.7: resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.20.2: + /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.20.7: resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-for-of/7.18.8_@babel+core@7.20.2: + /@babel/plugin-transform-for-of/7.18.8_@babel+core@7.20.7: resolution: {integrity: sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.20.2: + /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.20.7: resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 - '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2 + '@babel/core': 7.20.7 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.7 '@babel/helper-function-name': 7.19.0 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-literals/7.18.9_@babel+core@7.20.2: + /@babel/plugin-transform-literals/7.18.9_@babel+core@7.20.7: resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.20.2: + /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.20.7: resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-modules-amd/7.19.6_@babel+core@7.20.2: - resolution: {integrity: sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==} + /@babel/plugin-transform-modules-amd/7.20.11_@babel+core@7.20.7: + resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 - '@babel/helper-module-transforms': 7.20.2 + '@babel/core': 7.20.7 + '@babel/helper-module-transforms': 7.20.11 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color - /@babel/plugin-transform-modules-commonjs/7.19.6_@babel+core@7.20.2: - resolution: {integrity: sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==} + /@babel/plugin-transform-modules-commonjs/7.20.11_@babel+core@7.20.7: + resolution: {integrity: sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 - '@babel/helper-module-transforms': 7.20.2 + '@babel/core': 7.20.7 + '@babel/helper-module-transforms': 7.20.11 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-simple-access': 7.20.2 transitivePeerDependencies: - supports-color - /@babel/plugin-transform-modules-systemjs/7.19.6_@babel+core@7.20.2: - resolution: {integrity: sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==} + /@babel/plugin-transform-modules-systemjs/7.20.11_@babel+core@7.20.7: + resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-module-transforms': 7.20.2 + '@babel/helper-module-transforms': 7.20.11 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-validator-identifier': 7.19.1 transitivePeerDependencies: - supports-color - /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.20.2: + /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.20.7: resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 - '@babel/helper-module-transforms': 7.20.2 + '@babel/core': 7.20.7 + '@babel/helper-module-transforms': 7.20.11 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color - /@babel/plugin-transform-named-capturing-groups-regex/7.19.1_@babel+core@7.20.2: - resolution: {integrity: sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==} + /@babel/plugin-transform-named-capturing-groups-regex/7.20.5_@babel+core@7.20.7: + resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.2 - '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.20.2 + '@babel/core': 7.20.7 + '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.20.2: + /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.20.7: resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.20.2: + /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.20.7: resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-replace-supers': 7.19.1 + '@babel/helper-replace-supers': 7.20.7 transitivePeerDependencies: - supports-color - /@babel/plugin-transform-parameters/7.20.3_@babel+core@7.20.2: - resolution: {integrity: sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==} + /@babel/plugin-transform-parameters/7.20.7_@babel+core@7.20.7: + resolution: {integrity: sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.20.2: + /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.20.7: resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-react-jsx-development/7.18.6_@babel+core@7.20.2: + /@babel/plugin-transform-react-jsx-development/7.18.6_@babel+core@7.20.7: resolution: {integrity: sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 - '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.20.2 + '@babel/core': 7.20.7 + '@babel/plugin-transform-react-jsx': 7.20.7_@babel+core@7.20.7 dev: true - /@babel/plugin-transform-react-jsx-self/7.18.6_@babel+core@7.20.2: + /@babel/plugin-transform-react-jsx-self/7.18.6_@babel+core@7.20.7: resolution: {integrity: sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-react-jsx-source/7.19.6_@babel+core@7.20.2: + /@babel/plugin-transform-react-jsx-source/7.19.6_@babel+core@7.20.7: resolution: {integrity: sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-react-jsx/7.19.0_@babel+core@7.20.2: - resolution: {integrity: sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==} + /@babel/plugin-transform-react-jsx/7.20.7_@babel+core@7.20.7: + resolution: {integrity: sha512-Tfq7qqD+tRj3EoDhY00nn2uP2hsRxgYGi5mLQ5TimKav0a9Lrpd4deE+fcLXU8zFYRjlKPHZhpCvfEA6qnBxqQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-module-imports': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.2 - '@babel/types': 7.20.2 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.7 + '@babel/types': 7.20.7 dev: true - /@babel/plugin-transform-regenerator/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==} + /@babel/plugin-transform-regenerator/7.20.5_@babel+core@7.20.7: + resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - regenerator-transform: 0.15.0 + regenerator-transform: 0.15.1 - /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.20.2: + /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.20.7: resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.20.2: + /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.20.7: resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-spread/7.19.0_@babel+core@7.20.2: - resolution: {integrity: sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==} + /@babel/plugin-transform-spread/7.20.7_@babel+core@7.20.7: + resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.20.2: + /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.20.7: resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.20.2: + /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.20.7: resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.20.2: + /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.20.7: resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-typescript/7.20.2_@babel+core@7.20.2: - resolution: {integrity: sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag==} + /@babel/plugin-transform-typescript/7.20.7_@babel+core@7.20.7: + resolution: {integrity: sha512-m3wVKEvf6SoszD8pu4NZz3PvfKRCMgk6D6d0Qi9hNnlM5M6CFS92EgF4EiHVLKbU0r/r7ty1hg7NPZwE7WRbYw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 - '@babel/helper-create-class-features-plugin': 7.20.2_@babel+core@7.20.2 + '@babel/core': 7.20.7 + '@babel/helper-create-class-features-plugin': 7.20.7_@babel+core@7.20.7 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.2 + '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.7 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.20.2: + /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.20.7: resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.20.2: + /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.20.7: resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 - '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.20.2 + '@babel/core': 7.20.7 + '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.20.7 '@babel/helper-plugin-utils': 7.20.2 - /@babel/preset-env/7.20.2_@babel+core@7.20.2: + /@babel/preset-env/7.20.2_@babel+core@7.20.7: resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.20.1 - '@babel/core': 7.20.2 - '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2 + '@babel/compat-data': 7.20.10 + '@babel/core': 7.20.7 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.7 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-validator-option': 7.18.6 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.18.9_@babel+core@7.20.2 - '@babel/plugin-proposal-async-generator-functions': 7.20.1_@babel+core@7.20.2 - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-proposal-class-static-block': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.20.2 - '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-proposal-logical-assignment-operators': 7.18.9_@babel+core@7.20.2 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-proposal-object-rest-spread': 7.20.2_@babel+core@7.20.2 - '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.20.2 - '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-proposal-private-property-in-object': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.2 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.20.2 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.2 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.2 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.2 - '@babel/plugin-syntax-import-assertions': 7.20.0_@babel+core@7.20.2 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.2 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.2 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.2 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.2 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.2 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.2 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.2 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.2 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.2 - '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-async-to-generator': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-block-scoping': 7.20.2_@babel+core@7.20.2 - '@babel/plugin-transform-classes': 7.20.2_@babel+core@7.20.2 - '@babel/plugin-transform-computed-properties': 7.18.9_@babel+core@7.20.2 - '@babel/plugin-transform-destructuring': 7.20.2_@babel+core@7.20.2 - '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.20.2 - '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.20.2 - '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.20.2 - '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.20.2 - '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-modules-amd': 7.19.6_@babel+core@7.20.2 - '@babel/plugin-transform-modules-commonjs': 7.19.6_@babel+core@7.20.2 - '@babel/plugin-transform-modules-systemjs': 7.19.6_@babel+core@7.20.2 - '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-named-capturing-groups-regex': 7.19.1_@babel+core@7.20.2 - '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-parameters': 7.20.3_@babel+core@7.20.2 - '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-regenerator': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.20.2 - '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.20.2 - '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.20.2 - '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.20.2 - '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.20.2 - '@babel/preset-modules': 0.1.5_@babel+core@7.20.2 - '@babel/types': 7.20.2 - babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.20.2 - babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.20.2 - babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.20.2 - core-js-compat: 3.26.0 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.20.7 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7_@babel+core@7.20.7 + '@babel/plugin-proposal-async-generator-functions': 7.20.7_@babel+core@7.20.7 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.7 + '@babel/plugin-proposal-class-static-block': 7.20.7_@babel+core@7.20.7 + '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.20.7 + '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.20.7 + '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.20.7 + '@babel/plugin-proposal-logical-assignment-operators': 7.20.7_@babel+core@7.20.7 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.20.7 + '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.20.7 + '@babel/plugin-proposal-object-rest-spread': 7.20.7_@babel+core@7.20.7 + '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.20.7 + '@babel/plugin-proposal-optional-chaining': 7.20.7_@babel+core@7.20.7 + '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.20.7 + '@babel/plugin-proposal-private-property-in-object': 7.20.5_@babel+core@7.20.7 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.7 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.7 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.20.7 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.7 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.7 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.7 + '@babel/plugin-syntax-import-assertions': 7.20.0_@babel+core@7.20.7 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.7 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.7 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.7 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.7 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.7 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.7 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.7 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.7 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.7 + '@babel/plugin-transform-arrow-functions': 7.20.7_@babel+core@7.20.7 + '@babel/plugin-transform-async-to-generator': 7.20.7_@babel+core@7.20.7 + '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.20.7 + '@babel/plugin-transform-block-scoping': 7.20.11_@babel+core@7.20.7 + '@babel/plugin-transform-classes': 7.20.7_@babel+core@7.20.7 + '@babel/plugin-transform-computed-properties': 7.20.7_@babel+core@7.20.7 + '@babel/plugin-transform-destructuring': 7.20.7_@babel+core@7.20.7 + '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.20.7 + '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.20.7 + '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.20.7 + '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.20.7 + '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.20.7 + '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.20.7 + '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.20.7 + '@babel/plugin-transform-modules-amd': 7.20.11_@babel+core@7.20.7 + '@babel/plugin-transform-modules-commonjs': 7.20.11_@babel+core@7.20.7 + '@babel/plugin-transform-modules-systemjs': 7.20.11_@babel+core@7.20.7 + '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.20.7 + '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5_@babel+core@7.20.7 + '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.20.7 + '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.20.7 + '@babel/plugin-transform-parameters': 7.20.7_@babel+core@7.20.7 + '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.20.7 + '@babel/plugin-transform-regenerator': 7.20.5_@babel+core@7.20.7 + '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.20.7 + '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.20.7 + '@babel/plugin-transform-spread': 7.20.7_@babel+core@7.20.7 + '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.20.7 + '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.20.7 + '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.20.7 + '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.20.7 + '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.20.7 + '@babel/preset-modules': 0.1.5_@babel+core@7.20.7 + '@babel/types': 7.20.7 + babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.20.7 + babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.20.7 + babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.20.7 + core-js-compat: 3.27.0 semver: 6.3.0 transitivePeerDependencies: - supports-color - /@babel/preset-modules/0.1.5_@babel+core@7.20.2: + /@babel/preset-modules/0.1.5_@babel+core@7.20.7: resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.20.2 - '@babel/types': 7.20.2 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.7 + '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.20.7 + '@babel/types': 7.20.7 esutils: 2.0.3 - /@babel/preset-typescript/7.18.6_@babel+core@7.20.2: + /@babel/preset-typescript/7.18.6_@babel+core@7.20.7: resolution: {integrity: sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-validator-option': 7.18.6 - '@babel/plugin-transform-typescript': 7.20.2_@babel+core@7.20.2 + '@babel/plugin-transform-typescript': 7.20.7_@babel+core@7.20.7 transitivePeerDependencies: - supports-color dev: true - /@babel/runtime/7.20.1: - resolution: {integrity: sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==} + /@babel/runtime/7.20.7: + resolution: {integrity: sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==} engines: {node: '>=6.9.0'} dependencies: - regenerator-runtime: 0.13.10 + regenerator-runtime: 0.13.11 - /@babel/template/7.18.10: - resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==} + /@babel/template/7.20.7: + resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/parser': 7.20.3 - '@babel/types': 7.20.2 + '@babel/parser': 7.20.7 + '@babel/types': 7.20.7 - /@babel/traverse/7.20.1: - resolution: {integrity: sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==} + /@babel/traverse/7.20.10: + resolution: {integrity: sha512-oSf1juCgymrSez8NI4A2sr4+uB/mFd9MXplYGPEBnfAuWmmyeVcHa6xLPiaRBcXkcb/28bgxmQLTVwFKE1yfsg==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.4 + '@babel/generator': 7.20.7 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.19.0 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.20.3 - '@babel/types': 7.20.2 + '@babel/parser': 7.20.7 + '@babel/types': 7.20.7 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color - /@babel/types/7.20.2: - resolution: {integrity: sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==} + /@babel/types/7.20.7: + resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.19.4 @@ -1265,8 +1280,8 @@ packages: resolution: {integrity: sha512-RpfLEtTlyIxeNPGKcokS+p3BZII/Q3bYxryFRglh5H3A3T8q9fsLYm72VYAMEOOIBLEa8o93kFLiBDUWKrwXZA==} dev: true - /@esbuild/android-arm/0.15.13: - resolution: {integrity: sha512-RY2fVI8O0iFUNvZirXaQ1vMvK0xhCcl0gqRj74Z6yEiO1zAUa7hbsdwZM1kzqbxHK7LFyMizipfXT3JME+12Hw==} + /@esbuild/android-arm/0.15.18: + resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -1274,8 +1289,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64/0.15.13: - resolution: {integrity: sha512-+BoyIm4I8uJmH/QDIH0fu7MG0AEx9OXEDXnqptXCwKOlOqZiS4iraH1Nr7/ObLMokW3sOCeBNyD68ATcV9b9Ag==} + /@esbuild/linux-loong64/0.15.18: + resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -1283,12 +1298,6 @@ packages: dev: true optional: true - /@googlemaps/js-api-loader/1.15.1: - resolution: {integrity: sha512-AsnEgNsB7S/VdrHGEQUaUM2e5tmjFGKBAfzR/AqO8O7TPq/jQGvoRw5liPBw4EMF38RDsHmKDV89q/X+qiUREQ==} - dependencies: - fast-deep-equal: 3.1.3 - dev: false - /@jest/expect-utils/29.3.1: resolution: {integrity: sha512-wlrznINZI5sMjwvUoLVk617ll/UYfGIZNxmbU+Pa7wmkL4vYzhV9R2pwVqUh4NWWuLQWkI8+8mOkxs//prKQ3g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -1311,7 +1320,7 @@ packages: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 '@types/node': 17.0.45 - '@types/yargs': 17.0.13 + '@types/yargs': 17.0.17 chalk: 4.1.2 dev: true @@ -1359,10 +1368,6 @@ packages: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 - /@mapbox/point-geometry/0.1.0: - resolution: {integrity: sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==} - dev: false - /@nodelib/fs.scandir/2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1379,14 +1384,26 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.13.0 + fastq: 1.14.0 - /@remix-run/router/1.0.3: - resolution: {integrity: sha512-ceuyTSs7PZ/tQqi19YZNBc5X7kj1f8p+4DIyrcIYFY9h+hd1OKm4RqtiWldR9eGEvIiJfsqwM4BsuCtRIuEw6Q==} + /@react-leaflet/core/2.1.0_yydtlhsdonbqao6vgvkwhv2zki: + resolution: {integrity: sha512-Qk7Pfu8BSarKGqILj4x7bCSZ1pjuAPZ+qmRwH5S7mDS91VSbVVsJSrW4qA+GPrro8t69gFYVMWb1Zc4yFmPiVg==} + peerDependencies: + leaflet: ^1.9.0 + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + leaflet: 1.9.3 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: false + + /@remix-run/router/1.2.1: + resolution: {integrity: sha512-XiY0IsyHR+DXYS5vBxpoBe/8veTeoRpMHP+vDosLZxL5bnpetzI0igkxkLZS235ldLzyfkxF+2divEwWHP3vMQ==} engines: {node: '>=14'} dev: false - /@rollup/plugin-babel/5.3.1_rw3hudt2pmn5afxog7l3b6qtze: + /@rollup/plugin-babel/5.3.1_quedi3p7womesqmjrcxptomfpa: resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} engines: {node: '>= 10.0.0'} peerDependencies: @@ -1397,7 +1414,7 @@ packages: '@types/babel__core': optional: true dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 '@babel/helper-module-imports': 7.18.6 '@rollup/pluginutils': 3.1.0_rollup@2.79.1 rollup: 2.79.1 @@ -1446,48 +1463,48 @@ packages: picomatch: 2.3.1 rollup: 2.79.1 - /@rometools/cli-darwin-arm64/10.0.1: - resolution: {integrity: sha512-MwQjk3uhZrCu6LgIwJHREAsVt/mUQTGv7p8iosfaF8lCIxMVjyS+akbF/QcBufyW5sFtHYNWUEe/uKPHK4E//A==} + /@rometools/cli-darwin-arm64/11.0.0: + resolution: {integrity: sha512-F3vkdY+s3FLIEnAjSbyHTuIPB88cLpccimW4ecid5I7S6GzGG3iUJI4xT00JhH73K4P/qW20/9r+kH1T9Du8Xg==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /@rometools/cli-darwin-x64/10.0.1: - resolution: {integrity: sha512-n010Wc/z9L8wRkRnR5boMhdWgDVGrTG/i7zL8u/3+F5aSUgLCywf9F/b3ex74tCJJfcwBLlhaAqAVQX6U1bIkA==} + /@rometools/cli-darwin-x64/11.0.0: + resolution: {integrity: sha512-X6jhtS6Iml4GOzgNtnLwIp/KXXhSdqeVyfv69m/AHnIzx3gQAjPZ7BPnJLvTCbhe4SKHL+uTZYFSCJpkUUKE6w==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /@rometools/cli-linux-arm64/10.0.1: - resolution: {integrity: sha512-JljZsnud1KCfe36VNsVh/LrYdAzgbKbcsCTzeCjW9ROkMyNj8pmQ/gIUFxZ+PyhMFgowHIDGihoNf4m+pgpxkA==} + /@rometools/cli-linux-arm64/11.0.0: + resolution: {integrity: sha512-dktTJJlTpmycBZ2TwhJBcAO8ztK8DdevdyZnFFxdYRvtmJgTjIsC2UFayf/SbKew8B8q1IhI0it+D6ihAeIpeg==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rometools/cli-linux-x64/10.0.1: - resolution: {integrity: sha512-jXIqd9iDyZUexk63CRfAXDA4zNDUHpErUmCejjGab3dhDt1KA40fDqKb+kxZpAhY3tQoWNSNQyo750zX5NawLw==} + /@rometools/cli-linux-x64/11.0.0: + resolution: {integrity: sha512-WVcnXPNdWGUWo0p4NU8YzuthjYR7q+b4vRcjdxtP1DlpphZmSsoC/RSE85nEqRAz8hChcKUansVzOPM8BSsuGA==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rometools/cli-win32-arm64/10.0.1: - resolution: {integrity: sha512-G/toRrKPhhi7SMYMyROq/E2c8/4xRX/67vFhVihuMvDDzhanIb99hEt5MMbM4HbYK1nnZBPyLN6LxVsxm9M9hA==} + /@rometools/cli-win32-arm64/11.0.0: + resolution: {integrity: sha512-tPj6RThQzS7Q45jqQll7NlTYvNcsg/BEP3LYiiazqSh9FAFnMkrV6ewUcMPKWyAfiyLs7jlz4rRvdNRUSygzfQ==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /@rometools/cli-win32-x64/10.0.1: - resolution: {integrity: sha512-y299+VGoBufZntZj0Xz7w9DODU+6E5giXStfBDoa0fspXGNkYyYfD+HC6j9gUv4zpMZJ607XVvVHjpfwM/3ftA==} + /@rometools/cli-win32-x64/11.0.0: + resolution: {integrity: sha512-bmBai8WHxYjsGk1+je7ZTfCUCWq30WJI3pQM8pzTA674lfGTZ9ymJoZwTaIMSO4rL5V9mlO6uLunsBKso9VqOg==} cpu: [x64] os: [win32] requiresBuild: true @@ -1502,7 +1519,7 @@ packages: resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} dependencies: ejs: 3.1.8 - json5: 2.2.1 + json5: 2.2.2 magic-string: 0.25.9 string.prototype.matchall: 4.0.8 @@ -1512,16 +1529,16 @@ packages: tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1' dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 3.2.4_v776zzvn44o7tpgzieipaairwm + tailwindcss: 3.2.4_ra2vnoek4vhbzktaezawwqbin4 dev: false - /@testing-library/dom/8.19.0: - resolution: {integrity: sha512-6YWYPPpxG3e/xOo6HIWwB/58HukkwIVTOaZ0VwdMVjhRUX/01E4FtQbck9GazOOj7MXHc5RBzMrU86iBJHbI+A==} + /@testing-library/dom/8.19.1: + resolution: {integrity: sha512-P6iIPyYQ+qH8CvGauAqanhVnjrnRe0IZFSYCeGkSRW9q3u8bdVn2NPI+lasFyVsEQn1J/IFmp5Aax41+dAP9wg==} engines: {node: '>=12'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/runtime': 7.20.1 - '@types/aria-query': 4.2.2 + '@babel/runtime': 7.20.7 + '@types/aria-query': 5.0.1 aria-query: 5.1.3 chalk: 4.1.2 dom-accessibility-api: 0.5.14 @@ -1534,7 +1551,7 @@ packages: engines: {node: '>=8', npm: '>=6', yarn: '>=1'} dependencies: '@adobe/css-tools': 4.0.1 - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.7 '@types/testing-library__jest-dom': 5.14.5 aria-query: 5.1.3 chalk: 3.0.0 @@ -1551,9 +1568,9 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@babel/runtime': 7.20.1 - '@testing-library/dom': 8.19.0 - '@types/react-dom': 18.0.8 + '@babel/runtime': 7.20.7 + '@testing-library/dom': 8.19.1 + '@types/react-dom': 18.0.10 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -1575,8 +1592,8 @@ packages: /@tsconfig/node16/1.0.3: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} - /@types/aria-query/4.2.2: - resolution: {integrity: sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==} + /@types/aria-query/5.0.1: + resolution: {integrity: sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==} dev: true /@types/chai-subset/1.3.3: @@ -1610,10 +1627,8 @@ packages: resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} dev: true - /@types/google-map-react/2.1.7: - resolution: {integrity: sha512-7pquMUU20kVwbfEV91iAWXjApSkqoODkfUwTSmJpU9Tgd+ecX+MrQnplCqrSqKrPF1VjfvyWnDEicdoSd0G5qA==} - dependencies: - '@types/react': 18.0.25 + /@types/geojson/7946.0.10: + resolution: {integrity: sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==} dev: true /@types/history/4.7.11: @@ -1636,8 +1651,8 @@ packages: '@types/istanbul-lib-report': 3.0.0 dev: true - /@types/jest/29.2.2: - resolution: {integrity: sha512-og1wAmdxKoS71K2ZwSVqWPX6OVn3ihZ6ZT2qvZvZQm90lJVDyXIjYcu4Khx2CNIeaFv12rOU/YObOsI3VOkzog==} + /@types/jest/29.2.4: + resolution: {integrity: sha512-PipFB04k2qTRPePduVLTRiPzQfvMeLwUN3Z21hsAKaB/W9IIzgB2pizCL466ftJlcyZqnHoC9ZHpxLGl3fS86A==} dependencies: expect: 29.3.1 pretty-format: 29.3.1 @@ -1647,8 +1662,14 @@ packages: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} dev: true - /@types/lodash/4.14.188: - resolution: {integrity: sha512-zmEmF5OIM3rb7SbLCFYoQhO4dGt2FRM9AMkxvA3LaADOF1n8in/zGJlWji9fmafLoNyz+FoL6FE0SLtGIArD7w==} + /@types/leaflet/1.9.0: + resolution: {integrity: sha512-7LeOSj7EloC5UcyOMo+1kc3S1UT3MjJxwqsMT1d2PTyvQz53w0Y0oSSk9nwZnOZubCmBvpSNGceucxiq+ZPEUw==} + dependencies: + '@types/geojson': 7946.0.10 + dev: true + + /@types/lodash/4.14.191: + resolution: {integrity: sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==} dev: true /@types/luxon/2.4.0: @@ -1662,29 +1683,29 @@ packages: resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} dev: true - /@types/react-dom/18.0.8: - resolution: {integrity: sha512-C3GYO0HLaOkk9dDAz3Dl4sbe4AKUGTCfFIZsz3n/82dPNN8Du533HzKatDxeUYWu24wJgMP1xICqkWk1YOLOIw==} + /@types/react-dom/18.0.10: + resolution: {integrity: sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==} dependencies: - '@types/react': 18.0.25 + '@types/react': 18.0.26 dev: true /@types/react-router-dom/5.3.3: resolution: {integrity: sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==} dependencies: '@types/history': 4.7.11 - '@types/react': 18.0.25 - '@types/react-router': 5.1.19 + '@types/react': 18.0.26 + '@types/react-router': 5.1.20 dev: true - /@types/react-router/5.1.19: - resolution: {integrity: sha512-Fv/5kb2STAEMT3wHzdKQK2z8xKq38EDIGVrutYLmQVVLe+4orDFquU52hQrULnEHinMKv9FSA6lf9+uNT1ITtA==} + /@types/react-router/5.1.20: + resolution: {integrity: sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==} dependencies: '@types/history': 4.7.11 - '@types/react': 18.0.25 + '@types/react': 18.0.26 dev: true - /@types/react/18.0.25: - resolution: {integrity: sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==} + /@types/react/18.0.26: + resolution: {integrity: sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==} dependencies: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.2 @@ -1707,7 +1728,7 @@ packages: /@types/testing-library__jest-dom/5.14.5: resolution: {integrity: sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==} dependencies: - '@types/jest': 29.2.2 + '@types/jest': 29.2.4 dev: true /@types/trusted-types/2.0.2: @@ -1727,26 +1748,26 @@ packages: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} dev: true - /@types/yargs/17.0.13: - resolution: {integrity: sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==} + /@types/yargs/17.0.17: + resolution: {integrity: sha512-72bWxFKTK6uwWJAVT+3rF6Jo6RTojiJ27FQo8Rf60AL+VZbzoVPnMFhKsUnbjR8A3BTCYQ7Mv3hnl8T0A+CX9g==} dependencies: '@types/yargs-parser': 21.0.0 dev: true - /@vitejs/plugin-react/2.2.0_vite@3.2.3: + /@vitejs/plugin-react/2.2.0_vite@3.2.5: resolution: {integrity: sha512-FFpefhvExd1toVRlokZgxgy2JtnBOdp4ZDsq7ldCWaqGSGn9UhWMAVm/1lxPL14JfNS5yGz+s9yFrQY6shoStA==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^3.0.0 dependencies: - '@babel/core': 7.20.2 - '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.20.2 - '@babel/plugin-transform-react-jsx-development': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-react-jsx-self': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-react-jsx-source': 7.19.6_@babel+core@7.20.2 + '@babel/core': 7.20.7 + '@babel/plugin-transform-react-jsx': 7.20.7_@babel+core@7.20.7 + '@babel/plugin-transform-react-jsx-development': 7.18.6_@babel+core@7.20.7 + '@babel/plugin-transform-react-jsx-self': 7.18.6_@babel+core@7.20.7 + '@babel/plugin-transform-react-jsx-source': 7.19.6_@babel+core@7.20.7 magic-string: 0.26.7 react-refresh: 0.14.0 - vite: 3.2.3_@types+node@17.0.45 + vite: 3.2.5_@types+node@17.0.45 transitivePeerDependencies: - supports-color dev: true @@ -1943,8 +1964,8 @@ packages: uri-js: 4.4.1 dev: true - /ajv/8.11.0: - resolution: {integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==} + /ajv/8.11.2: + resolution: {integrity: sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==} dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 @@ -1994,8 +2015,8 @@ packages: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} dev: true - /anymatch/3.1.2: - resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + /anymatch/3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 @@ -2032,7 +2053,7 @@ packages: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} - /autoprefixer/10.4.13_postcss@8.4.19: + /autoprefixer/10.4.13_postcss@8.4.20: resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} engines: {node: ^10 || ^12 || >=14} hasBin: true @@ -2040,11 +2061,11 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.21.4 - caniuse-lite: 1.0.30001431 + caniuse-lite: 1.0.30001441 fraction.js: 4.2.0 normalize-range: 0.1.2 picocolors: 1.0.0 - postcss: 8.4.19 + postcss: 8.4.20 postcss-value-parser: 4.2.0 dev: true @@ -2053,8 +2074,8 @@ packages: engines: {node: '>= 0.4'} dev: true - /axios/1.1.3: - resolution: {integrity: sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA==} + /axios/1.2.1: + resolution: {integrity: sha512-I88cFiGu9ryt/tfVEi4kX2SITsvDddTajXTOFmt2uK1ZVA8LytjtdeyefdQWEf5PU8w+4SSJDoYnggflB5tW4A==} dependencies: follow-redirects: 1.15.2 form-data: 4.0.0 @@ -2063,14 +2084,14 @@ packages: - debug dev: false - /babel-loader/8.3.0_npabyccmuonwo2rku4k53xo3hi: + /babel-loader/8.3.0_lkd654lvpl423ugsqn5olungie: resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} engines: {node: '>= 8.9'} peerDependencies: '@babel/core': ^7.0.0 webpack: '>=2' dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 @@ -2078,36 +2099,36 @@ packages: webpack: 5.75.0 dev: true - /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.20.2: + /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.20.7: resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.20.1 - '@babel/core': 7.20.2 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.2 + '@babel/compat-data': 7.20.10 + '@babel/core': 7.20.7 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.7 semver: 6.3.0 transitivePeerDependencies: - supports-color - /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.20.2: + /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.20.7: resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.2 - core-js-compat: 3.26.0 + '@babel/core': 7.20.7 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.7 + core-js-compat: 3.27.0 transitivePeerDependencies: - supports-color - /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.20.2: + /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.20.7: resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.2 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.2 + '@babel/core': 7.20.7 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.7 transitivePeerDependencies: - supports-color @@ -2144,9 +2165,9 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001431 + caniuse-lite: 1.0.30001441 electron-to-chromium: 1.4.284 - node-releases: 2.0.6 + node-releases: 2.0.8 update-browserslist-db: 1.0.10_browserslist@4.21.4 /buffer-from/1.1.2: @@ -2166,8 +2187,8 @@ packages: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - /caniuse-lite/1.0.30001431: - resolution: {integrity: sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==} + /caniuse-lite/1.0.30001441: + resolution: {integrity: sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg==} /chai/4.3.7: resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} @@ -2175,7 +2196,7 @@ packages: dependencies: assertion-error: 1.1.0 check-error: 1.0.2 - deep-eql: 4.1.2 + deep-eql: 4.1.3 get-func-name: 2.0.0 loupe: 2.3.6 pathval: 1.1.1 @@ -2213,7 +2234,7 @@ packages: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} dependencies: - anymatch: 3.1.2 + anymatch: 3.1.3 braces: 3.0.2 glob-parent: 5.1.2 is-binary-path: 2.1.0 @@ -2228,8 +2249,9 @@ packages: engines: {node: '>=6.0'} dev: true - /ci-info/3.5.0: - resolution: {integrity: sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==} + /ci-info/3.7.0: + resolution: {integrity: sha512-2CpRNYmImPx+RXKLq6jko/L07phmS9I02TyqkcNU20GCF/GgaWvc58hPtjxDX8lPpkdwc9sNh72V9k00S7ezog==} + engines: {node: '>=8'} dev: true /clean-stack/2.2.0: @@ -2320,15 +2342,15 @@ packages: /concat-map/0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - /concurrently/7.5.0: - resolution: {integrity: sha512-5E3mwiS+i2JYBzr5BpXkFxOnleZTMsG+WnE/dCG4/P+oiVXrbmrBwJ2ozn4SxwB2EZDrKR568X+puVohxz3/Mg==} + /concurrently/7.6.0: + resolution: {integrity: sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==} engines: {node: ^12.20.0 || ^14.13.0 || >=16.0.0} hasBin: true dependencies: chalk: 4.1.2 date-fns: 2.29.3 lodash: 4.17.21 - rxjs: 7.5.7 + rxjs: 7.8.0 shell-quote: 1.7.4 spawn-command: 0.0.2-1 supports-color: 8.1.1 @@ -2339,8 +2361,8 @@ packages: /convert-source-map/1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - /core-js-compat/3.26.0: - resolution: {integrity: sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A==} + /core-js-compat/3.27.0: + resolution: {integrity: sha512-spN2H4E/wocMML7XtbKuqttHHM+zbF3bAdl9mT4/iyFaF33bowQGjxiWNWyvUJGH9F+hTgnhWziiLtwu3oC/Qg==} dependencies: browserslist: 4.21.4 @@ -2413,12 +2435,12 @@ packages: dependencies: ms: 2.1.2 - /decimal.js/10.4.2: - resolution: {integrity: sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==} + /decimal.js/10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} dev: true - /deep-eql/4.1.2: - resolution: {integrity: sha512-gT18+YW4CcW/DBNTwAmqTtkJh7f9qqScu2qFVlx7kCoeY9tlBu9cUcr7+I+Z/noG8INehS3xQgLpTtd/QUTn4w==} + /deep-eql/4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} engines: {node: '>=6'} dependencies: type-detect: 4.0.8 @@ -2528,8 +2550,8 @@ packages: engines: {node: '>= 4'} dev: true - /enhanced-resolve/5.10.0: - resolution: {integrity: sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==} + /enhanced-resolve/5.12.0: + resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.10 @@ -2541,8 +2563,8 @@ packages: engines: {node: '>=0.12'} dev: true - /es-abstract/1.20.4: - resolution: {integrity: sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==} + /es-abstract/1.20.5: + resolution: {integrity: sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -2551,10 +2573,11 @@ packages: function.prototype.name: 1.1.5 get-intrinsic: 1.1.3 get-symbol-description: 1.0.0 + gopd: 1.0.1 has: 1.0.3 has-property-descriptors: 1.0.0 has-symbols: 1.0.3 - internal-slot: 1.0.3 + internal-slot: 1.0.4 is-callable: 1.2.7 is-negative-zero: 2.0.2 is-regex: 1.1.4 @@ -2595,8 +2618,8 @@ packages: is-date-object: 1.0.5 is-symbol: 1.0.4 - /esbuild-android-64/0.15.13: - resolution: {integrity: sha512-yRorukXBlokwTip+Sy4MYskLhJsO0Kn0/Fj43s1krVblfwP+hMD37a4Wmg139GEsMLl+vh8WXp2mq/cTA9J97g==} + /esbuild-android-64/0.15.18: + resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -2604,8 +2627,8 @@ packages: dev: true optional: true - /esbuild-android-arm64/0.15.13: - resolution: {integrity: sha512-TKzyymLD6PiVeyYa4c5wdPw87BeAiTXNtK6amWUcXZxkV51gOk5u5qzmDaYSwiWeecSNHamFsaFjLoi32QR5/w==} + /esbuild-android-arm64/0.15.18: + resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -2613,8 +2636,8 @@ packages: dev: true optional: true - /esbuild-darwin-64/0.15.13: - resolution: {integrity: sha512-WAx7c2DaOS6CrRcoYCgXgkXDliLnFv3pQLV6GeW1YcGEZq2Gnl8s9Pg7ahValZkpOa0iE/ojRVQ87sbUhF1Cbg==} + /esbuild-darwin-64/0.15.18: + resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -2622,8 +2645,8 @@ packages: dev: true optional: true - /esbuild-darwin-arm64/0.15.13: - resolution: {integrity: sha512-U6jFsPfSSxC3V1CLiQqwvDuj3GGrtQNB3P3nNC3+q99EKf94UGpsG9l4CQ83zBs1NHrk1rtCSYT0+KfK5LsD8A==} + /esbuild-darwin-arm64/0.15.18: + resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -2631,8 +2654,8 @@ packages: dev: true optional: true - /esbuild-freebsd-64/0.15.13: - resolution: {integrity: sha512-whItJgDiOXaDG/idy75qqevIpZjnReZkMGCgQaBWZuKHoElDJC1rh7MpoUgupMcdfOd+PgdEwNQW9DAE6i8wyA==} + /esbuild-freebsd-64/0.15.18: + resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -2640,8 +2663,8 @@ packages: dev: true optional: true - /esbuild-freebsd-arm64/0.15.13: - resolution: {integrity: sha512-6pCSWt8mLUbPtygv7cufV0sZLeylaMwS5Fznj6Rsx9G2AJJsAjQ9ifA+0rQEIg7DwJmi9it+WjzNTEAzzdoM3Q==} + /esbuild-freebsd-arm64/0.15.18: + resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -2649,8 +2672,8 @@ packages: dev: true optional: true - /esbuild-linux-32/0.15.13: - resolution: {integrity: sha512-VbZdWOEdrJiYApm2kkxoTOgsoCO1krBZ3quHdYk3g3ivWaMwNIVPIfEE0f0XQQ0u5pJtBsnk2/7OPiCFIPOe/w==} + /esbuild-linux-32/0.15.18: + resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -2658,8 +2681,8 @@ packages: dev: true optional: true - /esbuild-linux-64/0.15.13: - resolution: {integrity: sha512-rXmnArVNio6yANSqDQlIO4WiP+Cv7+9EuAHNnag7rByAqFVuRusLbGi2697A5dFPNXoO//IiogVwi3AdcfPC6A==} + /esbuild-linux-64/0.15.18: + resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -2667,8 +2690,8 @@ packages: dev: true optional: true - /esbuild-linux-arm/0.15.13: - resolution: {integrity: sha512-Ac6LpfmJO8WhCMQmO253xX2IU2B3wPDbl4IvR0hnqcPrdfCaUa2j/lLMGTjmQ4W5JsJIdHEdW12dG8lFS0MbxQ==} + /esbuild-linux-arm/0.15.18: + resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -2676,8 +2699,8 @@ packages: dev: true optional: true - /esbuild-linux-arm64/0.15.13: - resolution: {integrity: sha512-alEMGU4Z+d17U7KQQw2IV8tQycO6T+rOrgW8OS22Ua25x6kHxoG6Ngry6Aq6uranC+pNWNMB6aHFPh7aTQdORQ==} + /esbuild-linux-arm64/0.15.18: + resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -2685,8 +2708,8 @@ packages: dev: true optional: true - /esbuild-linux-mips64le/0.15.13: - resolution: {integrity: sha512-47PgmyYEu+yN5rD/MbwS6DxP2FSGPo4Uxg5LwIdxTiyGC2XKwHhHyW7YYEDlSuXLQXEdTO7mYe8zQ74czP7W8A==} + /esbuild-linux-mips64le/0.15.18: + resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -2694,8 +2717,8 @@ packages: dev: true optional: true - /esbuild-linux-ppc64le/0.15.13: - resolution: {integrity: sha512-z6n28h2+PC1Ayle9DjKoBRcx/4cxHoOa2e689e2aDJSaKug3jXcQw7mM+GLg+9ydYoNzj8QxNL8ihOv/OnezhA==} + /esbuild-linux-ppc64le/0.15.18: + resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -2703,8 +2726,8 @@ packages: dev: true optional: true - /esbuild-linux-riscv64/0.15.13: - resolution: {integrity: sha512-+Lu4zuuXuQhgLUGyZloWCqTslcCAjMZH1k3Xc9MSEJEpEFdpsSU0sRDXAnk18FKOfEjhu4YMGaykx9xjtpA6ow==} + /esbuild-linux-riscv64/0.15.18: + resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -2712,8 +2735,8 @@ packages: dev: true optional: true - /esbuild-linux-s390x/0.15.13: - resolution: {integrity: sha512-BMeXRljruf7J0TMxD5CIXS65y7puiZkAh+s4XFV9qy16SxOuMhxhVIXYLnbdfLrsYGFzx7U9mcdpFWkkvy/Uag==} + /esbuild-linux-s390x/0.15.18: + resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -2721,8 +2744,8 @@ packages: dev: true optional: true - /esbuild-netbsd-64/0.15.13: - resolution: {integrity: sha512-EHj9QZOTel581JPj7UO3xYbltFTYnHy+SIqJVq6yd3KkCrsHRbapiPb0Lx3EOOtybBEE9EyqbmfW1NlSDsSzvQ==} + /esbuild-netbsd-64/0.15.18: + resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -2730,8 +2753,8 @@ packages: dev: true optional: true - /esbuild-openbsd-64/0.15.13: - resolution: {integrity: sha512-nkuDlIjF/sfUhfx8SKq0+U+Fgx5K9JcPq1mUodnxI0x4kBdCv46rOGWbuJ6eof2n3wdoCLccOoJAbg9ba/bT2w==} + /esbuild-openbsd-64/0.15.18: + resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -2739,8 +2762,8 @@ packages: dev: true optional: true - /esbuild-sunos-64/0.15.13: - resolution: {integrity: sha512-jVeu2GfxZQ++6lRdY43CS0Tm/r4WuQQ0Pdsrxbw+aOrHQPHV0+LNOLnvbN28M7BSUGnJnHkHm2HozGgNGyeIRw==} + /esbuild-sunos-64/0.15.18: + resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -2748,8 +2771,8 @@ packages: dev: true optional: true - /esbuild-windows-32/0.15.13: - resolution: {integrity: sha512-XoF2iBf0wnqo16SDq+aDGi/+QbaLFpkiRarPVssMh9KYbFNCqPLlGAWwDvxEVz+ywX6Si37J2AKm+AXq1kC0JA==} + /esbuild-windows-32/0.15.18: + resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -2757,8 +2780,8 @@ packages: dev: true optional: true - /esbuild-windows-64/0.15.13: - resolution: {integrity: sha512-Et6htEfGycjDrtqb2ng6nT+baesZPYQIW+HUEHK4D1ncggNrDNk3yoboYQ5KtiVrw/JaDMNttz8rrPubV/fvPQ==} + /esbuild-windows-64/0.15.18: + resolution: {integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -2766,8 +2789,8 @@ packages: dev: true optional: true - /esbuild-windows-arm64/0.15.13: - resolution: {integrity: sha512-3bv7tqntThQC9SWLRouMDmZnlOukBhOCTlkzNqzGCmrkCJI7io5LLjwJBOVY6kOUlIvdxbooNZwjtBvj+7uuVg==} + /esbuild-windows-arm64/0.15.18: + resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -2775,34 +2798,34 @@ packages: dev: true optional: true - /esbuild/0.15.13: - resolution: {integrity: sha512-Cu3SC84oyzzhrK/YyN4iEVy2jZu5t2fz66HEOShHURcjSkOSAVL8C/gfUT+lDJxkVHpg8GZ10DD0rMHRPqMFaQ==} + /esbuild/0.15.18: + resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.15.13 - '@esbuild/linux-loong64': 0.15.13 - esbuild-android-64: 0.15.13 - esbuild-android-arm64: 0.15.13 - esbuild-darwin-64: 0.15.13 - esbuild-darwin-arm64: 0.15.13 - esbuild-freebsd-64: 0.15.13 - esbuild-freebsd-arm64: 0.15.13 - esbuild-linux-32: 0.15.13 - esbuild-linux-64: 0.15.13 - esbuild-linux-arm: 0.15.13 - esbuild-linux-arm64: 0.15.13 - esbuild-linux-mips64le: 0.15.13 - esbuild-linux-ppc64le: 0.15.13 - esbuild-linux-riscv64: 0.15.13 - esbuild-linux-s390x: 0.15.13 - esbuild-netbsd-64: 0.15.13 - esbuild-openbsd-64: 0.15.13 - esbuild-sunos-64: 0.15.13 - esbuild-windows-32: 0.15.13 - esbuild-windows-64: 0.15.13 - esbuild-windows-arm64: 0.15.13 + '@esbuild/android-arm': 0.15.18 + '@esbuild/linux-loong64': 0.15.18 + esbuild-android-64: 0.15.18 + esbuild-android-arm64: 0.15.18 + esbuild-darwin-64: 0.15.18 + esbuild-darwin-arm64: 0.15.18 + esbuild-freebsd-64: 0.15.18 + esbuild-freebsd-arm64: 0.15.18 + esbuild-linux-32: 0.15.18 + esbuild-linux-64: 0.15.18 + esbuild-linux-arm: 0.15.18 + esbuild-linux-arm64: 0.15.18 + esbuild-linux-mips64le: 0.15.18 + esbuild-linux-ppc64le: 0.15.18 + esbuild-linux-riscv64: 0.15.18 + esbuild-linux-s390x: 0.15.18 + esbuild-netbsd-64: 0.15.18 + esbuild-openbsd-64: 0.15.18 + esbuild-sunos-64: 0.15.18 + esbuild-windows-32: 0.15.18 + esbuild-windows-64: 0.15.18 + esbuild-windows-arm64: 0.15.18 dev: true /escalade/3.1.1: @@ -2869,10 +2892,6 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - /eventemitter3/4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - dev: false - /events/3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} @@ -2924,15 +2943,15 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /fastq/1.13.0: - resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + /fastq/1.14.0: + resolution: {integrity: sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==} dependencies: reusify: 1.0.4 /filelist/1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: - minimatch: 5.1.0 + minimatch: 5.1.2 /fill-range/7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} @@ -3013,7 +3032,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.20.4 + es-abstract: 1.20.5 functions-have-names: 1.2.3 /functions-have-names/1.2.3: @@ -3107,26 +3126,10 @@ packages: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} dev: true - /google-map-react/2.2.0_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-UPiTwR3qNKJJizURXTuCbnBr8kLtLsiikj/KH1UTLGhadnU6fT+CE3CLw1lzZwk5zZIduQQODyIcEwNInECmUg==} - engines: {node: '>=10'} - peerDependencies: - react: ^16.0.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@googlemaps/js-api-loader': 1.15.1 - '@mapbox/point-geometry': 0.1.0 - eventemitter3: 4.0.7 - prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - dev: false - /gopd/1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.1.3 - dev: true /graceful-fs/4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} @@ -3230,8 +3233,8 @@ packages: /inherits/2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - /internal-slot/1.0.3: - resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} + /internal-slot/1.0.4: + resolution: {integrity: sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==} engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.1.3 @@ -3461,7 +3464,7 @@ packages: '@jest/types': 29.3.1 '@types/node': 17.0.45 chalk: 4.1.2 - ci-info: 3.5.0 + ci-info: 3.7.0 graceful-fs: 4.2.10 picomatch: 2.3.1 dev: true @@ -3483,46 +3486,52 @@ packages: supports-color: 8.1.1 dev: true - /jotai/1.9.2_3lzqd2prgnu7gkxqqdmtvzna5u: - resolution: {integrity: sha512-/893WrniZwoVc0+3JR056r0FTC/tGbgyHco9dfgde6K8TU6XNxrOSw4jCRdDicncw67A37v2GNGzXSpHKbHPmw==} - engines: {node: '>=12.7.0'} + /jotai/1.12.0_dojr2aquw55jwdpbannhlirjf4: + resolution: {integrity: sha512-IhyBmjxU1sE2Ni/MUK7gQAb8QvCM6yd1/K5jtQzgQBmmjCjgfXZkkk1rYlQAIRp2KoQk0Y+yzhm1f5cZ7kegnw==} + engines: {node: '>=12.20.0'} peerDependencies: '@babel/core': '*' '@babel/template': '*' - immer: '*' + jotai-immer: '*' + jotai-optics: '*' + jotai-redux: '*' jotai-tanstack-query: '*' jotai-urql: '*' - optics-ts: '*' + jotai-valtio: '*' + jotai-xstate: '*' + jotai-zustand: '*' react: '>=16.8' - valtio: '*' - xstate: '*' peerDependenciesMeta: '@babel/core': optional: true '@babel/template': optional: true - immer: + jotai-immer: + optional: true + jotai-optics: + optional: true + jotai-redux: optional: true jotai-tanstack-query: optional: true jotai-urql: optional: true - optics-ts: + jotai-valtio: optional: true - valtio: + jotai-xstate: optional: true - xstate: + jotai-zustand: optional: true dependencies: - '@babel/core': 7.20.2 + '@babel/core': 7.20.7 react: 18.2.0 dev: false /js-tokens/4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - /jsdom/20.0.2: - resolution: {integrity: sha512-AHWa+QO/cgRg4N+DsmHg1Y7xnz+8KU3EflM0LVDTdmrYOc1WWTSkOjtpUveQH+1Bqd5rtcVnb/DuxV/UjDO4rA==} + /jsdom/20.0.3: + resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} engines: {node: '>=14'} peerDependencies: canvas: ^2.5.0 @@ -3536,7 +3545,7 @@ packages: cssom: 0.5.0 cssstyle: 2.3.0 data-urls: 3.0.2 - decimal.js: 10.4.2 + decimal.js: 10.4.3 domexception: 4.0.0 escodegen: 2.0.0 form-data: 4.0.0 @@ -3545,11 +3554,11 @@ packages: https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 nwsapi: 2.2.2 - parse5: 7.1.1 + parse5: 7.1.2 saxes: 6.0.0 symbol-tree: 3.2.4 tough-cookie: 4.1.2 - w3c-xmlserializer: 3.0.0 + w3c-xmlserializer: 4.0.0 webidl-conversions: 7.0.0 whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 @@ -3585,8 +3594,8 @@ packages: /json-schema/0.4.0: resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - /json5/2.2.1: - resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} + /json5/2.2.2: + resolution: {integrity: sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==} engines: {node: '>=6'} hasBin: true @@ -3601,6 +3610,10 @@ packages: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} + /leaflet/1.9.3: + resolution: {integrity: sha512-iB2cR9vAkDOu5l3HAay2obcUHZ7xwUBBjph8+PGtmW/2lYhbLizWtG7nTeYht36WfOslixQF9D/uSIzhZgGMfQ==} + dev: false + /leven/3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -3613,11 +3626,6 @@ packages: type-check: 0.3.2 dev: true - /lilconfig/2.0.5: - resolution: {integrity: sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==} - engines: {node: '>=10'} - dev: true - /lilconfig/2.0.6: resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} engines: {node: '>=10'} @@ -3626,8 +3634,8 @@ packages: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true - /lint-staged/13.0.3: - resolution: {integrity: sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug==} + /lint-staged/13.1.0: + resolution: {integrity: sha512-pn/sR8IrcF/T0vpWLilih8jmVouMlxqXxKuAojmbiGX5n/gDnz+abdPptlj0vYnbfE0SQNl3CY/HwtM0+yfOVQ==} engines: {node: ^14.13.1 || >=16.0.0} hasBin: true dependencies: @@ -3636,22 +3644,22 @@ packages: commander: 9.4.1 debug: 4.3.4 execa: 6.1.0 - lilconfig: 2.0.5 - listr2: 4.0.5 + lilconfig: 2.0.6 + listr2: 5.0.6 micromatch: 4.0.5 normalize-path: 3.0.0 object-inspect: 1.12.2 pidtree: 0.6.0 string-argv: 0.3.1 - yaml: 2.1.3 + yaml: 2.2.0 transitivePeerDependencies: - enquirer - supports-color dev: true - /listr2/4.0.5: - resolution: {integrity: sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==} - engines: {node: '>=12'} + /listr2/5.0.6: + resolution: {integrity: sha512-u60KxKBy1BR2uLJNTWNptzWQ1ob/gjMzIJPZffAENzpZqbMZ/5PrXXOomDcevIS/+IB7s1mmCEtSlT2qHWMqag==} + engines: {node: ^14.13.1 || >=16.0.0} peerDependencies: enquirer: '>= 2.3.0 < 3' peerDependenciesMeta: @@ -3663,7 +3671,7 @@ packages: log-update: 4.0.0 p-map: 4.0.0 rfdc: 1.3.0 - rxjs: 7.5.7 + rxjs: 7.8.0 through: 2.3.8 wrap-ansi: 7.0.0 dev: true @@ -3679,7 +3687,7 @@ packages: dependencies: big.js: 5.2.2 emojis-list: 3.0.0 - json5: 2.2.1 + json5: 2.2.2 dev: true /local-pkg/0.4.2: @@ -3725,8 +3733,13 @@ packages: get-func-name: 2.0.0 dev: true - /luxon/3.1.0: - resolution: {integrity: sha512-7w6hmKC0/aoWnEsmPCu5Br54BmbmUp5GfcqBxQngRcXJ+q5fdfjEzn7dxmJh2YdDhgW8PccYtlWKSv4tQkrTQg==} + /lru-cache/5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + + /luxon/3.1.1: + resolution: {integrity: sha512-Ah6DloGmvseB/pX1cAmjbFvyU/pKuwQMQqz7d0yvuDlVYLTs2WeDHQMpC8tGjm1da+BriHROW/OEIT/KfYg6xw==} engines: {node: '>=12'} dev: false @@ -3757,6 +3770,13 @@ packages: /make-error/1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + /match-sorter/6.3.1: + resolution: {integrity: sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==} + dependencies: + '@babel/runtime': 7.20.7 + remove-accents: 0.4.2 + dev: false + /merge-stream/2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -3806,8 +3826,8 @@ packages: dependencies: brace-expansion: 1.1.11 - /minimatch/5.1.0: - resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==} + /minimatch/5.1.2: + resolution: {integrity: sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==} engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 @@ -3835,8 +3855,8 @@ packages: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true - /node-releases/2.0.6: - resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} + /node-releases/2.0.8: + resolution: {integrity: sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==} /normalize-path/3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} @@ -3861,6 +3881,7 @@ packages: /object-assign/4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + dev: true /object-hash/3.0.0: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} @@ -3881,6 +3902,11 @@ packages: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} + /object-path/0.6.0: + resolution: {integrity: sha512-fxrwsCFi3/p+LeLOAwo/wyRMODZxdGBtUlWRzsEpsUVrisZbEfZ21arxLGfaWfcnqb8oHPNihIb4XPE8CQPN5A==} + engines: {node: '>=0.8.0'} + dev: false + /object.assign/4.1.4: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} @@ -3947,8 +3973,8 @@ packages: engines: {node: '>=6'} dev: true - /parse5/7.1.1: - resolution: {integrity: sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==} + /parse5/7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} dependencies: entities: 4.4.0 dev: true @@ -4008,27 +4034,27 @@ packages: find-up: 4.1.0 dev: true - /postcss-import/14.1.0_postcss@8.4.19: + /postcss-import/14.1.0_postcss@8.4.20: resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} engines: {node: '>=10.0.0'} peerDependencies: postcss: ^8.0.0 dependencies: - postcss: 8.4.19 + postcss: 8.4.20 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.1 - /postcss-js/4.0.0_postcss@8.4.19: + /postcss-js/4.0.0_postcss@8.4.20: resolution: {integrity: sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: postcss: ^8.3.3 dependencies: camelcase-css: 2.0.1 - postcss: 8.4.19 + postcss: 8.4.20 - /postcss-load-config/3.1.4_v776zzvn44o7tpgzieipaairwm: + /postcss-load-config/3.1.4_ra2vnoek4vhbzktaezawwqbin4: resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} peerDependencies: @@ -4041,21 +4067,21 @@ packages: optional: true dependencies: lilconfig: 2.0.6 - postcss: 8.4.19 - ts-node: 10.9.1_ksn4eycaeggbrckn3ykh37hwf4 + postcss: 8.4.20 + ts-node: 10.9.1_zpb5kzpnyozdjq4cwaojlul57u yaml: 1.10.2 - /postcss-nested/6.0.0_postcss@8.4.19: + /postcss-nested/6.0.0_postcss@8.4.20: resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 dependencies: - postcss: 8.4.19 - postcss-selector-parser: 6.0.10 + postcss: 8.4.20 + postcss-selector-parser: 6.0.11 - /postcss-selector-parser/6.0.10: - resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + /postcss-selector-parser/6.0.11: + resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} engines: {node: '>=4'} dependencies: cssesc: 3.0.0 @@ -4064,8 +4090,8 @@ packages: /postcss-value-parser/4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - /postcss/8.4.19: - resolution: {integrity: sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==} + /postcss/8.4.20: + resolution: {integrity: sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.4 @@ -4077,8 +4103,8 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier/2.7.1: - resolution: {integrity: sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==} + /prettier/2.8.1: + resolution: {integrity: sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==} engines: {node: '>=10.13.0'} hasBin: true dev: true @@ -4110,14 +4136,6 @@ packages: react-is: 18.2.0 dev: true - /prop-types/15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - dev: false - /proxy-from-env/1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} dev: false @@ -4155,10 +4173,6 @@ packages: react: 18.2.0 scheduler: 0.23.0 - /react-is/16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: false - /react-is/17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} dev: true @@ -4167,31 +4181,44 @@ packages: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true + /react-leaflet/4.2.0_yydtlhsdonbqao6vgvkwhv2zki: + resolution: {integrity: sha512-9d8T7hzYrQA5GLe3vn0qtRLJzQKgjr080NKa45yArGwuSl1nH/6aK9gp7DeYdktpdO1vKGSUTGW5AsUS064X0A==} + peerDependencies: + leaflet: ^1.9.0 + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@react-leaflet/core': 2.1.0_yydtlhsdonbqao6vgvkwhv2zki + leaflet: 1.9.3 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: false + /react-refresh/0.14.0: resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} engines: {node: '>=0.10.0'} dev: true - /react-router-dom/6.4.3_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-MiaYQU8CwVCaOfJdYvt84KQNjT78VF0TJrA17SIQgNHRvLnXDJO6qsFqq8F/zzB1BWZjCFIrQpu4QxcshitziQ==} + /react-router-dom/6.6.1_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-u+8BKUtelStKbZD5UcY0NY90WOzktrkJJhyhNg7L0APn9t1qJNLowzrM9CHdpB6+rcPt6qQrlkIXsTvhuXP68g==} engines: {node: '>=14'} peerDependencies: react: '>=16.8' react-dom: '>=16.8' dependencies: - '@remix-run/router': 1.0.3 + '@remix-run/router': 1.2.1 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - react-router: 6.4.3_react@18.2.0 + react-router: 6.6.1_react@18.2.0 dev: false - /react-router/6.4.3_react@18.2.0: - resolution: {integrity: sha512-BT6DoGn6aV1FVP5yfODMOiieakp3z46P1Fk0RNzJMACzE7C339sFuHebfvWtnB4pzBvXXkHP2vscJzWRuUjTtA==} + /react-router/6.6.1_react@18.2.0: + resolution: {integrity: sha512-YkvlYRusnI/IN0kDtosUCgxqHeulN5je+ew8W+iA1VvFhf86kA+JEI/X/8NqYcr11hCDDp906S+SGMpBheNeYQ==} engines: {node: '>=14'} peerDependencies: react: '>=16.8' dependencies: - '@remix-run/router': 1.0.3 + '@remix-run/router': 1.2.1 react: 18.2.0 dev: false @@ -4218,7 +4245,7 @@ packages: '@cush/relative': 1.0.0 glob-regex: 0.3.2 slash: 3.0.0 - sucrase: 3.28.0 + sucrase: 3.29.0 tslib: 1.14.1 dev: true @@ -4239,13 +4266,13 @@ packages: /regenerate/1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - /regenerator-runtime/0.13.10: - resolution: {integrity: sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==} + /regenerator-runtime/0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} - /regenerator-transform/0.15.0: - resolution: {integrity: sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==} + /regenerator-transform/0.15.1: + resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.7 /regexp.prototype.flags/1.4.3: resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} @@ -4255,8 +4282,8 @@ packages: define-properties: 1.1.4 functions-have-names: 1.2.3 - /regexpu-core/5.2.1: - resolution: {integrity: sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==} + /regexpu-core/5.2.2: + resolution: {integrity: sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==} engines: {node: '>=4'} dependencies: regenerate: 1.4.2 @@ -4264,7 +4291,7 @@ packages: regjsgen: 0.7.1 regjsparser: 0.9.1 unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.1.0 /regjsgen/0.7.1: resolution: {integrity: sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==} @@ -4275,6 +4302,10 @@ packages: dependencies: jsesc: 0.5.0 + /remove-accents/0.4.2: + resolution: {integrity: sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==} + dev: false + /require-directory/2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -4314,6 +4345,7 @@ packages: /rollup-plugin-terser/7.0.2_rollup@2.79.1: resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser peerDependencies: rollup: ^2.0.0 dependencies: @@ -4321,7 +4353,7 @@ packages: jest-worker: 26.6.2 rollup: 2.79.1 serialize-javascript: 4.0.0 - terser: 5.15.1 + terser: 5.16.1 /rollup/2.79.1: resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} @@ -4330,18 +4362,18 @@ packages: optionalDependencies: fsevents: 2.3.2 - /rome/10.0.1: - resolution: {integrity: sha512-RfaDa+cSustBsjX6bj3fWqEhoNxXrK1uNgKHpkCHAqp20QMJXnCRtbokhirNMe0utyGI9GTO/sDoK7hJP7O8Bw==} + /rome/11.0.0: + resolution: {integrity: sha512-rRo6JOwpMLc3OkeTDRXkrmrDqnxDvZ75GS4f0jLDBNmRgDXWbu0F8eVnJoRn+VbK2AE7vWvhVOMBjnWowcopkQ==} engines: {node: '>=14.*'} hasBin: true requiresBuild: true optionalDependencies: - '@rometools/cli-darwin-arm64': 10.0.1 - '@rometools/cli-darwin-x64': 10.0.1 - '@rometools/cli-linux-arm64': 10.0.1 - '@rometools/cli-linux-x64': 10.0.1 - '@rometools/cli-win32-arm64': 10.0.1 - '@rometools/cli-win32-x64': 10.0.1 + '@rometools/cli-darwin-arm64': 11.0.0 + '@rometools/cli-darwin-x64': 11.0.0 + '@rometools/cli-linux-arm64': 11.0.0 + '@rometools/cli-linux-x64': 11.0.0 + '@rometools/cli-win32-arm64': 11.0.0 + '@rometools/cli-win32-x64': 11.0.0 dev: true /run-parallel/1.2.0: @@ -4349,11 +4381,10 @@ packages: dependencies: queue-microtask: 1.2.3 - /rxjs/7.5.7: - resolution: {integrity: sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==} + /rxjs/7.8.0: + resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} dependencies: tslib: 2.4.1 - dev: true /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -4479,6 +4510,12 @@ packages: is-fullwidth-code-point: 4.0.0 dev: true + /sort-by/1.2.0: + resolution: {integrity: sha512-aRyW65r3xMnf4nxJRluCg0H/woJpksU1dQxRtXYzau30sNBOmf5HACpDd9MZDhKh7ALQ5FgSOfMPwZEtUmMqcg==} + dependencies: + object-path: 0.6.0 + dev: false + /source-map-js/1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} @@ -4501,6 +4538,7 @@ packages: /sourcemap-codec/1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead /spawn-command/0.0.2-1: resolution: {integrity: sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==} @@ -4541,10 +4579,10 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.20.4 + es-abstract: 1.20.5 get-intrinsic: 1.1.3 has-symbols: 1.0.3 - internal-slot: 1.0.3 + internal-slot: 1.0.4 regexp.prototype.flags: 1.4.3 side-channel: 1.0.4 @@ -4553,14 +4591,14 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.20.4 + es-abstract: 1.20.5 /string.prototype.trimstart/1.0.6: resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.20.4 + es-abstract: 1.20.5 /stringify-object/3.3.0: resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} @@ -4611,8 +4649,8 @@ packages: acorn: 8.8.1 dev: true - /sucrase/3.28.0: - resolution: {integrity: sha512-TK9600YInjuiIhVM3729rH4ZKPOsGeyXUwY+Ugu9eilNbdTFyHr6XcAGYbRVZPDgWj6tgI7bx95aaJjHnbffag==} + /sucrase/3.29.0: + resolution: {integrity: sha512-bZPAuGA5SdFHuzqIhTAqt9fvNEo9rESqXIG3oiKdF8K4UmkQxC4KlNL3lVyAErXp+mPvUqZ5l13qx6TrDIGf3A==} engines: {node: '>=8'} hasBin: true dependencies: @@ -4651,7 +4689,7 @@ packages: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true - /tailwindcss/3.2.4_v776zzvn44o7tpgzieipaairwm: + /tailwindcss/3.2.4_ra2vnoek4vhbzktaezawwqbin4: resolution: {integrity: sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==} engines: {node: '>=12.13.0'} hasBin: true @@ -4672,12 +4710,12 @@ packages: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.0 - postcss: 8.4.19 - postcss-import: 14.1.0_postcss@8.4.19 - postcss-js: 4.0.0_postcss@8.4.19 - postcss-load-config: 3.1.4_v776zzvn44o7tpgzieipaairwm - postcss-nested: 6.0.0_postcss@8.4.19 - postcss-selector-parser: 6.0.10 + postcss: 8.4.20 + postcss-import: 14.1.0_postcss@8.4.20 + postcss-js: 4.0.0_postcss@8.4.20 + postcss-load-config: 3.1.4_ra2vnoek4vhbzktaezawwqbin4 + postcss-nested: 6.0.0_postcss@8.4.20 + postcss-selector-parser: 6.0.11 postcss-value-parser: 4.2.0 quick-lru: 5.1.1 resolve: 1.22.1 @@ -4722,12 +4760,12 @@ packages: jest-worker: 27.5.1 schema-utils: 3.1.1 serialize-javascript: 6.0.0 - terser: 5.15.1 + terser: 5.16.1 webpack: 5.75.0 dev: true - /terser/5.15.1: - resolution: {integrity: sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==} + /terser/5.16.1: + resolution: {integrity: sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==} engines: {node: '>=10'} hasBin: true dependencies: @@ -4808,7 +4846,7 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-node/10.9.1_ksn4eycaeggbrckn3ykh37hwf4: + /ts-node/10.9.1_zpb5kzpnyozdjq4cwaojlul57u: resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -4834,15 +4872,15 @@ packages: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 4.8.4 + typescript: 4.9.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - /tsconfig-paths/4.1.0: - resolution: {integrity: sha512-AHx4Euop/dXFC+Vx589alFba8QItjF+8hf8LtmuiCwHyI4rHXQtOOENaM8kvYf5fR0dRChy3wzWIZ9WbB7FWow==} + /tsconfig-paths/4.1.1: + resolution: {integrity: sha512-VgPrtLKpRgEAJsMj5Q/I/mXouC6A/7eJ/X4Nuk6o0cRPwBtznYxTCU4FodbexbzH9somBPEXYi0ZkUViUpJ21Q==} engines: {node: '>=6'} dependencies: - json5: 2.2.1 + json5: 2.2.2 minimist: 1.2.7 strip-bom: 3.0.0 dev: true @@ -4853,7 +4891,6 @@ packages: /tslib/2.4.1: resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} - dev: true /turbo-darwin-64/1.6.3: resolution: {integrity: sha512-QmDIX0Yh1wYQl0bUS0gGWwNxpJwrzZU2GIAYt3aOKoirWA2ecnyb3R6ludcS1znfNV2MfunP+l8E3ncxUHwtjA==} @@ -4937,8 +4974,8 @@ packages: engines: {node: '>=10'} dev: true - /typescript/4.8.4: - resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==} + /typescript/4.9.4: + resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} engines: {node: '>=4.2.0'} hasBin: true @@ -4961,8 +4998,8 @@ packages: unicode-canonical-property-names-ecmascript: 2.0.0 unicode-property-aliases-ecmascript: 2.1.0 - /unicode-match-property-value-ecmascript/2.0.0: - resolution: {integrity: sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==} + /unicode-match-property-value-ecmascript/2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} engines: {node: '>=4'} /unicode-property-aliases-ecmascript/2.1.0: @@ -5016,7 +5053,7 @@ packages: /v8-compile-cache-lib/3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - /vite-plugin-pwa/0.13.3_jklrv2undatkozcsn24zow6xuu: + /vite-plugin-pwa/0.13.3_x7bmrdf5vv7jofix4vzvx6ucm4: resolution: {integrity: sha512-cjWXpZ7slAY14OKz7M8XdgTIi9wjf6OD6NkhiMAc+ogxnbUrecUwLdRtfGPCPsN2ftut5gaN1jTghb11p6IQAA==} peerDependencies: vite: ^3.1.0 @@ -5028,29 +5065,29 @@ packages: fast-glob: 3.2.12 pretty-bytes: 6.0.0 rollup: 2.79.1 - vite: 3.2.3_@types+node@17.0.45 + vite: 3.2.5_@types+node@17.0.45 workbox-build: 6.5.4 workbox-window: 6.5.4 transitivePeerDependencies: - supports-color dev: true - /vite-tsconfig-paths/3.5.2_vite@3.2.3: - resolution: {integrity: sha512-xJMgHA2oJ28QCG2f+hXrcqzo7IttrSRK4A//Tp94CfuX5eetOx33qiwXHUdi3FwkHP2ocpxHuvE45Ix67gwEmQ==} + /vite-tsconfig-paths/3.6.0_vite@3.2.5: + resolution: {integrity: sha512-UfsPYonxLqPD633X8cWcPFVuYzx/CMNHAjZTasYwX69sXpa4gNmQkR0XCjj82h7zhLGdTWagMjC1qfb9S+zv0A==} peerDependencies: vite: '>2.0.0-0' dependencies: debug: 4.3.4 globrex: 0.1.2 recrawl-sync: 2.2.3 - tsconfig-paths: 4.1.0 - vite: 3.2.3_@types+node@17.0.45 + tsconfig-paths: 4.1.1 + vite: 3.2.5_@types+node@17.0.45 transitivePeerDependencies: - supports-color dev: true - /vite/3.2.3_@types+node@17.0.45: - resolution: {integrity: sha512-h8jl1TZ76eGs3o2dIBSsvXDLb1m/Ec1iej8ZMdz+PsaFUsftZeWe2CZOI3qogEsMNaywc17gu0q6cQDzh/weCQ==} + /vite/3.2.5_@types+node@17.0.45: + resolution: {integrity: sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -5075,15 +5112,15 @@ packages: optional: true dependencies: '@types/node': 17.0.45 - esbuild: 0.15.13 - postcss: 8.4.19 + esbuild: 0.15.18 + postcss: 8.4.20 resolve: 1.22.1 rollup: 2.79.1 optionalDependencies: fsevents: 2.3.2 dev: true - /vitest/0.24.5_jsdom@20.0.2: + /vitest/0.24.5_jsdom@20.0.3: resolution: {integrity: sha512-zw6JhPUHtLILQDe5Q39b/SzoITkG+R7hcFjuthp4xsi6zpmfQPOZcHodZ+3bqoWl4EdGK/p1fuMiEwdxgbGLOA==} engines: {node: '>=v14.16.0'} hasBin: true @@ -5110,13 +5147,13 @@ packages: '@types/node': 17.0.45 chai: 4.3.7 debug: 4.3.4 - jsdom: 20.0.2 + jsdom: 20.0.3 local-pkg: 0.4.2 strip-literal: 0.4.2 tinybench: 2.3.1 tinypool: 0.3.0 tinyspy: 1.0.2 - vite: 3.2.3_@types+node@17.0.45 + vite: 3.2.5_@types+node@17.0.45 transitivePeerDependencies: - less - sass @@ -5126,9 +5163,9 @@ packages: - terser dev: true - /w3c-xmlserializer/3.0.0: - resolution: {integrity: sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==} - engines: {node: '>=12'} + /w3c-xmlserializer/4.0.0: + resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} + engines: {node: '>=14'} dependencies: xml-name-validator: 4.0.0 dev: true @@ -5173,7 +5210,7 @@ packages: acorn-import-assertions: 1.8.0_acorn@8.8.1 browserslist: 4.21.4 chrome-trace-event: 1.0.3 - enhanced-resolve: 5.10.0 + enhanced-resolve: 5.12.0 es-module-lexer: 0.9.3 eslint-scope: 5.1.1 events: 3.3.0 @@ -5279,15 +5316,15 @@ packages: resolution: {integrity: sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==} engines: {node: '>=10.0.0'} dependencies: - '@apideck/better-ajv-errors': 0.3.6_ajv@8.11.0 - '@babel/core': 7.20.2 - '@babel/preset-env': 7.20.2_@babel+core@7.20.2 - '@babel/runtime': 7.20.1 - '@rollup/plugin-babel': 5.3.1_rw3hudt2pmn5afxog7l3b6qtze + '@apideck/better-ajv-errors': 0.3.6_ajv@8.11.2 + '@babel/core': 7.20.7 + '@babel/preset-env': 7.20.2_@babel+core@7.20.7 + '@babel/runtime': 7.20.7 + '@rollup/plugin-babel': 5.3.1_quedi3p7womesqmjrcxptomfpa '@rollup/plugin-node-resolve': 11.2.1_rollup@2.79.1 '@rollup/plugin-replace': 2.4.2_rollup@2.79.1 '@surma/rollup-plugin-off-main-thread': 2.2.3 - ajv: 8.11.0 + ajv: 8.11.2 common-tags: 1.8.2 fast-json-stable-stringify: 2.1.0 fs-extra: 9.1.0 @@ -5446,12 +5483,15 @@ packages: engines: {node: '>=10'} dev: true + /yallist/3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + /yaml/1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} - /yaml/2.1.3: - resolution: {integrity: sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==} + /yaml/2.2.0: + resolution: {integrity: sha512-auf7Gi6QwO7HW//GA9seGvTXVGWl1CM/ADWh1+RxtXr6XOxnT65ovDl9fTi4e0monEyJxCHqDpF6QnFDXmJE4g==} engines: {node: '>= 14'} dev: true diff --git a/src/lanco-incidents-app/package.json b/src/lanco-incidents-app/package.json index 13926ad..35636ea 100644 --- a/src/lanco-incidents-app/package.json +++ b/src/lanco-incidents-app/package.json @@ -10,47 +10,52 @@ "test": "vitest" }, "dependencies": { + "@react-leaflet/core": "^2.1.0", "@tailwindcss/forms": "^0.5.3", - "axios": "^1.1.3", + "axios": "^1.2.1", "geolib": "^3.3.3", - "google-map-react": "^2.2.0", - "jotai": "^1.9.2", + "jotai": "^1.12.0", + "leaflet": "^1.9.3", "lodash": "^4.17.21", - "luxon": "^3.1.0", + "luxon": "^3.1.1", + "match-sorter": "^6.3.1", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-router-dom": "^6.4.3", + "react-leaflet": "^4.2.0", + "react-router-dom": "^6.6.1", + "rxjs": "^7.8.0", "simple-immutable-record": "^0.1.4", + "sort-by": "^1.2.0", "workbox-build": "^6.5.4", "workbox-window": "^6.5.4" }, "devDependencies": { - "@babel/core": "^7.20.2", + "@babel/core": "^7.20.7", "@babel/preset-env": "^7.20.2", "@babel/preset-typescript": "^7.18.6", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", - "@types/google-map-react": "^2.1.7", - "@types/lodash": "^4.14.188", + "@types/leaflet": "^1.9.0", + "@types/lodash": "^4.14.191", "@types/luxon": "^2.4.0", "@types/node": "^17.0.45", - "@types/react": "^18.0.25", - "@types/react-dom": "^18.0.8", + "@types/react": "^18.0.26", + "@types/react-dom": "^18.0.10", "@types/react-router-dom": "^5.3.3", "@types/workbox-build": "^5.0.1", "@vitejs/plugin-react": "^2.2.0", "autoprefixer": "^10.4.13", "babel-loader": "^8.3.0", - "jsdom": "latest", - "postcss": "^8.4.19", - "prettier": "^2.7.1", - "rome": "^10.0.1", + "jsdom": "^20.0.3", + "postcss": "^8.4.20", + "prettier": "^2.8.1", + "rome": "^11.0.0", "tailwindcss": "^3.2.4", "ts-node": "^10.9.1", - "typescript": "*", - "vite": "^3.2.3", + "typescript": "^4.9.4", + "vite": "^3.2.5", "vite-plugin-pwa": "^0.13.3", - "vite-tsconfig-paths": "^3.5.2", + "vite-tsconfig-paths": "^3.6.0", "vitest": "^0.24.5" }, "babel": { diff --git a/src/lanco-incidents-app/src/app.tsx b/src/lanco-incidents-app/src/app.tsx index 31e9e9e..ee80daa 100644 --- a/src/lanco-incidents-app/src/app.tsx +++ b/src/lanco-incidents-app/src/app.tsx @@ -1,32 +1,24 @@ import React from "react"; -import Home from "pages/home"; -import IncidentDetail from "pages/incident-detail/incident-detail"; -import { BrowserRouter as Router, Routes, Route } from "react-router-dom"; -import GeolocationProvider from "providers/geolocation-provider"; import SettingsProvider from "providers/settings-provider"; -import Settings from "pages/settings"; +import { router } from "router"; +import { GeolocationStore } from "stores/geolocation-store"; +import { RouterProvider } from "react-router-dom"; +import ServiceWorkerProvider from "providers/service-worker-provider"; + +GeolocationStore.Default.setConfig({ + enableHighAccuracy: true, + maximumAge: 1000, + timeout: 20000, + watch: true, +}); function App() { return ( - + - - - } - /> - } /> - } /> - - + - + ); } diff --git a/src/lanco-incidents-app/src/atoms/incidents.ts b/src/lanco-incidents-app/src/atoms/incidents.ts index 844a1ba..61a6681 100644 --- a/src/lanco-incidents-app/src/atoms/incidents.ts +++ b/src/lanco-incidents-app/src/atoms/incidents.ts @@ -1,82 +1,112 @@ -import { atomWithReducer } from "jotai/utils"; +import { atom, Getter } from "jotai"; +import { atomWithStorage } from "jotai/utils"; import { IncidentRecord } from "models/view-models/incident-record"; interface IncidentsState { - error?: unknown; - incidents: IncidentRecord[]; - state: "LOADING" | "LOADED" | "FAILED"; + error?: unknown; + incidents: IncidentRecord[]; + state: "LOADING" | "LOADED" | "FAILED"; } type IncidentsAction = - | { type: "ERROR"; error: unknown } - | { type: "LOAD" } - | { type: "LOADED"; incidents: IncidentRecord[] }; + | { type: "ERROR"; error: unknown } + | { type: "LOAD" } + | { type: "LOADED"; incidents: IncidentRecord[] }; const reducer = ( - state: IncidentsState, - action: IncidentsAction, + state: IncidentsState, + action: IncidentsAction, ): IncidentsState => { - switch (action.type) { - case "LOAD": { - if (action.type === "LOAD" && state.state !== "LOADING") { - return { - ...state, - state: "LOADING", - }; - } - break; - } - case "ERROR": - return { - ...state, - state: "FAILED", - error: action.error, - }; - case "LOADED": - return { - ...state, - state: action.type, - incidents: updateIncidents(state.incidents, action.incidents).sort( - (a, b) => b.getTimeSince() - a.getTimeSince(), - ), - }; - } - - return state; + switch (action.type) { + case "LOAD": { + if (action.type === "LOAD" && state.state !== "LOADING") { + return { + ...state, + state: "LOADING", + }; + } + break; + } + case "ERROR": + return { + ...state, + state: "FAILED", + error: action.error, + }; + case "LOADED": + return { + ...state, + state: action.type, + incidents: updateIncidents( + state.incidents, + action.incidents, + ).sort((a, b) => b.getTimeSince() - a.getTimeSince()), + }; + } + + return state; }; function updateIncidents( - originalList: IncidentRecord[], - newList: IncidentRecord[], + originalList: IncidentRecord[], + newList: IncidentRecord[], ): IncidentRecord[] { - const comparer = (sourceItem: IncidentRecord, mergeItem: IncidentRecord) => { - return sourceItem.id === mergeItem.id; - }; + const comparer = ( + sourceItem: IncidentRecord, + mergeItem: IncidentRecord, + ) => { + return sourceItem.id === mergeItem.id; + }; - const isEqual = (a: IncidentRecord) => (b: IncidentRecord) => comparer(b, a); - const areNotIn = (a: IncidentRecord[]) => (b: IncidentRecord) => - !a.some(isEqual(b)); + const isEqual = (a: IncidentRecord) => (b: IncidentRecord) => + comparer(b, a); + const areNotIn = (a: IncidentRecord[]) => (b: IncidentRecord) => + !a.some(isEqual(b)); - const itemsToAdd = newList.filter(areNotIn(originalList)); - const itemsToKeep = originalList - .map((item) => { - const foundItem = newList.find(isEqual(item)); + const itemsToAdd = newList.filter(areNotIn(originalList)); + const itemsToKeep = originalList + .map((item) => { + const foundItem = newList.find(isEqual(item)); - if (foundItem == null) { - return undefined; - } + if (foundItem == null) { + return undefined; + } - return item.with(foundItem); - }) - .filter((item) => item != null) as IncidentRecord[]; + return item.with(foundItem); + }) + .filter((item) => item != null) as IncidentRecord[]; - return [...itemsToKeep, ...itemsToAdd]; + return [...itemsToKeep, ...itemsToAdd]; } -export const IncidentsAtom = atomWithReducer( - { - state: "LOADING", - incidents: [], - }, - reducer, +const persistedIncidentsAtom = atomWithStorage>( + "incidents", + [], +); + +const baseAtom = atom>({ + state: "LOADING", +}); + +export const IncidentsAtom = atom( + (get) => ({ + ...get(baseAtom), + incidents: convertIncidents(get), + }), + (get, set, action) => { + const currentState = { + ...get(baseAtom), + incidents: convertIncidents(get), + }; + + const { incidents, ...rest } = reducer(currentState, action); + + set(persistedIncidentsAtom, incidents); + set(baseAtom, rest); + }, ); +function convertIncidents(get: Getter): IncidentRecord[] { + const incidents = get(persistedIncidentsAtom); + + return incidents.map((val) => new IncidentRecord(val)); +} diff --git a/src/lanco-incidents-app/src/components/map/div-marker.tsx b/src/lanco-incidents-app/src/components/map/div-marker.tsx new file mode 100644 index 0000000..67cee49 --- /dev/null +++ b/src/lanco-incidents-app/src/components/map/div-marker.tsx @@ -0,0 +1,71 @@ +import { + type EventedProps, + createElementObject, + createLayerComponent, + extendContext, +} from "@react-leaflet/core"; +import { + type LatLngExpression, + Marker as LeafletMarker, + DivIcon as LeafletDivIcon, + type MarkerOptions, +} from "leaflet"; + +export interface DivMarkerProps + extends Omit, + EventedProps { + html: string; + position: LatLngExpression; +} + +export const DivMarker = createLayerComponent( + function createMarker({ position, html, ...options }, ctx) { + const leafletDivIcon = new LeafletDivIcon({ + className: "", + html, + }); + + const marker = new LeafletMarker(position, { + ...options, + icon: leafletDivIcon, + }); + + return createElementObject( + marker, + extendContext(ctx, { overlayContainer: marker }) + ); + }, + + function updateDivIcon(divIcon, props, prevProps) { + if (props.position !== prevProps.position) { + divIcon.setLatLng(props.position); + } + if (props.html !== prevProps.html) { + const leafletDivIcon = new LeafletDivIcon({ + className: "", + html: props.html, + }); + + divIcon.setIcon(leafletDivIcon); + } + if ( + props.zIndexOffset != null && + props.zIndexOffset !== prevProps.zIndexOffset + ) { + divIcon.setZIndexOffset(props.zIndexOffset); + } + if (props.opacity != null && props.opacity !== prevProps.opacity) { + divIcon.setOpacity(props.opacity); + } + if ( + divIcon.dragging != null && + props.draggable !== prevProps.draggable + ) { + if (props.draggable === true) { + divIcon.dragging.enable(); + } else { + divIcon.dragging.disable(); + } + } + } +); diff --git a/src/lanco-incidents-app/src/components/map/incident-map.tsx b/src/lanco-incidents-app/src/components/map/incident-map.tsx new file mode 100644 index 0000000..7e1b36a --- /dev/null +++ b/src/lanco-incidents-app/src/components/map/incident-map.tsx @@ -0,0 +1,84 @@ +import React from "react"; +import { IncidentRecord } from "models/view-models/incident-record"; +import { Geocode } from "types/geocode"; +import { LatLngLiteral } from "leaflet"; +import { MapContainer, TileLayer } from "react-leaflet"; +import "leaflet/dist/leaflet.css"; +import { IncidentMarker } from "components/map/incident-marker"; + +interface MapProps { + currentPosition?: Geocode; + defaultCenter?: LatLngLiteral; + incident: IncidentRecord; + otherIncidents?: IncidentRecord[]; +} + +export const IncidentMap: React.FC = (props: MapProps) => { + const { + currentPosition, + defaultCenter, + incident, + otherIncidents = [], + } = props; + const { geoLocation } = incident; + const { lat, lng } = geoLocation ?? {}; + + if (lat == null || lng == null) { + return null; + } + + return ( + + + + {currentPosition != null && ( + `} + /> + )} + + {otherIncidents.map((incident) => { + const { lat, lng } = incident.geoLocation ?? {}; + + if (lat == null || lng == null) { + return null; + } + + return ( + +
${incident.location}
+ `} + /> + ); + })} + + +
+
+
`} + /> + + ); +}; diff --git a/src/lanco-incidents-app/src/components/map/incident-marker.tsx b/src/lanco-incidents-app/src/components/map/incident-marker.tsx new file mode 100644 index 0000000..2728de0 --- /dev/null +++ b/src/lanco-incidents-app/src/components/map/incident-marker.tsx @@ -0,0 +1,50 @@ +import React from "react"; +import { DivMarker, DivMarkerProps } from "components/map/div-marker"; +import { To, useLinkClickHandler } from "react-router-dom"; +import { LeafletEventHandlerFnMap } from "leaflet"; +import { useMap } from "react-leaflet"; + +interface IncidentMarkerProps + extends Pick { + to?: To; +} + +export const IncidentMarker: React.FC = ({ + html, + position, + to, +}) => { + const map = useMap(); + + const handleClick = useLinkClickHandler(to ?? "", { + replace: true, + }); + + const eventHandlers: LeafletEventHandlerFnMap | undefined = + to == null + ? undefined + : { + click: (evt) => { + map.setView(evt.latlng, map.getZoom(), { + animate: true, + }); + + handleClick({ + ...(evt as unknown as React.MouseEvent< + HTMLAnchorElement, + MouseEvent + >), + button: 0, + preventDefault: () => {}, + } as React.MouseEvent); + }, + }; + + const props: DivMarkerProps = { + position, + html, + eventHandlers, + }; + + return ; +}; diff --git a/src/lanco-incidents-app/src/components/map/map-current-location-marker.tsx b/src/lanco-incidents-app/src/components/map/map-current-location-marker.tsx deleted file mode 100644 index 2ece8df..0000000 --- a/src/lanco-incidents-app/src/components/map/map-current-location-marker.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { Coords } from "google-map-react"; -import React from "react"; - -const MapCurrentLocationMarker: React.FC> = () => { - return ( -
- ); -}; - -export default MapCurrentLocationMarker; diff --git a/src/lanco-incidents-app/src/components/map/map-marker.tsx b/src/lanco-incidents-app/src/components/map/map-marker.tsx deleted file mode 100644 index c0fb9d0..0000000 --- a/src/lanco-incidents-app/src/components/map/map-marker.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { Coords } from "google-map-react"; -import React from "react"; -import { Link } from "react-router-dom"; - -interface MapMarkerProps extends Partial { - id: string; - text?: string; - primary?: boolean; -} - -export default function MapMarker({ - id, - primary = false, - text, -}: MapMarkerProps) { - if (!primary) { - return ( - -
{text}
- - ); - } - - return ( -
-
-
-
-
-
- ); -} diff --git a/src/lanco-incidents-app/src/components/map/map.tsx b/src/lanco-incidents-app/src/components/map/map.tsx deleted file mode 100644 index ec4baef..0000000 --- a/src/lanco-incidents-app/src/components/map/map.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import React from "react"; -import GoogleMapReact, { Coords } from "google-map-react"; -import { IncidentRecord } from "models/view-models/incident-record"; -import MapMarker from "components/map/map-marker"; -import MapCurrentLocationMarker from "components/map/map-current-location-marker"; -import { Geocode } from "types/geocode"; - -interface MapProps { - currentPosition?: Geocode; - defaultCenter?: Coords; - incident: IncidentRecord; - otherIncidents?: IncidentRecord[]; -} - -const apiKey: string = (import.meta.env.VITE_GOOGLE_MAPS_KEY as string) ?? ""; - -export const GoogleMap: React.FC = (props: MapProps) => { - const { - currentPosition, - defaultCenter, - incident, - otherIncidents = [], - } = props; - const { geoLocation } = incident; - const { lat, lng } = geoLocation ?? {}; - - if (lat == null || lng == null) { - return null; - } - - return ( -
- - {currentPosition != null && ( - - )} - {otherIncidents.map(({ geoLocation, id, location }) => { - const { lat, lng } = geoLocation ?? {}; - - if (lat == null || lng == null) { - return null; - } - - return ( - - ); - })} - - -
- ); -}; diff --git a/src/lanco-incidents-app/src/containers/app-layout.tsx b/src/lanco-incidents-app/src/containers/app-layout.tsx new file mode 100644 index 0000000..f19b62e --- /dev/null +++ b/src/lanco-incidents-app/src/containers/app-layout.tsx @@ -0,0 +1,81 @@ +import { IsAppUpdatingAtom } from "atoms/app-update"; +import ConfirmUpdateDialog from "components/confirm-update-dialog"; +import ScreenLoader from "components/screen-loader/screen-loader"; +import { SITE_TITLE } from "constants/app-constants"; +import useServiceWorker from "hooks/use-service-worker"; +import { useAtomValue } from "jotai"; +import React, { ReactNode, useEffect, useState } from "react"; +import { Outlet, useOutletContext } from "react-router-dom"; + +interface AppLayoutContext { + headerLeft: ReactNode; + headerRight?: ReactNode; + pageBgStyle: "bg-white" | "bg-gray-100"; +} + +const defaultAppLayoutContext: AppLayoutContext = { + headerLeft: SITE_TITLE, + pageBgStyle: "bg-gray-100", +}; + +export default function AppLayout() { + const [state, setState] = useState(defaultAppLayoutContext); + + const { + appNeedsRefresh, + ignoreUpdate, + updateIgnored, + updateServiceWorker, + } = useServiceWorker(); + + const isUpdating = useAtomValue(IsAppUpdatingAtom); + + const showUpdateMessage = appNeedsRefresh && !updateIgnored && !isUpdating; + const headerShadowClass = showUpdateMessage ? "" : "shadow"; + + return ( +
+
+
+
+
+ {state.headerLeft} +
+ {isUpdating ? null : state.headerRight} +
+
+ +
+ {isUpdating ? ( + + ) : ( + + )} +
+
+
+ ); +} + +export function useAppLayout( + setConfig: () => Partial, + deps?: React.DependencyList | undefined +): void { + const setState = + useOutletContext< + React.Dispatch> + >(); + + useEffect(() => { + setState({ + ...defaultAppLayoutContext, + ...setConfig(), + }); + }, deps); +} diff --git a/src/lanco-incidents-app/src/hooks/use-gps-location.ts b/src/lanco-incidents-app/src/hooks/use-gps-location.ts index bb6d3b8..a17388e 100644 --- a/src/lanco-incidents-app/src/hooks/use-gps-location.ts +++ b/src/lanco-incidents-app/src/hooks/use-gps-location.ts @@ -1,13 +1,36 @@ -import { GeolocationContext } from "providers/geolocation-provider"; -import { useContext } from "react"; +import { useSyncExternalStore } from "react"; +import { fromEvent, throttle, interval, concat } from "rxjs"; +import { GeolocationStore, GeoplocationEvent } from "stores/geolocation-store"; + +function subscribe(onStoreChange: () => void) { + const positionChanges = fromEvent( + GeolocationStore.Default, + GeoplocationEvent.PositionChange, + ); + + const positionErrors = fromEvent( + GeolocationStore.Default, + GeoplocationEvent.PositionError, + ); + + const statusChanges = fromEvent( + GeolocationStore.Default, + GeoplocationEvent.StatusChange, + ); + + const subscription = concat(positionChanges, positionErrors, statusChanges) + .pipe(throttle(() => interval(250))) + .subscribe(() => onStoreChange()); + + return () => { + subscription.unsubscribe(); + }; +} export default function useGeolocation() { - const { currentPosition, currentStatus, refresh } = - useContext(GeolocationContext); - - return { - currentPosition, - currentStatus, - refresh, - }; + return useSyncExternalStore( + subscribe, + () => GeolocationStore.Default.getSnapshot(), + () => GeolocationStore.Default.getSnapshot(), + ); } diff --git a/src/lanco-incidents-app/src/hooks/use-incidents.ts b/src/lanco-incidents-app/src/hooks/use-incidents.ts index 9317bec..783c5ee 100644 --- a/src/lanco-incidents-app/src/hooks/use-incidents.ts +++ b/src/lanco-incidents-app/src/hooks/use-incidents.ts @@ -12,73 +12,75 @@ import { FeedIncident } from "models/dtos/feed-incident"; import { IncidentsAtom } from "atoms/incidents"; export default function useIncidents() { - const { incidentTypeFilters, sort } = useSettings(); - const [{ incidents: incidentRecords, state, error }, dispatch] = - useAtom(IncidentsAtom); - const { currentPosition } = useGeolocation(); + const { incidentTypeFilters, sort } = useSettings(); + const [{ incidents: incidentRecords, state, error }, dispatch] = + useAtom(IncidentsAtom); + const { position: currentPosition } = useGeolocation(); - const allowedIncidentTypes = Object.keys(incidentTypeFilters).filter( - (key) => incidentTypeFilters[key], - ); + const allowedIncidentTypes = Object.keys(incidentTypeFilters).filter( + (key) => incidentTypeFilters[key], + ); - const processFeed = useCallback(async () => { - try { - dispatch({ type: "LOAD" }); + const processFeed = useCallback(async () => { + try { + dispatch({ type: "LOAD" }); - const feedIncidents = await axios.get(LIVE_FEED); + const feedIncidents = await axios.get(LIVE_FEED); - dispatch({ - type: "LOADED", - incidents: feedIncidents.data.map(IncidentRecord.fromFeedIncident), - }); - } catch (error: unknown) { - dispatch({ type: "ERROR", error }); - } - }, [dispatch]); + dispatch({ + type: "LOADED", + incidents: feedIncidents.data.map( + IncidentRecord.fromFeedIncident, + ), + }); + } catch (error: unknown) { + dispatch({ type: "ERROR", error }); + } + }, [dispatch]); - const incidents = useMemo(() => { - return chain(incidentRecords) - .filter((incident) => allowedIncidentTypes.includes(incident.type)) - .map((incident) => { - const { geoLocation } = incident; - if ( - currentPosition == null || - geoLocation?.lat == null || - geoLocation?.lng == null - ) { - return incident; - } + const incidents = useMemo(() => { + return chain(incidentRecords) + .filter((incident) => allowedIncidentTypes.includes(incident.type)) + .map((incident) => { + const { geoLocation } = incident; + if ( + currentPosition == null || + geoLocation?.lat == null || + geoLocation?.lng == null + ) { + return incident; + } - const distance = DistanceUtils.distanceBetween(geoLocation, { - lat: currentPosition.coords.latitude, - lng: currentPosition.coords.longitude, - }); + const distance = DistanceUtils.distanceBetween(geoLocation, { + lat: currentPosition.coords.latitude, + lng: currentPosition.coords.longitude, + }); - return incident.with({ distance }); - }) - .orderBy((incident) => { - if (sort === Sort.Latest) { - return -1 * incident.getTimeSince(); - } + return incident.with({ distance }); + }) + .orderBy((incident) => { + if (sort === Sort.Latest) { + return -1 * incident.getTimeSince(); + } - return incident?.distance ?? Number.MAX_SAFE_INTEGER; - }); - }, [allowedIncidentTypes, currentPosition, incidentRecords, sort]); + return incident?.distance ?? Number.MAX_SAFE_INTEGER; + }); + }, [allowedIncidentTypes, currentPosition, incidentRecords, sort]); - const refresh = useCallback(() => { - processFeed(); - }, [processFeed]); + const refresh = useCallback(() => { + processFeed(); + }, [processFeed]); - useEffect(() => { - if (state === "LOADING") { - processFeed(); - } - }, [processFeed, state]); + useEffect(() => { + if (state === "LOADING") { + processFeed(); + } + }, [processFeed, state]); - return { - error, - incidents: incidents.value(), - loading: state === "LOADING", - refresh, - }; + return { + error, + incidents: incidents.value(), + loading: state === "LOADING", + refresh, + }; } diff --git a/src/lanco-incidents-app/src/hooks/use-online-status.ts b/src/lanco-incidents-app/src/hooks/use-online-status.ts new file mode 100644 index 0000000..9774990 --- /dev/null +++ b/src/lanco-incidents-app/src/hooks/use-online-status.ts @@ -0,0 +1,23 @@ +import { useSyncExternalStore } from "react"; + +enum OnlineStatus { + ONLINE, + OFFLINE, +} + +function subscribe(onStoreChange: () => void) { + window.addEventListener("online", onStoreChange); + window.addEventListener("offline", onStoreChange); + + return () => { + window.removeEventListener("online", onStoreChange); + window.removeEventListener("offline", onStoreChange); + }; +} + +export const useOnlineStatus = () => + useSyncExternalStore( + subscribe, + () => (navigator.onLine ? OnlineStatus.ONLINE : OnlineStatus.OFFLINE), + () => OnlineStatus.ONLINE, + ); diff --git a/src/lanco-incidents-app/src/main.tsx b/src/lanco-incidents-app/src/main.tsx index 84b5008..bb5325b 100644 --- a/src/lanco-incidents-app/src/main.tsx +++ b/src/lanco-incidents-app/src/main.tsx @@ -1,14 +1,13 @@ import React from "react"; -import ReactDOM from "react-dom"; -import "./index.css"; +import { createRoot } from "react-dom/client"; import App from "./app"; -import ServiceWorkerProvider from "providers/service-worker-provider"; +import "./index.css"; + +const container = document.getElementById("root"); +const root = createRoot(container!); -ReactDOM.render( +root.render( - - - - , - document.getElementById("root") + + ); diff --git a/src/lanco-incidents-app/src/models/view-models/geolocation-state-record.ts b/src/lanco-incidents-app/src/models/view-models/geolocation-state-record.ts new file mode 100644 index 0000000..7235cde --- /dev/null +++ b/src/lanco-incidents-app/src/models/view-models/geolocation-state-record.ts @@ -0,0 +1,29 @@ +import { ImmutableRecord } from "simple-immutable-record"; + +export enum GeolocationStatus { + Initialized, + PermissionGranted, + PermissionDenied, +} + +export interface GeolocationState { + status: GeolocationStatus; + error?: GeolocationPositionError; + position?: GeolocationPosition; +} + +export class GeolocationStateRecord extends ImmutableRecord({ + status: GeolocationStatus.Initialized, +}) { + withError(error: GeolocationPositionError): this { + return this.with({ error }); + } + + withPosition(position: GeolocationPosition): this { + return this.with({ position }); + } + + withStatus(status: GeolocationStatus): this { + return this.with({ status }); + } +} diff --git a/src/lanco-incidents-app/src/models/view-models/geolocation-store-conifguration-record.ts b/src/lanco-incidents-app/src/models/view-models/geolocation-store-conifguration-record.ts new file mode 100644 index 0000000..28e7338 --- /dev/null +++ b/src/lanco-incidents-app/src/models/view-models/geolocation-store-conifguration-record.ts @@ -0,0 +1,15 @@ +import { ImmutableRecord } from "simple-immutable-record"; + +export interface GeolocationStoreConifguration extends PositionOptions { + watch: boolean; +} + +export class GeolocationStoreConifgurationRecord extends ImmutableRecord( + { + watch: true, + }, +) { + equalTo(otherObj: GeolocationStoreConifgurationRecord): boolean { + return this === otherObj; + } +} diff --git a/src/lanco-incidents-app/src/models/view-models/incident-record.ts b/src/lanco-incidents-app/src/models/view-models/incident-record.ts index 15eb331..73cc51c 100644 --- a/src/lanco-incidents-app/src/models/view-models/incident-record.ts +++ b/src/lanco-incidents-app/src/models/view-models/incident-record.ts @@ -15,10 +15,9 @@ interface Incident { unitsAssigned: string[]; } -const convertToGeocode = ({ - lat, - lng, -}: Partial<{ lat: number; lng: number }>): Geocode | undefined => { +const convertToGeocode = ({ lat, lng }: Partial<{ lat: number; lng: number }>): + | Geocode + | undefined => { if (lat == null || lng == null) { return undefined; } @@ -26,15 +25,26 @@ const convertToGeocode = ({ return { lat, lng }; }; -export class IncidentRecord extends ImmutableRecord({ - id: "", - incidentDate: DateTime.now(), - type: "", - subType: "", - location: "", - area: "", - unitsAssigned: [], -}) { +function incidentProcessor(values: Record) { + if (typeof values.incidentDate === "string") { + values.incidentDate = DateTime.fromISO(values.incidentDate, {}); + } + + return values; +} + +export class IncidentRecord extends ImmutableRecord( + { + id: "", + incidentDate: DateTime.now(), + type: "", + subType: "", + location: "", + area: "", + unitsAssigned: [], + }, + incidentProcessor, +) { static fromFeedIncident(feedIncident: FeedIncident): IncidentRecord { const { incident_dt, diff --git a/src/lanco-incidents-app/src/pages/home.tsx b/src/lanco-incidents-app/src/pages/home.tsx index 2911fa8..25e9e3b 100644 --- a/src/lanco-incidents-app/src/pages/home.tsx +++ b/src/lanco-incidents-app/src/pages/home.tsx @@ -1,19 +1,16 @@ -import Layout from "containers/layout"; import IncidentsList from "components/incidents-list"; -import useIncidents from "hooks/use-incidents"; import React from "react"; -import { SITE_TITLE } from "constants/app-constants"; import RefreshButton from "components/refresh-button"; import SettingsButton from "components/settings-button"; +import useIncidents from "hooks/use-incidents"; +import { useAppLayout } from "containers/app-layout"; const Home: React.FC = () => { - const { incidents, loading, refresh } = useIncidents(); + const { loading, incidents, refresh } = useIncidents(); - return ( - ({ + headerRight: ( <> { onClick={refresh} /> - }> -
- -
-
+ ), + }), + [loading, refresh] + ); + + return ( +
+ +
); }; diff --git a/src/lanco-incidents-app/src/pages/incident-detail/incident-detail-content.tsx b/src/lanco-incidents-app/src/pages/incident-detail/incident-detail-content.tsx index 06178fa..c5e0099 100644 --- a/src/lanco-incidents-app/src/pages/incident-detail/incident-detail-content.tsx +++ b/src/lanco-incidents-app/src/pages/incident-detail/incident-detail-content.tsx @@ -1,10 +1,9 @@ -import React, { useEffect, useState } from "react"; +import React from "react"; import useIncidents from "hooks/use-incidents"; -import { GoogleMap } from "components/map/map"; -import { Coords } from "google-map-react"; import { IncidentDetailSection } from "./incident-detail-section"; import { IncidentRecord } from "models/view-models/incident-record"; import useGeolocation from "hooks/use-gps-location"; +import { IncidentMap } from "components/map/incident-map"; export interface IncidentDetailContentProps { incident?: IncidentRecord | null; @@ -13,10 +12,9 @@ export interface IncidentDetailContentProps { export const IncidentDetailContent: React.FC = ({ incident, }) => { - const [defaultCenter, setDefaultCenter] = useState(); const { incidents } = useIncidents(); - const { currentPosition: position } = useGeolocation(); + const { position } = useGeolocation(); const currentPosition = position != null ? { lat: position.coords.latitude, lng: position.coords.longitude } @@ -26,12 +24,6 @@ export const IncidentDetailContent: React.FC = ({ (other) => other.id !== incident?.id ); - useEffect(() => { - if (defaultCenter == null && incident?.geoLocation != null) { - setDefaultCenter(incident.geoLocation); - } - }, [defaultCenter, incident]); - if (incident == null) { return (
Loading...
@@ -40,10 +32,10 @@ export const IncidentDetailContent: React.FC = ({ return (
- {defaultCenter != null && ( - diff --git a/src/lanco-incidents-app/src/pages/incident-detail/incident-detail.tsx b/src/lanco-incidents-app/src/pages/incident-detail/incident-detail.tsx index 1122e1d..c142eed 100644 --- a/src/lanco-incidents-app/src/pages/incident-detail/incident-detail.tsx +++ b/src/lanco-incidents-app/src/pages/incident-detail/incident-detail.tsx @@ -1,4 +1,3 @@ -import Layout from "containers/layout"; import React from "react"; import { useNavigate, useParams } from "react-router-dom"; import { IncidentDetailContent } from "./incident-detail-content"; @@ -7,26 +6,21 @@ import { IncidentRecord } from "models/view-models/incident-record"; import useIncident from "hooks/use-incident"; import { useWebShare } from "hooks/use-web-share"; import { SITE_TITLE } from "constants/app-constants"; +import { useAppLayout } from "containers/app-layout"; -export default function IncidentDetail() { +export function IncidentDetail() { const { id } = useParams<"id">(); const navigate = useNavigate(); const { incident } = useIncident({ id }); const webShare = useWebShare(); - const handleGoBack = () => navigate(-1); + const handleGoBack = () => navigate("/", { replace: true }); + const handleShare = () => webShare.share(getShareData(incident)); - const handleShare = () => - webShare.share({ - title: SITE_TITLE, - text: `${incident?.type} (${incident?.subType}) - ${incident?.location}, ${incident?.area}`, - url: window.location.href, - }); - - return ( - ({ + pageBgStyle: "bg-white", + headerLeft: ( {getTitle(incident)} - } - > - - + ), + }), + [incident] ); + + return ; } function getTitle(incident?: IncidentRecord | null): string { @@ -50,3 +45,17 @@ function getTitle(incident?: IncidentRecord | null): string { return "Incident"; } + +function getShareData(incident?: IncidentRecord | null) { + const incidentTypeText = incident?.subType + ? `${incident?.type} (${incident?.subType})` + : incident?.type; + + const locationText = [incident?.location, incident?.area].join(", "); + + return { + title: SITE_TITLE, + text: [incidentTypeText, locationText].join(" - "), + url: window.location.href, + }; +} diff --git a/src/lanco-incidents-app/src/pages/settings.tsx b/src/lanco-incidents-app/src/pages/settings.tsx index d42595b..681e378 100644 --- a/src/lanco-incidents-app/src/pages/settings.tsx +++ b/src/lanco-incidents-app/src/pages/settings.tsx @@ -1,4 +1,3 @@ -import Layout from "containers/layout"; import React, { useCallback, useEffect, useMemo, useReducer } from "react"; import useSettings, { UseSettingsHook } from "hooks/use-settings"; import _, { chain } from "lodash"; @@ -6,6 +5,7 @@ import PageTitle from "components/page-title"; import SettingsSectionSort from "components/settings/settings-sections/settings-section-sortby"; import { Sort } from "models/view-models/settings-record"; import { useNavigate } from "react-router-dom"; +import { useAppLayout } from "containers/app-layout"; type TypeOfKey = Type[Key]; @@ -95,6 +95,13 @@ const Settings: React.FC = () => { navigate(-1); }, [navigate]); + useAppLayout( + () => ({ + headerLeft: Settings, + }), + [] + ); + const handleApply = useCallback(() => { updateSettings(incidentFilters, sort); goBack(); @@ -117,59 +124,52 @@ const Settings: React.FC = () => { }, [originalSort, originalIncidentTypeFilters]); return ( - Settings} - > -
-
-
- - -
-
- Filter: +
+
+
+ + +
+
Filter:
+ {sortedIncidentFilters.map((type) => ( +
+
- {sortedIncidentFilters.map((type) => ( -
- -
- ))} -
+ ))}
-
-
- - -
+
+
+
+ +
- +
); }; diff --git a/src/lanco-incidents-app/src/providers/geolocation-provider.tsx b/src/lanco-incidents-app/src/providers/geolocation-provider.tsx deleted file mode 100644 index c6297e9..0000000 --- a/src/lanco-incidents-app/src/providers/geolocation-provider.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import React, { - PropsWithChildren, - useCallback, - useEffect, - useState, -} from "react"; - -type GeolocationPositionStatus = - | GeolocationPositionError - | { permissionGranted: true }; - -interface GeolocationContextState { - currentPosition?: GeolocationPosition; - currentStatus?: GeolocationPositionStatus; -} - -export const GeolocationContext = React.createContext< - GeolocationContextState & { refresh: () => void } ->({ - ...{}, - refresh: () => {}, -}); - -interface GeolocationProviderProps extends PositionOptions { - watch?: boolean; -} - -const GeolocationProvider: React.FC< - PropsWithChildren -> = ({ children, watch = false, ...positionOptions }) => { - const [ - { currentPosition, currentStatus }, - dispatch, - ] = useState({}); - - const { enableHighAccuracy, maximumAge, timeout } = positionOptions; - - const handlePostionChange = (position: GeolocationPosition) => { - dispatch((prev) => ({ - ...prev, - currentPosition: position, - currentStatus: { permissionGranted: true }, - })); - }; - - const handlePositionError = (status: GeolocationPositionError) => { - dispatch((prev) => ({ - ...prev, - currentStatus: status, - })); - }; - - const processCurrentPosition = useCallback(() => { - if ("geolocation" in navigator) { - if (watch) { - return navigator.geolocation.watchPosition( - handlePostionChange, - handlePositionError, - { enableHighAccuracy, maximumAge, timeout } - ); - } - - navigator.geolocation.getCurrentPosition( - handlePostionChange, - handlePositionError, - { enableHighAccuracy, maximumAge, timeout } - ); - } - }, [enableHighAccuracy, maximumAge, timeout, watch]); - - useEffect(() => { - const watchId = processCurrentPosition(); - - return () => { - if (watchId != null) { - navigator.geolocation.clearWatch(watchId); - } - }; - }, [processCurrentPosition]); - - return ( - - {children} - - ); -}; - -export default GeolocationProvider; diff --git a/src/lanco-incidents-app/src/router.tsx b/src/lanco-incidents-app/src/router.tsx new file mode 100644 index 0000000..05977fb --- /dev/null +++ b/src/lanco-incidents-app/src/router.tsx @@ -0,0 +1,27 @@ +import React from "react"; +import Home from "pages/home"; +import { createBrowserRouter } from "react-router-dom"; +import Settings from "pages/settings"; +import { IncidentDetail } from "pages/incident-detail/incident-detail"; +import AppLayout from "containers/app-layout"; + +export const router = createBrowserRouter([ + { + path: "/", + element: , + children: [ + { + index: true, + element: , + }, + { + path: "settings", + element: , + }, + { + path: "incidents/:id", + element: , + }, + ], + }, +]); diff --git a/src/lanco-incidents-app/src/stores/geolocation-store.ts b/src/lanco-incidents-app/src/stores/geolocation-store.ts new file mode 100644 index 0000000..ac09593 --- /dev/null +++ b/src/lanco-incidents-app/src/stores/geolocation-store.ts @@ -0,0 +1,175 @@ +import { TypedEventTarget } from "utils/typed-event-target"; +import { TypedEvent } from "utils/typed-event"; +import { + GeolocationStoreConifguration, + GeolocationStoreConifgurationRecord, +} from "../models/view-models/geolocation-store-conifguration-record"; +import { GeolocationStateRecord } from "models/view-models/geolocation-state-record"; + +enum GeolocationStatus { + Initialized, + PermissionGranted, + PermissionDenied, +} + +interface GeolocationStoreOptions { + geolocation?: Geolocation; +} + +export enum GeoplocationEvent { + StatusChange = "statusChange", + PositionChange = "positionChange", + PositionError = "positionError", +} + +class GeoplocationStatusChangeEvent extends TypedEvent( + GeoplocationEvent.StatusChange, +) {} + +class GeoplocationPositionChangeEvent extends TypedEvent( + GeoplocationEvent.PositionChange, +) {} + +class GeoplocationPositionErrorEvent extends TypedEvent( + GeoplocationEvent.PositionError, +) {} + +export class GeolocationStore extends TypedEventTarget<{ + [GeoplocationEvent.StatusChange]: GeoplocationStatusChangeEvent; + [GeoplocationEvent.PositionChange]: GeoplocationPositionChangeEvent; + [GeoplocationEvent.PositionError]: GeoplocationPositionErrorEvent; +}>() { + static readonly Default = new GeolocationStore(); + + private config = new GeolocationStoreConifgurationRecord(); + private state = new GeolocationStateRecord(); + + private geolocation?: Geolocation; + private watchId?: number; + + constructor(options: GeolocationStoreOptions = {}) { + super(); + + this.handlePermissionStateChange = + this.handlePermissionStateChange.bind(this); + this.handlePositionError = this.handlePositionError.bind(this); + this.handlePostionChange = this.handlePostionChange.bind(this); + + this.geolocation = + options.geolocation == null && "geolocation" in navigator + ? navigator.geolocation + : options.geolocation; + + this.setupPermissionCheck(); + } + + getSnapshot() { + return this.state; + } + + setConfig(config: Partial = {}) { + const nextConfig = this.config.with(config); + + if (!this.config.equalTo(nextConfig)) { + this.checkLocation(nextConfig); + this.watchId = this.setupWatchPosition(nextConfig); + this.config = nextConfig; + } + } + + private setupWatchPosition( + nextConfig?: GeolocationStoreConifgurationRecord, + ): number | undefined { + if ( + this.geolocation == null || + this.state.status !== GeolocationStatus.PermissionGranted + ) { + return; + } + + if (this.watchId != null) { + this.geolocation.clearWatch(this.watchId); + } + + if (nextConfig == null || nextConfig.watch !== this.config.watch) { + const { enableHighAccuracy, maximumAge, timeout } = this.config; + + if ( + (nextConfig == null && this.config.watch) || + nextConfig?.watch + ) { + return this.geolocation.watchPosition( + this.handlePostionChange, + this.handlePositionError, + { enableHighAccuracy, maximumAge, timeout }, + ); + } + } + } + + private checkLocation(config?: GeolocationStoreConifgurationRecord): void { + if ( + this.geolocation == null || + this.state.status !== GeolocationStatus.PermissionGranted + ) { + return; + } + + const { enableHighAccuracy, maximumAge, timeout } = + config ?? this.config; + + this.geolocation.getCurrentPosition( + this.handlePostionChange, + this.handlePositionError, + { enableHighAccuracy, maximumAge, timeout }, + ); + } + + private setupPermissionCheck() { + navigator.permissions + .query({ name: "geolocation" }) + .then((result: PermissionStatus) => { + result.onchange = () => + this.handlePermissionStateChange(result.state); + + this.handlePermissionStateChange(result.state); + }); + } + + private handlePermissionStateChange(state: PermissionState) { + const nextStatus = + state === "granted" || state === "prompt" + ? GeolocationStatus.PermissionGranted + : GeolocationStatus.PermissionDenied; + + const nextState = this.state.withStatus(nextStatus); + + if (this.state !== nextState) { + this.state = nextState; + super.dispatchEvent(new GeoplocationStatusChangeEvent(nextStatus)); + + if (nextStatus === GeolocationStatus.PermissionGranted) { + this.checkLocation(); + this.watchId = this.setupWatchPosition(); + } + } + } + + private handlePostionChange(position: GeolocationPosition) { + const nextState = this.state.withPosition(position); + + if (this.state !== nextState) { + this.state = nextState; + super.dispatchEvent(new GeoplocationPositionChangeEvent(position)); + } + } + + private handlePositionError(error: GeolocationPositionError) { + const nextState = this.state.withError(error); + + if (this.state !== nextState) { + this.state = nextState; + super.dispatchEvent(new GeoplocationPositionErrorEvent(error)); + } + } +} diff --git a/src/lanco-incidents-app/src/utils/distance-utils.ts b/src/lanco-incidents-app/src/utils/distance-utils.ts index dbdd27b..42ae7df 100644 --- a/src/lanco-incidents-app/src/utils/distance-utils.ts +++ b/src/lanco-incidents-app/src/utils/distance-utils.ts @@ -3,20 +3,20 @@ import { getDistance } from "geolib"; type LatLng = { lat: number; lng: number }; const distanceBetween = ( - from: LatLng, - to: LatLng, - measurement: "meters" | "miles" = "miles", + from: LatLng, + to: LatLng, + measurement: "meters" | "miles" = "miles", ): number | undefined => { - const measurementMultiplier = measurement === "miles" ? 0.00062137 : 1; + const measurementMultiplier = measurement === "miles" ? 0.00062137 : 1; - const distance = - from != null && to != null - ? getDistance(to, from) * measurementMultiplier - : undefined; + const distance = + from != null && to != null + ? getDistance(to, from) * measurementMultiplier + : undefined; - return distance; + return distance; }; export const DistanceUtils = { - distanceBetween, + distanceBetween, }; diff --git a/src/lanco-incidents-app/src/utils/typed-event-target.test.ts b/src/lanco-incidents-app/src/utils/typed-event-target.test.ts new file mode 100644 index 0000000..1b5aa07 --- /dev/null +++ b/src/lanco-incidents-app/src/utils/typed-event-target.test.ts @@ -0,0 +1,82 @@ +import { TypedEventTarget } from "utils/typed-event-target"; +import { describe, it, expect, vi } from "vitest"; + +describe("TypedEventTarget", () => { + it("is an EventTarget", () => { + // Arrange + class TestClass extends TypedEventTarget<{ + "event-one": Event; + }>() {} + + // Act + const result = new TestClass(); + + // Assert + expect(result instanceof EventTarget).toBeTruthy(); + }); + + describe("dispatchEvent()", () => { + describe("when EventsMap has Custom events", () => { + it("it accepts custom events", () => { + // Arrange + class TestEvent extends Event {} + class TestClass extends TypedEventTarget<{ + "event-one": TestEvent; + "event-two": TestEvent; + }>() {} + const testClass = new TestClass(); + + // Act + const result = testClass.dispatchEvent( + new TestEvent("event-one"), + ); + + // Assert + expect(result).toBeTruthy(); + }); + }); + }); + + describe("addEventListener()", () => { + describe("when dispatchEvent", () => { + it("it calls eventListener", () => { + // Arrange + const eventOne = "event-one" as const; + class TestClass extends TypedEventTarget<{ + [eventOne]: Event; + }>() {} + const eventListener = vi.fn(); + + const testClass = new TestClass(); + testClass.addEventListener(eventOne, eventListener); + + // Act + testClass.dispatchEvent(new Event(eventOne)); + + // Assert + expect(eventListener).toBeCalled(); + }); + }); + + describe("when dispatchEvent of unknown event", () => { + it("it does not call eventListener", () => { + // Arrange + const eventOne = "event-one" as const; + const eventTwo = "event-two" as const; + class TestClass extends TypedEventTarget<{ + [eventOne]: Event; + }>() {} + const eventListener = vi.fn(); + + const testClass = new TestClass(); + testClass.addEventListener(eventOne, eventListener); + + // Act + testClass.dispatchEvent(new Event(eventTwo)); + + // Assert + expect(eventListener).not.toBeCalled(); + }); + }); + }); +}); diff --git a/src/lanco-incidents-app/src/utils/typed-event-target.ts b/src/lanco-incidents-app/src/utils/typed-event-target.ts new file mode 100644 index 0000000..6b1027e --- /dev/null +++ b/src/lanco-incidents-app/src/utils/typed-event-target.ts @@ -0,0 +1,37 @@ +interface TypedEventListener { + (evt: TEvent): void; +} + +interface TypedEventListenerObject { + handleEvent(object: TEvent): void; +} + +type TypedEventListenerOrEventListenerObject = + | TypedEventListener + | TypedEventListenerObject; + +type EventsMap = Record; + +type StringKeyOf = keyof T extends string ? keyof T : never; + +interface TypedEventTargetInterface { + dispatchEvent(evt: TEventsMap[StringKeyOf]): boolean; + addEventListener>( + type: TType, + listener: TypedEventListenerOrEventListenerObject, + options?: AddEventListenerOptions | boolean, + ): void; + + removeEventListener>( + type: TType, + listener: TypedEventListenerOrEventListenerObject, + options?: AddEventListenerOptions | boolean, + ): void; +} + +export function TypedEventTarget() { + return EventTarget as unknown as { + new (): TypedEventTargetInterface; + prototype: TypedEventTargetInterface; + }; +} diff --git a/src/lanco-incidents-app/src/utils/typed-event.test.ts b/src/lanco-incidents-app/src/utils/typed-event.test.ts new file mode 100644 index 0000000..a2e9a48 --- /dev/null +++ b/src/lanco-incidents-app/src/utils/typed-event.test.ts @@ -0,0 +1,15 @@ +import { TypedEvent } from "utils/typed-event"; +import { describe, it, expect } from "vitest"; + +describe("TypedEvent", () => { + it("is an Event", () => { + // Arrange + class TestEvent extends TypedEvent("event") {} + + // Act + const event = new TestEvent("test"); + + // Assert + expect(event instanceof Event).toBeTruthy(); + }); +}); diff --git a/src/lanco-incidents-app/src/utils/typed-event.ts b/src/lanco-incidents-app/src/utils/typed-event.ts new file mode 100644 index 0000000..2d6af0c --- /dev/null +++ b/src/lanco-incidents-app/src/utils/typed-event.ts @@ -0,0 +1,7 @@ +export function TypedEvent(type: string) { + return class extends Event { + constructor(public data: TData) { + super(type); + } + }; +} diff --git a/src/lanco-incidents-func/Services/FeedService.cs b/src/lanco-incidents-func/Services/FeedService.cs index 20c1426..b433e8d 100644 --- a/src/lanco-incidents-func/Services/FeedService.cs +++ b/src/lanco-incidents-func/Services/FeedService.cs @@ -3,16 +3,22 @@ using System.Threading.Tasks; using LancoIncidentsFunc.Interfaces; using LancoIncidentsFunc.Models; +using Microsoft.Extensions.Logging; namespace LancoIncidentsFunc.Services; public class FeedService : IFeedService { private readonly IEnumerable _incidentProviders; + private readonly ILogger _logger; - public FeedService(IEnumerable incidentProviders) + public FeedService( + IEnumerable incidentProviders, + ILogger logger + ) { _incidentProviders = incidentProviders; + _logger = logger; } public async Task GetIncidentAsync(GlobalId globalId) @@ -24,7 +30,27 @@ public async Task GetIncidentAsync(GlobalId globalId) public Task> GetIncidentsAsync() { - return Task.WhenAll(_incidentProviders.Select((i) => i.GetIncidentsAsync())) + return Task.WhenAll( + _incidentProviders.Select( + async (i) => + { + try + { + return await i.GetIncidentsAsync(); + } + catch (System.Exception ex) + { + _logger.LogError( + ex, + $"Exception occured when calling GetIncidentsAsync", + $"Provider: {i.Key}" + ); + } + + return Enumerable.Empty(); + } + ) + ) .ContinueWith(t => t.Result.SelectMany(i => i)); } } diff --git a/src/lanco-incidents-func/lanco-incidents-func.csproj b/src/lanco-incidents-func/lanco-incidents-func.csproj index 8f6096b..25b5c39 100644 --- a/src/lanco-incidents-func/lanco-incidents-func.csproj +++ b/src/lanco-incidents-func/lanco-incidents-func.csproj @@ -23,7 +23,7 @@ - + diff --git a/src/lanco-incidents-func/package.json b/src/lanco-incidents-func/package.json index 6d12003..f594e60 100644 --- a/src/lanco-incidents-func/package.json +++ b/src/lanco-incidents-func/package.json @@ -4,16 +4,19 @@ "azurite": "docker run -p 10000:10000 -p 10001:10001 -p 10002:10002 --rm mcr.microsoft.com/azure-storage/azurite", "func": "func start --csharp", "dev": "concurrently --names \"Azurite,Functions\" -c \"bgBlue.bold,bgMagenta.bold\" \"pnpm run azurite\" \"pnpm run func\"", + "serve": "pnpm dev", "build": "dotnet build -c Release", "restore": "dotnet clean && dotnet restore" }, "lint-staged": { - "*.{cs}": ["dotnet csharpier"] + "*.{cs}": [ + "dotnet csharpier" + ] }, "volta": { "extends": "../../package.json" }, "devDependencies": { - "concurrently": "^7.5.0" + "concurrently": "^7.6.0" } } \ No newline at end of file diff --git a/turbo.json b/turbo.json index 91365b6..d4664ca 100644 --- a/turbo.json +++ b/turbo.json @@ -9,6 +9,14 @@ "dist/**" ] }, + "serve": { + "dependsOn": [ + "^build", "build" + ], + "outputs": [ + "dist/**" + ] + }, "test": { "dependsOn": [ "build"