diff --git a/messages/en.json b/messages/en.json index a7da286ee..3d5f2a592 100644 --- a/messages/en.json +++ b/messages/en.json @@ -147,6 +147,12 @@ "Screens.Settings.AppSettings.languageDesc": { "message": "Display language for app" }, + "Screens.Settings.AppSettings.mapManagement": { + "message": "Map Management" + }, + "Screens.Settings.AppSettings.mapManagementDesc": { + "message": "Backgrounds, Map Data" + }, "Screens.Settings.AppSettings.title": { "message": "App Settings" }, @@ -1264,6 +1270,75 @@ "screens.Settings.CreateOrJoinProject.whatIsAProject": { "message": "What is a Project" }, + "screens.Settings.MapManagement.BackgroundMaps.ChooseMapFile.acceptedFileTypes": { + "message": "Accepted file types are .smp" + }, + "screens.Settings.MapManagement.BackgroundMaps.ChooseMapFile.chooseFile": { + "message": "Choose File" + }, + "screens.Settings.MapManagement.BackgroundMaps.about": { + "message": "About Custom Map" + }, + "screens.Settings.MapManagement.BackgroundMaps.cannotBeUndone": { + "message": "This cannot be undone." + }, + "screens.Settings.MapManagement.BackgroundMaps.close": { + "message": "Close" + }, + "screens.Settings.MapManagement.BackgroundMaps.customMapAddedDescription": { + "message": "You will see this map when you are offline, but you will not see a map outside the area defined in your custom map." + }, + "screens.Settings.MapManagement.BackgroundMaps.customMapAddedTitle": { + "message": "Custom Map Added" + }, + "screens.Settings.MapManagement.BackgroundMaps.customMapInfoLoadError": { + "message": "Could not get custom map information from file. Please remove it or choose a different file." + }, + "screens.Settings.MapManagement.BackgroundMaps.deleteCustomMapDescription": { + "message": "This will delete the map and its offline areas. No collected observation data will be deleted." + }, + "screens.Settings.MapManagement.BackgroundMaps.deleteCustomMapTitle": { + "message": "Delete Custom Map?" + }, + "screens.Settings.MapManagement.BackgroundMaps.deleteMapButtonText": { + "message": "Delete Map" + }, + "screens.Settings.MapManagement.BackgroundMaps.description1": { + "message": "Adding a custom map will enable you to see a map when you are offline." + }, + "screens.Settings.MapManagement.BackgroundMaps.description2": { + "message": "Your custom map is not shared with other devices in your project." + }, + "screens.Settings.MapManagement.BackgroundMaps.importErrorDescription": { + "message": "Unable to import the file. Please go back and try again." + }, + "screens.Settings.MapManagement.BackgroundMaps.importErrorTitle": { + "message": "Import Error" + }, + "screens.Settings.MapManagement.BackgroundMaps.removeMapFile": { + "message": "Remove Map File" + }, + "screens.Settings.MapManagement.BackgroundMaps.screenTitle": { + "message": "Background Maps" + }, + "screens.Settings.MapManagement.MapsList.CustomMapDetails.dateAdded": { + "message": "Date Added" + }, + "screens.Settings.MapManagement.MapsList.CustomMapDetails.mapNameColumn": { + "message": "Map Name" + }, + "screens.Settings.MapManagement.MapsList.CustomMapDetails.removeMap": { + "message": "Remove Map" + }, + "screens.Settings.MapManagement.MapsList.CustomMapDetails.sizeInMegabytes": { + "message": "{value} MB" + }, + "screens.Settings.MapManagement.backgroundMaps": { + "message": "Background Maps" + }, + "screens.Settings.MapManagement.screenTitle": { + "message": "Map Management" + }, "screens.Settings.YourTeam.InviteDeclined": { "message": "Invitation Declined" }, diff --git a/package-lock.json b/package-lock.json index 86e8f96f1..f87320b00 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "hasInstallScript": true, "dependencies": { "@bam.tech/react-native-image-resizer": "^3.0.7", - "@comapeo/ipc": "2.0.0", + "@comapeo/ipc": "2.0.2", "@dev-plugins/react-navigation": "^0.0.6", "@formatjs/intl-getcanonicallocales": "^2.3.0", "@formatjs/intl-locale": "^3.3.2", @@ -90,6 +90,7 @@ "tiny-typed-emitter": "^2.1.0", "uint8array-extras": "^0.5.0", "utm": "^1.1.1", + "valibot": "^0.42.1", "validate-color": "^2.2.4", "zustand": "^4.4.6" }, @@ -97,7 +98,7 @@ "@babel/core": "^7.20.0", "@babel/preset-env": "^7.20.0", "@babel/runtime": "^7.20.0", - "@comapeo/core": "2.0.0", + "@comapeo/core": "2.0.1", "@comapeo/schema": "1.0.0", "@formatjs/cli": "^6.2.0", "@react-native-community/cli": "^12.3.6", @@ -2410,9 +2411,9 @@ "license": "MIT" }, "node_modules/@comapeo/core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@comapeo/core/-/core-2.0.0.tgz", - "integrity": "sha512-tM2NEYW+sMj5Gpp1tr4SAJarsw3+g5iluTS77/cP6G4WHsTwPvEZyyezMeSZ3UzyWae75Nn+hJYnY2ZcJaXmpg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@comapeo/core/-/core-2.0.1.tgz", + "integrity": "sha512-6ZUb5umzitYKZx28bYFMxQfpE2B6pdC2ukCd9rcM1l+EgNUAcL+1NWeo/YRlXPnbzhltZ7kr0LvmZtXoMb/ing==", "license": "MIT", "dependencies": { "@comapeo/fallback-smp": "^1.0.0", @@ -2454,7 +2455,7 @@ "sodium-universal": "^4.0.0", "start-stop-state-machine": "^1.2.0", "streamx": "^2.19.0", - "styled-map-package": "^1.1.0", + "styled-map-package": "^2.0.0", "sub-encoder": "^2.1.1", "throttle-debounce": "^5.0.0", "tiny-typed-emitter": "^2.1.0", @@ -2536,9 +2537,9 @@ "license": "MIT" }, "node_modules/@comapeo/ipc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@comapeo/ipc/-/ipc-2.0.0.tgz", - "integrity": "sha512-pKLsmiFFUe+6wUgokeoO3ko1ltqZbEZKUrzvnTBNCp+IHaSMLhYXJtEmqNwLafmmB64As++jLqdi51aEm27Dew==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@comapeo/ipc/-/ipc-2.0.2.tgz", + "integrity": "sha512-nOm2MzUjnN9GNYW8cAXzfAyW3URJz+lWm9nyKm8vmTTxiwBt6ZMEd2DCU28dl1KNfasqw79501jWY+fELFt/wg==", "license": "MIT", "dependencies": { "eventemitter3": "^5.0.1", @@ -2549,7 +2550,7 @@ "node": ">=18.17.1" }, "peerDependencies": { - "@comapeo/core": "2.0.0" + "@comapeo/core": "^2.0.0" } }, "node_modules/@comapeo/schema": { @@ -2628,6 +2629,37 @@ "node": ">=0.8.0" } }, + "node_modules/@emnapi/core": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.3.1.tgz", + "integrity": "sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.0.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", + "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz", + "integrity": "sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -4379,24 +4411,26 @@ } }, "node_modules/@fastify/ajv-compiler": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.5.0.tgz", - "integrity": "sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-4.0.1.tgz", + "integrity": "sha512-DxrBdgsjNLP0YM6W5Hd6/Fmj43S8zMKiFJYgi+Ri3htTGAowPVG/tG1wpnWLMjufEnehRivUCKZ1pLDIoZdTuw==", "license": "MIT", "dependencies": { - "ajv": "^8.11.0", - "ajv-formats": "^2.1.1", - "fast-uri": "^2.0.0" + "ajv": "^8.12.0", + "ajv-formats": "^3.0.1", + "fast-uri": "^3.0.0" } }, "node_modules/@fastify/ajv-compiler/node_modules/ajv": { - "version": "8.12.0", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -4409,10 +4443,6 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, - "node_modules/@fastify/deepmerge": { - "version": "1.3.0", - "license": "MIT" - }, "node_modules/@fastify/error": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.4.1.tgz", @@ -4420,12 +4450,21 @@ "license": "MIT" }, "node_modules/@fastify/fast-json-stringify-compiler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz", - "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-5.0.1.tgz", + "integrity": "sha512-f2d3JExJgFE3UbdFcpPwqNUEoHWmt8pAKf8f+9YuLESdefA0WgqxeT6DrGL4Yrf/9ihXNSKOqpjEmurV405meA==", "license": "MIT", "dependencies": { - "fast-json-stringify": "^5.7.0" + "fast-json-stringify": "^6.0.0" + } + }, + "node_modules/@fastify/merge-json-schemas": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz", + "integrity": "sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" } }, "node_modules/@fastify/send": { @@ -5716,9 +5755,9 @@ } }, "node_modules/@maplibre/maplibre-gl-style-spec": { - "version": "20.3.1", - "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-20.3.1.tgz", - "integrity": "sha512-5ueL4UDitzVtceQ8J4kY+Px3WK+eZTsmGwha3MBKHKqiHvKrjWWwBCIl1K8BuJSc5OFh83uI8IFNoFvQxX2uUw==", + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-20.4.0.tgz", + "integrity": "sha512-AzBy3095fTFPjDjmWpR2w6HVRAZJ6hQZUCwk5Plz6EyfnfuQW1odeW5i2Ai47Y6TBA2hQnC+azscjBSALpaWgw==", "license": "ISC", "dependencies": { "@mapbox/jsonlint-lines-primitives": "~2.0.2", @@ -5727,7 +5766,6 @@ "minimist": "^1.2.8", "quickselect": "^2.0.0", "rw": "^1.3.3", - "sort-object": "^3.0.3", "tinyqueue": "^3.0.0" }, "bin": { @@ -5745,6 +5783,18 @@ "node": ">= 10" } }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.5.tgz", + "integrity": "sha512-kwUxR7J9WLutBbulqg1dfOrMTwhMdXLdcGUhcbCcGwnPLt3gz19uHVdwH1syKVDbE022ZS2vZxOWflFLS0YTjw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.1.0", + "@emnapi/runtime": "^1.1.0", + "@tybys/wasm-util": "^0.9.0" + } + }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", @@ -5756,7 +5806,9 @@ } }, "node_modules/@node-rs/crc32": { - "version": "1.10.0", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32/-/crc32-1.10.4.tgz", + "integrity": "sha512-R1kX9t4Bz1gkNZUcI967bp91+HIoCJa7p11xvBAU9INUvTC1XsOs5mnGq+LE+UOHKUKmE3pOLHLVuoRo4pM3Fg==", "license": "MIT", "engines": { "node": ">= 10" @@ -5766,24 +5818,58 @@ "url": "https://github.com/sponsors/Brooooooklyn" }, "optionalDependencies": { - "@node-rs/crc32-android-arm-eabi": "1.10.0", - "@node-rs/crc32-android-arm64": "1.10.0", - "@node-rs/crc32-darwin-arm64": "1.10.0", - "@node-rs/crc32-darwin-x64": "1.10.0", - "@node-rs/crc32-freebsd-x64": "1.10.0", - "@node-rs/crc32-linux-arm-gnueabihf": "1.10.0", - "@node-rs/crc32-linux-arm64-gnu": "1.10.0", - "@node-rs/crc32-linux-arm64-musl": "1.10.0", - "@node-rs/crc32-linux-x64-gnu": "1.10.0", - "@node-rs/crc32-linux-x64-musl": "1.10.0", - "@node-rs/crc32-wasm32-wasi": "1.10.0", - "@node-rs/crc32-win32-arm64-msvc": "1.10.0", - "@node-rs/crc32-win32-ia32-msvc": "1.10.0", - "@node-rs/crc32-win32-x64-msvc": "1.10.0" + "@node-rs/crc32-android-arm-eabi": "1.10.4", + "@node-rs/crc32-android-arm64": "1.10.4", + "@node-rs/crc32-darwin-arm64": "1.10.4", + "@node-rs/crc32-darwin-x64": "1.10.4", + "@node-rs/crc32-freebsd-x64": "1.10.4", + "@node-rs/crc32-linux-arm-gnueabihf": "1.10.4", + "@node-rs/crc32-linux-arm64-gnu": "1.10.4", + "@node-rs/crc32-linux-arm64-musl": "1.10.4", + "@node-rs/crc32-linux-x64-gnu": "1.10.4", + "@node-rs/crc32-linux-x64-musl": "1.10.4", + "@node-rs/crc32-wasm32-wasi": "1.10.4", + "@node-rs/crc32-win32-arm64-msvc": "1.10.4", + "@node-rs/crc32-win32-ia32-msvc": "1.10.4", + "@node-rs/crc32-win32-x64-msvc": "1.10.4" + } + }, + "node_modules/@node-rs/crc32-android-arm-eabi": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-android-arm-eabi/-/crc32-android-arm-eabi-1.10.4.tgz", + "integrity": "sha512-xnfEDpxPU/tVFEOTwKF8N3F7NreAk0J/o+JhRiaeS5IYQD7rFsdmgzcWi7MpggzFq5ETNM1z/f+YD9OPump8yg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/crc32-android-arm64": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-android-arm64/-/crc32-android-arm64-1.10.4.tgz", + "integrity": "sha512-4myv2lydjPgw1Vn1AzyTPWwJlU7k7hoP7nsXn0ibQxjIknD/r05G7GJziTFL4T9sAfM3b4MephfgnRDA66gPjA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" } }, "node_modules/@node-rs/crc32-darwin-arm64": { - "version": "1.10.0", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-darwin-arm64/-/crc32-darwin-arm64-1.10.4.tgz", + "integrity": "sha512-x1ggDiiojMpaY4Xf9A5JRLxA3L6ezDiVqtItsXrf8edG/SvlLEmSYPWHpswgKjd4LcGuL3AZrKNcvAi59bCTsQ==", "cpu": [ "arm64" ], @@ -5796,6 +5882,182 @@ "node": ">= 10" } }, + "node_modules/@node-rs/crc32-darwin-x64": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-darwin-x64/-/crc32-darwin-x64-1.10.4.tgz", + "integrity": "sha512-PCFt905HFFJvQE68Sc9eE/9LYxoC7hen29+WC0StIK21B2P+NorW7AgUW8kCv28NKDL3sPmIQHxXMWP7rDdRHw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/crc32-freebsd-x64": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-freebsd-x64/-/crc32-freebsd-x64-1.10.4.tgz", + "integrity": "sha512-C3KJgyKiWLkFlcrWX04wkVIkSUiD+KCVG+yyLOVXUbQFdCjSbbEQx2MUpM7qcy5ZOAFj4/MZCYdMLgQ6qIgaAw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/crc32-linux-arm-gnueabihf": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-arm-gnueabihf/-/crc32-linux-arm-gnueabihf-1.10.4.tgz", + "integrity": "sha512-YlP3IozMBJmZbytr3/J6fEF5GjWql3p+r3MzY0RctgPf9UdRwG7pjz81SUu6X6kNuDE2eoeKblG0hIPKCd1/Hw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/crc32-linux-arm64-gnu": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-arm64-gnu/-/crc32-linux-arm64-gnu-1.10.4.tgz", + "integrity": "sha512-GETfDmFEmWQaULn+jjs6UJB/IS2olWToqt/PaMKfQwohMFuFEAMiWLue/aXM2Q78hgbTooc4m8iY0djevwXjBA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/crc32-linux-arm64-musl": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-arm64-musl/-/crc32-linux-arm64-musl-1.10.4.tgz", + "integrity": "sha512-629LGgGC2/h9HSM0m0sdhCNBap3QWyTQy85RB8AnywsA2R1XqeO7UH4VI5W5y5jFPeVusAkPZhYZJTGmlukZvA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/crc32-linux-x64-gnu": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-x64-gnu/-/crc32-linux-x64-gnu-1.10.4.tgz", + "integrity": "sha512-ifpmD7lpkhrgwnn8BMxoH/sgeCG+tAUSBvaQkSHLsKJfg+yZ2X/+Y9JvWA79/WaR8ksD01E0yr/tZ8t+Dp0p0w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/crc32-linux-x64-musl": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-x64-musl/-/crc32-linux-x64-musl-1.10.4.tgz", + "integrity": "sha512-grAfrxC/bIENFnJx2w55NIMg5x8DrMQbumSrturVBmbraozgFO6DaBg/g/pnzQvJbkuhXk920pLFwz5OeuxqzA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/crc32-wasm32-wasi": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-wasm32-wasi/-/crc32-wasm32-wasi-1.10.4.tgz", + "integrity": "sha512-nlhG9PlPDsISBC8m2lp5DTRe2uV3Y1UEnFU1lweu/llF9xb8alxQbRE2Vp2rsWJP0s+cwmGx7k3UUOUbnVkbqw==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@node-rs/crc32-win32-arm64-msvc": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-win32-arm64-msvc/-/crc32-win32-arm64-msvc-1.10.4.tgz", + "integrity": "sha512-btYP7Xv2NmCkrXDE3dLqgh+2fTgvByu6NRfWV3++md4tCO8C88dCu9uLxW7cr0dt88cpC0f5Yx9pWFbURKA23Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/crc32-win32-ia32-msvc": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-win32-ia32-msvc/-/crc32-win32-ia32-msvc-1.10.4.tgz", + "integrity": "sha512-o+7Zq9seSWAmoiOmUlXMi44FFwiGkfGihnKIIMKN9DAmQEifHb7Y4RuNnjYpEwjwlOa3HQ8wjQazEhxFFdrbSw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/crc32-win32-x64-msvc": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-win32-x64-msvc/-/crc32-win32-x64-msvc-1.10.4.tgz", + "integrity": "sha512-vnqwu4p7o9jvpjq8Xc1zuhw3jSaSkdVSSIFUralgOXKP6m+cbBbuOTeJZpsuf6C/diVNv6YocTBOlkhJqq0oGw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -8757,6 +9019,16 @@ "url": "https://opencollective.com/turf" } }, + "node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", + "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@types/b4a": { "version": "1.6.3", "license": "MIT", @@ -9465,9 +9737,9 @@ } }, "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", "license": "MIT", "dependencies": { "ajv": "^8.0.0" @@ -9482,13 +9754,15 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -9780,15 +10054,6 @@ "sprintf-js": "~1.0.2" } }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array-buffer-byte-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", @@ -9887,15 +10152,6 @@ "util": "^0.12.0" } }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ast-types": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", @@ -9960,15 +10216,21 @@ } }, "node_modules/avvio": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.4.0.tgz", - "integrity": "sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/avvio/-/avvio-9.1.0.tgz", + "integrity": "sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw==", "license": "MIT", "dependencies": { - "@fastify/error": "^3.3.0", + "@fastify/error": "^4.0.0", "fastq": "^1.17.1" } }, + "node_modules/avvio/node_modules/@fastify/error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@fastify/error/-/error-4.0.0.tgz", + "integrity": "sha512-OO/SA8As24JtT1usTUTKgGH7uLvhfwZPwlptRi2Dp5P4KKmJI3gvsZ8MIHnNwDs4sLf/aai5LzTyl66xr7qMxA==", + "license": "MIT" + }, "node_modules/b4a": { "version": "1.6.6", "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", @@ -10619,25 +10881,6 @@ "node": ">= 0.8" } }, - "node_modules/bytewise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/bytewise/-/bytewise-1.1.0.tgz", - "integrity": "sha512-rHuuseJ9iQ0na6UDhnrRVDh8YnWVlU6xM3VH6q/+yHDeUH2zIhUzP+2/h3LIrhLDBtTqzWpE3p3tP/boefskKQ==", - "license": "MIT", - "dependencies": { - "bytewise-core": "^1.2.2", - "typewise": "^1.0.3" - } - }, - "node_modules/bytewise-core": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bytewise-core/-/bytewise-core-1.2.3.tgz", - "integrity": "sha512-nZD//kc78OOxeYtRlVk8/zXqTB4gf/nlguL1ggWA8FuchMyOxcyHR4QPQZMUmA7czC+YnaBrPUCubqAWe50DaA==", - "license": "MIT", - "dependencies": { - "typewise-core": "^1.2" - } - }, "node_modules/cacache": { "version": "15.3.0", "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", @@ -11449,7 +11692,9 @@ "license": "MIT" }, "node_modules/cookie": { - "version": "0.5.0", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -14456,18 +14701,6 @@ "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", "license": "Apache-2.0" }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fast-content-type-parse": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz", @@ -14523,31 +14756,48 @@ "license": "MIT" }, "node_modules/fast-json-stringify": { - "version": "5.8.0", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-6.0.0.tgz", + "integrity": "sha512-FGMKZwniMTgZh7zQp9b6XnBVxUmKVahQLQeRQHqwYmPDqDhcEKZ3BaQsxelFFI5PY7nN71OEeiL47/zUWcYe1A==", "license": "MIT", "dependencies": { - "@fastify/deepmerge": "^1.0.0", - "ajv": "^8.10.0", - "ajv-formats": "^2.1.1", + "@fastify/merge-json-schemas": "^0.1.1", + "ajv": "^8.12.0", + "ajv-formats": "^3.0.1", "fast-deep-equal": "^3.1.3", - "fast-uri": "^2.1.0", + "fast-uri": "^2.3.0", + "json-schema-ref-resolver": "^1.0.1", "rfdc": "^1.2.0" } }, "node_modules/fast-json-stringify/node_modules/ajv": { - "version": "8.12.0", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/fast-json-stringify/node_modules/ajv/node_modules/fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "license": "BSD-3-Clause" + }, + "node_modules/fast-json-stringify/node_modules/fast-uri": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz", + "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==", + "license": "MIT" + }, "node_modules/fast-json-stringify/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -14580,8 +14830,10 @@ } }, "node_modules/fast-uri": { - "version": "2.2.0", - "license": "MIT" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "license": "BSD-3-Clause" }, "node_modules/fast-xml-parser": { "version": "4.3.5", @@ -14604,9 +14856,9 @@ } }, "node_modules/fastify": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.28.1.tgz", - "integrity": "sha512-kFWUtpNr4i7t5vY2EJPCN2KgMVpuqfU4NjnJNCgiNB900oiDeYqaNDRcAfeBbOF5hGixixxcKnOU4KN9z6QncQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fastify/-/fastify-5.0.0.tgz", + "integrity": "sha512-Qe4dU+zGOzg7vXjw4EvcuyIbNnMwTmcuOhlOrOJsgwzvjEZmsM/IeHulgJk+r46STjdJS/ZJbxO8N70ODXDMEQ==", "funding": [ { "type": "github", @@ -14619,22 +14871,21 @@ ], "license": "MIT", "dependencies": { - "@fastify/ajv-compiler": "^3.5.0", - "@fastify/error": "^3.4.0", - "@fastify/fast-json-stringify-compiler": "^4.3.0", + "@fastify/ajv-compiler": "^4.0.0", + "@fastify/error": "^4.0.0", + "@fastify/fast-json-stringify-compiler": "^5.0.0", "abstract-logging": "^2.0.1", - "avvio": "^8.3.0", - "fast-content-type-parse": "^1.1.0", - "fast-json-stringify": "^5.8.0", - "find-my-way": "^8.0.0", - "light-my-request": "^5.11.0", + "avvio": "^9.0.0", + "fast-json-stringify": "^6.0.0", + "find-my-way": "^9.0.0", + "light-my-request": "^6.0.0", "pino": "^9.0.0", - "process-warning": "^3.0.0", + "process-warning": "^4.0.0", "proxy-addr": "^2.0.7", - "rfdc": "^1.3.0", + "rfdc": "^1.3.1", "secure-json-parse": "^2.7.0", - "semver": "^7.5.4", - "toad-cache": "^3.3.0" + "semver": "^7.6.0", + "toad-cache": "^3.7.0" } }, "node_modules/fastify-plugin": { @@ -14643,10 +14894,10 @@ "integrity": "sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==", "license": "MIT" }, - "node_modules/fastify/node_modules/process-warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", - "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==", + "node_modules/fastify/node_modules/@fastify/error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@fastify/error/-/error-4.0.0.tgz", + "integrity": "sha512-OO/SA8As24JtT1usTUTKgGH7uLvhfwZPwlptRi2Dp5P4KKmJI3gvsZ8MIHnNwDs4sLf/aai5LzTyl66xr7qMxA==", "license": "MIT" }, "node_modules/fastq": { @@ -14898,14 +15149,14 @@ } }, "node_modules/find-my-way": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.2.2.tgz", - "integrity": "sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-9.1.0.tgz", + "integrity": "sha512-Y5jIsuYR4BwWDYYQ2A/RWWE6gD8a0FMgtU+HOq1WKku+Cwdz8M1v8wcAmRXXM1/iqtoqg06v+LjAxMYbCjViMw==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-querystring": "^1.0.0", - "safe-regex2": "^3.1.0" + "safe-regex2": "^4.0.0" }, "engines": { "node": ">=14" @@ -15355,15 +15606,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/getenv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz", @@ -16336,15 +16578,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -18940,6 +19173,15 @@ "is-buffer": "~1.1.1" } }, + "node_modules/json-schema-ref-resolver": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz", + "integrity": "sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + } + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -19157,12 +19399,14 @@ } }, "node_modules/light-my-request": { - "version": "5.11.0", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-6.1.0.tgz", + "integrity": "sha512-+NFuhlOGoEwxeQfJ/pobkVFxcnKyDtiX847hLjuB/IzBxIl3q4VJeFI8uRCgb3AlTWL1lgOr+u5+8QdUcr33ng==", "license": "BSD-3-Clause", "dependencies": { - "cookie": "^0.5.0", - "process-warning": "^2.0.0", - "set-cookie-parser": "^2.4.1" + "cookie": "^0.7.0", + "process-warning": "^4.0.0", + "set-cookie-parser": "^2.6.0" } }, "node_modules/lighthouse-logger": { @@ -21562,9 +21806,9 @@ } }, "node_modules/p-event/node_modules/p-timeout": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.2.tgz", - "integrity": "sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.3.tgz", + "integrity": "sha512-UJUyfKbwvr/uZSV6btANfb+0t/mOhKV/KXcCUTp8FcQI+v/0d+wXqH4htrW0E4rR6WiEO/EPvUFiV9D5OI4vlw==", "license": "MIT", "engines": { "node": ">=14.16" @@ -22029,12 +22273,6 @@ "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", "license": "MIT" }, - "node_modules/pino/node_modules/process-warning": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.0.tgz", - "integrity": "sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==", - "license": "MIT" - }, "node_modules/pirates": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", @@ -22268,7 +22506,9 @@ "license": "MIT" }, "node_modules/process-warning": { - "version": "2.2.0", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.0.tgz", + "integrity": "sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==", "license": "MIT" }, "node_modules/progress": { @@ -23489,9 +23729,9 @@ } }, "node_modules/ret": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.4.3.tgz", - "integrity": "sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.5.0.tgz", + "integrity": "sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==", "license": "MIT", "engines": { "node": ">=10" @@ -23517,7 +23757,9 @@ } }, "node_modules/rfdc": { - "version": "1.3.0", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "license": "MIT" }, "node_modules/rimraf": { @@ -23755,12 +23997,12 @@ } }, "node_modules/safe-regex2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-3.1.0.tgz", - "integrity": "sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-4.0.0.tgz", + "integrity": "sha512-Hvjfv25jPDVr3U+4LDzBuZPPOymELG3PYcSk5hcevooo1yxxamQL/bHs/GrEPGmMoMEwRrHVGiCA1pXi97B8Ew==", "license": "MIT", "dependencies": { - "ret": "~0.4.0" + "ret": "~0.5.0" } }, "node_modules/safe-stable-stringify": { @@ -23925,9 +24167,9 @@ "license": "ISC" }, "node_modules/set-cookie-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", - "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", "license": "MIT" }, "node_modules/set-function-length": { @@ -23962,21 +24204,6 @@ "node": ">= 0.4" } }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -24388,41 +24615,6 @@ "atomic-sleep": "^1.0.0" } }, - "node_modules/sort-asc": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/sort-asc/-/sort-asc-0.2.0.tgz", - "integrity": "sha512-umMGhjPeHAI6YjABoSTrFp2zaBtXBej1a0yKkuMUyjjqu6FJsTF+JYwCswWDg+zJfk/5npWUUbd33HH/WLzpaA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sort-desc": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/sort-desc/-/sort-desc-0.2.0.tgz", - "integrity": "sha512-NqZqyvL4VPW+RAxxXnB8gvE1kyikh8+pR+T+CXLksVRN9eiQqkQlPwqWYU0mF9Jm7UnctShlxLyAt1CaBOTL1w==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sort-object": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sort-object/-/sort-object-3.0.3.tgz", - "integrity": "sha512-nK7WOY8jik6zaG9CRwZTaD5O7ETWDLZYMM12pqY8htll+7dYeqGfEUPcUBHOpSJg2vJOrvFIY2Dl5cX2ih1hAQ==", - "license": "MIT", - "dependencies": { - "bytewise": "^1.1.0", - "get-value": "^2.0.2", - "is-extendable": "^0.1.1", - "sort-asc": "^0.2.0", - "sort-desc": "^0.2.0", - "union-value": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -24480,43 +24672,6 @@ "node": ">=6" } }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "license": "MIT", - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/split2": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", @@ -24969,9 +25124,9 @@ "license": "MIT" }, "node_modules/styled-map-package": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/styled-map-package/-/styled-map-package-1.1.0.tgz", - "integrity": "sha512-QzaB5nvbuZKteIlGAFVEsxyuXWJQ5bObFntgrk9CZdsEl19ErTexr3vThpvl/ABCWhWYUe8N8kpR6XevxmHlDQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/styled-map-package/-/styled-map-package-2.0.0.tgz", + "integrity": "sha512-CGjyypTc+SQ97Y2XopJ9yOuB8aQMqAMWSLyUBStnntuomXNzgMUhhS9GOafyBhUJqm01UONWi82tJhXhZ05wWw==", "license": "MIT", "dependencies": { "@fastify/static": "^7.0.4", @@ -25009,6 +25164,49 @@ "styled-map-package": "bin/smp.js" } }, + "node_modules/styled-map-package/node_modules/@fastify/ajv-compiler": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.6.0.tgz", + "integrity": "sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.11.0", + "ajv-formats": "^2.1.1", + "fast-uri": "^2.0.0" + } + }, + "node_modules/styled-map-package/node_modules/@fastify/ajv-compiler/node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/styled-map-package/node_modules/@fastify/ajv-compiler/node_modules/fast-uri": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz", + "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==", + "license": "MIT" + }, + "node_modules/styled-map-package/node_modules/@fastify/fast-json-stringify-compiler": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz", + "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==", + "license": "MIT", + "dependencies": { + "fast-json-stringify": "^5.7.0" + } + }, "node_modules/styled-map-package/node_modules/@turf/bbox": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-7.1.0.tgz", @@ -25037,6 +25235,22 @@ "url": "https://opencollective.com/turf" } }, + "node_modules/styled-map-package/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/styled-map-package/node_modules/ansi-regex": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", @@ -25049,6 +25263,16 @@ "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, + "node_modules/styled-map-package/node_modules/avvio": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.4.0.tgz", + "integrity": "sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA==", + "license": "MIT", + "dependencies": { + "@fastify/error": "^3.3.0", + "fastq": "^1.17.1" + } + }, "node_modules/styled-map-package/node_modules/chalk": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", @@ -25103,6 +25327,61 @@ "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "license": "MIT" }, + "node_modules/styled-map-package/node_modules/fast-json-stringify": { + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.16.1.tgz", + "integrity": "sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g==", + "license": "MIT", + "dependencies": { + "@fastify/merge-json-schemas": "^0.1.0", + "ajv": "^8.10.0", + "ajv-formats": "^3.0.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^2.1.0", + "json-schema-ref-resolver": "^1.0.1", + "rfdc": "^1.2.0" + } + }, + "node_modules/styled-map-package/node_modules/fast-json-stringify/node_modules/fast-uri": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz", + "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==", + "license": "MIT" + }, + "node_modules/styled-map-package/node_modules/fastify": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.28.1.tgz", + "integrity": "sha512-kFWUtpNr4i7t5vY2EJPCN2KgMVpuqfU4NjnJNCgiNB900oiDeYqaNDRcAfeBbOF5hGixixxcKnOU4KN9z6QncQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", + "dependencies": { + "@fastify/ajv-compiler": "^3.5.0", + "@fastify/error": "^3.4.0", + "@fastify/fast-json-stringify-compiler": "^4.3.0", + "abstract-logging": "^2.0.1", + "avvio": "^8.3.0", + "fast-content-type-parse": "^1.1.0", + "fast-json-stringify": "^5.8.0", + "find-my-way": "^8.0.0", + "light-my-request": "^5.11.0", + "pino": "^9.0.0", + "process-warning": "^3.0.0", + "proxy-addr": "^2.0.7", + "rfdc": "^1.3.0", + "secure-json-parse": "^2.7.0", + "semver": "^7.5.4", + "toad-cache": "^3.3.0" + } + }, "node_modules/styled-map-package/node_modules/filter-obj": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-6.1.0.tgz", @@ -25115,6 +25394,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/styled-map-package/node_modules/find-my-way": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.2.2.tgz", + "integrity": "sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-querystring": "^1.0.0", + "safe-regex2": "^3.1.0" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/styled-map-package/node_modules/is-interactive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", @@ -25166,6 +25459,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/styled-map-package/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/styled-map-package/node_modules/light-my-request": { + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.14.0.tgz", + "integrity": "sha512-aORPWntbpH5esaYpGOOmri0OHDOe3wC5M2MQxZ9dvMLZm6DnaAn0kJlcbU9hwsQgLzmZyReKwFwwPkR+nHu5kA==", + "license": "BSD-3-Clause", + "dependencies": { + "cookie": "^0.7.0", + "process-warning": "^3.0.0", + "set-cookie-parser": "^2.4.1" + } + }, "node_modules/styled-map-package/node_modules/log-symbols": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.0.tgz", @@ -25293,6 +25603,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/styled-map-package/node_modules/process-warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", + "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==", + "license": "MIT" + }, "node_modules/styled-map-package/node_modules/restore-cursor": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", @@ -25309,6 +25625,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/styled-map-package/node_modules/ret": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.4.3.tgz", + "integrity": "sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/styled-map-package/node_modules/safe-regex2": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-3.1.0.tgz", + "integrity": "sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==", + "license": "MIT", + "dependencies": { + "ret": "~0.4.0" + } + }, "node_modules/styled-map-package/node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", @@ -25992,7 +26326,9 @@ } }, "node_modules/toad-cache": { - "version": "3.3.0", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz", + "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==", "license": "MIT", "engines": { "node": ">=12" @@ -26260,21 +26596,6 @@ "node": ">=14.17" } }, - "node_modules/typewise": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typewise/-/typewise-1.0.3.tgz", - "integrity": "sha512-aXofE06xGhaQSPzt8hlTY+/YWQhm9P0jYUp1f2XtmW/3Bk0qzXcyFWAtPoo2uTGQj1ZwbDuSyuxicq+aDo8lCQ==", - "license": "MIT", - "dependencies": { - "typewise-core": "^1.2.0" - } - }, - "node_modules/typewise-core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/typewise-core/-/typewise-core-1.2.0.tgz", - "integrity": "sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg==", - "license": "MIT" - }, "node_modules/ua-parser-js": { "version": "1.0.35", "funding": [ @@ -26372,21 +26693,6 @@ "version": "4.5.0", "license": "MIT" }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "license": "MIT", - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/unique-filename": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", @@ -26578,6 +26884,20 @@ "node": ">=10.12.0" } }, + "node_modules/valibot": { + "version": "0.42.1", + "resolved": "https://registry.npmjs.org/valibot/-/valibot-0.42.1.tgz", + "integrity": "sha512-3keXV29Ar5b//Hqi4MbSdV7lfVp6zuYLZuA9V1PvQUsXqogr+u5lvLPLk3A4f74VUXDnf/JfWMN6sB+koJ/FFw==", + "license": "MIT", + "peerDependencies": { + "typescript": ">=5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/valid-url": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", diff --git a/package.json b/package.json index c3fb4d69d..896e47534 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ }, "dependencies": { "@bam.tech/react-native-image-resizer": "^3.0.7", - "@comapeo/ipc": "2.0.0", + "@comapeo/ipc": "2.0.2", "@dev-plugins/react-navigation": "^0.0.6", "@formatjs/intl-getcanonicallocales": "^2.3.0", "@formatjs/intl-locale": "^3.3.2", @@ -108,6 +108,7 @@ "tiny-typed-emitter": "^2.1.0", "uint8array-extras": "^0.5.0", "utm": "^1.1.1", + "valibot": "^0.42.1", "validate-color": "^2.2.4", "zustand": "^4.4.6" }, @@ -115,7 +116,7 @@ "@babel/core": "^7.20.0", "@babel/preset-env": "^7.20.0", "@babel/runtime": "^7.20.0", - "@comapeo/core": "2.0.0", + "@comapeo/core": "2.0.1", "@comapeo/schema": "1.0.0", "@formatjs/cli": "^6.2.0", "@react-native-community/cli": "^12.3.6", diff --git a/src/backend/package-lock.json b/src/backend/package-lock.json index 4ce3ba7ea..3a1295fc7 100644 --- a/src/backend/package-lock.json +++ b/src/backend/package-lock.json @@ -10,8 +10,8 @@ "hasInstallScript": true, "license": "MIT", "dependencies": { - "@comapeo/core": "2.0.0", - "@comapeo/ipc": "2.0.0", + "@comapeo/core": "2.0.1", + "@comapeo/ipc": "2.0.2", "@mapeo/default-config": "5.0.0", "debug": "^4.3.4" }, @@ -44,9 +44,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", - "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.9.tgz", + "integrity": "sha512-4zpTHZ9Cm6L9L+uIqghQX8ZXg8HKFcjYO3qHoO8zTmRm6HQUJ8SSJ+KRvbMBZn0EGVlT4DRYeQ/6hjlyXBh+Kg==", "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -56,9 +56,9 @@ } }, "node_modules/@comapeo/core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@comapeo/core/-/core-2.0.0.tgz", - "integrity": "sha512-tM2NEYW+sMj5Gpp1tr4SAJarsw3+g5iluTS77/cP6G4WHsTwPvEZyyezMeSZ3UzyWae75Nn+hJYnY2ZcJaXmpg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@comapeo/core/-/core-2.0.1.tgz", + "integrity": "sha512-6ZUb5umzitYKZx28bYFMxQfpE2B6pdC2ukCd9rcM1l+EgNUAcL+1NWeo/YRlXPnbzhltZ7kr0LvmZtXoMb/ing==", "license": "MIT", "dependencies": { "@comapeo/fallback-smp": "^1.0.0", @@ -100,7 +100,7 @@ "sodium-universal": "^4.0.0", "start-stop-state-machine": "^1.2.0", "streamx": "^2.19.0", - "styled-map-package": "^1.1.0", + "styled-map-package": "^2.0.0", "sub-encoder": "^2.1.1", "throttle-debounce": "^5.0.0", "tiny-typed-emitter": "^2.1.0", @@ -173,9 +173,9 @@ "license": "MIT" }, "node_modules/@comapeo/ipc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@comapeo/ipc/-/ipc-2.0.0.tgz", - "integrity": "sha512-pKLsmiFFUe+6wUgokeoO3ko1ltqZbEZKUrzvnTBNCp+IHaSMLhYXJtEmqNwLafmmB64As++jLqdi51aEm27Dew==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@comapeo/ipc/-/ipc-2.0.2.tgz", + "integrity": "sha512-nOm2MzUjnN9GNYW8cAXzfAyW3URJz+lWm9nyKm8vmTTxiwBt6ZMEd2DCU28dl1KNfasqw79501jWY+fELFt/wg==", "license": "MIT", "dependencies": { "eventemitter3": "^5.0.1", @@ -186,7 +186,7 @@ "node": ">=18.17.1" }, "peerDependencies": { - "@comapeo/core": "2.0.0" + "@comapeo/core": "^2.0.0" } }, "node_modules/@comapeo/schema": { @@ -230,9 +230,9 @@ "dev": true }, "node_modules/@emnapi/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.2.0.tgz", - "integrity": "sha512-E7Vgw78I93we4ZWdYCb4DGAwRROGkMIXk7/y87UmANR+J6qsWusmC3gLt0H+O0KOt5e6O38U8oJamgbudrES/w==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.3.1.tgz", + "integrity": "sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==", "license": "MIT", "optional": true, "dependencies": { @@ -241,9 +241,9 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz", - "integrity": "sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", + "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", "license": "MIT", "optional": true, "dependencies": { @@ -713,9 +713,9 @@ } }, "node_modules/@maplibre/maplibre-gl-style-spec": { - "version": "20.3.1", - "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-20.3.1.tgz", - "integrity": "sha512-5ueL4UDitzVtceQ8J4kY+Px3WK+eZTsmGwha3MBKHKqiHvKrjWWwBCIl1K8BuJSc5OFh83uI8IFNoFvQxX2uUw==", + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-20.4.0.tgz", + "integrity": "sha512-AzBy3095fTFPjDjmWpR2w6HVRAZJ6hQZUCwk5Plz6EyfnfuQW1odeW5i2Ai47Y6TBA2hQnC+azscjBSALpaWgw==", "license": "ISC", "dependencies": { "@mapbox/jsonlint-lines-primitives": "~2.0.2", @@ -724,7 +724,6 @@ "minimist": "^1.2.8", "quickselect": "^2.0.0", "rw": "^1.3.3", - "sort-object": "^3.0.3", "tinyqueue": "^3.0.0" }, "bin": { @@ -742,9 +741,9 @@ } }, "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz", - "integrity": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.5.tgz", + "integrity": "sha512-kwUxR7J9WLutBbulqg1dfOrMTwhMdXLdcGUhcbCcGwnPLt3gz19uHVdwH1syKVDbE022ZS2vZxOWflFLS0YTjw==", "license": "MIT", "optional": true, "dependencies": { @@ -754,9 +753,9 @@ } }, "node_modules/@node-rs/crc32": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32/-/crc32-1.10.3.tgz", - "integrity": "sha512-4UgH0fDRxs0eMSgrUN0UUM4BpIEbVKutiSkFLICwegbgIger3c1t7V3jOYralK0xTBHraW3r59wlESdc3h/nQg==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32/-/crc32-1.10.4.tgz", + "integrity": "sha512-R1kX9t4Bz1gkNZUcI967bp91+HIoCJa7p11xvBAU9INUvTC1XsOs5mnGq+LE+UOHKUKmE3pOLHLVuoRo4pM3Fg==", "license": "MIT", "engines": { "node": ">= 10" @@ -766,26 +765,26 @@ "url": "https://github.com/sponsors/Brooooooklyn" }, "optionalDependencies": { - "@node-rs/crc32-android-arm-eabi": "1.10.3", - "@node-rs/crc32-android-arm64": "1.10.3", - "@node-rs/crc32-darwin-arm64": "1.10.3", - "@node-rs/crc32-darwin-x64": "1.10.3", - "@node-rs/crc32-freebsd-x64": "1.10.3", - "@node-rs/crc32-linux-arm-gnueabihf": "1.10.3", - "@node-rs/crc32-linux-arm64-gnu": "1.10.3", - "@node-rs/crc32-linux-arm64-musl": "1.10.3", - "@node-rs/crc32-linux-x64-gnu": "1.10.3", - "@node-rs/crc32-linux-x64-musl": "1.10.3", - "@node-rs/crc32-wasm32-wasi": "1.10.3", - "@node-rs/crc32-win32-arm64-msvc": "1.10.3", - "@node-rs/crc32-win32-ia32-msvc": "1.10.3", - "@node-rs/crc32-win32-x64-msvc": "1.10.3" + "@node-rs/crc32-android-arm-eabi": "1.10.4", + "@node-rs/crc32-android-arm64": "1.10.4", + "@node-rs/crc32-darwin-arm64": "1.10.4", + "@node-rs/crc32-darwin-x64": "1.10.4", + "@node-rs/crc32-freebsd-x64": "1.10.4", + "@node-rs/crc32-linux-arm-gnueabihf": "1.10.4", + "@node-rs/crc32-linux-arm64-gnu": "1.10.4", + "@node-rs/crc32-linux-arm64-musl": "1.10.4", + "@node-rs/crc32-linux-x64-gnu": "1.10.4", + "@node-rs/crc32-linux-x64-musl": "1.10.4", + "@node-rs/crc32-wasm32-wasi": "1.10.4", + "@node-rs/crc32-win32-arm64-msvc": "1.10.4", + "@node-rs/crc32-win32-ia32-msvc": "1.10.4", + "@node-rs/crc32-win32-x64-msvc": "1.10.4" } }, "node_modules/@node-rs/crc32-android-arm-eabi": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-android-arm-eabi/-/crc32-android-arm-eabi-1.10.3.tgz", - "integrity": "sha512-V9iNJd5ux9I415qOldmxZIHrazYMJNsQ6v+Kq/t9FTQyYqiEeHvRc1FzBh9MT6Uc24InwMhBeC1WVw0BL4VaxQ==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-android-arm-eabi/-/crc32-android-arm-eabi-1.10.4.tgz", + "integrity": "sha512-xnfEDpxPU/tVFEOTwKF8N3F7NreAk0J/o+JhRiaeS5IYQD7rFsdmgzcWi7MpggzFq5ETNM1z/f+YD9OPump8yg==", "cpu": [ "arm" ], @@ -799,9 +798,9 @@ } }, "node_modules/@node-rs/crc32-android-arm64": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-android-arm64/-/crc32-android-arm64-1.10.3.tgz", - "integrity": "sha512-d6xLAhbk5FDGpltAKTFs7hZO/PWpHeihZ/ZCKx2LEVz8jXQEshpo2/ojnfb5FAw6oNzU2H+S/RI5GeCr7paa1Q==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-android-arm64/-/crc32-android-arm64-1.10.4.tgz", + "integrity": "sha512-4myv2lydjPgw1Vn1AzyTPWwJlU7k7hoP7nsXn0ibQxjIknD/r05G7GJziTFL4T9sAfM3b4MephfgnRDA66gPjA==", "cpu": [ "arm64" ], @@ -815,9 +814,9 @@ } }, "node_modules/@node-rs/crc32-darwin-arm64": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-darwin-arm64/-/crc32-darwin-arm64-1.10.3.tgz", - "integrity": "sha512-IoX6HC4dlKc9BONe7632DADBtiHUiIVD7Bibuj3bGrvOBllN8hvBL9+dDC+/iDdOeuiBKgb0hgL5h2nPIybpzA==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-darwin-arm64/-/crc32-darwin-arm64-1.10.4.tgz", + "integrity": "sha512-x1ggDiiojMpaY4Xf9A5JRLxA3L6ezDiVqtItsXrf8edG/SvlLEmSYPWHpswgKjd4LcGuL3AZrKNcvAi59bCTsQ==", "cpu": [ "arm64" ], @@ -831,9 +830,9 @@ } }, "node_modules/@node-rs/crc32-darwin-x64": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-darwin-x64/-/crc32-darwin-x64-1.10.3.tgz", - "integrity": "sha512-JUDGAX/0W4A9ok9p6yuy4fAsBDrq8Db0sUjKLMZ/+P3NHB+Qk+OsZUsEDxP3yhBJxhPq97JpN4bBzgMnkDajpw==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-darwin-x64/-/crc32-darwin-x64-1.10.4.tgz", + "integrity": "sha512-PCFt905HFFJvQE68Sc9eE/9LYxoC7hen29+WC0StIK21B2P+NorW7AgUW8kCv28NKDL3sPmIQHxXMWP7rDdRHw==", "cpu": [ "x64" ], @@ -847,9 +846,9 @@ } }, "node_modules/@node-rs/crc32-freebsd-x64": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-freebsd-x64/-/crc32-freebsd-x64-1.10.3.tgz", - "integrity": "sha512-mbpVcrF9cRJm9ksv2vVaWc/yRsLJErdb90Kusc6I8CgsBxpS6/wI637i0khSl1l10iWrALXjfh6osihixANYhQ==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-freebsd-x64/-/crc32-freebsd-x64-1.10.4.tgz", + "integrity": "sha512-C3KJgyKiWLkFlcrWX04wkVIkSUiD+KCVG+yyLOVXUbQFdCjSbbEQx2MUpM7qcy5ZOAFj4/MZCYdMLgQ6qIgaAw==", "cpu": [ "x64" ], @@ -863,9 +862,9 @@ } }, "node_modules/@node-rs/crc32-linux-arm-gnueabihf": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-arm-gnueabihf/-/crc32-linux-arm-gnueabihf-1.10.3.tgz", - "integrity": "sha512-9MZohdtKzdnb16xRKU76t1UTEJu80dFO8f2/N0geJYNobnT1E6p/+5pqB/G1/H6OnPvjqMuFuLVL4BJVvO4GYQ==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-arm-gnueabihf/-/crc32-linux-arm-gnueabihf-1.10.4.tgz", + "integrity": "sha512-YlP3IozMBJmZbytr3/J6fEF5GjWql3p+r3MzY0RctgPf9UdRwG7pjz81SUu6X6kNuDE2eoeKblG0hIPKCd1/Hw==", "cpu": [ "arm" ], @@ -879,9 +878,9 @@ } }, "node_modules/@node-rs/crc32-linux-arm64-gnu": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-arm64-gnu/-/crc32-linux-arm64-gnu-1.10.3.tgz", - "integrity": "sha512-t1+9ik4awZF+luQp94HsUH8M1lSw8jWjvQiLaHyxMzrM0NY0/oIkhjqdOswXL11Wybkc63eunNwVqGKWfJEi4Q==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-arm64-gnu/-/crc32-linux-arm64-gnu-1.10.4.tgz", + "integrity": "sha512-GETfDmFEmWQaULn+jjs6UJB/IS2olWToqt/PaMKfQwohMFuFEAMiWLue/aXM2Q78hgbTooc4m8iY0djevwXjBA==", "cpu": [ "arm64" ], @@ -895,9 +894,9 @@ } }, "node_modules/@node-rs/crc32-linux-arm64-musl": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-arm64-musl/-/crc32-linux-arm64-musl-1.10.3.tgz", - "integrity": "sha512-fsxOk9CpFzyon+vktvCICwhGk0b+tnfEZfPOXa3QDrkyZD7R7cHmpEHGim1BYgJZIJSTBfal5eM11hzBGjJbxw==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-arm64-musl/-/crc32-linux-arm64-musl-1.10.4.tgz", + "integrity": "sha512-629LGgGC2/h9HSM0m0sdhCNBap3QWyTQy85RB8AnywsA2R1XqeO7UH4VI5W5y5jFPeVusAkPZhYZJTGmlukZvA==", "cpu": [ "arm64" ], @@ -911,9 +910,9 @@ } }, "node_modules/@node-rs/crc32-linux-x64-gnu": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-x64-gnu/-/crc32-linux-x64-gnu-1.10.3.tgz", - "integrity": "sha512-0zIX68FIeqpRMRNvmB5AgONnLMm628+8mV9UDuCRmGppME8WGnY+Dirx+TPUeTJ4f27+in+6CU4u6LJDi9cXmQ==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-x64-gnu/-/crc32-linux-x64-gnu-1.10.4.tgz", + "integrity": "sha512-ifpmD7lpkhrgwnn8BMxoH/sgeCG+tAUSBvaQkSHLsKJfg+yZ2X/+Y9JvWA79/WaR8ksD01E0yr/tZ8t+Dp0p0w==", "cpu": [ "x64" ], @@ -927,9 +926,9 @@ } }, "node_modules/@node-rs/crc32-linux-x64-musl": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-x64-musl/-/crc32-linux-x64-musl-1.10.3.tgz", - "integrity": "sha512-dKKt0FEm8JDp2MvIu1J7vg8Dc5D5upNO6LAuvfShq9Hy8hYNQWy6f+AF8mSm/c5wWnjn+pv7I1+jvrZIe6wMig==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-x64-musl/-/crc32-linux-x64-musl-1.10.4.tgz", + "integrity": "sha512-grAfrxC/bIENFnJx2w55NIMg5x8DrMQbumSrturVBmbraozgFO6DaBg/g/pnzQvJbkuhXk920pLFwz5OeuxqzA==", "cpu": [ "x64" ], @@ -943,9 +942,9 @@ } }, "node_modules/@node-rs/crc32-wasm32-wasi": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-wasm32-wasi/-/crc32-wasm32-wasi-1.10.3.tgz", - "integrity": "sha512-oT2V4r0lGZqZHkFLHeXu5Z8C8SutIvBVV0Ws3unz4/KhwmlMcOZYRmSelUSSILbjNLrg4FihCe20tC1VbmaNxA==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-wasm32-wasi/-/crc32-wasm32-wasi-1.10.4.tgz", + "integrity": "sha512-nlhG9PlPDsISBC8m2lp5DTRe2uV3Y1UEnFU1lweu/llF9xb8alxQbRE2Vp2rsWJP0s+cwmGx7k3UUOUbnVkbqw==", "cpu": [ "wasm32" ], @@ -959,9 +958,9 @@ } }, "node_modules/@node-rs/crc32-win32-arm64-msvc": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-win32-arm64-msvc/-/crc32-win32-arm64-msvc-1.10.3.tgz", - "integrity": "sha512-IwP/TjDoQycv3ZCbAHV3qS9oH8pmBo7h9RC0chOvKY0g9+RxRl0nXhxcAcmZvJugKdJd+eCOR9fJrWzcwQOgFg==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-win32-arm64-msvc/-/crc32-win32-arm64-msvc-1.10.4.tgz", + "integrity": "sha512-btYP7Xv2NmCkrXDE3dLqgh+2fTgvByu6NRfWV3++md4tCO8C88dCu9uLxW7cr0dt88cpC0f5Yx9pWFbURKA23Q==", "cpu": [ "arm64" ], @@ -975,9 +974,9 @@ } }, "node_modules/@node-rs/crc32-win32-ia32-msvc": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-win32-ia32-msvc/-/crc32-win32-ia32-msvc-1.10.3.tgz", - "integrity": "sha512-YK0qYTHUFqriqAkHyXfe3IpDFfpG5fc2yuNl7MXn4ejklLLyNQPOCSawvPU7ouOBgtQDaAH60yZhFhsXZfwSfQ==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-win32-ia32-msvc/-/crc32-win32-ia32-msvc-1.10.4.tgz", + "integrity": "sha512-o+7Zq9seSWAmoiOmUlXMi44FFwiGkfGihnKIIMKN9DAmQEifHb7Y4RuNnjYpEwjwlOa3HQ8wjQazEhxFFdrbSw==", "cpu": [ "ia32" ], @@ -991,9 +990,9 @@ } }, "node_modules/@node-rs/crc32-win32-x64-msvc": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-win32-x64-msvc/-/crc32-win32-x64-msvc-1.10.3.tgz", - "integrity": "sha512-VI9jd8ECiij4YADsfzVuDnhk/UZ5op4RYHyN40yZzwhzcOQ8DDluOeHv91FPHSyMYJEsVsqbr3cqtD6R47xYjw==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-win32-x64-msvc/-/crc32-win32-x64-msvc-1.10.4.tgz", + "integrity": "sha512-vnqwu4p7o9jvpjq8Xc1zuhw3jSaSkdVSSIFUralgOXKP6m+cbBbuOTeJZpsuf6C/diVNv6YocTBOlkhJqq0oGw==", "cpu": [ "x64" ], @@ -1674,24 +1673,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/async": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", @@ -1998,25 +1979,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bytewise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/bytewise/-/bytewise-1.1.0.tgz", - "integrity": "sha512-rHuuseJ9iQ0na6UDhnrRVDh8YnWVlU6xM3VH6q/+yHDeUH2zIhUzP+2/h3LIrhLDBtTqzWpE3p3tP/boefskKQ==", - "license": "MIT", - "dependencies": { - "bytewise-core": "^1.2.2", - "typewise": "^1.0.3" - } - }, - "node_modules/bytewise-core": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bytewise-core/-/bytewise-core-1.2.3.tgz", - "integrity": "sha512-nZD//kc78OOxeYtRlVk8/zXqTB4gf/nlguL1ggWA8FuchMyOxcyHR4QPQZMUmA7czC+YnaBrPUCubqAWe50DaA==", - "license": "MIT", - "dependencies": { - "typewise-core": "^1.2" - } - }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -3066,18 +3028,6 @@ "node": ">=6" } }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fast-content-type-parse": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz", @@ -3515,15 +3465,6 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -3964,15 +3905,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -4094,18 +4026,6 @@ "node": ">=8" } }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-reference": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", @@ -4160,15 +4080,6 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/jackspeak": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", @@ -4866,9 +4777,9 @@ } }, "node_modules/p-event/node_modules/p-timeout": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.2.tgz", - "integrity": "sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.3.tgz", + "integrity": "sha512-UJUyfKbwvr/uZSV6btANfb+0t/mOhKV/KXcCUTp8FcQI+v/0d+wXqH4htrW0E4rR6WiEO/EPvUFiV9D5OI4vlw==", "license": "MIT", "engines": { "node": ">=14.16" @@ -5817,21 +5728,6 @@ "node": ">= 0.4" } }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -6013,78 +5909,6 @@ "atomic-sleep": "^1.0.0" } }, - "node_modules/sort-asc": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/sort-asc/-/sort-asc-0.2.0.tgz", - "integrity": "sha512-umMGhjPeHAI6YjABoSTrFp2zaBtXBej1a0yKkuMUyjjqu6FJsTF+JYwCswWDg+zJfk/5npWUUbd33HH/WLzpaA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sort-desc": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/sort-desc/-/sort-desc-0.2.0.tgz", - "integrity": "sha512-NqZqyvL4VPW+RAxxXnB8gvE1kyikh8+pR+T+CXLksVRN9eiQqkQlPwqWYU0mF9Jm7UnctShlxLyAt1CaBOTL1w==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sort-object": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sort-object/-/sort-object-3.0.3.tgz", - "integrity": "sha512-nK7WOY8jik6zaG9CRwZTaD5O7ETWDLZYMM12pqY8htll+7dYeqGfEUPcUBHOpSJg2vJOrvFIY2Dl5cX2ih1hAQ==", - "license": "MIT", - "dependencies": { - "bytewise": "^1.1.0", - "get-value": "^2.0.2", - "is-extendable": "^0.1.1", - "sort-asc": "^0.2.0", - "sort-desc": "^0.2.0", - "union-value": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "license": "MIT", - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/split2": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", @@ -6269,9 +6093,9 @@ } }, "node_modules/styled-map-package": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/styled-map-package/-/styled-map-package-1.1.0.tgz", - "integrity": "sha512-QzaB5nvbuZKteIlGAFVEsxyuXWJQ5bObFntgrk9CZdsEl19ErTexr3vThpvl/ABCWhWYUe8N8kpR6XevxmHlDQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/styled-map-package/-/styled-map-package-2.0.0.tgz", + "integrity": "sha512-CGjyypTc+SQ97Y2XopJ9yOuB8aQMqAMWSLyUBStnntuomXNzgMUhhS9GOafyBhUJqm01UONWi82tJhXhZ05wWw==", "license": "MIT", "dependencies": { "@fastify/static": "^7.0.4", @@ -6605,9 +6429,9 @@ } }, "node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", "license": "0BSD" }, "node_modules/tunnel-agent": { @@ -6658,21 +6482,6 @@ "node": ">=14.17" } }, - "node_modules/typewise": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typewise/-/typewise-1.0.3.tgz", - "integrity": "sha512-aXofE06xGhaQSPzt8hlTY+/YWQhm9P0jYUp1f2XtmW/3Bk0qzXcyFWAtPoo2uTGQj1ZwbDuSyuxicq+aDo8lCQ==", - "license": "MIT", - "dependencies": { - "typewise-core": "^1.2.0" - } - }, - "node_modules/typewise-core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/typewise-core/-/typewise-core-1.2.0.tgz", - "integrity": "sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg==", - "license": "MIT" - }, "node_modules/undici": { "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.8.tgz", @@ -6687,21 +6496,6 @@ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==" }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "license": "MIT", - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -7031,17 +6825,17 @@ "dev": true }, "@babel/runtime": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", - "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.9.tgz", + "integrity": "sha512-4zpTHZ9Cm6L9L+uIqghQX8ZXg8HKFcjYO3qHoO8zTmRm6HQUJ8SSJ+KRvbMBZn0EGVlT4DRYeQ/6hjlyXBh+Kg==", "requires": { "regenerator-runtime": "^0.14.0" } }, "@comapeo/core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@comapeo/core/-/core-2.0.0.tgz", - "integrity": "sha512-tM2NEYW+sMj5Gpp1tr4SAJarsw3+g5iluTS77/cP6G4WHsTwPvEZyyezMeSZ3UzyWae75Nn+hJYnY2ZcJaXmpg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@comapeo/core/-/core-2.0.1.tgz", + "integrity": "sha512-6ZUb5umzitYKZx28bYFMxQfpE2B6pdC2ukCd9rcM1l+EgNUAcL+1NWeo/YRlXPnbzhltZ7kr0LvmZtXoMb/ing==", "requires": { "@comapeo/fallback-smp": "^1.0.0", "@comapeo/schema": "1.0.0", @@ -7082,7 +6876,7 @@ "sodium-universal": "^4.0.0", "start-stop-state-machine": "^1.2.0", "streamx": "^2.19.0", - "styled-map-package": "^1.1.0", + "styled-map-package": "^2.0.0", "sub-encoder": "^2.1.1", "throttle-debounce": "^5.0.0", "tiny-typed-emitter": "^2.1.0", @@ -7138,9 +6932,9 @@ "integrity": "sha512-6wLTtBOdlwtYMyrynBq6ZQ7S1aVABXQSwR/1QENkFkc7WyLLs4wLd9ny7WfSUQdHn6E2zfvA7WfKH7R06Zy3gQ==" }, "@comapeo/ipc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@comapeo/ipc/-/ipc-2.0.0.tgz", - "integrity": "sha512-pKLsmiFFUe+6wUgokeoO3ko1ltqZbEZKUrzvnTBNCp+IHaSMLhYXJtEmqNwLafmmB64As++jLqdi51aEm27Dew==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@comapeo/ipc/-/ipc-2.0.2.tgz", + "integrity": "sha512-nOm2MzUjnN9GNYW8cAXzfAyW3URJz+lWm9nyKm8vmTTxiwBt6ZMEd2DCU28dl1KNfasqw79501jWY+fELFt/wg==", "requires": { "eventemitter3": "^5.0.1", "p-defer": "^4.0.0", @@ -7184,9 +6978,9 @@ } }, "@emnapi/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.2.0.tgz", - "integrity": "sha512-E7Vgw78I93we4ZWdYCb4DGAwRROGkMIXk7/y87UmANR+J6qsWusmC3gLt0H+O0KOt5e6O38U8oJamgbudrES/w==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.3.1.tgz", + "integrity": "sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==", "optional": true, "requires": { "@emnapi/wasi-threads": "1.0.1", @@ -7194,9 +6988,9 @@ } }, "@emnapi/runtime": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz", - "integrity": "sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", + "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", "optional": true, "requires": { "tslib": "^2.4.0" @@ -7554,9 +7348,9 @@ } }, "@maplibre/maplibre-gl-style-spec": { - "version": "20.3.1", - "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-20.3.1.tgz", - "integrity": "sha512-5ueL4UDitzVtceQ8J4kY+Px3WK+eZTsmGwha3MBKHKqiHvKrjWWwBCIl1K8BuJSc5OFh83uI8IFNoFvQxX2uUw==", + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-20.4.0.tgz", + "integrity": "sha512-AzBy3095fTFPjDjmWpR2w6HVRAZJ6hQZUCwk5Plz6EyfnfuQW1odeW5i2Ai47Y6TBA2hQnC+azscjBSALpaWgw==", "requires": { "@mapbox/jsonlint-lines-primitives": "~2.0.2", "@mapbox/unitbezier": "^0.0.1", @@ -7564,7 +7358,6 @@ "minimist": "^1.2.8", "quickselect": "^2.0.0", "rw": "^1.3.3", - "sort-object": "^3.0.3", "tinyqueue": "^3.0.0" } }, @@ -7574,9 +7367,9 @@ "integrity": "sha512-Vwhc3ObxmDZmA5hY8mfsau2rJ4vGPvzbj20QSZ2/E1GDPF61QVyjLfNHak9xmel6pW4heRt3v1fHa6np9Ehfeg==" }, "@napi-rs/wasm-runtime": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz", - "integrity": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.5.tgz", + "integrity": "sha512-kwUxR7J9WLutBbulqg1dfOrMTwhMdXLdcGUhcbCcGwnPLt3gz19uHVdwH1syKVDbE022ZS2vZxOWflFLS0YTjw==", "optional": true, "requires": { "@emnapi/core": "^1.1.0", @@ -7585,111 +7378,111 @@ } }, "@node-rs/crc32": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32/-/crc32-1.10.3.tgz", - "integrity": "sha512-4UgH0fDRxs0eMSgrUN0UUM4BpIEbVKutiSkFLICwegbgIger3c1t7V3jOYralK0xTBHraW3r59wlESdc3h/nQg==", - "requires": { - "@node-rs/crc32-android-arm-eabi": "1.10.3", - "@node-rs/crc32-android-arm64": "1.10.3", - "@node-rs/crc32-darwin-arm64": "1.10.3", - "@node-rs/crc32-darwin-x64": "1.10.3", - "@node-rs/crc32-freebsd-x64": "1.10.3", - "@node-rs/crc32-linux-arm-gnueabihf": "1.10.3", - "@node-rs/crc32-linux-arm64-gnu": "1.10.3", - "@node-rs/crc32-linux-arm64-musl": "1.10.3", - "@node-rs/crc32-linux-x64-gnu": "1.10.3", - "@node-rs/crc32-linux-x64-musl": "1.10.3", - "@node-rs/crc32-wasm32-wasi": "1.10.3", - "@node-rs/crc32-win32-arm64-msvc": "1.10.3", - "@node-rs/crc32-win32-ia32-msvc": "1.10.3", - "@node-rs/crc32-win32-x64-msvc": "1.10.3" + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32/-/crc32-1.10.4.tgz", + "integrity": "sha512-R1kX9t4Bz1gkNZUcI967bp91+HIoCJa7p11xvBAU9INUvTC1XsOs5mnGq+LE+UOHKUKmE3pOLHLVuoRo4pM3Fg==", + "requires": { + "@node-rs/crc32-android-arm-eabi": "1.10.4", + "@node-rs/crc32-android-arm64": "1.10.4", + "@node-rs/crc32-darwin-arm64": "1.10.4", + "@node-rs/crc32-darwin-x64": "1.10.4", + "@node-rs/crc32-freebsd-x64": "1.10.4", + "@node-rs/crc32-linux-arm-gnueabihf": "1.10.4", + "@node-rs/crc32-linux-arm64-gnu": "1.10.4", + "@node-rs/crc32-linux-arm64-musl": "1.10.4", + "@node-rs/crc32-linux-x64-gnu": "1.10.4", + "@node-rs/crc32-linux-x64-musl": "1.10.4", + "@node-rs/crc32-wasm32-wasi": "1.10.4", + "@node-rs/crc32-win32-arm64-msvc": "1.10.4", + "@node-rs/crc32-win32-ia32-msvc": "1.10.4", + "@node-rs/crc32-win32-x64-msvc": "1.10.4" } }, "@node-rs/crc32-android-arm-eabi": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-android-arm-eabi/-/crc32-android-arm-eabi-1.10.3.tgz", - "integrity": "sha512-V9iNJd5ux9I415qOldmxZIHrazYMJNsQ6v+Kq/t9FTQyYqiEeHvRc1FzBh9MT6Uc24InwMhBeC1WVw0BL4VaxQ==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-android-arm-eabi/-/crc32-android-arm-eabi-1.10.4.tgz", + "integrity": "sha512-xnfEDpxPU/tVFEOTwKF8N3F7NreAk0J/o+JhRiaeS5IYQD7rFsdmgzcWi7MpggzFq5ETNM1z/f+YD9OPump8yg==", "optional": true }, "@node-rs/crc32-android-arm64": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-android-arm64/-/crc32-android-arm64-1.10.3.tgz", - "integrity": "sha512-d6xLAhbk5FDGpltAKTFs7hZO/PWpHeihZ/ZCKx2LEVz8jXQEshpo2/ojnfb5FAw6oNzU2H+S/RI5GeCr7paa1Q==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-android-arm64/-/crc32-android-arm64-1.10.4.tgz", + "integrity": "sha512-4myv2lydjPgw1Vn1AzyTPWwJlU7k7hoP7nsXn0ibQxjIknD/r05G7GJziTFL4T9sAfM3b4MephfgnRDA66gPjA==", "optional": true }, "@node-rs/crc32-darwin-arm64": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-darwin-arm64/-/crc32-darwin-arm64-1.10.3.tgz", - "integrity": "sha512-IoX6HC4dlKc9BONe7632DADBtiHUiIVD7Bibuj3bGrvOBllN8hvBL9+dDC+/iDdOeuiBKgb0hgL5h2nPIybpzA==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-darwin-arm64/-/crc32-darwin-arm64-1.10.4.tgz", + "integrity": "sha512-x1ggDiiojMpaY4Xf9A5JRLxA3L6ezDiVqtItsXrf8edG/SvlLEmSYPWHpswgKjd4LcGuL3AZrKNcvAi59bCTsQ==", "optional": true }, "@node-rs/crc32-darwin-x64": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-darwin-x64/-/crc32-darwin-x64-1.10.3.tgz", - "integrity": "sha512-JUDGAX/0W4A9ok9p6yuy4fAsBDrq8Db0sUjKLMZ/+P3NHB+Qk+OsZUsEDxP3yhBJxhPq97JpN4bBzgMnkDajpw==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-darwin-x64/-/crc32-darwin-x64-1.10.4.tgz", + "integrity": "sha512-PCFt905HFFJvQE68Sc9eE/9LYxoC7hen29+WC0StIK21B2P+NorW7AgUW8kCv28NKDL3sPmIQHxXMWP7rDdRHw==", "optional": true }, "@node-rs/crc32-freebsd-x64": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-freebsd-x64/-/crc32-freebsd-x64-1.10.3.tgz", - "integrity": "sha512-mbpVcrF9cRJm9ksv2vVaWc/yRsLJErdb90Kusc6I8CgsBxpS6/wI637i0khSl1l10iWrALXjfh6osihixANYhQ==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-freebsd-x64/-/crc32-freebsd-x64-1.10.4.tgz", + "integrity": "sha512-C3KJgyKiWLkFlcrWX04wkVIkSUiD+KCVG+yyLOVXUbQFdCjSbbEQx2MUpM7qcy5ZOAFj4/MZCYdMLgQ6qIgaAw==", "optional": true }, "@node-rs/crc32-linux-arm-gnueabihf": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-arm-gnueabihf/-/crc32-linux-arm-gnueabihf-1.10.3.tgz", - "integrity": "sha512-9MZohdtKzdnb16xRKU76t1UTEJu80dFO8f2/N0geJYNobnT1E6p/+5pqB/G1/H6OnPvjqMuFuLVL4BJVvO4GYQ==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-arm-gnueabihf/-/crc32-linux-arm-gnueabihf-1.10.4.tgz", + "integrity": "sha512-YlP3IozMBJmZbytr3/J6fEF5GjWql3p+r3MzY0RctgPf9UdRwG7pjz81SUu6X6kNuDE2eoeKblG0hIPKCd1/Hw==", "optional": true }, "@node-rs/crc32-linux-arm64-gnu": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-arm64-gnu/-/crc32-linux-arm64-gnu-1.10.3.tgz", - "integrity": "sha512-t1+9ik4awZF+luQp94HsUH8M1lSw8jWjvQiLaHyxMzrM0NY0/oIkhjqdOswXL11Wybkc63eunNwVqGKWfJEi4Q==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-arm64-gnu/-/crc32-linux-arm64-gnu-1.10.4.tgz", + "integrity": "sha512-GETfDmFEmWQaULn+jjs6UJB/IS2olWToqt/PaMKfQwohMFuFEAMiWLue/aXM2Q78hgbTooc4m8iY0djevwXjBA==", "optional": true }, "@node-rs/crc32-linux-arm64-musl": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-arm64-musl/-/crc32-linux-arm64-musl-1.10.3.tgz", - "integrity": "sha512-fsxOk9CpFzyon+vktvCICwhGk0b+tnfEZfPOXa3QDrkyZD7R7cHmpEHGim1BYgJZIJSTBfal5eM11hzBGjJbxw==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-arm64-musl/-/crc32-linux-arm64-musl-1.10.4.tgz", + "integrity": "sha512-629LGgGC2/h9HSM0m0sdhCNBap3QWyTQy85RB8AnywsA2R1XqeO7UH4VI5W5y5jFPeVusAkPZhYZJTGmlukZvA==", "optional": true }, "@node-rs/crc32-linux-x64-gnu": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-x64-gnu/-/crc32-linux-x64-gnu-1.10.3.tgz", - "integrity": "sha512-0zIX68FIeqpRMRNvmB5AgONnLMm628+8mV9UDuCRmGppME8WGnY+Dirx+TPUeTJ4f27+in+6CU4u6LJDi9cXmQ==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-x64-gnu/-/crc32-linux-x64-gnu-1.10.4.tgz", + "integrity": "sha512-ifpmD7lpkhrgwnn8BMxoH/sgeCG+tAUSBvaQkSHLsKJfg+yZ2X/+Y9JvWA79/WaR8ksD01E0yr/tZ8t+Dp0p0w==", "optional": true }, "@node-rs/crc32-linux-x64-musl": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-x64-musl/-/crc32-linux-x64-musl-1.10.3.tgz", - "integrity": "sha512-dKKt0FEm8JDp2MvIu1J7vg8Dc5D5upNO6LAuvfShq9Hy8hYNQWy6f+AF8mSm/c5wWnjn+pv7I1+jvrZIe6wMig==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-x64-musl/-/crc32-linux-x64-musl-1.10.4.tgz", + "integrity": "sha512-grAfrxC/bIENFnJx2w55NIMg5x8DrMQbumSrturVBmbraozgFO6DaBg/g/pnzQvJbkuhXk920pLFwz5OeuxqzA==", "optional": true }, "@node-rs/crc32-wasm32-wasi": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-wasm32-wasi/-/crc32-wasm32-wasi-1.10.3.tgz", - "integrity": "sha512-oT2V4r0lGZqZHkFLHeXu5Z8C8SutIvBVV0Ws3unz4/KhwmlMcOZYRmSelUSSILbjNLrg4FihCe20tC1VbmaNxA==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-wasm32-wasi/-/crc32-wasm32-wasi-1.10.4.tgz", + "integrity": "sha512-nlhG9PlPDsISBC8m2lp5DTRe2uV3Y1UEnFU1lweu/llF9xb8alxQbRE2Vp2rsWJP0s+cwmGx7k3UUOUbnVkbqw==", "optional": true, "requires": { "@napi-rs/wasm-runtime": "^0.2.3" } }, "@node-rs/crc32-win32-arm64-msvc": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-win32-arm64-msvc/-/crc32-win32-arm64-msvc-1.10.3.tgz", - "integrity": "sha512-IwP/TjDoQycv3ZCbAHV3qS9oH8pmBo7h9RC0chOvKY0g9+RxRl0nXhxcAcmZvJugKdJd+eCOR9fJrWzcwQOgFg==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-win32-arm64-msvc/-/crc32-win32-arm64-msvc-1.10.4.tgz", + "integrity": "sha512-btYP7Xv2NmCkrXDE3dLqgh+2fTgvByu6NRfWV3++md4tCO8C88dCu9uLxW7cr0dt88cpC0f5Yx9pWFbURKA23Q==", "optional": true }, "@node-rs/crc32-win32-ia32-msvc": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-win32-ia32-msvc/-/crc32-win32-ia32-msvc-1.10.3.tgz", - "integrity": "sha512-YK0qYTHUFqriqAkHyXfe3IpDFfpG5fc2yuNl7MXn4ejklLLyNQPOCSawvPU7ouOBgtQDaAH60yZhFhsXZfwSfQ==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-win32-ia32-msvc/-/crc32-win32-ia32-msvc-1.10.4.tgz", + "integrity": "sha512-o+7Zq9seSWAmoiOmUlXMi44FFwiGkfGihnKIIMKN9DAmQEifHb7Y4RuNnjYpEwjwlOa3HQ8wjQazEhxFFdrbSw==", "optional": true }, "@node-rs/crc32-win32-x64-msvc": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/crc32-win32-x64-msvc/-/crc32-win32-x64-msvc-1.10.3.tgz", - "integrity": "sha512-VI9jd8ECiij4YADsfzVuDnhk/UZ5op4RYHyN40yZzwhzcOQ8DDluOeHv91FPHSyMYJEsVsqbr3cqtD6R47xYjw==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-win32-x64-msvc/-/crc32-win32-x64-msvc-1.10.4.tgz", + "integrity": "sha512-vnqwu4p7o9jvpjq8Xc1zuhw3jSaSkdVSSIFUralgOXKP6m+cbBbuOTeJZpsuf6C/diVNv6YocTBOlkhJqq0oGw==", "optional": true }, "@nodelib/fs.scandir": { @@ -8154,16 +7947,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==" - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==" - }, "async": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", @@ -8385,23 +8168,6 @@ "run-applescript": "^7.0.0" } }, - "bytewise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/bytewise/-/bytewise-1.1.0.tgz", - "integrity": "sha512-rHuuseJ9iQ0na6UDhnrRVDh8YnWVlU6xM3VH6q/+yHDeUH2zIhUzP+2/h3LIrhLDBtTqzWpE3p3tP/boefskKQ==", - "requires": { - "bytewise-core": "^1.2.2", - "typewise": "^1.0.3" - } - }, - "bytewise-core": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bytewise-core/-/bytewise-core-1.2.3.tgz", - "integrity": "sha512-nZD//kc78OOxeYtRlVk8/zXqTB4gf/nlguL1ggWA8FuchMyOxcyHR4QPQZMUmA7czC+YnaBrPUCubqAWe50DaA==", - "requires": { - "typewise-core": "^1.2" - } - }, "call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -9060,14 +8826,6 @@ "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - }, "fast-content-type-parse": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz", @@ -9391,11 +9149,6 @@ "resolve-pkg-maps": "^1.0.0" } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==" - }, "github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -9703,11 +9456,6 @@ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -9783,14 +9531,6 @@ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, "is-reference": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", @@ -9829,11 +9569,6 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" - }, "jackspeak": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", @@ -10338,9 +10073,9 @@ }, "dependencies": { "p-timeout": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.2.tgz", - "integrity": "sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==" + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.3.tgz", + "integrity": "sha512-UJUyfKbwvr/uZSV6btANfb+0t/mOhKV/KXcCUTp8FcQI+v/0d+wXqH4htrW0E4rR6WiEO/EPvUFiV9D5OI4vlw==" } } }, @@ -10997,17 +10732,6 @@ "has-property-descriptors": "^1.0.2" } }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - } - }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -11117,56 +10841,6 @@ "atomic-sleep": "^1.0.0" } }, - "sort-asc": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/sort-asc/-/sort-asc-0.2.0.tgz", - "integrity": "sha512-umMGhjPeHAI6YjABoSTrFp2zaBtXBej1a0yKkuMUyjjqu6FJsTF+JYwCswWDg+zJfk/5npWUUbd33HH/WLzpaA==" - }, - "sort-desc": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/sort-desc/-/sort-desc-0.2.0.tgz", - "integrity": "sha512-NqZqyvL4VPW+RAxxXnB8gvE1kyikh8+pR+T+CXLksVRN9eiQqkQlPwqWYU0mF9Jm7UnctShlxLyAt1CaBOTL1w==" - }, - "sort-object": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sort-object/-/sort-object-3.0.3.tgz", - "integrity": "sha512-nK7WOY8jik6zaG9CRwZTaD5O7ETWDLZYMM12pqY8htll+7dYeqGfEUPcUBHOpSJg2vJOrvFIY2Dl5cX2ih1hAQ==", - "requires": { - "bytewise": "^1.1.0", - "get-value": "^2.0.2", - "is-extendable": "^0.1.1", - "sort-asc": "^0.2.0", - "sort-desc": "^0.2.0", - "union-value": "^1.0.1" - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "requires": { - "extend-shallow": "^3.0.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "split2": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", @@ -11290,9 +10964,9 @@ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" }, "styled-map-package": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/styled-map-package/-/styled-map-package-1.1.0.tgz", - "integrity": "sha512-QzaB5nvbuZKteIlGAFVEsxyuXWJQ5bObFntgrk9CZdsEl19ErTexr3vThpvl/ABCWhWYUe8N8kpR6XevxmHlDQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/styled-map-package/-/styled-map-package-2.0.0.tgz", + "integrity": "sha512-CGjyypTc+SQ97Y2XopJ9yOuB8aQMqAMWSLyUBStnntuomXNzgMUhhS9GOafyBhUJqm01UONWi82tJhXhZ05wWw==", "requires": { "@fastify/static": "^7.0.4", "@mapbox/sphericalmercator": "^1.2.0", @@ -11521,9 +11195,9 @@ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "tunnel-agent": { "version": "0.6.0", @@ -11553,19 +11227,6 @@ "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "dev": true }, - "typewise": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typewise/-/typewise-1.0.3.tgz", - "integrity": "sha512-aXofE06xGhaQSPzt8hlTY+/YWQhm9P0jYUp1f2XtmW/3Bk0qzXcyFWAtPoo2uTGQj1ZwbDuSyuxicq+aDo8lCQ==", - "requires": { - "typewise-core": "^1.2.0" - } - }, - "typewise-core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/typewise-core/-/typewise-core-1.2.0.tgz", - "integrity": "sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg==" - }, "undici": { "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.8.tgz", @@ -11576,17 +11237,6 @@ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==" }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", diff --git a/src/backend/package.json b/src/backend/package.json index 672b8405b..6fa339eb2 100644 --- a/src/backend/package.json +++ b/src/backend/package.json @@ -13,8 +13,8 @@ "author": "Digital Democracy", "license": "MIT", "dependencies": { - "@comapeo/core": "2.0.0", - "@comapeo/ipc": "2.0.0", + "@comapeo/core": "2.0.1", + "@comapeo/ipc": "2.0.2", "@mapeo/default-config": "5.0.0", "debug": "^4.3.4" }, diff --git a/src/backend/src/app.js b/src/backend/src/app.js index 0e1aa832d..7fdd92b38 100644 --- a/src/backend/src/app.js +++ b/src/backend/src/app.js @@ -2,9 +2,6 @@ import debug from 'debug' import { join } from 'path' import { mkdirSync } from 'fs' import { createRequire } from 'module' -const require = createRequire(import.meta.url) -/** @type {import('../types/rn-bridge.js')} */ -const rnBridge = require('rn-bridge') import { MapeoManager, FastifyController } from '@comapeo/core' import { createMapeoServer } from '@comapeo/ipc' import Fastify from 'fastify' @@ -12,9 +9,16 @@ import Fastify from 'fastify' import MessagePortLike from './message-port-like.js' import { ServerStatus } from './status.js' +const require = createRequire(import.meta.url) + +/** @type {import('../types/rn-bridge.js')} */ +const rnBridge = require('rn-bridge') + // Do not touch these! const DB_DIR_NAME = 'sqlite-dbs' const CORE_STORAGE_DIR_NAME = 'core-storage' +const CUSTOM_MAPS_DIR_NAME = 'maps' +const DEFAULT_CUSTOM_MAP_FILE_NAME = 'default.smp' const MAPBOX_ACCESS_TOKEN = 'pk.eyJ1IjoiZGlnaWRlbSIsImEiOiJjbHRyaGh3cm0wN3l4Mmpsam95NDI3c2xiIn0.daq2iZFZXQ08BD0VZWAGUw' @@ -64,9 +68,11 @@ export async function init({ const privateStorageDir = rnBridge.app.datadir() const dbDir = join(privateStorageDir, DB_DIR_NAME) const indexDir = join(privateStorageDir, CORE_STORAGE_DIR_NAME) + const customMapsDir = join(privateStorageDir, CUSTOM_MAPS_DIR_NAME) mkdirSync(dbDir, { recursive: true }) mkdirSync(indexDir, { recursive: true }) + mkdirSync(customMapsDir, { recursive: true }) const fastify = Fastify() const fastifyController = new FastifyController({ fastify }) @@ -80,6 +86,7 @@ export async function init({ fastify, defaultConfigPath, defaultOnlineStyleUrl: DEFAULT_ONLINE_MAP_STYLE_URL, + customMapPath: join(customMapsDir, DEFAULT_CUSTOM_MAP_FILE_NAME), }) // Don't await, methods that use the server will await this internally diff --git a/src/frontend/Navigation/Stack/AppScreens.tsx b/src/frontend/Navigation/Stack/AppScreens.tsx index 3bb005455..54b9a51b4 100644 --- a/src/frontend/Navigation/Stack/AppScreens.tsx +++ b/src/frontend/Navigation/Stack/AppScreens.tsx @@ -80,6 +80,14 @@ import { Audio, navigationOptions as audioNavigationOptions, } from '../../screens/Audio/index.tsx'; +import { + createNavigationOptions as createMapManagementNavigationOptions, + MapManagementScreen, +} from '../../screens/Settings/MapManagement'; +import { + createNavigationOptions as createBackgroundMapsNavigationOptions, + BackgroundMapsScreen, +} from '../../screens/Settings/MapManagement/BackgroundMaps.tsx'; export const TAB_BAR_HEIGHT = 70; @@ -314,13 +322,11 @@ export const createDefaultScreenGroup = ({ component={TrackEdit} options={{headerTitle: intl(TrackEdit.navTitle)}} /> - - )} + + + + {process.env.EXPO_PUBLIC_FEATURE_TEST_DATA_UI && ( [0]) => { + return selectFile(opts); + }, + }); +} diff --git a/src/frontend/hooks/refreshTokenStore.ts b/src/frontend/hooks/refreshTokenStore.ts new file mode 100644 index 000000000..92da3c021 --- /dev/null +++ b/src/frontend/hooks/refreshTokenStore.ts @@ -0,0 +1,42 @@ +import {create} from 'zustand'; + +interface RefreshTokenStoreSlice { + value: number; + actions: { + refresh: () => void; + }; +} + +/** + * Factory for creating a bound store instance and return its relevant hooks, + * which allows the creation of isolated stores to account for contextual needs. + */ +export function createRefreshTokenStore(initialValue?: number) { + const useRefreshTokenStore = create(set => { + return { + value: typeof initialValue === 'number' ? initialValue : Date.now(), + actions: { + refresh: () => { + set({value: Date.now()}); + }, + }, + }; + }); + + return { + useRefreshToken: () => { + return useRefreshTokenStore(valueSelector); + }, + useRefreshTokenActions: () => { + return useRefreshTokenStore(actionsSelector); + }, + }; +} + +function valueSelector(state: RefreshTokenStoreSlice) { + return state.value; +} + +function actionsSelector(state: RefreshTokenStoreSlice) { + return state.actions; +} diff --git a/src/frontend/hooks/server/mapStyleUrl.ts b/src/frontend/hooks/server/mapStyleUrl.ts deleted file mode 100644 index 077d355ec..000000000 --- a/src/frontend/hooks/server/mapStyleUrl.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {useQuery} from '@tanstack/react-query'; - -import {useApi} from '../../contexts/ApiContext'; - -export const MAP_STYLE_URL_KEY = 'map_style_url'; - -export function useMapStyleUrl() { - const api = useApi(); - - return useQuery({ - queryKey: [MAP_STYLE_URL_KEY], - queryFn: () => { - return api.getMapStyleJsonUrl(); - }, - }); -} diff --git a/src/frontend/hooks/server/maps.ts b/src/frontend/hooks/server/maps.ts new file mode 100644 index 000000000..a9efb8fd8 --- /dev/null +++ b/src/frontend/hooks/server/maps.ts @@ -0,0 +1,124 @@ +import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'; +import * as FileSystem from 'expo-file-system'; +import * as v from 'valibot'; + +import {useApi} from '../../contexts/ApiContext'; +import {DOCUMENT_DIRECTORY} from '../../lib/file-system'; + +import {createRefreshTokenStore} from '../refreshTokenStore'; +import noop from '../../lib/noop'; + +export const MAPS_QUERY_KEY = 'maps'; + +const CUSTOM_MAPS_DIRECTORY = new URL('maps', DOCUMENT_DIRECTORY).href; +const DEFAULT_CUSTOM_MAP_FILE_PATH = CUSTOM_MAPS_DIRECTORY + '/default.smp'; + +const CustomMapInfoSchema = v.object({ + created: v.pipe( + v.string(), + v.isoTimestamp(), + v.transform(input => new Date(input)), + ), + name: v.string(), + size: v.pipe(v.number(), v.minValue(0)), +}); + +export type CustomMapInfo = v.InferOutput; + +const {useRefreshToken, useRefreshTokenActions} = createRefreshTokenStore(); + +export function useMapStyleJsonUrl() { + const api = useApi(); + const refreshToken = useRefreshToken(); + + return useQuery({ + queryKey: [MAPS_QUERY_KEY, 'stylejson-url', refreshToken], + queryFn: async () => { + let result = await api.getMapStyleJsonUrl(); + return result + `?refresh_token=${refreshToken}`; + }, + }); +} + +export function useImportCustomMapFile() { + const queryClient = useQueryClient(); + const api = useApi(); + const {refresh} = useRefreshTokenActions(); + + return useMutation({ + mutationFn: async (opts: {uri: string}) => { + await FileSystem.moveAsync({ + from: opts.uri, + to: DEFAULT_CUSTOM_MAP_FILE_PATH, + }); + + const styleUrl = await api.getMapStyleJsonUrl(); + + const response = await fetchCustomMapInfo(styleUrl); + + if (!response.ok) { + FileSystem.deleteAsync(DEFAULT_CUSTOM_MAP_FILE_PATH, { + idempotent: true, + }).catch(noop); + + throw new Error('Invalid map file'); + } + }, + onSuccess: () => { + refresh(); + queryClient.invalidateQueries({ + queryKey: [MAPS_QUERY_KEY], + }); + }, + }); +} + +export function useRemoveCustomMapFile() { + const queryClient = useQueryClient(); + const {refresh} = useRefreshTokenActions(); + + return useMutation({ + mutationFn: () => { + return FileSystem.deleteAsync(DEFAULT_CUSTOM_MAP_FILE_PATH, { + idempotent: true, + }); + }, + onSuccess: () => { + refresh(); + queryClient.invalidateQueries({ + queryKey: [MAPS_QUERY_KEY], + }); + }, + }); +} + +/** + * Returns `null` if no viable map is found. Throws an error if a detected map is invalid. + */ +export function useGetCustomMapInfo() { + const api = useApi(); + + return useQuery({ + queryKey: [MAPS_QUERY_KEY, 'custom', 'info'], + queryFn: async () => { + const styleUrl = await api.getMapStyleJsonUrl(); + + const response = await fetchCustomMapInfo(styleUrl); + + if (response.status === 404) { + return null; + } + + if (!response.ok) { + throw new Error(`Cannot get custom map info: ${response.statusText}`); + } + + return v.parse(CustomMapInfoSchema, await response.json()); + }, + }); +} + +async function fetchCustomMapInfo(baseUrl: string) { + const infoUrl = new URL('/maps/custom/info', baseUrl).href; + return fetch(infoUrl); +} diff --git a/src/frontend/lib/bytesToMegabytes.ts b/src/frontend/lib/bytesToMegabytes.ts new file mode 100644 index 000000000..0ab82039c --- /dev/null +++ b/src/frontend/lib/bytesToMegabytes.ts @@ -0,0 +1,3 @@ +export function bytesToMegabytes(bytes: number) { + return bytes / 2 ** 20; +} diff --git a/src/frontend/lib/file-system.ts b/src/frontend/lib/file-system.ts index 6f36e7f30..d23307e9e 100644 --- a/src/frontend/lib/file-system.ts +++ b/src/frontend/lib/file-system.ts @@ -1,3 +1,45 @@ +import * as FileSystem from 'expo-file-system'; +import * as DocumentPicker from 'expo-document-picker'; + +// @ts-expect-error Only null when on web https://github.com/expo/expo/issues/5558 +export const DOCUMENT_DIRECTORY: string = FileSystem.documentDirectory; + export function convertFileUriToPosixPath(fileUri: string) { return fileUri.replace(/^file:\/\//, ''); } + +// TODO: Some overlap with selectFile() from lib/utils but fixes some usage limitations. Ideally use this for everything +export async function selectFile(opts: { + copyToCache?: boolean; + mimeFilters?: Array; + extensionFilters?: Array; +}) { + const documentResult = await DocumentPicker.getDocumentAsync({ + type: opts.mimeFilters, + copyToCacheDirectory: opts.copyToCache, + multiple: false, + }); + + if (documentResult.canceled) return null; + + const asset = documentResult.assets[0]; + + if (!asset) { + throw new Error(); + } + + const hasValidExtension = opts.extensionFilters + ? opts.extensionFilters.some(extension => + asset.uri.endsWith(`.${extension}`), + ) + : true; + + if (!hasValidExtension) { + FileSystem.deleteAsync(asset.uri).catch(err => { + console.log(err); + }); + throw new Error('Invalid extension'); + } + + return asset; +} diff --git a/src/frontend/screens/MapScreen/index.tsx b/src/frontend/screens/MapScreen/index.tsx index 7468cb0cf..d7b6696c0 100644 --- a/src/frontend/screens/MapScreen/index.tsx +++ b/src/frontend/screens/MapScreen/index.tsx @@ -20,7 +20,7 @@ import {GPSPermissionsModal} from './GPSPermissions/GPSPermissionsModal'; import {CurrentTrackMapLayer} from './CurrentTrack/CurrrentTrackMapLayer'; import {UserLocation} from './UserLocation'; import {useSharedLocationContext} from '../../contexts/SharedLocationContext'; -import {useMapStyleUrl} from '../../hooks/server/mapStyleUrl'; +import {useMapStyleJsonUrl} from '../../hooks/server/maps.ts'; import {TracksMapLayer} from './TracksMapLayer'; import {assert} from '../../lib/assert.ts'; @@ -49,7 +49,7 @@ export const MapScreen = () => { const locationServicesEnabled = !!locationProviderStatus?.locationServicesEnabled; - const styleUrlQuery = useMapStyleUrl(); + const styleUrlQuery = useMapStyleJsonUrl(); const handleAddPress = () => { newDraft(); diff --git a/src/frontend/screens/Observation/InsetMapView.tsx b/src/frontend/screens/Observation/InsetMapView.tsx index 55379a8c7..91b07510c 100644 --- a/src/frontend/screens/Observation/InsetMapView.tsx +++ b/src/frontend/screens/Observation/InsetMapView.tsx @@ -4,7 +4,7 @@ import {View, Text, StyleSheet, Dimensions, Image} from 'react-native'; import {BLACK, WHITE} from '../../lib/styles'; import {usePersistedSettings} from '../../hooks/persistedState/usePersistedSettings'; import {FormattedCoords} from '../../sharedComponents/FormattedData'; -import {useMapStyleUrl} from '../../hooks/server/mapStyleUrl'; +import {useMapStyleJsonUrl} from '../../hooks/server/maps'; const MAP_HEIGHT = 175; const ICON_OFFSET = {x: 22, y: 21}; @@ -16,7 +16,7 @@ type MapProps = { export const InsetMapView = React.memo(({lon, lat}: MapProps) => { const format = usePersistedSettings(store => store.coordinateFormat); - const styleUrlQuery = useMapStyleUrl(); + const styleUrlQuery = useMapStyleJsonUrl(); return ( diff --git a/src/frontend/screens/Settings/AppSettings/index.tsx b/src/frontend/screens/Settings/AppSettings/index.tsx index 38312529b..8497661f6 100644 --- a/src/frontend/screens/Settings/AppSettings/index.tsx +++ b/src/frontend/screens/Settings/AppSettings/index.tsx @@ -30,6 +30,14 @@ const m = defineMessages({ id: 'Screens.Settings.AppSettings.coordinateSystemDesc', defaultMessage: 'UTM,Lat/Lon,DMS', }, + mapManagement: { + id: 'Screens.Settings.AppSettings.mapManagement', + defaultMessage: 'Map Management', + }, + mapManagementDesc: { + id: 'Screens.Settings.AppSettings.mapManagementDesc', + defaultMessage: 'Backgrounds, Map Data', + }, }); export const AppSettings: NativeNavigationComponent<'AppSettings'> = ({ @@ -57,6 +65,17 @@ export const AppSettings: NativeNavigationComponent<'AppSettings'> = ({ secondary={} /> + { + navigation.navigate('MapManagement'); + }} + testID="mapManagementButton"> + + } + secondary={} + /> + ); diff --git a/src/frontend/screens/Settings/MapManagement/BackgroundMaps.tsx b/src/frontend/screens/Settings/MapManagement/BackgroundMaps.tsx new file mode 100644 index 000000000..883484c38 --- /dev/null +++ b/src/frontend/screens/Settings/MapManagement/BackgroundMaps.tsx @@ -0,0 +1,343 @@ +import {type NativeStackNavigationOptions} from '@react-navigation/native-stack'; +import * as FileSystem from 'expo-file-system'; +import React from 'react'; +import {defineMessages, useIntl, type MessageDescriptor} from 'react-intl'; +import {ScrollView, StyleSheet, View} from 'react-native'; +import MaterialIcon from 'react-native-vector-icons/MaterialIcons'; + +import {useSelectFile} from '../../../hooks/files'; +import { + useGetCustomMapInfo, + useImportCustomMapFile, + useRemoveCustomMapFile, +} from '../../../hooks/server/maps'; +import ErrorSvg from '../../../images/Error.svg'; +import GreenCheckSvg from '../../../images/GreenCheck.svg'; +import noop from '../../../lib/noop'; +import {DARK_GREY, RED, WHITE} from '../../../lib/styles'; +import { + BottomSheetModal, + BottomSheetModalContent, + useBottomSheetModal, +} from '../../../sharedComponents/BottomSheetModal'; +import {Button} from '../../../sharedComponents/Button'; +import {ErrorBottomSheet} from '../../../sharedComponents/ErrorBottomSheet'; +import {Loading} from '../../../sharedComponents/Loading'; +import {Text} from '../../../sharedComponents/Text'; +import {type NativeRootNavigationProps} from '../../../sharedTypes/navigation'; +import {ChooseMapFile} from './ChooseMapFile'; +import {CustomMapDetails} from './CustomMapDetails'; + +const m = defineMessages({ + screenTitle: { + id: 'screens.Settings.MapManagement.BackgroundMaps.screenTitle', + defaultMessage: 'Background Maps', + }, + about: { + id: 'screens.Settings.MapManagement.BackgroundMaps.about', + defaultMessage: 'About Custom Map', + }, + description1: { + id: 'screens.Settings.MapManagement.BackgroundMaps.description1', + defaultMessage: + 'Adding a custom map will enable you to see a map when you are offline.', + }, + // TODO: Merge into description1 when https://github.com/digidem/comapeo-mobile/issues/669 is addressed + description2: { + id: 'screens.Settings.MapManagement.BackgroundMaps.description2', + defaultMessage: + 'Your custom map is not shared with other devices in your project.', + }, + + customMapInfoLoadError: { + id: 'screens.Settings.MapManagement.BackgroundMaps.customMapInfoLoadError', + defaultMessage: + 'Could not get custom map information from file. Please remove it or choose a different file.', + }, + removeMapFile: { + id: 'screens.Settings.MapManagement.BackgroundMaps.removeMapFile', + defaultMessage: 'Remove Map File', + }, + + customMapAddedTitle: { + id: 'screens.Settings.MapManagement.BackgroundMaps.customMapAddedTitle', + defaultMessage: 'Custom Map Added', + }, + customMapAddedDescription: { + id: 'screens.Settings.MapManagement.BackgroundMaps.customMapAddedDescription', + defaultMessage: + 'You will see this map when you are offline, but you will not see a map outside the area defined in your custom map.', + }, + close: { + id: 'screens.Settings.MapManagement.BackgroundMaps.close', + defaultMessage: 'Close', + }, + + deleteCustomMapTitle: { + id: 'screens.Settings.MapManagement.BackgroundMaps.deleteCustomMapTitle', + defaultMessage: 'Delete Custom Map?', + }, + deleteCustomMapDescription: { + id: 'screens.Settings.MapManagement.BackgroundMaps.deleteCustomMapDescription', + defaultMessage: + 'This will delete the map and its offline areas. No collected observation data will be deleted.', + }, + // TODO: Merge into deleteCustomMapDescription when https://github.com/digidem/comapeo-mobile/issues/669 is addressed + cannotBeUndone: { + id: 'screens.Settings.MapManagement.BackgroundMaps.cannotBeUndone', + defaultMessage: 'This cannot be undone.', + }, + deleteMapButtonText: { + id: 'screens.Settings.MapManagement.BackgroundMaps.deleteMapButtonText', + defaultMessage: 'Delete Map', + }, + + importErrorTitle: { + id: 'screens.Settings.MapManagement.BackgroundMaps.importErrorTitle', + defaultMessage: 'Import Error', + }, + importErrorDesciption: { + id: 'screens.Settings.MapManagement.BackgroundMaps.importErrorDescription', + defaultMessage: 'Unable to import the file. Please go back and try again.', + }, +}); + +export function createNavigationOptions({ + intl, +}: { + intl: (title: MessageDescriptor) => string; +}): ( + props: NativeRootNavigationProps<'BackgroundMaps'>, +) => NativeStackNavigationOptions { + return () => { + return { + title: intl(m.screenTitle), + }; + }; +} + +export function BackgroundMapsScreen() { + const {formatMessage: t} = useIntl(); + + const mapAddedBottomSheet = useBottomSheetModal({openOnMount: false}); + const removeMapBottomSheet = useBottomSheetModal({openOnMount: false}); + + const selectFileMutation = useSelectFile(); + const importCustomMapMutation = useImportCustomMapFile(); + const removeCustomMapMutation = useRemoveCustomMapFile(); + const customMapInfoQuery = useGetCustomMapInfo(); + + return ( + <> + + {t(m.about)} + + {t(m.description1)} + {t(m.description2)} + + + { + selectFileMutation.mutate( + { + extensionFilters: ['smp'], + }, + { + onSuccess: asset => { + if (!asset) return; + + importCustomMapMutation.mutate( + { + uri: asset.uri, + }, + { + onError: () => { + FileSystem.deleteAsync(asset.uri, { + idempotent: true, + }).catch(noop); + }, + onSuccess: () => { + mapAddedBottomSheet.openSheet(); + }, + }, + ); + }, + }, + ); + }} + onRemoveMap={() => { + removeMapBottomSheet.openSheet(); + }} + /> + + {customMapInfoQuery.status === 'error' && ( + <> + + {t(m.customMapInfoLoadError)} + + + + )} + + + + } + title={t(m.deleteCustomMapTitle)} + description={ + t(m.deleteCustomMapDescription) + '\n\n' + t(m.cannotBeUndone) + } + buttonConfigs={[ + { + dangerous: true, + variation: 'filled', + text: t(m.deleteMapButtonText), + icon: , + onPress: () => { + removeCustomMapMutation.mutate(); + removeMapBottomSheet.closeSheet(); + }, + }, + { + variation: 'outlined', + text: t(m.close), + onPress: () => { + removeMapBottomSheet.closeSheet(); + }, + }, + ]} + /> + + + + + } + title={t(m.customMapAddedTitle)} + description={t(m.customMapAddedDescription)} + buttonConfigs={[ + { + variation: 'outlined', + text: t(m.close), + onPress: () => { + mapAddedBottomSheet.closeSheet(); + }, + }, + ]} + /> + + + { + if (removeCustomMapMutation.error) { + removeCustomMapMutation.reset(); + } + if (selectFileMutation.error) { + selectFileMutation.reset(); + } + if (importCustomMapMutation.error) { + importCustomMapMutation.reset(); + } + }} + /> + + ); +} + +function CustomMapInfoSection({ + onChooseFile, + onRemoveMap, +}: { + onChooseFile: () => void; + onRemoveMap: () => void; +}) { + const customMapInfoQuery = useGetCustomMapInfo(); + + if (customMapInfoQuery.status === 'pending') { + return ; + } + + if (customMapInfoQuery.data) { + return ( + + ); + } + + return customMapInfoQuery.isFetching ? ( + + ) : ( + + ); +} + +const styles = StyleSheet.create({ + container: { + paddingHorizontal: 20, + paddingVertical: 40, + gap: 36, + }, + descriptionContainer: { + gap: 20, + }, + aboutText: { + textAlign: 'center', + fontWeight: 'bold', + fontSize: 36, + color: DARK_GREY, + }, + infoLoadErrorText: { + textAlign: 'center', + color: RED, + fontSize: 20, + }, + removeMapFileButton: { + backgroundColor: RED, + }, + removeMapFileButtonText: { + fontWeight: '700', + letterSpacing: 0.5, + fontSize: 18, + color: RED, + }, +}); diff --git a/src/frontend/screens/Settings/MapManagement/ChooseMapFile.tsx b/src/frontend/screens/Settings/MapManagement/ChooseMapFile.tsx new file mode 100644 index 000000000..5cb284431 --- /dev/null +++ b/src/frontend/screens/Settings/MapManagement/ChooseMapFile.tsx @@ -0,0 +1,65 @@ +import React from 'react'; +import {defineMessages, useIntl} from 'react-intl'; +import {StyleSheet, View} from 'react-native'; + +import {MEDIUM_GREY, RED} from '../../../lib/styles'; +import {Button} from '../../../sharedComponents/Button'; +import {Text} from '../../../sharedComponents/Text'; +import {DownloadIcon} from '../../../sharedComponents/icons'; + +const m = defineMessages({ + chooseFile: { + id: 'screens.Settings.MapManagement.BackgroundMaps.ChooseMapFile.chooseFile', + defaultMessage: 'Choose File', + }, + acceptedFileTypes: { + id: 'screens.Settings.MapManagement.BackgroundMaps.ChooseMapFile.acceptedFileTypes', + defaultMessage: 'Accepted file types are .smp', + }, +}); + +export function ChooseMapFile({onChooseFile}: {onChooseFile: () => void}) { + const {formatMessage: t} = useIntl(); + + return ( + + + {t(m.acceptedFileTypes)} + + ); +} + +const styles = StyleSheet.create({ + container: { + gap: 20, + }, + buttonContentContainer: { + flexDirection: 'row', + alignItems: 'center', + gap: 12, + }, + buttonTextBase: { + fontWeight: '700', + letterSpacing: 0.5, + fontSize: 18, + }, + asteriskText: { + fontSize: 18, + color: RED, + }, + fileTypeText: { + color: MEDIUM_GREY, + fontSize: 14, + textAlign: 'center', + }, +}); diff --git a/src/frontend/screens/Settings/MapManagement/CustomMapDetails.tsx b/src/frontend/screens/Settings/MapManagement/CustomMapDetails.tsx new file mode 100644 index 000000000..3eb5edfd1 --- /dev/null +++ b/src/frontend/screens/Settings/MapManagement/CustomMapDetails.tsx @@ -0,0 +1,153 @@ +import React from 'react'; +import {FormattedDate, defineMessages, useIntl} from 'react-intl'; +import {StyleSheet, View} from 'react-native'; +import {TouchableOpacity} from 'react-native-gesture-handler'; + +import {bytesToMegabytes} from '../../../lib/bytesToMegabytes'; +import {BLACK, MEDIUM_GREY, RED, VERY_LIGHT_GREY} from '../../../lib/styles'; +import {Loading} from '../../../sharedComponents/Loading'; +import {Text} from '../../../sharedComponents/Text'; + +const m = defineMessages({ + mapNameColumn: { + id: 'screens.Settings.MapManagement.MapsList.CustomMapDetails.mapNameColumn', + defaultMessage: 'Map Name', + }, + dateAddedColumn: { + id: 'screens.Settings.MapManagement.MapsList.CustomMapDetails.dateAdded', + defaultMessage: 'Date Added', + }, + removeMap: { + id: 'screens.Settings.MapManagement.MapsList.CustomMapDetails.removeMap', + defaultMessage: 'Remove Map', + }, + sizeInMegabytes: { + id: 'screens.Settings.MapManagement.MapsList.CustomMapDetails.sizeInMegabytes', + defaultMessage: '{value} MB', + }, +}); + +export function CustomMapDetails({ + dateAdded, + loading, + name, + onRemove, + size, +}: { + dateAdded: Date; + loading?: boolean; + name: string; + onRemove: () => void; + size?: number; +}) { + const {formatMessage: t} = useIntl(); + + const calculatedSize = size ? bytesToMegabytes(size).toFixed(0) : undefined; + const displayedSize = + calculatedSize === undefined + ? undefined + : parseInt(calculatedSize, 10) < 1 + ? '<1' + : calculatedSize; + + return ( + + + {t(m.mapNameColumn)} + {t(m.dateAddedColumn)} + + + + + {name} + + {displayedSize !== undefined && + t(m.sizeInMegabytes, { + value: displayedSize, + })} + + + + + + + + + + + {t(m.removeMap)} + + + {loading && } + + + ); +} + +function LoadingOverlay() { + return ( + + + + + ); +} + +const styles = StyleSheet.create({ + rootContainer: { + gap: 12, + }, + columnHeadersContainer: { + flexDirection: 'row', + justifyContent: 'space-between', + }, + cardContainer: { + paddingVertical: 20, + paddingHorizontal: 10, + borderRadius: 3, + borderColor: VERY_LIGHT_GREY, + borderWidth: 2, + gap: 36, + }, + cardRow: { + flexDirection: 'row', + justifyContent: 'space-between', + }, + columnTitleText: { + color: MEDIUM_GREY, + }, + dateAddedText: { + color: MEDIUM_GREY, + }, + sizeText: { + color: MEDIUM_GREY, + }, + removeMapText: { + fontWeight: 'bold', + color: RED, + }, + nameText: { + fontWeight: 'bold', + fontSize: 18, + }, + columnLeft: { + flex: 1, + alignItems: 'flex-start', + }, + columnRight: { + flex: 1, + alignItems: 'flex-end', + }, + overlay: { + position: 'absolute', + left: 0, + right: 0, + top: 0, + bottom: 0, + }, +}); diff --git a/src/frontend/screens/Settings/MapManagement/index.tsx b/src/frontend/screens/Settings/MapManagement/index.tsx new file mode 100644 index 000000000..cad00b4f8 --- /dev/null +++ b/src/frontend/screens/Settings/MapManagement/index.tsx @@ -0,0 +1,50 @@ +import React from 'react'; +import {type NativeStackNavigationOptions} from '@react-navigation/native-stack'; +import {defineMessages, useIntl, type MessageDescriptor} from 'react-intl'; +import {ScrollView} from 'react-native'; + +import {List, ListItem, ListItemText} from '../../../sharedComponents/List'; +import {type NativeRootNavigationProps} from '../../../sharedTypes/navigation'; + +const m = defineMessages({ + screenTitle: { + id: 'screens.Settings.MapManagement.screenTitle', + defaultMessage: 'Map Management', + }, + backgroundMaps: { + id: 'screens.Settings.MapManagement.backgroundMaps', + defaultMessage: 'Background Maps', + }, +}); + +export function MapManagementScreen({ + navigation, +}: NativeRootNavigationProps<'MapManagement'>) { + const {formatMessage: t} = useIntl(); + return ( + + + { + navigation.navigate('BackgroundMaps'); + }}> + + + + + ); +} + +export function createNavigationOptions({ + intl, +}: { + intl: (title: MessageDescriptor) => string; +}): ( + props: NativeRootNavigationProps<'MapManagement'>, +) => NativeStackNavigationOptions { + return () => { + return { + title: intl(m.screenTitle), + }; + }; +} diff --git a/src/frontend/sharedComponents/icons/index.tsx b/src/frontend/sharedComponents/icons/index.tsx index b72b11a13..ac59dc396 100644 --- a/src/frontend/sharedComponents/icons/index.tsx +++ b/src/frontend/sharedComponents/icons/index.tsx @@ -2,6 +2,8 @@ import React from 'react'; import MaterialCommunityIcon from 'react-native-vector-icons/MaterialCommunityIcons'; import MaterialIcon from 'react-native-vector-icons/MaterialIcons'; import FontAwesomeIcon from 'react-native-vector-icons/FontAwesome'; +import AntDesignIcon from 'react-native-vector-icons/AntDesign'; + import {Image} from 'react-native'; import {Circle} from './Circle'; @@ -212,3 +214,7 @@ export const LocationFollowingIcon = ({ export const StopIcon = ({color = WHITE, size = 30}: FontIconProps) => ( ); + +export function DownloadIcon(props: FontIconProps) { + return ; +} diff --git a/src/frontend/sharedTypes/navigation.ts b/src/frontend/sharedTypes/navigation.ts index 7742e421c..2fdffe80b 100644 --- a/src/frontend/sharedTypes/navigation.ts +++ b/src/frontend/sharedTypes/navigation.ts @@ -61,14 +61,6 @@ export type RootStackParamsList = { Security: undefined; DirectionalArrow: undefined; P2pUpgrade: undefined; - MapSettings: undefined; - BackgroundMaps: undefined; - BackgroundMapInfo: { - bytesStored: number; - id: string; - styleUrl: string; - name: string; - }; ObservationFields: {question: number}; ObservationCreate: undefined; BGMapsSettings: undefined; @@ -103,6 +95,8 @@ export type RootStackParamsList = { SettingsPrivacyPolicy: undefined; HowToLeaveProject: undefined; Audio: undefined; + MapManagement: undefined; + BackgroundMaps: undefined; }; export type OnboardingParamsList = {